安装和开始使用WasmEdge
2024-10-14
安装 #
可以将WasmEdge运行时安装在任何通用Linux和MacOS平台上。如果使用Windows 10或Fedora/Red Hat Linux系统,您可以使用它们的默认包管理器进行安装。
通用的Linux和MacOS平台 #
安装WasmEdge的最简单方法是运行以下命令。需确保系统中应该安装了git
。
1curl -sSf https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install.sh | bash
查看install.sh
中的内容,install.sh
的主要功能是确保系统上存在Python3解释器并执行一个Python安装脚本https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install.py
。
因此也可以直接下载install.py
,并执行下面的命令进行安装:
1python3 install.py
WasmEdge默认被安装在$HOME/.wasmedge
目录中。
运行以下命令以使已安装的二进制文件在当前会话中可用。
1source $HOME/.wasmedge/env
1wasmedge --version
2wasmedge version 0.14.1
3 (plugin "wasi_logging") version 0.1.0.0
安装特定版本的 WasmEdge
WasmEdge 安装程序脚本默认会安装最新的官方发布版本。 你可以通过使用 -v 参数来安装特定版本的 WasmEdge,包括预发布版本或旧版本。如下所示:
1VERSION=0.14.1 2curl -sSf https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install.sh | bash -s -- -v $VERSION
安装的内容 #
WasmEdge默认被安装在$HOME/.wasmedge
目录中。安装完成后会有以下目录和文件:
1tree ~/.wasmedge
2├── bin
3│ ├── wasmedge
4│ └── wasmedgec
5├── env
6├── include
7│ └── wasmedge
8│ ├── enum_configure.h
9│ ├── enum_errcode.h
10│ ├── enum.inc
11│ ├── enum_types.h
12│ ├── int128.h
13│ ├── version.h
14│ └── wasmedge.h
15├── lib
16│ ├── libwasmedge.so -> libwasmedge.so.0
17│ ├── libwasmedge.so.0 -> libwasmedge.so.0.1.0
18│ └── libwasmedge.so.0.1.0
19└── plugin
bin
目录中包含WasmEdge运行时可执行文件。wasmedge
工具是标准的WasmEdge运行时,可以通过命令行使用它。- 运行一个WASM文件:
wasmedge --dir .:. app.wasm
- 运行一个WASM文件:
wasmedgec
工具是提前(AOT)编译器,用于将.wasm
文件编译成本机的.so
文件(在MacOS上则编译成.dylib
,在 Windows上则编译成.dll
,或编译成在各平台上通用的.wasm
格式)。wasmedge
可以执行编译后的文件。
lib
目录包含WasmEdge共享库和依赖库。这对于WasmEdge SDK在主机应用程序中启动WasmEdge程序和函数很有用。include
目录包含WasmEdge头文件。这对于WasmEdge SDK很有用。plugin
目录包含WasmEdge插件。这些是WasmEdge SDK 的可加载扩展,在运行WasmEdge CLI时会自动加载。
安装WasmEdge及插件 #
WasmEdge插件是预构建的原生模块,为WasmEdge运行时提供额外的功能。要将插件与运行时一起安装,可以在安装程序中传递--plugins
参数。例如,以下命令将wasi_nn-ggml
插件安装到WasmEdge运行时,以启用 LLM(大语言模型)推理。
1curl -sSf https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install.sh | bash -s -- --plugins wasi_nn-ggml
或
1python3 install.py --plugins wasi_nn-ggml
要安装多个插件,可以使用 –plugins 选项传递插件列表。例如,以下命令安装wasi_logging
和wasi_nn-ggml
插件。wasi_logging
插件允许 Rustlog::Log
API 编译成Wasm并运行在 WasmEdge。
1curl -sSf https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install.sh | bash -s -- --plugins wasi_logging wasi_nn-ggml
安装程序从 GitHub 上的 WasmEdge 版本下载插件文件,解压缩它们,然后将它们复制到~/.wasmedge/plugin/
文件夹。
注意
WASI-NN相关的插件都是独占的。用户只能安装一个 WASI-NN 后端。 从 WasmEdge 0.14.1开始,WASI-Logging插件被捆绑到WasmEdge共享库中,不需要单独安装。 有些插件需要依赖项。请按照注释列中的指南安装依赖项。
以下链接中是WasmEdge官方发布的插件。用户可以通过安装程序的--plugins
选项参数轻松安装它们。
卸载 #
使用下面的指令卸载 WasmEdge:
1bash <(curl -sSf https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/uninstall.sh)
注意
如果
wasmedge
可执行文件的父文件夹包含.wasmedge
,则该文件夹也会被删除。例如,脚本会一并删除默认的$HOME/.wasmedge
文件夹。
安装插件的依赖项 #
GGML Dependencies #
WasmEdge从0.13.5开始的安装程序将自动检测CUDA。如果检测到CUDA,安装程序将始终尝试安装WASI-NN GGML插件的CUDA版本。
如果CPU是机器上唯一可用的硬件,安装程序将安装OpenBLAS版本的插件。
1sudo apt update && apt install -y libopenblas-dev
WASI-NN
WASI-NN是WebAssembly System Interface for Neural Networks 的缩写,是一个允许在 WebAssembly(Wasm)中运行神经网络推理的接口。它通过提供一套标准化的 API,使开发者能够在各种平台和设备上使用 WebAssembly 来部署机器学习模型,而不依赖于特定的硬件或系统架构。
WASI-NN 主要提供以下功能:
- 加载模型:可以将训练好的机器学习模型加载到 WebAssembly 环境中。
- 执行推理:支持在 WebAssembly 环境中执行神经网络推理,处理输入数据并返回推理结果。
- 支持多种框架:WASI-NN 旨在支持多种机器学习框架(如 TensorFlow、ONNX 等)的模型。
它的主要优势在于跨平台兼容性,借助 WebAssembly 的轻量级和高效性,WASI-NN 可以在不同的设备和操作系统中高效运行神经网络模型,特别是在边缘设备或 Web 环境中。
WasmEdge支持多种WASI-NN的后端。
- ggml后端:支持 Ubuntu 20.04 以上、macOS (M1 和 M2) 和 GPU (NVIDIA)。
- PyTorch 后端:支持 Ubuntu 20.04 以上 和 manylinux2014_x86_64。
- OpenVINO™ 后端:支持 Ubuntu 20.04 以上。
- TensorFlow-Lite 后端:支持 Ubuntu 20.04 以上,manylinux2014_x86_64 和 manylinux2014_aarch64。
PyTorch Dependencies #
WASI-NN插件与PyTorch后端依赖于libtorch
C++ 库来执行 AI/ML 计算。需要安装PyTorch 1.8.2 LTS
依赖项才能使其正常工作。
1export PYTORCH_VERSION="1.8.2"
2# For the Ubuntu 20.04 or above, use the libtorch with cxx11 abi.
3export PYTORCH_ABI="libtorch-cxx11-abi"
4# For the manylinux2014, please use the without cxx11 abi version:
5# export PYTORCH_ABI="libtorch"
6curl -s -L -O --remote-name-all https://download.pytorch.org/libtorch/lts/1.8/cpu/${PYTORCH_ABI}-shared-with-deps-${PYTORCH_VERSION}%2Bcpu.zip
7unzip -q "${PYTORCH_ABI}-shared-with-deps-${PYTORCH_VERSION}%2Bcpu.zip"
8rm -f "${PYTORCH_ABI}-shared-with-deps-${PYTORCH_VERSION}%2Bcpu.zip"
9export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$(pwd)/libtorch/lib
注意
对于
Ubuntu 20.04
或更高版本,WasmEdge 安装程序将安装Ubuntu
版本的 WasmEdge 及其插件。对于其他系统,WasmEdge 安装程序将安装manylinux2014
版本,您应该获得没有cxx11-abi
的libtorch
。
开始使用WasmEdge #
如何运行独立的 WASM 应用程序 #
Hello world示例是一个独立的Rust应用程序,可以通过WasmEdge CLI执行。它的源代码和构建说明在这里可以找到。 从这里下载 hello.wasm 文件,或者运行以下命令:
下载hello.wasm
文件:
1wget https://github.com/second-state/rust-examples/releases/latest/download/hello.wasm
使用wasmedge
命令运行程序:
1wasmedge hello.wasm
2Hello WasmEdge!
使用AoT编译器wasmedgec
获得更好的性能:
1wasmedgec hello.wasm hello_aot.wasm
2wasmedge hello_aot.wasm
3Hello WasmEdge!
如何运行HTTP服务器 #
这个示例是一个用Rust编写的独立 HTTP 服务器。它演示了Rust + WasmEdge作为微服务的轻量级堆栈。它的源代码和构建说明在这里可以找到。
下载server.wasm
文件:
1wget https://github.com/second-state/rust-examples/releases/latest/download/server.wasm
使用wasmedge
命令运行程序:
1wasmedge server.wasm
2Listening on http://0.0.0.0:8080
在另一个终端窗口中,执行以下操作:
1curl http://localhost:8080/
2Try POSTing data to /echo such as: `curl localhost:8080/echo -XPOST -d 'hello world'`
3
4curl http://localhost:8080/echo -X POST -d "Hello WasmEdge"
5Hello WasmEdge
如何运行一个基于JavaScript的服务器 #
这个示例是一个独立的HTTP服务器,使用Node.js API用JavaScript编写的。它演示了WasmEdge作为Node.js应用程序的轻量级运行时。其源代码可在此处获取。
下载wasmedge_quickjs.wasm
文件:
1wget https://github.com/second-state/wasmedge-quickjs/releases/download/v0.5.0-alpha/wasmedge_quickjs.wasm
下载modules.zip
文件:
1wget https://github.com/second-state/wasmedge-quickjs/releases/download/v0.5.0-alpha/modules.zip
将modules.zip
文件解压缩到当前目录到./modules/
中:
1unzip modules.zip
下载server.js
文件:
1wget https://raw.githubusercontent.com/second-state/wasmedge-quickjs/main/example_js/docker_wasm/server/server.js
使用wasmedge
命令运行程序:
1wasmedge --dir .:. wasmedge_quickjs.wasm server.js
2listen 8080 ...
在另一个终端窗口中,执行以下操作:
1curl http://localhost:8080/echo -X POST -d "Hello WasmEdge"
2Hello WasmEdge