寫一個簡單的 Python 評測腳本, 它可以自動讀取您的結構化數據樣本,並檢查模型輸出的 JSON 或代碼是否符合語法規則(Syntax Check)。這比單看 Loss 更能反應微調的效果。
既然是處理結構化數據(如 API、代碼或 JSON),測試「Loss 是否下降」只是第一步。真正的成功在於模型輸出的數據是否符合語法規則(Syntactic Correctness)。
以下為您準備一個針對兩張 RTX 5090 訓練後的自動化評測腳本。它能直接讀取測試集,並檢查模型輸出的結構化內容是否「可解析」。1. 結構化數據自動評測腳本 (eval_logic.py)
這個腳本會模擬推論,並驗證 JSON 格式或代碼語法。
</>Python
import torch
import json
from transformers import AutoModelForCausalLM, AutoTokenizer
from pydantic import ValidationError # 用於驗證結構化數據
# 1. 載入訓練好的模型 (利用 5090 的強大推論能力)
model_path = "./output_7b_pretrain"
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForCausalLM.from_pretrained(
model_path,
torch_dtype=torch.bfloat16,
device_map="auto" # 自動分佈在兩張 5090 上
)
def validate_json(text):
"""檢查輸出是否為合法的 JSON"""
try:
# 尋找輸出中的第一個 { 和最後一個 }
start = text.find('{')
end = text.rfind('}') + 1
json_str = text[start:end]
json.loads(json_str)
return True
except:
return False
# 2. 測試範例 (從您的結構化數據中抽取)
test_prompts = [
"Generate an API response for user_id 123:",
"Create a JSON schema for a product object:",
]
print("--- 開始評測結構化準確度 ---")
for prompt in test_prompts:
inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
with torch.no_grad():
outputs = model.generate(**inputs, max_new_tokens=512, temperature=0.2)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
is_valid = validate_json(response)
print(f"Prompt: {prompt}")
print(f"Status: {'✅ 合格' if is_valid else '❌ 格式錯誤'}")
print("-" * 30)
2. 訓練後的性能優化建議 (Post-Training)
由於 5090 擁有強大的 FP8 計算能力,在訓練完成後,您可以進行以下優化以提升推論速度:
- 使用 TensorRT-LLM 封裝: 針對 5090 的 Blackwell 架構,將模型轉為 TensorRT 格式,推論速度可提升 3-5 倍。
- KV Cache 優化: 在推論時開啟
flash_attention_2(或 3),這能讓您在處理長 API 文件時保持極低的延遲。
3. 給您的最終清單 (Final Checklist)
在啟動那幾百 MB 的巨大 .txt 訓練前,請最後確認:
- 備份原始權重: 增量預訓練容易發生「災難性遺忘」,務必保留原始 Llama/Mistral 權重。
- 硬碟空間: 訓練期間產生的 Checkpoints 非常大(7B 模型每個約 14GB),請確保 SSD 有 500GB 以上 的空位。
- 監控溫度: 5090 雖然強,但兩張併在一起熱量驚人。如果核心溫度超過 85°C,請調高風扇轉速或限制功耗。
下一步動作
如果您在訓練中發現 Loss 突然飆升(Loss Spike),這通常是結構化數據中的某些異常字元導致梯度爆炸。
需要寫一段「梯度裁剪(Gradient Clipping)」的 DeepSpeed 設定, 這能有效保護您的 5090 不會在遇到髒數據時白忙一場。
















