llm-benchmark · v1.0.0 · 2026-03-18 · sha256 d3f9b1162fdbf262

llm-benchmark v1.0.0B

Immutable. This exact content never changes and is served at /api/v1/blob/d3f9b1162fdbf262.

---
name: llm-benchmark
description: "本地 LLM Benchmark 工具。當使用者想測試、比較或選擇本地 Ollama 模型時觸發。流程:檢查 Ollama 安裝 → 依 VRAM 推薦模型大小 → 下載模型 → 跑 benchmark → 與現有模型比較 → 輸出 markdown 報告。"
version: 1.0.0
---

# LLM Benchmark Skill

你是本地 LLM 效能評測專家。執行以下完整流程:

## Step 0:環境檢查

```bash
# 確認 Ollama 是否安裝並運行
curl -s http://localhost:11434/api/version 2>/dev/null || echo "NOT_RUNNING"
which ollama 2>/dev/null || echo "NOT_INSTALLED"
```

- 若 **未安裝**:執行 `curl -fsSL https://ollama.com/install.sh | sh`,再啟動服務
- 若 **未運行**:執行 `ollama serve &` 或 `systemctl start ollama`
- 確認成功後繼續

## Step 0.5:VRAM 清空(benchmark 前必做)

### 1. 停止 OpenClaw(若有且正在運行)

```bash
# 檢查 OpenClaw 容器是否存在且運行中
docker ps --format '{{.Names}}' | grep -i openclaw
```

- 若有 OpenClaw 容器正在運行 → 停止它:
  ```bash
  cd ~/openclaw && docker compose stop openclaw-gateway
  echo "OpenClaw stopped"
  ```
- 若無 OpenClaw 容器,或容器已停止 → 跳過此步驟

記錄 OpenClaw 是否原本是啟動的,**benchmark 完成後需還原狀態**。

### 2. 重啟 Ollama 清除 VRAM(必做)

```bash
sudo systemctl restart ollama
sleep 5
```

### 3. 確認 VRAM 已釋放

```bash
nvidia-smi --query-gpu=memory.used,memory.free --format=csv,noheader,nounits
```

確認 `memory.used` 降到 ~1500 MB 以下再繼續。若仍偏高,再等 5 秒重確認。

### 4. Benchmark 完成後還原 OpenClaw

若步驟 1 有停止 OpenClaw,benchmark 全部完成後執行:
```bash
cd ~/openclaw && docker compose start openclaw-gateway
echo "OpenClaw restarted"
```

---

## Step 1:取得 GPU/VRAM 資訊

```bash
nvidia-smi --query-gpu=name,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null \
  || rocm-smi --showmeminfo vram 2>/dev/null \
  || echo "NO_GPU"
```

依據 **可用 VRAM** 推薦模型最大參數量(以 Q4 量化為基準):

| 可用 VRAM | 推薦最大 B |
|-----------|-----------|
| < 4 GB    | 3B        |
| 4–6 GB    | 7B        |
| 6–8 GB    | 8B        |
| 8–10 GB   | 12–14B    |
| 10–14 GB  | 14B       |
| 14–16 GB  | 14–20B    |
| > 16 GB   | 30B+      |

**向使用者說明推薦理由**,列出推薦模型清單(附 Ollama model tag)。

## Step 2:確認要測試的模型

詢問使用者確認測試清單(若使用者已在指令中指定則略過)。

同時列出機器上 **現有模型**:
```bash
curl -s http://localhost:11434/api/tags | python3 -c "
import sys,json
data=json.load(sys.stdin)
for m in data.get('models',[]):
    print(m['name'], round(m['size']/1024/1024), 'MB')
"
```

## Step 3:檢查既有 Benchmark 記錄

檢查 `~/benchmark_results.json` 是否存在:

```bash
python3 -c "
import json, os
path = os.path.expanduser('~/benchmark_results.json')
if not os.path.exists(path):
    print('NO_BENCHMARK_FILE')
else:
    data = json.load(open(path))
    benchmarked = [e['model'] for e in data]
    print('BENCHMARKED:', benchmarked)
"
```

- 若某模型**已有 benchmark 記錄** → 直接沿用,不重跑
- 若機器上有模型**但無 benchmark 記錄** → 詢問使用者是否要補跑
- 若是**新模型**(需先 pull)→ 自動 pull 後跑 benchmark

## Step 4:Pull 新模型

```bash
ollama pull <model_tag>
```

pull 完成後確認:`ollama list | grep <model_name>`

## Step 5:執行 Benchmark

將 `skills/llm-benchmark/scripts/benchmark.py` 複製到目標機器並執行:

```bash
# 複製到 PC(若透過 SSH)
scp scripts/benchmark.py USER@PC_IP:/tmp/benchmark.py

# 在 PC 上執行(需先 pip install requests)
python3 /tmp/benchmark.py <model1> <model2> ...
```

> benchmark.py 的完整原始碼在 `scripts/benchmark.py`。

## Step 6:生成 Markdown 報告

benchmark 完成後,讀取 `~/benchmark_results.json`,生成 `~/model_benchmark.md`。

報告結構(參考 `~/model_benchmark.md`):
1. **執行環境**(CPU / GPU / RAM / OS)
2. **測試模型列表**(參數量、最大 ctx、檔案大小)
3. **Token/s 速度總覽表格**(模型 × context size)
   - 若某個 ctx size 的 `cpu_offload_detected` 為 true,在表格該格標示「⚠️ 中止」,並加註說明:
     > 此 context size 的 KV cache 超過 GPU VRAM 容量,Ollama 自動將計算 offload 至 CPU,導致 GPU 使用率驟降、CPU 全速運轉,推理速度大幅劣化。測試已提前終止,此 ctx 不列入甜蜜點評估。
4. **GPU 資源使用**(VRAM、GPU 利用率)
5. **回答品質評估**(每題正確性分析 + 摘要)
6. **Context Window 甜蜜點分析**(僅含未觸發 cpu_offload 的 ctx)
7. **瓶頸分析**(Compute Bound vs Memory Bandwidth Bound)
8. **排名**(邏輯推理 / 程式設計 / Token/s)
9. **結論與建議**(依使用情境推薦)

## Step 7:結論說明

向使用者口頭總結:
- 各模型 token/s 排名
- 回答品質排名(重點標注邏輯題正確性)
- VRAM 使用量
- **最終推薦**:哪個模型適合什麼情境

## 注意事項

- 全程使用**繁體中文**
- 每個推理超時設 120 秒,避免卡住
- 若模型 pull 失敗,記錄原因後繼續測其他模型
- 生成報告前先確認 `~/benchmark_results.json` 完整性
- 報告最後更新時間戳記