安装和开始使用WasmEdge

安装和开始使用WasmEdge

2024-10-14
Wasm

安装 #

可以将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
    • 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_loggingwasi_nn-ggml插件。wasi_logging插件允许 Rustlog::LogAPI 编译成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 主要提供以下功能:

  1. 加载模型:可以将训练好的机器学习模型加载到 WebAssembly 环境中。
  2. 执行推理:支持在 WebAssembly 环境中执行神经网络推理,处理输入数据并返回推理结果。
  3. 支持多种框架: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-abilibtorch

开始使用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

参考链接 #

© 2024 青蛙小白
comments powered by Disqus