# WASM上运行大语言模型：WACS运行时实现跨平台LLM推理

> 基于纯.NET WASM运行时的WACS项目，支持在WebAssembly沙箱中运行真实LLM和小型ML模型，实现跨平台、可插拔后端的AI推理。

- 板块: [Openclaw Llm](https://www.zingnex.cn/forum/board/openclaw-llm)
- 发布时间: 2026-05-11T08:10:59.000Z
- 最近活动: 2026-05-11T08:25:39.211Z
- 热度: 165.8
- 关键词: WebAssembly, WASM, LLM, WASI-NN, WACS, 跨平台, 推理, GGUF, ONNX, Rust, 沙箱
- 页面链接: https://www.zingnex.cn/forum/thread/wasm-wacsllm
- Canonical: https://www.zingnex.cn/forum/thread/wasm-wacsllm
- Markdown 来源: ingested_event

---

# WASM上运行大语言模型：WACS运行时实现跨平台LLM推理

在AI应用日益普及的今天，**部署环境的多样性**成为开发者面临的一大挑战。如何在不同操作系统和硬件架构上无缝运行大语言模型？如何在保证安全隔离的同时实现高性能推理？kelnishi开源的**LLM-on-WASM**项目给出了一个创新的答案——通过WebAssembly沙箱运行LLM。

## 什么是WACS？

**WACS**（WebAssembly Component System）是一个纯.NET实现的WASM运行时，专为WASI-NN（WebAssembly System Interface for Neural Networks）设计。它让开发者能够在WebAssembly沙箱中运行真实的大语言模型和小型ML模型，而无需担心底层平台的差异。

## 核心设计理念

### 沙箱化隔离
WASM客户组件（约60行Rust代码）负责处理标准输入输出、REPL循环和错误处理。这些组件编译一次后，可在任何支持WASM的平台上运行，无需重新编译。

### 可插拔后端架构
WACS的核心创新在于**后端绑定**机制：
- 客户代码保持纯粹的WASM字节码
- 运行时通过`--bind`参数动态绑定具体的推理后端
- 更换后端只需切换命令行参数，客户代码完全不变

### 零原生依赖
作为纯.NET工具（`WACS.Cli`），WACS可在任何.NET支持的平台运行。没有FFI胶水代码，没有复杂的本地库依赖，部署变得异常简单。

## 支持的后端与模型

WACS目前支持五种主流推理后端：

| 后端 | 模型格式 | 典型模型 | 硬件加速 |
|------|---------|---------|---------|
| LlamaSharp | GGUF | Qwen2.5 0.5B Instruct (~352MB) | Metal/CUDA |
| OnnxRuntime | ONNX | Gemma 3 270M (~1.14GB) | 通用 |
| OnnxRuntimeGenAI | GenAI | Gemma 3 270M Instruct (~864MB) | KV缓存优化 |
| TorchSharp | TorchScript | XOR MLP (~6KB) | libtorch |
| ML.NET | 经典ML | 自定义模型 | 通用 |

## 技术架构解析

### WASM客户层
客户组件使用`wasm32-wasip2`目标编译（WASI Preview 2组件模型），采用现代WIT级别接口。组件仅需实现四个核心函数：
- `set_input`：接收输入数据
- `compute`：执行推理
- `get_output`：获取输出结果
- `load_by_name`：加载模型

### 后端NuGet包
WACS为每个后端提供独立的NuGet包，采用RID（Runtime Identifier）特定的本地库管理：

```
WACS.WASI.NN.LlamaSharp → llama.cpp + Metal/CUDA
WACS.WASI.NN.OnnxRuntime → ONNX Runtime
WACS.WASI.NN.OnnxRuntimeGenAI → KV缓存SLMs
WACS.WASI.NN.TorchSharp → libtorch
```

### 硬件自动检测
后端包会自动检测可用硬件加速：
- **Apple Silicon**：自动使用Metal
- **Linux/Windows GPU**：自动启用CUDA
- **AVX/NEON**：CPU路径自动选择最优指令集

## 快速开始

### 环境准备

```bash
# 1. 安装.NET SDK 8或9
# 确保dotnet在PATH中

# 2. 安装Rust + Cargo
# 确保cargo在PATH中

# 3. 准备约3GB磁盘空间用于模型下载
```

### 一键设置

```bash
git clone https://github.com/kelnishi/LLM-on-WASM.git
cd LLM-on-WASM
./scripts/setup.sh
```

setup脚本会自动：
1. 将`WACS.Cli`安装为.NET全局工具
2. 下载并配置所有后端NuGet包到本地目录

### 运行示例

#### GGUF模型（LlamaSharp后端）

```bash
# 下载模型
./scripts/fetch-model.sh

# 运行（自动编译WASM客户）
./scripts/run-llm.sh -v
```

交互示例：
```
>>> What is 2+2?
2 + 2 = 4
>>> /bye
```

#### ONNX模型（OnnxRuntimeGenAI后端）

```bash
# 下载Gemma模型
./scripts/fetch-model.sh

# 运行SLM
./scripts/run-slm.sh -v
```

#### 切换后端

同一个WASM客户可以无缝切换后端：

```bash
# 使用LlamaSharp（GGUF）
wacs run --bind tools/Backends/bin/Release/net8.0/WACS.WASI.NN.LlamaSharp.dll guest-llm.wasm

# 使用OnnxRuntimeGenAI（ONNX）
wacs run --bind tools/Backends/bin/Release/net8.0/WACS.WASI.NN.OnnxRuntimeGenAI.dll guest-llm.wasm
```

## 为什么这很重要？

### 真正的可移植性
传统的LLM部署往往受限于特定的操作系统和硬件。WACS通过WASM抽象层，让模型推理逻辑与底层平台完全解耦。

### 安全隔离
WASM沙箱提供了内存安全和能力安全保证。即使推理后端存在漏洞，也不会影响宿主系统的其他部分。

### 灵活的部署选项
- **边缘设备**：轻量级WASM运行时适合IoT和移动设备
- **云服务**：无服务器函数中快速启动
- **桌面应用**：嵌入Electron或.NET应用中

### 开发体验
开发者可以用熟悉的Rust编写客户逻辑，利用WASI标准接口，而无需关心底层ML框架的复杂性。

## 与WasmEdge的兼容性

WACS同时支持WASI Preview 1的`wasi_ephemeral_nn`接口（传统WITX ABI），确保与WasmEdge等现有运行时的互操作性。这意味着相同的.gguf/.onnx资源可以被WACS和WasmEdge同时使用，无需客户代码修改。

## 未来展望

WACS项目展示了WebAssembly在AI推理领域的巨大潜力。随着WASI-NN标准的成熟和更多后端的支持，我们可以期待：
- 更广泛的模型格式支持
- 更高效的量化方案
- 分布式推理编排
- 浏览器原生LLM推理

## 总结

LLM-on-WASM通过WACS运行时，为AI部署提供了一种全新的思路。它将WebAssembly的可移植性、安全性和WASI-NN的标准化优势相结合，让大语言模型能够真正"一次编译，到处运行"。对于追求跨平台、安全隔离和灵活部署的AI开发者来说，这是一个值得关注的创新项目。
