跳到主要內容

道具屋

學本地 LLM 一路上會用到的小道具。所有計算都在你的瀏覽器裡完成,不會上傳任何資料。

分診台:這個醫療任務該用哪種 AI?

十個醫療任務,替每個挑 rule-based、ML、DL 或 LLM。重點是「選對工具」,不是「什麼都用 LLM」。對應關卡:LV.03 AI 家族。

AI 人工智慧ML 機器學習DL 深度學習LLM

規則系統(rule-based)同樣屬於 AI,但不屬於 ML:它不從資料學習,規則由人寫定。

每張卡片是一個醫療任務。替它選一種最適合的技術,全部選完按「送出」看建議答案。 有些任務「兩者皆可」,理由會說明差別;這是教學用的建議,不是唯一標準答案。

  1. 1 再住院預測(出院後 30 天內是否再入院)

  2. 2 胸部 X 光判讀

  3. 3 出院摘要生成

  4. 4 藥物交互作用警示

  5. 5 病歷 PHI 去識別化

  6. 6 ICU 敗血症早期預警

  7. 7 皮膚病灶影像分類

  8. 8 病理報告抽取成結構化欄位

  9. 9 CHA₂DS₂-VASc 計分

  10. 10 衛教文字改寫(改成國中程度、白話)

背包秤重:本地 LLM 記憶體估算器

輸入參數量、位元數、模式與 context 長度,看 16GB Mac、32GB Mac 與 Colab T4 放不放得下。對應關卡:LV.06 模型動物園。

輸入模型大小與設定,估算需要多少記憶體,並對照三種常見硬體。這是估算,實際依模型架構而異。

模式
權重位元
估計記憶體

6.4 GB

權重
4.8
KV cache
0.6
執行環境
1.0
  • 16GB Mac綠燈:寬裕(可用約 10.7 GB)
  • 32GB Mac綠燈:寬裕(可用約 21.3 GB)
  • Colab T4 15GB綠燈:寬裕(可用約 15.0 GB)

綠燈 = 估計值 ≤ 可用的 80%;黃燈 = ≤ 100%;紅燈 = 超過。Mac 預設約三分之二的統一記憶體可給 GPU(作者背景知識,未逐版本查證);Colab 免費版通常分到 T4,但不保證。

實測對照

作者在 M5 32GB 的實測:Gemma 4 E2B(4-bit)、mlx-lm LoRA、batch 4、seq 2048,peak 記憶體 14.8 GB。 本估算器對同設定給出 14.6 GB,其中 logits 就占 8.0 GB。 Gemma 4 的詞表有 262,144 個 token,每個位置都要算一整排分數再算 loss,batch × 長度 × 詞表一乘就很可觀; 這也是為什麼「把 batch 從 4 降到 1」對省記憶體特別有效。Unsloth 這類框架用分塊計算 loss,這一項會小很多。 結論:估算器適合判斷「大概放不放得下」,邊界附近請以實測為準,並預留餘裕。

公式與係數
  • 權重 GB = 參數量(B)× 有效 bits ÷ 8;有效 bits:4-bit 約 4.8、8-bit 約 8.5、16-bit = 16。
  • 推論 = 權重 + KV cache + 1 GB 執行環境;KV cache 以每 token 每 B 參數 0.02 MB 粗估。
  • LoRA / QLoRA = 權重 + 1 GB + 訓練暫存;暫存 = 係數 × 參數量(B)× (context ÷ 2048) × batch,係數 LoRA 0.3、QLoRA 0.15(假設有開 gradient checkpointing)。
  • logits(只在訓練、且框架會產生完整 logits 時)= batch × context × 詞表大小 × 4 bytes(bf16 分數 + 其梯度)。mlx-lm 屬於這種;Unsloth 的分塊 loss 可視為接近 0。
  • 係數由作者對照 Unsloth 公布的最低 VRAM 表(3B–32B)擬合,僅為教學用粗估;logits 項用作者的實測校對過。

鍛造爐:LoRA 可訓練參數計算器

輸入 hidden size、層數、rank 與套用模組數,算出要訓練多少參數、佔全模型多少比例。對應關卡:LV.12 LoRA。

LoRA 不改動原模型,只在選定的矩陣旁訓練兩個小矩陣 A(r × 輸入維度)與 B(輸出維度 × r)。 每個被套用的矩陣新增 r × (d_in + d_out) 個參數。

LoRA 可訓練參數
可訓練參數
1.57 M
佔全模型
0.034%
Adapter 檔案(fp16)
3.1 MB

實測對照

作者在 M5 32GB 的實測(mlx-lm 0.32 預設:rank 8、只訓練最後 16 層,Gemma 4 E2B 4-bit):可訓練 6.8M / 4,628M = 0.147%。 上面的快速估算假設每個矩陣都是 hidden × hidden 的方陣,只適合抓數量級。下表是從實際存下的 adapter 檔讀出的真實矩陣尺寸,用 rank 8 逐項相加:

矩陣輸入 → 輸出個數參數
q_proj(局部注意力層)1536 → 204812344,064
q_proj(全域注意力層)1536 → 40964180,224
o_proj(局部注意力層)2048 → 153612344,064
o_proj(全域注意力層)4096 → 15364180,224
gate_proj1536 → 12288161,769,472
up_proj1536 → 12288161,769,472
down_proj12288 → 1536161,769,472
per_layer_input_gate1536 → 25616229,376
per_layer_projection256 → 153616229,376
合計6,815,744

rank 8 時合計 6,815,744,與訓練紀錄完全一致。沒有 k_proj / v_proj,是因為 Gemma 4 E2B 後段的層共用前面層的 KV;MLP 寬度 12,288 也是這些層特有的設計。換別的模型時,維度請看該模型的 config.json。