【llama.cpp 教學】#03 命令列推論實戰:llama-cli 完整指南

測驗:llama-cli 完整指南

共 5 題,點選答案後會立即顯示結果

1. 使用 llama-cli 進行推論時,哪兩個參數是必要的?

  • A. -c-n
  • B. -m-p
  • C. -ngl-t
  • D. --temp--top-p

2. Temperature 參數的作用是什麼?

  • A. 控制模型載入的層數
  • B. 設定上下文記憶的長度
  • C. 控制模型輸出的隨機性與創意程度
  • D. 限制生成的 token 數量

3. 若要讓模型生成的程式碼更加確定、一致,Temperature 應該設定為多少較為合適?

  • A. 0.2
  • B. 0.8
  • C. 1.0
  • D. 1.5

4. 關於 -cnv-i 互動模式的差異,下列敘述何者正確?

  • A. -cnv 只支援單輪對話,-i 支援多輪對話
  • B. -cnv 專為聊天設計並自動處理對話格式,-i 是基本互動模式
  • C. 兩者功能完全相同,只是名稱不同
  • D. -i 會自動套用系統提示詞,-cnv 則不會

5. 使用 -ngl 參數的主要目的是什麼?

  • A. 設定 CPU 執行緒數量
  • B. 限制輸出的 token 數量
  • C. 設定上下文視窗大小
  • D. 將模型層級載入 GPU 以加速推論

前言

在前兩篇文章中,我們完成了 llama.cpp 的編譯安裝,並成功下載了 GGUF 格式的模型。現在是時候讓模型開口說話了。

llama-cli 是 llama.cpp 的主要命令列工具,讓你直接在終端機與大型語言模型對話。本篇將帶你從基本的單次推論,到進階的參數調校,最後掌握互動模式的多輪對話。

學習目標

讀完本篇後,你將能夠:

  • 使用 llama-cli 載入模型並進行對話
  • 理解並調整關鍵推論參數(temperature、topp、topk)
  • 設定上下文長度與記憶體使用
  • 使用互動模式進行多輪對話

llama-cli 基本用法

最簡單的推論指令

載入模型並生成文字的最基本指令:

llama-cli -m ./models/phi-4-q4.gguf -p "今天天氣真好"
Code language: JavaScript (javascript)

這裡有兩個必要參數:

  • -m:指定模型檔案路徑
  • -p:提供輸入提示詞(prompt)

執行後,模型會根據你的提示詞繼續生成文字。

控制輸出長度

預設情況下,模型會持續生成直到達到上下文限制或遇到停止符號。使用 -n 參數限制生成的 token 數量:

llama-cli -m ./models/phi-4-q4.gguf \
    -p "請用三句話介紹台北" \
    -n 100
Code language: JavaScript (javascript)

-n 100 表示最多生成 100 個 token。

從 Hugging Face 直接下載並執行

如果你還沒下載模型,可以讓 llama-cli 自動從 Hugging Face 下載:

llama-cli --hf-repo unsloth/phi-4-GGUF:q4_k_m \
    -p "Hello, world!"
Code language: JavaScript (javascript)

--hf-repo 格式是 用戶名/模型名:量化版本,首次執行會自動下載到快取目錄。

重要參數詳解

Temperature:控制隨機性

Temperature 決定模型輸出的「創意程度」:

# 低 temperature:輸出較為確定、一致
llama-cli -m model.gguf -p "1+1=" --temp 0.1

# 高 temperature:輸出較為多樣、有創意
llama-cli -m model.gguf -p "寫一首關於星星的詩" --temp 1.2
Code language: PHP (php)

參數範圍與建議:

Temperature 效果 適用場景
0.0 – 0.3 非常確定性,幾乎總是選最高機率的詞 數學運算、程式碼、事實問答
0.4 – 0.7 平衡穩定與多樣性 一般對話、技術文件
0.8 – 1.2 較高創意,輸出多樣化 創意寫作、故事生成
> 1.2 高度隨機,可能產生不連貫內容 極端創意需求(少用)

預設值是 0.8,對大多數情況已經足夠。

Top-K 與 Top-P:控制取樣範圍

這兩個參數決定模型「考慮哪些詞」:

Top-K 取樣:只從機率最高的 K 個詞中選擇

llama-cli -m model.gguf -p "天空是" --top-k 10
Code language: JavaScript (javascript)
  • --top-k 10:只考慮機率最高的 10 個詞
  • 預設值:40
  • 範圍:1-100(1 = 只選最高機率的詞)

Top-P 取樣(Nucleus Sampling):選擇累積機率達到 P 的詞

llama-cli -m model.gguf -p "天空是" --top-p 0.9
Code language: CSS (css)
  • --top-p 0.9:選擇累積機率達到 90% 的詞彙組合
  • 預設值:0.9
  • 範圍:0.0-1.0(1.0 = 不限制)

實用組合建議:

# 程式碼生成:低 temperature + 嚴格取樣
llama-cli -m model.gguf -p "寫一個 Python 排序函數" \
    --temp 0.2 --top-p 0.7 --top-k 10

# 創意寫作:高 temperature + 寬鬆取樣
llama-cli -m model.gguf -p "寫一個奇幻故事開頭" \
    --temp 1.0 --top-p 0.95 --top-k 50

# 一般對話:平衡設定
llama-cli -m model.gguf -p "介紹一下自己" \
    --temp 0.7 --top-p 0.9 --top-k 40
Code language: CSS (css)

n_ctx:上下文長度

上下文長度決定模型能「記住」多少內容:

llama-cli -m model.gguf -c 8192 -p "很長的文章..."
Code language: JavaScript (javascript)
  • -c--ctx-size:設定上下文長度
  • 預設值:4096(從模型載入)
  • 注意:更長的上下文需要更多記憶體

記憶體估算參考:

上下文長度 額外記憶體需求(約)
4096 基準值
8192 +2GB
16384 +4-6GB
32768 +8-12GB

n_gpu_layers:GPU 加速設定

將模型層級載入到 GPU 以加速推論:

# 將 35 層載入 GPU
llama-cli -m model.gguf -ngl 35 -p "Hello"

# 載入全部層級到 GPU(設一個很大的數字)
llama-cli -m model.gguf -ngl 999 -p "Hello"
Code language: PHP (php)
  • -ngl--gpu-layers:要載入 GPU 的層數
  • 預設值:0(純 CPU 運算)
  • 設定為很大的數字(如 999)會自動載入所有層

如何決定 GPU 層數?

  1. 先查看你的 GPU 記憶體容量
  2. 從小數字開始嘗試,逐步增加
  3. 觀察是否出現記憶體不足錯誤
# 逐步測試
llama-cli -m model.gguf -ngl 10 -p "test"  # 先試 10 層
llama-cli -m model.gguf -ngl 20 -p "test"  # 再試 20 層
llama-cli -m model.gguf -ngl 35 -p "test"  # 繼續增加
Code language: PHP (php)

互動模式:多輪對話

啟用互動模式

使用 -i 參數進入互動模式:

llama-cli -m model.gguf -i
Code language: CSS (css)

或使用 -cnv(conversation)進入對話模式:

llama-cli -m model.gguf -cnv
Code language: CSS (css)

兩者差異:

  • -i(interactive):基本互動,你輸入、模型回應
  • -cnv(conversation):專為聊天設計,自動處理對話格式

設定系統提示詞

使用 -sys 參數設定系統角色:

llama-cli -m model.gguf \
    -sys "你是一個專業的程式設計助手,專門回答 Python 問題。" \
    -cnv
Code language: JavaScript (javascript)

系統提示詞會影響模型的整體行為風格。

指定聊天模板

不同模型可能需要不同的對話格式:

# 使用內建的 llama3 模板
llama-cli -m llama3-model.gguf --chat-template llama3 -cnv

# 使用 ChatML 模板
llama-cli -m model.gguf --chat-template chatml -cnv

# 使用模型內嵌的模板(推薦)
llama-cli -m model.gguf --jinja -cnv
Code language: CSS (css)

常見的內建模板包括:llama2llama3chatmlmistral-v1phi3 等。

多行輸入

需要輸入多行文字時,使用 --mli 參數:

llama-cli -m model.gguf -cnv --mli
Code language: CSS (css)

啟用後,可以直接貼上多行文字,按 Enter 兩次結束輸入。

完整範例:實戰演練

範例一:技術問答助手

llama-cli -m ./models/phi-4-q4.gguf \
    -sys "你是一個資深的軟體工程師,擅長用簡單易懂的方式解釋技術概念。回答時請條列重點。" \
    --temp 0.3 \
    --top-p 0.8 \
    -c 4096 \
    -ngl 35 \
    -cnv
Code language: JavaScript (javascript)

範例二:創意寫作助手

llama-cli -m ./models/phi-4-q4.gguf \
    -sys "你是一個富有創意的作家,擅長描述場景和情感。" \
    --temp 1.0 \
    --top-p 0.95 \
    --top-k 50 \
    -c 8192 \
    -ngl 35 \
    -cnv
Code language: JavaScript (javascript)

範例三:程式碼生成

llama-cli -m ./models/phi-4-q4.gguf \
    -sys "你是一個 Python 專家。只輸出程式碼,不需要解釋。" \
    --temp 0.2 \
    --top-p 0.7 \
    --top-k 10 \
    -ngl 35 \
    -cnv
Code language: JavaScript (javascript)

常見問題排解

問題一:記憶體不足

症狀:

ggml_backend_cuda_buffer_type_alloc_buffer: allocating X bytes on device failed
Code language: HTTP (http)

解決方案:

  1. 減少 GPU 層數
# 原本
llama-cli -m model.gguf -ngl 40 -p "test"

# 改為
llama-cli -m model.gguf -ngl 20 -p "test"
Code language: PHP (php)
  1. 減少上下文長度
llama-cli -m model.gguf -c 2048 -p "test"
Code language: JavaScript (javascript)
  1. 使用更小的量化版本
  2. Q4KM 比 Q8_0 使用更少記憶體
  3. Q40 比 Q4K_M 更小,但品質稍差
  4. Windows 用戶:增加虛擬記憶體
  5. 設定頁面檔案(pagefile)至少 50-100GB

問題二:推論速度慢

可能原因與解決方案:

  1. GPU 沒有正確使用
# 確認有設定 GPU 層數
llama-cli -m model.gguf -ngl 35 -p "test"
Code language: PHP (php)
  1. 模型太大
  2. 使用更高量化的版本(如 Q4 而非 Q8)
  3. 或使用更小的模型
  4. 上下文太長
# 如果不需要長上下文,設定較小的值
llama-cli -m model.gguf -c 2048 -p "test"
Code language: PHP (php)
  1. 設定執行緒數
# 設定 CPU 執行緒數(通常設為 CPU 核心數)
llama-cli -m model.gguf -t 8 -p "test"
Code language: PHP (php)

問題三:輸出品質差

調整建議:

  1. 輸出太隨機、不連貫
# 降低 temperature
--temp 0.5
Code language: CSS (css)
  1. 輸出太死板、重複
# 提高 temperaturetop_p
--temp 0.8 --top-p 0.95
Code language: CSS (css)
  1. 使用正確的聊天模板
# 讓模型使用內嵌模板
--jinja
Code language: PHP (php)

快速參考卡

常用參數速查

參數 說明 預設值
-m 模型路徑 必填
-p 提示詞 必填(非互動模式)
-n 生成 token 數 -1(無限)
-c 上下文長度 4096
-ngl GPU 層數 0
-t CPU 執行緒 自動
--temp Temperature 0.8
--top-k Top-K 取樣 40
--top-p Top-P 取樣 0.9
-i 互動模式 false
-cnv 對話模式 false
-sys 系統提示詞

場景建議設定

場景 Temperature Top-P Top-K
程式碼生成 0.2 0.7 10
技術問答 0.3 0.8 30
一般對話 0.7 0.9 40
創意寫作 1.0 0.95 50

小結

本篇介紹了 llama-cli 的完整使用方法:

  1. 基本用法-m 載入模型、-p 設定提示詞
  2. 取樣參數:Temperature 控制隨機性,Top-K/Top-P 控制取樣範圍
  3. 效能設定-c 上下文長度、-ngl GPU 加速
  4. 互動模式-cnv 對話模式、-sys 系統提示詞

掌握這些參數後,你已經可以靈活運用 llama.cpp 進行各種推論任務。下一篇我們將介紹 llama-server,讓你架設 API 伺服器,透過 HTTP 請求與模型互動。

延伸閱讀

進階測驗:llama-cli 完整指南

測驗目標:驗證你是否能在實際情境中應用所學。
共 5 題,包含情境題與錯誤診斷題。

1. 你需要使用 llama-cli 撰寫一個奇幻故事,希望內容有創意且多樣化。下列哪組參數設定最適合? 情境題

  • A. --temp 0.2 --top-p 0.7 --top-k 10
  • B. --temp 0.3 --top-p 0.8 --top-k 30
  • C. --temp 1.0 --top-p 0.95 --top-k 50
  • D. --temp 0.7 --top-p 0.9 --top-k 40

2. 小明執行以下指令後遇到錯誤訊息: 錯誤診斷

$ llama-cli -m model.gguf -ngl 40 -p “Hello” ggml_backend_cuda_buffer_type_alloc_buffer: allocating X bytes on device failed

最可能的原因是什麼?

  • A. 模型檔案格式不正確
  • B. GPU 記憶體不足,無法載入指定的層數
  • C. 沒有安裝 CUDA 驅動程式
  • D. 提示詞太長超過上下文限制

3. 你要建立一個技術問答助手,需要能處理較長的技術文件,並且希望回答穩定準確。你的 GPU 有 8GB 記憶體。下列哪組設定最適合? 情境題

  • A. -sys "你是技術助手" --temp 0.3 -c 8192 -ngl 35 -cnv
  • B. -sys "你是技術助手" --temp 1.0 -c 32768 -ngl 999 -cnv
  • C. --temp 0.3 -c 4096 -ngl 0 -i
  • D. -sys "你是技術助手" --temp 0.8 -c 2048 -ngl 10 -cnv

4. 小華使用 llama-cli 進行對話,發現模型的回應格式混亂,有時會重複對話標籤。他目前的指令是: 錯誤診斷

llama-cli -m llama3-model.gguf -i -p “你好”

最可能的改善方法是什麼?

  • A. 增加 -n 100 限制輸出長度
  • B. 將 temperature 設為 0
  • C. 使用 -cnv --jinja--chat-template llama3 指定正確的對話模板
  • D. 增加 GPU 層數以加速處理

5. 你需要用 llama-cli 分析一份包含 10000 個 token 的長篇技術文件,但發現模型似乎「忘記」了文件前半部分的內容。可能的原因和解決方法是什麼? 情境題

  • A. Temperature 設定太高,需要降低到 0.2
  • B. 上下文長度(-c)設定不足,需要增加到至少 12000 以上
  • C. 沒有使用 GPU 加速,需要增加 -ngl 參數
  • D. 模型量化版本太小,需要換用 Q8 版本

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *