UrsaKit 在消費級硬件上執行開源權重 LLM 的指南封面

在自己的硬件上本機執行 LLM,能拿到代管 API 給不了的三件事:沒有每 token 成本、資料不離開機器、沒有速率限制。代價則是你必須事先規劃的記憶體預算,而不是可以忽略的帳單。

近期的開源權重發布把這件事從嗜好推向隱私敏感工作的預設選項:Aleph Alpha 的 Kolibri 是英語與德語的混合專家模型,以 Apache 2.0 釋出(Aleph Alpha);antirez 的 ds4 則以 DeepSeek V4 Flash 為主要目標,支援 Metal、CUDA 與 ROCm(ds4)。以下執行環境就是它們底下那一層。

01先挑執行環境,再挑模型

控制權分三級,正確選擇取決於你要優化的是方便還是吞吐量。

執行環境適合介面取捨
桌面應用(LM Studio 等)第一次執行、瀏覽模型GUI較不易腳本化
Ollama日常使用、應用整合CLI + 11434 埠常駐服務低階參數較少
llama.cpp調校、供應、嵌入llama-cli、llama-server需手動設定

三者最終都執行 GGUF 檔,所以為其中一個下載的模型不會浪費。

02下載前先估算記憶體

這是大家最常跳過、也是下載完成後卻載入失敗的原因。有兩項成本要顧。

權重隨參數量與位元深度成長,因為量化會用更少的位元存每個權重。4 位元等於半個位元組,所以每十億參數約 0.5 GB,加上額外開銷就抓 0.6 GB;8 位元大約是兩倍,約 1.1 GB。

KV 緩存隨脈絡長度、批次大小、層數與 head 維度成長——而且它不是免費的。在 7B 模型上,從 4K 拉到 32K 脈絡可能增加好幾 GB。

模型大小(Q4)權重(估計)舒適最低需求說明
3B約 2 GB6 GB小型筆電可跑
7–8B約 5 GB10 GB常見甜蜜點
13–14B約 8 GB14 GB需要 12 GB 以上 GPU
30–34B約 20 GB32 GBApple 統一記憶體或雙 GPU

權重是下限,不是總和

在空脈絡下塞得下的模型,把脈絡視窗拉高後可能就記憶體不足。先決定你需要的脈絡,再挑一個還留得下空間的量化。

03用 Ollama 執行模型

Ollama 是從零到可用端點最短的路。它會下載量化模型、緩存它,並啟動一個說 HTTP 的常駐服務。

  1. 安裝並啟動服務。官方安裝程式涵蓋 macOS、Windows 與 Linux;服務跑起來後會在 11434 埠待命。
  2. 下載並執行模型。 標籤決定參數大小與量化;省略時通常會選一個預設值。
ollama pull gemma4
ollama run gemma4

這個例子拉的是 gemma4,Ollama 模型庫裡目前的 Gemma 版本。標籤決定參數大小與量化;省略時通常會選一個預設值。

  1. 直接呼叫 API。 Ollama 在 11434 提供 OpenAI 相容端點,現有客戶端只要改 base URL 就能用。
curl http://localhost:11434/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "gemma4",
    "messages": [{ "role": "user", "content": "Summarize this changelog in one line." }]
  }'
  1. 檢查載入了什麼、跑得多快。 Ollama 會回報模型、脈絡大小與每秒 token 數,那正是調校時要盯的數字。

04用 llama.cpp 執行同一個模型

llama.cpp 是你明確控制 GPU 卸載與脈絡的地方。先建置一次,之後就能供應任何 GGUF 檔。

cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release -j

把多數層放到 GPU 上供應模型。-ngl 99 會盡可能卸載每一層,-c 設定脈絡大小,--port 提供 OpenAI 相容伺服器。

./build/bin/llama-server \
  -m ./models/qwen3-8b-q4_k_m.gguf \
  -c 8192 \
  -ngl 99 \
  --host 127.0.0.1 --port 8080
curl http://127.0.0.1:8080/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{"model": "local", "messages": [{"role": "user", "content": "Hello"}]}'

-ngl 是最有用的單一參數。若模型塞不下,把它調低會把層移到系統 RAM:還是能跑,但慢得多,因為每個 token 都得越過 PCIe 匯流排。

05調整決定效能的三個設定

量化決定質素上限(llama.cpp quantize)。Q4_K_M 是標準平衡,Q5_K_M 用略大的檔案換更好質素,Q8_0 接近原始模型但權重約大一倍。只有在更大的都塞不下時才往下走。

脈絡是最容易默默超出記憶體的設定。從任務實際需要的長度開始,而不是模型宣稱的最大值,然後一步步調高並盯著記憶體。

GPU 卸載決定推論是快、還是勉強能跑。把塞得進 VRAM 的層盡量卸載,並留一點餘裕給 KV 緩存與作業系統。

權重塞得下的量化,仍可能因脈絡而失敗

若模型載入後伺服器崩潰,或對話中途慢成爬行,請調低 -ngl 或減少 -c。長對話會讓緩存持續長大,直到機器開始置換。

06常見錯誤與修正

現象原因解法
模型載入後遇到第一個長提示就失敗KV 緩存超過可用記憶體降低脈絡或量化
每秒 token 數極慢有層在 CPU 上執行提高 -ngl 或釋放 VRAM
輸出亂碼或重複量化對該任務太激進改用 Q5 或 Q8
11434 埠連線被拒Ollama 服務沒在跑啟動服務後重試
客戶端能通 API 但找不到模型模型名稱與標籤不符使用 ollama list 顯示的確切標籤

可行的流程是:估算記憶體、挑選符合質素要求的最小量化、用 OpenAI 相容端點供應它,然後把工具指向 localhost。端點穩定後,你就能交給編碼 agent 或內部工具使用,而完全不送出任何 token。

07資料來源

常見問題

本機執行模型需要多少 RAM 或 VRAM?

4 位元量化下,權重約每十億參數 0.6 GB,再為 KV 緩存加記憶體。7B 模型在 Q4 下、尚未計入脈絡前約需 4–5 GB;長脈絡可能再加好幾 GB。

Ollama 與 llama.cpp 有什麼差別?

Ollama 以模型管理、常駐服務與 11434 埠的 OpenAI 相容 API 包住 llama.cpp。llama.cpp 給你原始執行檔與每個參數的完整控制權,調效能時要的就是這個。

量化實際上換掉了什麼?

精度。低位元量化會縮小檔案並加快推論,但損失準確度,尤其在推理與長脈絡任務上。Q4_K_M 是常見平衡點;Q8_0 更接近原始模型,但檔案約大一倍。

為什麼我的模型比跑分慢?

多數跑分假設整個模型都放進 VRAM。若有層溢位到系統 RAM,吞吐量會大幅下降。請降低脈絡、改用更小量化,或減少移除層數並接受這個取捨。

可以讓本機模型搭配現有 OpenAI 客戶端嗎?

可以。Ollama 與 llama-server 都提供 OpenAI 相容端點,你只需改 base URL 與模型名稱,不必重寫 SDK 呼叫。

返回文章列表

相關文章

相關工具