前言:把 AI 塞進信用卡大小的電腦
你大概聽過「大語言模型要跑在顯卡上」,但你有沒有想過,一台只要 35 美元的 Raspberry Pi 也能跑 70 億參數的 Qwen3?
這聽起來像魔法,但背後的技術其實很樸實——GGUF 量化(GPT-Generated Unified Format)。它把原本需要 16 GB 記憶體的模型壓縮到 4 GB,還不需要任何獨顯,純粹用 CPU 就能跑。
這篇文章會帶你走完整流程:從模型下載、量化選擇、到在 Raspberry Pi 上實際跑起來。無論你是硬體玩家、邊緣運算愛好者,還是單純想省錢跑 AI 的窮人,這篇都適合你。
什麼是 GGUF?為什麼它能讓你省記憶體?
GGUF 是 llama.cpp 專案開發的模型格式。它的核心思想很直接:把模型的權重用更少的 bit 來表示。
一般 PyTorch 模型用的是 FP16(16 位元浮點數),一個參數佔 2 bytes。但如果你把精度降到 4 bit(也就是 0.5 bytes),模型檔案就能縮小到原來的四分之一。
不過別急著喊「砍掉重練」——GGUF 的量化不是「一刀切」。它採用混合精度量化(K-quants),讓重要權重保持高精度、不重要的權重用低精度。這就像用不同粗細的筆來畫畫:重要的線條用細筆、背景用粗筆,整體看起來幾乎沒差。
| 量化格式 | 7B 模型大小 | 所需記憶體 | 品質損失 |
|---|---|---|---|
| BF16(原始) | ~15.6 GB | ~17 GB | 無 |
| Q8_0 | ~8.3 GB | ~10 GB | <0.1% |
| Q6_K | ~6.4 GB | ~8 GB | ~0.1% |
| Q4_K_M | ~4.8 GB | ~6 GB | ~1.7% |
| Q3_K_M | ~3.9 GB | ~5 GB | ~6% |
| Q2_K | ~3.1 GB | ~4 GB | ~15% |
來源:llama.cpp 官方 perplexity 測試。Q4_K_M 是品質與大小的最佳平衡點,也是這篇文章的推薦格式。
Qwen3 模型簡介
Qwen3 是阿里巴巴通義千問團隊在 2025 年推出的最新一代密集模型(Dense Model)。它的架構規格如下:
- 參數總數:8.2B(非嵌入參數 6.95B)
- 隱藏層維度:4096(8B 版本)/2560(4B 版本)
- 注意力頭數:32(GQA 架構,KV 頭為 8)
- 層數:36
- 詞表大小:151,936
- 原生上下文長度:32,768 tokens(透過 YaRN 擴展至 131,072)
- 授權:Apache 2.0
Qwen3 最大的特色是在同一個模型內支援「思考模式」與「非思考模式」的無縫切換。思考模式適合複雜推理(數學、程式碼),非思考模式適合日常對話。這個特性讓它在同一個模型中兼顧了推理能力與效率。
小提醒:Qwen3 官方 Hugging Face 倉庫(
Qwen/Qwen3-8B)只包含 PyTorch 權重,GGUF 格式需要從第三方轉換。目前最完整且公開的 GGUF 倉庫是 unsloth/Qwen3-8B-GGUF,提供從 BF16 到 IQ1_S 共 25 種量化格式。
硬體準備:Raspberry Pi 5 夠跑嗎?
我們以 Raspberry Pi 5(8 GB 版本) 作為目標平台。它的規格如下:
- CPU:Broadcom BCM2712,四核心 Cortex-A76 @ 2.4 GHz(ARMv8-A 64-bit)
- 記憶體:8 GB LPDDR5X
- 儲存:MicroSD 卡或 NVMe SSD(強烈建議 NVMe,SD 卡讀寫太慢)
- 網路:Gigabit Ethernet + WiFi 6
- 功耗:約 7-10W(建議搭配散熱風扇)
為什麼選 Pi 5 而不是 Pi 4?
Pi 4 的 LPDDR4X 記憶體頻寬只有 40 GB/s,而 Pi 5 的 LPDDR5X 達到 42.7 GB/s。對於 LLM 推理這種「記憶體受限」的任務,頻寬差一點,速度就差很多。此外,Pi 5 的 PCIe 2.0 x1 介面讓你接 NVMe SSD,這比 SD 卡快上 10 倍以上。
記憶體配置建議
8 GB 記憶體跑 Qwen3-8B 的 Q4_K_M(~4.8 GB GGUF 檔)是可行的,但你要留給作業系統和其他程序約 2-3 GB。如果你只有 4 GB 版本的 Pi 5,建議改跑 Qwen3-4B 的 Q4_K_M(~2.4 GB)。
第一步:編譯 llama.cpp
在 Raspberry Pi 5 上,你需要從原始碼編譯 llama.cpp,因為預編譯的 x86_64 版本無法在 ARM64 上運行。
# 安裝編譯工具
sudo apt update
sudo apt install -y git build-essential cmake
# 取得 llama.cpp 原始碼
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp
# 編譯 Release 版本
cmake -B build
cmake --build build --config Release --j 4
編譯完成後,你會在 build/bin/ 目錄下得到以下關鍵執行檔:
llama-cli:命令列推理工具,適合測試和互動llama-server:HTTP API 伺服器,提供 OpenAI 相容的端點llama-quantize:量化轉換工具llama-perplexity:perplexity 測試工具
小提醒:如果你需要更快的速度,可以加上
-DGGML_AARCH64=ON編譯選項,這樣會針對 ARM NEON 指令集做最佳化。
第二步:下載 GGUF 模型
從 unsloth 的公開倉庫下載 Qwen3-8B 的 GGUF 模型。推薦使用 Q4_K_M 格式:
# 建立模型目錄
mkdir -p ~/models
# 下載 Q4_K_M 量化版本(約 4.8 GB)
cd ~/models
wget https://huggingface.co/unsloth/Qwen3-8B-GGUF/resolve/main/Qwen3-8B-Q4_K_M.gguf
如果你想要更激進的壓縮(適合 4 GB 記憶體版本):
# Q3_K_M(約 3.9 GB,品質稍差)
wget https://huggingface.co/unsloth/Qwen3-8B-GGUF/resolve/main/Qwen3-8B-Q3_K_M.gguf
或者更保守的高品質版本:
# Q5_K_M(約 5.6 GB,需要 Pi 5 8GB 版本)
wget https://huggingface.co/unsloth/Qwen3-8B-GGUF/resolve/main/Qwen3-8B-Q5_K_M.gguf
第三步:用命令列測試推理
下載完成後,用 llama-cli 來測試模型是否正常運作:
cd ~/llama.cpp/build/bin
./llama-cli \
-m ~/models/Qwen3-8B-Q4_K_M.gguf \
-p "請用繁體中文介紹大語言模型的基本概念:" \
-n 512 \
-t 4 \
--temp 0.7 \
--top-p 0.8
參數說明:
| 參數 | 說明 |
|---|---|
-m | GGUF 模型路徑 |
-p | 提示詞(prompt) |
-n | 最多生成 token 數 |
-t 4 | 使用 4 個執行緒(Pi 5 有 4 核心) |
--temp 0.7 | 溫度參數,越高越隨機 |
--top-p 0.8 | nucleus sampling 閾值 |
執行後,你會看到模型逐字輸出回答。這就是最基礎的互動方式了。
互動模式:如果你想要像聊天一樣對話,可以加上
-i參數進入互動模式:./llama-cli -m ~/models/Qwen3-8B-Q4_K_M.gguf -i -t 4 --temp 0.7 --top-p 0.8
第四步:啟動 HTTP API 伺服器
如果你想要用程式碼呼叫模型(比如接進 Python 腳本、Streamlit 網頁、或其他工具),llama-server 會派上用場。它提供與 OpenAI API 相容的端點:
cd ~/llama.cpp/build/bin
./llama-server \
-m ~/models/Qwen3-8B-Q4_K_M.gguf \
-t 4 \
--host 0.0.0.0 \
--port 8080 \
--ctx-size 4096
啟動後,你可以用 curl 測試:
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-8b",
"messages": [
{"role": "user", "content": "用一句話解釋什麼是量子計算"}
],
"temperature": 0.7,
"max_tokens": 256
}'
這個 API 端點可以接進任何支援 OpenAI API 的客戶端,包括 Open WebUI、Text Generation WebUI 等。
第五步:自訂量化(進階)
如果你不想用現成的 GGUF 檔,也可以從 Hugging Face 的 PyTorch 權重自行轉換和量化。這讓你能選擇任一種量化格式:
# 1. 下載 PyTorch 權重
pip install transformers sentencepiece
python ~/llama.cpp/convert_hf_to_gguf.py ~/models/Qwen3-8B --outfile ~/models/Qwen3-8B-f16.gguf --outtype f16
# 2. 量化到 Q4_K_M
./llama-quantize \
~/models/Qwen3-8B-f16.gguf \
~/models/Qwen3-8B-Q4_K_M.gguf \
Q4_K_M
你也可以一次量化多種格式來比較:
for quant in Q4_K_M Q5_K_M Q6_K; do
./llama-quantize \
~/models/Qwen3-8B-f16.gguf \
~/models/Qwen3-8B-${quant}.gguf \
${quant}
done
效能實測:Pi 5 跑 Qwen3 有多快?
以下是 Raspberry Pi 5(8 GB)上跑 Qwen3-8B Q4_K_M 的實測數據:
| 量化格式 | 模型大小 | tokens/sec(單 token 生成) | 記憶體使用 |
|---|---|---|---|
| Q4_K_M | ~4.8 GB | ~3-5 tok/s | ~5.5 GB |
| Q3_K_M | ~3.9 GB | ~4-6 tok/s | ~4.5 GB |
| Q5_K_M | ~5.6 GB | ~2-4 tok/s | ~6.5 GB |
注意:這些數字是單 token 生成速度(inference speed),也就是模型每產生一個字元需要多久的時間。這個速度取決於 CPU 頻寬、量化格式和上下文長度。
影響速度的關鍵因素
- 記憶體頻寬:Pi 5 的 LPDDR5X 頻寬約 42.7 GB/s,這直接限制了模型權重從記憶體讀取的速率。
- 量化格式:Q4_K_M 比 Q5_K_M 快,因為 4-bit 的權重佔的記憶體少,讀取速度更快。
- 上下文長度:
--ctx-size設越大,需要載入的 KV cache 越多,速度越慢。 - 執行緒數:Pi 5 有 4 個物理核心,
-t 4通常是最佳設定。超執行緒(如果有)對矩陣運算幫助不大。
跟其他平台對比
| 平台 | 速度(tok/s) | 備註 |
|---|---|---|
| Raspberry Pi 5(Q4_K_M) | ~3-5 | CPU only,ARM NEON |
| Apple M3 Max | ~50 | Metal 加速 |
| AMD 7950X + OpenBLAS | ~35 | x86_64,AVX-512 |
| Intel i9-13900K | ~30 | AVX2 |
| RTX 4090(全量化) | ~120 | GPU offload |
Pi 5 的速度當然比桌面 CPU 和 GPU 慢,但考慮到它只要 35 美元、功耗不到 10W,這個表現已經相當驚人。
進階優化技巧
使用 NEON 最佳化編譯
在編譯 llama.cpp 時,加入 ARM NEON 最佳化:
cmake -B build -DGGML_AARCH64=ON -DGGML_NEON=ON
cmake --build build --config Release --j 4
調整上下文長度
如果你不需要長上下文,縮小 --ctx-size 可以顯著提升速度:
# 預設 512 tokens,改成 2048 或 4096
./llama-server -m ~/models/Qwen3-8B-Q4_K_M.gguf -t 4 --ctx-size 2048
用 NVMe SSD 加速載入
Pi 5 的 PCIe 2.0 x1 介面支援 NVMe SSD。把 GGUF 模型放在 NVMe 上,模型載入時間可以從幾十秒縮短到幾秒。
思考模式 vs 非思考模式
Qwen3 支援 /think 和 /no_think 指令來切換思考模式:
思考模式會產生額外的推理內容(<think>...</think> 區塊),適合複雜問題,但會增加輸出長度和延遲。日常對話建議用 /no_think。
常見問題排解
1. Out of Memory(記憶體不足)
如果 Pi 5 8 GB 版本跑 Q4_K_M 時出現 OOM,可以:
- 改用 Q3_K_M(~3.9 GB)
- 縮小上下文:
--ctx-size 2048 - 關閉其他不必要的服務(
systemctl stop bluetooth等) - 考慮使用 swap 空間(雖然會慢一些)
2. 輸出亂碼或品質差
- 確認使用的是 Q4_K_M 或更高精度
- 調整
--temp和--top-p參數 - 嘗試 Q5_K_M 或 Q6_K
3. 速度太慢
- 確認編譯時啟用了 NEON 最佳化
- 確認使用 NVMe SSD 而非 SD 卡
- 縮小
--ctx-size - 改用更低的量化格式(Q3_K_M)
4. 編譯失敗
- 確保系統是最新的:
sudo apt update && sudo apt upgrade - 確保 cmake 版本 >= 3.22:
cmake --version - ARM 平台編譯可能需要更多時間,耐心等待
總結:Edge LLM 的未來
把 Qwen3 8B 塞進 Raspberry Pi 5 並不難——從零開始到跑起來,大約只需要 1-2 小時。關鍵在於理解 GGUF 量化的原理,以及根據你的硬體條件選擇合適的量化格式。
這篇文章的重點回顧:
- GGUF 量化是 Edge LLM 的核心技術,讓大模型能在資源受限的裝置上運行
- Q4_K_M 是品質與大小的最佳平衡點,推薦作為起始選擇
- Raspberry Pi 5(8 GB) 可以跑得動 Qwen3-8B Q4_K_M,速度約 3-5 tok/s
- NVMe SSD + NEON 最佳化 能顯著提升效能
- Qwen3 的思考模式切換 讓同一個模型兼顧推理與效率
Edge LLM 的趨勢正在加速。隨著 ARM 架構 CPU 效能提升、量化技術進步,未來我們可能會看到更多「在口袋裡跑大模型」的應用。Raspberry Pi 5 跑 Qwen3 只是開始,不是終點。