1. 為什么是 Candle?(三條硬理由)
-
Serverless & 輕量部署
傳統 Python 生態在函數冷啟動/GIL/體積上常見掣肘。Candle 是純 Rust 二進制,可將推理程序打包成一個小體積可執行文件,非常適合邊緣側 & Serverless。 -
端到端性能 & 多后端
- CPU:x86 可選 MKL;macOS 用 Accelerate;
- GPU:CUDA(含 NCCL 多卡);
- WASM:瀏覽器內直接推理,官方已給出多個可跑的演示。
這意味著一套代碼可以從瀏覽器 → 邊緣 → 服務器無縫橫跨。
- 生態 & 兼容
- 內置模型覆蓋 LLaMA/Mistral/Mixtral/Gemma/Phi/Stable Diffusion/SAM/CLIP/BLIP/TrOCR/Whisper 等;
- 量化兼容 llama.cpp 格式;
- 讀寫 safetensors、npz、ggml、PyTorch 權重;
- 能嵌入自定義 CUDA 內核,甚至直接用 FlashAttention v2。
一句話:“Rust 的生產級推理/訓練底座 + 現成的大模型/視覺模型/音頻模型 + 瀏覽器直跑”。
2. 三分鐘上手:從 Hello Tensor 到 GPU/瀏覽器
2.1 Hello Tensor(CPU)
use candle_core::{Device, Tensor};fn main() -> Result<(), Box<dyn std::error::Error>> {let device = Device::Cpu;let a = Tensor::randn(0f32, 1., (2, 3), &device)?;let b = Tensor::randn(0f32, 1., (3, 4), &device)?;let c = a.matmul(&b)?;println!("{c}");Ok(())
}
運行 cargo run
,即可看到形如 Tensor[[2, 4], f32]
的輸出。
2.2 切換到 CUDA(單卡)
- let device = Device::Cpu;
+ let device = Device::new_cuda(0)?;
構建時加上 --features cuda
(若裝有 cuDNN,可再加 --features cudnn
)。
2.3 瀏覽器內跑 LLaMA/Whisper(WASM)
以 LLaMA2 wasm 示例為例:
cd candle-wasm-examples/llama2-c
wget https://huggingface.co/spaces/lmz/candle-llama2/resolve/main/model.bin
wget https://huggingface.co/spaces/lmz/candle-llama2/resolve/main/tokenizer.json
trunk serve --release --port 8081
# 瀏覽器打開 http://localhost:8081/
無需后端,直接在瀏覽器里文本生成;Whisper/T5/SAM 等也有同類 Demo。
3. 可直接復用的“場景模板”
3.1 低成本文本推理服務(通用/代碼/多語)
- 語言模型:LLaMA v1/v2/v3、Mistral、Mixtral、Gemma、Phi、StableLM、StarCoder/2、Qwen1.5、Yi、RWKV 等;
- 量化版(兼容 llama.cpp):在 CPU/小顯存機器上也能跑。
部署套路:Candle +safetensors/ggml
權重 → 啟動命令行/HTTP 服務 → Nginx 反代/Serverless。
3.2 文生圖 & 視覺(AIGC/理解/分割)
- Stable Diffusion(1.5/2.1/XL/Turbo)、Wuerstchen;
- 視覺理解:CLIP/BLIP/DINOv2/SegFormer/YOLO/SAM;
典型用法:批量生成電商圖、前端交互摳圖(SAM)、多模態檢索(CLIP)。
3.3 語音(ASR/TTS/壓縮)
- Whisper(轉寫)、Parler-TTS/MetaVoice(TTS)、EnCodec(高質量音頻壓縮)。
邊緣側:瀏覽器或本地應用里就能跑 ASR/TTS,隱私敏感場景很友好。
4. 從 PyTorch 遷移:速查對照表
任務 | PyTorch | Candle |
---|---|---|
創建張量 | torch.Tensor([[1,2],[3,4]]) | Tensor::new(&[[1f32, 2.],[3., 4.]], &Device::Cpu)? |
零張量 | torch.zeros((2,2)) | Tensor::zeros((2,2), DType::F32, &Device::Cpu)? |
切片 | x[:, :4] | x.i((.., ..4))? |
變形 | x.view((2,2)) | x.reshape((2,2))? |
矩陣乘 | a.matmul(b) | a.matmul(&b)? |
設備遷移 | x.to("cuda") | x.to_device(&Device::new_cuda(0)?)? |
精度轉換 | x.to(torch.float16) | x.to_dtype(&DType::F16)? |
保存/加載 | torch.save(...) / torch.load | safetensors::save(...) / safetensors::load(..., &device) |
遷移 Tips:
- 先把 PyTorch 權重導出為 safetensors;
- 對齊層/權重命名與 shape;
- 先在 CPU 通了,再切 GPU/多卡/量化。
5. 進階實踐:性能與工程化
5.1 三板斧:數據類型、算子、KV/注意力優化
- 在不損失精度的前提下,優先 F16/BF16;
- 用 candle-flash-attn(FlashAttention v2) 優化注意力;
- 合理利用 KV Cache、分頁注意力或稀疏注意力(取決于模型實現)。
5.2 CUDA & 多卡
- 構建開啟
--features cuda
; - 多卡通信依賴 NCCL;
- 對大型權重,提前本地化 + 分塊加載,降低首次延遲。
5.3 量化與小機器可用性
- 直接復用 llama.cpp 量化權重(如 q4/q5/q8);
- CPU-only 場景用量化 + F16 混合能顯著降內存/提升吞吐。
5.4 WASM 前端與邊緣推理
- 適合隱私/離線需求(會議紀要轉寫、圖片分割交互等);
- 結合
trunk
一鍵本地預覽; - 按需裁剪詞表與權重體積,優化首包下載與首次渲染時間。
6. 常見報錯與“秒級定位”清單
-
mkl/accelerate 鏈接缺符號
extern crate intel_mkl_src;
/extern crate accelerate_src;
-
LLaMA 權限 401
- 先在 Hugging Face 接受協議 & 配置 token。
-
FlashAttention 編譯缺少 cutlass
git submodule update --init
。
-
nvcc 與 gcc-11 不兼容
- 安裝 gcc-10,
NVCC_CCBIN=/usr/lib/gcc/.../10
.
- 安裝 gcc-10,
-
WSL 讀模型極慢
- 避免從
/mnt/c
讀取,改放 WSL 本地盤。
- 避免從
-
Windows 找不到 CudaRC 模塊
- 將
nvcuda.dll
、cublas64_12.dll
、curand64_10.dll
放到 PATH 并按需重命名。
- 將
-
定位堆棧
RUST_BACKTRACE=1
。
7. 與其它 Rust ML 框架如何選
- dfdx:類型級形狀檢查,更“學術范”;對新人上手略陡。
- burn:通用框架,多后端,適合從零訓練/研究型項目。
- tch-rs:Torch 的 Rust 綁定,功能強但體積與依賴重。
- Candle:落地友好、模型覆蓋廣、權重格式兼容強、WASM/量化/FlashAttn/多卡齊活,非常適合生產推理與端到端應用。
經驗法則:
- 生產推理/跨端部署優先 Candle;
- 深入類型系統/教學范式可看 dfdx;
- 已有 Torch 資產想直接復用則 tch-rs;
- 從零搭訓練流水線且不介意體積,burn 也不錯。
8. 一鍵起步:三個可復制的“最小可用”范式
8.1 CLI 推理服務(CPU/量化優先)
- 選擇量化 LLaMA/Mistral;
cargo run --example quantized --release
;- 用 Nginx 包一層 HTTP,Serverless 也能帶起來。
8.2 瀏覽器側交互分割(SAM)
- 拉取
segment-anything
wasm 示例; - 前端選擇框/點提示 → wasm 執行 mask → Canvas 顯示;
- 無需把圖片發服務器,體驗“所見即所得”。
8.3 文生圖/圖文混合(SDXL + CLIP)
- 服務器上跑 SDXL(GPU/F16),產物緩存;
- 前端用 CLIP 做相似圖搜/文圖檢索;
- 形成創作—檢索—改圖的閉環。
9. FAQ:一些常被問到的細節
- 訓練 vs. 推理:Candle 支持訓練,但更側重“小而強的推理”;訓練建議從簡單任務或微調(LoRA)開始。
- 生態是否封閉:非也。格式開放、示例豐富,配合
safetensors/tokenizers
等 Rust 生態非常順滑。 - 跨平臺差異:macOS/Windows/Linux 都OK,注意各自的 BLAS/CUDA 安裝細節。
- 學習成本:API 風格貼近 PyTorch,上手難度不大;WASM/Docker/多卡這些更多是工程能力問題。
10. 結語:把“快、穩、小”落到底
Candle 的定位很清晰:讓工程團隊能快速把 AI 能力“裝進”任何地方——瀏覽器、微服務、邊緣設備、Serverless 函數、甚至離線工具。靠 Rust 帶來的穩與快,再加上官方示例與大模型覆蓋度,能讓你在大部分落地場景里省去一大段“環境/體積/依賴”糾纏。
如果你的目標是更低成本、更短上線路徑和更可控的運行時,那 Candle 值得一試。
附:你可以立刻嘗試的 5 個動手任務
- 在 CPU-only 機器上跑一版 量化 LLaMA 文本生成。
- 用 Whisper wasm 做一個“瀏覽器內實時轉寫”小工具。
- 結合 SAM 做一個“前端交互摳圖”小頁,體驗低延遲。
- 把 SDXL 跑在一張 24GB 顯卡上,做一個“批量圖生成 + 相似圖檢索(CLIP)”的 Demo。
- 用
safetensors
把你現有的 PyTorch 權重導入 Candle,打包一個單文件可執行推理工具。