rx5950xt Digital Twin v2 — Qwen3.5-4B QLoRA
基於 Qwen/Qwen3.5-4B 微調的數位分身模型。 透過 Discord 對話記錄微調,模仿特定使用者的語氣、用詞習慣與對話風格。
模型描述
| 項目 | 內容 |
|---|---|
| 基底模型 | Qwen/Qwen3.5-4B |
| 微調方法 | QLoRA (4-bit NF4 + LoRA rank 8) |
| 訓練框架 | LLaMA Factory |
| 訓練資料 | ~1067 筆 Discord 對話 + alpaca_gpt4_zh 通用中文指令資料 |
| 語言 | 繁體中文(臺灣) |
| 授權 | Apache 2.0 |
訓練細節
防過擬合策略
由於訓練資料量有限(~1067 筆),採用以下策略防止過擬合:
- 資料混合: 將個人對話資料與通用中文指令資料(alpaca_gpt4_zh)以約 1:2 比例混合
- 低學習率: 5e-5(相比一般 LoRA 的 2e-4)
- 單輪訓練: 僅 1 epoch,避免反覆記憶訓練資料
- 較小 LoRA rank: r=8(相比常見的 16-64)
- NEFTune 噪聲: alpha=5.0,增加訓練穩定性
- LoRA Dropout: 0.1
訓練參數
model: Qwen/Qwen3.5-4B (4-bit BNB quantized)
lora_rank: 8
lora_alpha: 16
lora_dropout: 0.1
learning_rate: 5e-5
num_train_epochs: 1
lr_scheduler: cosine
warmup_steps: 20
batch_size: 16 (effective, via gradient accumulation)
optimizer: paged_adamw_8bit
neftune_noise_alpha: 5.0
cutoff_len: 512
bf16: true
訓練結果
| 指標 | 數值 |
|---|---|
| Train Loss | 2.397 |
| Eval Loss | 2.349 |
| 訓練時間 | ~2 小時 10 分鐘 |
| 總步數 | 164 steps |
| GPU | NVIDIA RTX 3070 Ti |
eval_loss < train_loss,表示模型未過擬合。
檔案結構
.
├── README.md # 本檔案
├── train_config.yaml # LLaMA Factory 訓練配置
├── export_config_v2.yaml # 模型匯出配置
├── training_loss.png # 訓練損失曲線
├── adapter/ # LoRA adapter 權重
│ ├── adapter_model.safetensors
│ ├── adapter_config.json
│ ├── tokenizer.json
│ ├── tokenizer_config.json
│ └── chat_template.jinja
└── gguf/ # 量化版本
└── rx5950xt-digital-twin-v2-q8_0.gguf (Q8_0, 4.2 GB)
使用方式
方式一:LM Studio / Ollama(推薦)
直接下載 gguf/rx5950xt-digital-twin-v2-q8_0.gguf,在 LM Studio 或 Ollama 中載入即可。
注意:聊天模板已修改為 nothink 模式(停用 Qwen3.5 的思考功能),回覆會直接輸出。
方式二:Transformers + PEFT(載入 LoRA adapter)
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
base_model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3.5-4B",
torch_dtype="auto",
device_map="auto",
trust_remote_code=True,
)
model = PeftModel.from_pretrained(base_model, "RX5950XTP/rx5950xt-digital-twin-Qwen3.5-4B/adapter")
tokenizer = AutoTokenizer.from_pretrained("RX5950XTP/rx5950xt-digital-twin-Qwen3.5-4B/adapter")
messages = [
{"role": "system", "content": "你是 rx5950xt 的數位分身。"},
{"role": "user", "content": "你好!"},
]
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(text, return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_new_tokens=256)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
限制與注意事項
- 訓練資料僅約 1067 筆 Discord 對話,覆蓋的話題和情境有限
- 混合了通用中文指令資料以保留泛用能力,但可能稍微稀釋個人風格
- 不適用於需要專業知識、事實查證或安全敏感的場景
- 本模型僅供研究與娛樂用途
致謝
- Qwen Team — 基底模型
- LLaMA Factory — 訓練框架
- llama.cpp — GGUF 轉換
- Downloads last month
- 10
Hardware compatibility
Log In to add your hardware
8-bit
