安装 Wasm 构建环境

本页面描述了为 WebAssembly 和 WebGPU 构建设置构建环境的步骤。

步骤1:安装 EMSDK

Emscripten 是基于 LLVM 的编译器,它将 C/C++ 源代码编译为 WebAssembly。需要安装 emscripten 以进行 webgpu 构建。

  • 请按照 此处 的安装说明安装最新的 emsdk。

  • source path/to/emsdk_env.sh 以便 emcc 可以从 PATH 访问,并且命令 emcc 可以工作。

验证 emcc 在 shell 中可访问

emcc --version

备注

最近发现使用最新的 emcc 版本可能会在运行时遇到问题。目前,使用 ./emsdk install 3.1.56 而不是 ./emsdk install latest 作为临时解决方案。

错误可能看起来像

Init error, LinkError: WebAssembly.instantiate(): Import #6 module="wasi_snapshot_preview1"
function="proc_exit": function import requires a callable

步骤 2:设置 TVM_SOURCE_DIR 和 MLC_LLM_SOURCE_DIR

需要设置 tvm 源代码路径以构建 tvm 运行时。请注意,您不需要从源代码构建 tvm unity。这里的源代码仅用于构建 web 运行时组件。在您的 shell 启动配置文件中设置环境变量以指向 3rdparty/tvm (如果愿意,如果您从源代码安装了 TVM,也可以指向您自己的 TVM 地址)。

此外,还需要设置 MLC_LLM_SOURCE_DIR,以便在编译模型库 wasm 时可以定位 mlc_wasm_runtime.bc

export TVM_SOURCE_DIR=/path/to/3rdparty/tvm
export MLC_LLM_SOURCE_DIR=/path/to/mlc-llm

步骤 3:准备 Wasm 运行时

首先,需要获取一份 mlc-llm 源代码以进行设置脚本

git clone https://github.com/mlc-ai/mlc-llm.git --recursive
cd mlc-llm

现在可以使用 mlc-llm 仓库中的脚本准备 wasm 运行时

./web/prep_emcc_deps.sh

然后可以验证结果

>>> echo ${TVM_SOURCE_DIR}

/path/set/in/step2

>>> ls -l ${TVM_SOURCE_DIR}/web/dist/wasm/*.bc

tvmjs_support.bc
wasm_runtime.bc
webgpu_runtime.bc