Update README.md
Browse files
README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
| 1 |
---
|
| 2 |
license: apache-2.0
|
| 3 |
datasets:
|
| 4 |
-
-
|
| 5 |
language:
|
| 6 |
- en
|
| 7 |
- zh
|
|
@@ -16,451 +16,508 @@ base_model:
|
|
| 16 |
|
| 17 |
---
|
| 18 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19 |
## 目錄
|
| 20 |
|
| 21 |
-
- [模型
|
| 22 |
-
- [
|
| 23 |
-
- [
|
| 24 |
-
- [資料
|
| 25 |
-
- [訓練
|
| 26 |
-
- [
|
| 27 |
-
- [
|
| 28 |
-
- [
|
| 29 |
-
- [
|
| 30 |
-
- [
|
|
|
|
|
|
|
|
|
|
|
|
|
| 31 |
|
| 32 |
---
|
| 33 |
|
| 34 |
-
## 模型
|
| 35 |
|
| 36 |
-
| 項目 |
|
| 37 |
|------|------|
|
| 38 |
-
|
|
| 39 |
-
|
|
| 40 |
-
|
|
| 41 |
-
|
|
| 42 |
-
|
|
| 43 |
-
|
|
| 44 |
-
|
|
| 45 |
-
|
|
| 46 |
-
|
|
| 47 |
-
| MoE 專家數 | 16(top-2 稀疏激活)|
|
| 48 |
-
| 每個 Expert 中間維度 | 2048 |
|
| 49 |
-
| 位置編碼 | YaRN RoPE(θ=500000, factor=8)|
|
| 50 |
-
| 訓練 context 長度 | 128K tokens |
|
| 51 |
-
| 推理 context 長度 | 最大 **1M tokens**(YaRN 外推)|
|
| 52 |
-
| 注意力策略 | 偶數層:全注意力;奇數層:Sliding Window (4096)|
|
| 53 |
-
| Normalization | RMSNorm(ε=1e-5,float32 計算)|
|
| 54 |
-
| 詞彙量 | 56,000(SentencePiece BPE)|
|
| 55 |
-
| MoE 輔助損失 | Load Balancing Loss + Router Z-Loss |
|
| 56 |
|
| 57 |
---
|
| 58 |
|
| 59 |
-
##
|
| 60 |
|
| 61 |
-
|
| 62 |
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 67 |
```
|
| 68 |
|
| 69 |
-
###
|
| 70 |
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
pip install torch torchvision torchaudio
|
| 74 |
-
pip install transformers datasets sentencepiece tensorboard accelerate safetensors
|
| 75 |
-
```
|
| 76 |
|
| 77 |
-
|
|
|
|
| 78 |
|
| 79 |
-
|
|
|
|
| 80 |
|
| 81 |
-
|
|
|
|
| 82 |
|
| 83 |
-
|
|
|
|
| 84 |
|
| 85 |
-
|
|
|
|
| 86 |
|
| 87 |
-
|
|
|
|
| 88 |
|
| 89 |
-
|
| 90 |
-
python train_llm.py --mode info
|
| 91 |
-
```
|
| 92 |
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
``
|
|
|
|
|
|
|
| 104 |
|
| 105 |
-
|
| 106 |
|
| 107 |
-
|
| 108 |
-
python train_llm.py --mode tokenizer --data_dir ./data
|
| 109 |
-
```
|
| 110 |
|
| 111 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 112 |
|
| 113 |
-
|
|
|
|
|
|
|
| 114 |
|
| 115 |
-
|
| 116 |
-
# 最簡單:使用預設 FineWeb2,所有超參數自動偵測
|
| 117 |
-
python train_llm.py --mode train --model_name kuixing-1.15b
|
| 118 |
-
|
| 119 |
-
# 使用自訂資料集設定
|
| 120 |
-
python train_llm.py --mode train \
|
| 121 |
-
--dataset_config dataset_config.json \
|
| 122 |
-
--mix_strategy weighted \
|
| 123 |
-
--model_name kuixing-1.15b
|
| 124 |
-
```
|
| 125 |
|
| 126 |
-
##
|
| 127 |
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 131 |
|
| 132 |
---
|
| 133 |
|
| 134 |
-
##
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 135 |
|
| 136 |
-
|
| 137 |
|
| 138 |
-
##
|
| 139 |
|
| 140 |
-
|
| 141 |
-
python train_llm.py --mode train --dataset_config dataset_config.json
|
| 142 |
-
```
|
| 143 |
|
| 144 |
-
|
| 145 |
-
|
| 146 |
-
`dataset_config_local.json` 示範本地 JSONL 檔案的用法。
|
| 147 |
-
|
| 148 |
-
**DatasetSource 完整欄位:**
|
| 149 |
-
|
| 150 |
-
| 欄位 | 型別 | 預設 | 說明 |
|
| 151 |
-
|------|------|------|------|
|
| 152 |
-
| `source` | str | `"huggingface"` | `huggingface` / `local_files` / `local_dir` |
|
| 153 |
-
| `path` | str | — | HF dataset id 或本地路徑(多檔用逗號分隔)|
|
| 154 |
-
| `name` | str | `""` | HF subset name,如 `"20231101.zh"` |
|
| 155 |
-
| `split` | str | `"train"` | HF split |
|
| 156 |
-
| `text_field` | str | `"text"` | 要讀取的欄位名稱 |
|
| 157 |
-
| `filter_field` | str | `""` | 過濾欄位(空=不過濾)|
|
| 158 |
-
| `filter_values` | list | `[]` | 允許通過的值清單 |
|
| 159 |
-
| `streaming` | bool | `true` | 串流載入(省記憶體)|
|
| 160 |
-
| `shuffle` | bool | `true` | 是否打亂 |
|
| 161 |
-
| `buffer_size` | int | `10000` | shuffle 緩衝大小 |
|
| 162 |
-
| `min_length` | int | `50` | 最短文字長度(字元)|
|
| 163 |
-
| `max_samples` | int | `0` | 最多取用樣本數(0=不限)|
|
| 164 |
-
| `weight` | float | `1.0` | weighted 混合時的取樣比例 |
|
| 165 |
-
| `file_format` | str | `"txt"` | 本地格式:`txt` / `jsonl` / `csv` |
|
| 166 |
-
| `glob_pattern` | str | `"**/*.txt"` | local_dir 模式的 glob |
|
| 167 |
-
| `csv_delimiter` | str | `","` | CSV 分隔符 |
|
| 168 |
-
| `seed` | int | `42` | 隨機種子 |
|
| 169 |
-
| `label` | str | _(path basename)_ | 日誌顯示標籤 |
|
| 170 |
-
|
| 171 |
-
### 方式 2:CLI 快速指定
|
| 172 |
|
| 173 |
-
|
| 174 |
-
|
| 175 |
-
|
| 176 |
-
|
| 177 |
-
|
| 178 |
-
--text_field "text"
|
| 179 |
-
|
| 180 |
-
# 本地 JSONL 檔案
|
| 181 |
-
python train_llm.py --mode train \
|
| 182 |
-
--dataset_path "/data/corpus.jsonl" \
|
| 183 |
-
--source_type local_files \
|
| 184 |
-
--file_format jsonl \
|
| 185 |
-
--text_field "content"
|
| 186 |
-
|
| 187 |
-
# 本地目錄(掃描所有 .txt)
|
| 188 |
-
python train_llm.py --mode train \
|
| 189 |
-
--dataset_path "/data/articles/" \
|
| 190 |
-
--source_type local_dir \
|
| 191 |
-
--file_format txt
|
| 192 |
-
```
|
| 193 |
|
| 194 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 195 |
|
| 196 |
-
|
| 197 |
-
# 預設語言:簡體中文 + 繁體中文 + 英文
|
| 198 |
-
python train_llm.py --mode train
|
| 199 |
|
| 200 |
-
|
| 201 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 202 |
```
|
| 203 |
|
| 204 |
-
|
|
|
|
|
|
|
| 205 |
|
| 206 |
```bash
|
| 207 |
-
#
|
| 208 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 209 |
|
| 210 |
-
#
|
| 211 |
-
|
| 212 |
-
--dataset_config dataset_config.json \
|
| 213 |
-
--mix_strategy weighted
|
| 214 |
```
|
| 215 |
|
| 216 |
---
|
| 217 |
|
| 218 |
-
## 訓練
|
| 219 |
|
| 220 |
-
###
|
| 221 |
|
| 222 |
```bash
|
| 223 |
-
python
|
| 224 |
-
--model_name kuixing-1.15b \
|
| 225 |
-
--max_steps 1000000 \
|
| 226 |
-
--seq_len 4096 \
|
| 227 |
-
--lr 2e-4
|
| 228 |
```
|
| 229 |
|
| 230 |
-
|
| 231 |
|
| 232 |
-
|
| 233 |
|
| 234 |
```bash
|
| 235 |
-
|
| 236 |
-
|
| 237 |
-
--resume_from_checkpoint ./checkpoints/checkpoint-50000 \
|
| 238 |
-
--max_steps 1000000
|
| 239 |
-
```
|
| 240 |
|
| 241 |
-
|
|
|
|
| 242 |
|
| 243 |
-
|
| 244 |
-
python
|
| 245 |
-
--train_mode continue \
|
| 246 |
-
--resume_from_checkpoint ./checkpoints/release/kuixing-1.15b-20250101_120000/model \
|
| 247 |
-
--dataset_path "wikimedia/wikipedia" \
|
| 248 |
-
--dataset_name "20231101.zh" \
|
| 249 |
-
--lr 1e-4 \
|
| 250 |
-
--max_steps 200000
|
| 251 |
-
```
|
| 252 |
|
| 253 |
-
#
|
|
|
|
| 254 |
|
| 255 |
-
|
|
|
|
| 256 |
|
| 257 |
-
|
| 258 |
-
python
|
| 259 |
-
--output_dir ./checkpoints \
|
| 260 |
-
--tokenizer_model ./data/spm_tokenizer.model \
|
| 261 |
-
--model_name kuixing-1.15b
|
| 262 |
```
|
| 263 |
|
| 264 |
---
|
| 265 |
|
| 266 |
-
## CLI
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 267 |
|
| 268 |
```
|
| 269 |
-
|
| 270 |
-
|
| 271 |
-
|
| 272 |
-
|
| 273 |
-
|
| 274 |
-
|
| 275 |
-
|
| 276 |
-
|
| 277 |
-
|
| 278 |
-
|
| 279 |
-
|
| 280 |
-
|
| 281 |
-
|
| 282 |
-
|
| 283 |
-
|
| 284 |
-
|
| 285 |
-
|
| 286 |
-
--filter_values 過濾值,逗號分隔
|
| 287 |
-
--source_type huggingface | local_files | local_dir
|
| 288 |
-
--file_format txt | jsonl | csv
|
| 289 |
-
--langs FineWeb2 語言清單,逗號分隔(預設行為)
|
| 290 |
-
--mix_strategy sequential(預設)| weighted
|
| 291 |
-
--no_streaming 停用串流,完整下載後載入
|
| 292 |
-
|
| 293 |
-
超參數:
|
| 294 |
-
--batch_size per-device batch size(-1=自動)
|
| 295 |
-
--grad_accum gradient accumulation steps(-1=自動)
|
| 296 |
-
--lr 學習率(預設: 2e-4)
|
| 297 |
-
--max_steps 總訓練步數(串流資料集用;預設 1,000,000)
|
| 298 |
-
與 --num_epochs 同時指定時 epoch 模式優先
|
| 299 |
-
--num_epochs 訓練 epoch 數(有限資料集用;-1=停用,改用 --max_steps)
|
| 300 |
-
適合本地資料集或固定大小的 HuggingFace 資料集
|
| 301 |
-
--seq_len 訓練序列長度(預設: 4096)
|
| 302 |
-
--warmup_steps warmup 步數(預設: 4000)
|
| 303 |
-
|
| 304 |
-
Checkpoint 儲存(--save_steps 與 --save_total_limit 搭配使用):
|
| 305 |
-
--save_steps 每幾步儲存一個 checkpoint(預設: 5000)
|
| 306 |
-
--save_total_limit 最多同時保留幾份 checkpoint(預設: 3)
|
| 307 |
-
0 = 無限制,保留所有 checkpoint
|
| 308 |
-
例: --save_steps 2000 --save_total_limit 10
|
| 309 |
-
|
| 310 |
-
精度:
|
| 311 |
-
--bf16 BF16:-1=自動,0=關,1=開
|
| 312 |
-
--fp16 FP16:-1=自動,0=關,1=開
|
| 313 |
-
|
| 314 |
-
Loss 記錄:
|
| 315 |
-
--loss_log_file Training loss CSV 路徑
|
| 316 |
-
空字串 = 自動使用 {output_dir}/training_loss.csv
|
| 317 |
-
接續訓練時自動 append,不覆蓋已��記錄
|
| 318 |
-
|
| 319 |
-
其他:
|
| 320 |
-
--no_grad_ckpt 停用 gradient checkpointing
|
| 321 |
-
--workers DataLoader workers(-1=自動)
|
| 322 |
```
|
| 323 |
|
| 324 |
---
|
| 325 |
|
| 326 |
-
##
|
| 327 |
|
| 328 |
-
|
| 329 |
-
|
| 330 |
-
訓練過程中自動產生 `{output_dir}/training_loss.csv`(或 `--loss_log_file` 指定路徑):
|
| 331 |
|
| 332 |
```
|
| 333 |
-
|
| 334 |
-
|
| 335 |
-
|
| 336 |
-
.
|
| 337 |
-
|
| 338 |
-
|
| 339 |
```
|
| 340 |
|
| 341 |
-
|
| 342 |
-
- **即時 flush**:每個 log step 寫入後立即 flush,中斷也不丟失記錄
|
| 343 |
-
|
| 344 |
-
### 繪圖工具 `plot_loss.py`
|
| 345 |
|
| 346 |
-
|
| 347 |
-
# 基本使用(讀取預設 CSV,輸出 PNG)
|
| 348 |
-
python plot_loss.py
|
| 349 |
|
| 350 |
-
|
| 351 |
-
|
| 352 |
-
--csv ./checkpoints/training_loss.csv \
|
| 353 |
-
--out ./loss_curve.png
|
| 354 |
|
| 355 |
-
|
| 356 |
-
|
|
|
|
| 357 |
|
| 358 |
-
|
| 359 |
-
python plot_loss.py \
|
| 360 |
-
--csv ./run1/training_loss.csv ./run2/training_loss.csv \
|
| 361 |
-
--labels "Pretrain" "Continue (Wikipedia)" \
|
| 362 |
-
--out compare.png
|
| 363 |
|
| 364 |
-
|
| 365 |
-
|
|
|
|
| 366 |
|
| 367 |
-
|
| 368 |
-
|
| 369 |
```
|
| 370 |
|
| 371 |
-
|
| 372 |
|
| 373 |
-
|
| 374 |
-
|
| 375 |
-
| Loss 曲線 | 原始 loss(半透明)+ 滾動平均平滑,自動標記最低點 |
|
| 376 |
-
| Learning Rate | Cosine decay + warmup 排程曲線 |
|
| 377 |
-
| Gradient Norm | L2 norm 趨勢(反映訓練穩定性)|
|
| 378 |
|
| 379 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 380 |
|
| 381 |
-
|
| 382 |
|
| 383 |
-
|
|
|
|
| 384 |
|
| 385 |
-
|
| 386 |
-
|
| 387 |
-
|
| 388 |
-
|
| 389 |
-
│ ├── pytorch_model.bin # 模型權重(PyTorch bin,相容備用)
|
| 390 |
-
│ ├── config.json # 架構與超參數設定
|
| 391 |
-
│ └── generation_config.json # 預設生成參數
|
| 392 |
-
├── tokenizer/
|
| 393 |
-
│ ├── spm_tokenizer.model # SentencePiece 模型
|
| 394 |
-
│ ├── spm_tokenizer.vocab # 詞彙表(piece + BPE score)
|
| 395 |
-
│ ├── tokenizer_config.json # HuggingFace tokenizer 設定
|
| 396 |
-
│ └── special_tokens_map.json
|
| 397 |
-
├── model_card.md # HuggingFace Hub 模型說明卡
|
| 398 |
-
├── manifest.json # 所有檔案 SHA-256 + 大小清單
|
| 399 |
-
└── release_info.json # 訓練環境、超參數完整快照
|
| 400 |
```
|
| 401 |
|
| 402 |
---
|
| 403 |
|
| 404 |
-
##
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 405 |
|
| 406 |
-
|
| 407 |
-
|
| 408 |
-
| A100 80G | 4 | 8 | 4096 | BF16 |
|
| 409 |
-
| A100 40G | 2 | 16 | 4096 | BF16 |
|
| 410 |
-
| RTX 4090 24G | 1 | 32 | 2048 | BF16 |
|
| 411 |
-
| RTX 3090 24G | 1 | 32 | 2048 | FP16 |
|
| 412 |
-
| M3 Max 128G | 2 | 16 | 4096 | BF16 |
|
| 413 |
-
| M2 Ultra 192G | 2 | 16 | 4096 | BF16 |
|
| 414 |
-
| M2 Max 96G | 1 | 32 | 2048 | BF16 |
|
| 415 |
-
| M1/M2 16-24G | 1 | 32 | 1024 | FP32 |
|
| 416 |
|
| 417 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 418 |
|
| 419 |
---
|
| 420 |
|
| 421 |
-
##
|
|
|
|
|
|
|
| 422 |
|
| 423 |
```
|
| 424 |
-
.
|
| 425 |
-
├──
|
| 426 |
-
|
| 427 |
-
├──
|
| 428 |
-
├──
|
| 429 |
-
|
| 430 |
-
|
| 431 |
-
├──
|
| 432 |
-
├──
|
| 433 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 434 |
```
|
| 435 |
|
| 436 |
---
|
| 437 |
|
| 438 |
-
##
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 439 |
|
| 440 |
-
|
|
|
|
| 441 |
|
| 442 |
-
|
|
|
|
|
|
|
|
|
|
| 443 |
|
| 444 |
-
|
| 445 |
|
| 446 |
-
|
| 447 |
|
| 448 |
-
**
|
|
|
|
|
|
|
|
|
|
| 449 |
|
| 450 |
-
|
|
|
|
|
|
|
|
|
|
| 451 |
|
| 452 |
-
|
| 453 |
|
| 454 |
-
|
| 455 |
|
| 456 |
-
|
| 457 |
|
| 458 |
-
|
|
|
|
|
|
|
| 459 |
|
| 460 |
---
|
| 461 |
|
| 462 |
-
##
|
|
|
|
|
|
|
| 463 |
|
| 464 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 465 |
|
| 466 |
-
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
---
|
| 2 |
license: apache-2.0
|
| 3 |
datasets:
|
| 4 |
+
- jslin09/wikipedia_tw
|
| 5 |
language:
|
| 6 |
- en
|
| 7 |
- zh
|
|
|
|
| 16 |
|
| 17 |
---
|
| 18 |
|
| 19 |
+
# 魁星 (KuiXing) — 繁體中文預訓練語言模型
|
| 20 |
+
|
| 21 |
+
<p align="center">
|
| 22 |
+
<img src="https://img.shields.io/badge/語言-繁體中文-red?style=flat-square" />
|
| 23 |
+
<img src="https://img.shields.io/badge/架構-Decoder--Only Transformer-blue?style=flat-square" />
|
| 24 |
+
<img src="https://img.shields.io/badge/參數量-1.07B-green?style=flat-square" />
|
| 25 |
+
<img src="https://img.shields.io/badge/框架-PyTorch%20%7C%20MLX-orange?style=flat-square" />
|
| 26 |
+
<img src="https://img.shields.io/badge/授權-CC BY--NC 4.0-lightgrey?style=flat-square" />
|
| 27 |
+
</p>
|
| 28 |
+
|
| 29 |
+
**魁星(KuiXing)** 是一個從零開始、以繁體中文語料預訓練的 Decoder-Only 大型語言模型。取名自中國傳統文化中掌管文章與科舉的神祇「魁星」,象徵對中文語言理解能力的追求。本專案包含完整的訓練程式碼,可在 Apple Silicon(MLX)或 NVIDIA GPU(CUDA)上執行,並輸出與 HuggingFace `transformers` 相容的模型格式。
|
| 30 |
+
|
| 31 |
+
---
|
| 32 |
+
|
| 33 |
## 目錄
|
| 34 |
|
| 35 |
+
- [模型概覽](#模型概覽)
|
| 36 |
+
- [模型架構詳情](#模型架構詳情)
|
| 37 |
+
- [參數量統計](#參數量統計)
|
| 38 |
+
- [訓練資料](#訓練資料)
|
| 39 |
+
- [訓練超參數](#訓練超參數)
|
| 40 |
+
- [環境需求](#環境需求)
|
| 41 |
+
- [安裝](#安裝)
|
| 42 |
+
- [訓練程式用法](#訓練程式用法)
|
| 43 |
+
- [CLI 參數說明](#cli-參數說明)
|
| 44 |
+
- [輸出格式與載入方式](#輸出格式與載入方式)
|
| 45 |
+
- [程式限制](#程式限制)
|
| 46 |
+
- [目錄結構](#目錄結構)
|
| 47 |
+
- [授權事項](#授權事項)
|
| 48 |
+
- [引用](#引用)
|
| 49 |
|
| 50 |
---
|
| 51 |
|
| 52 |
+
## 模型概覽
|
| 53 |
|
| 54 |
+
| 項目 | 內容 |
|
| 55 |
|------|------|
|
| 56 |
+
| 模型名稱 | KuiXing(魁星) |
|
| 57 |
+
| 模型類型 | Decoder-Only Transformer(自迴歸語言模型) |
|
| 58 |
+
| 主要語言 | 繁體中文(Traditional Chinese) |
|
| 59 |
+
| 參數量 | **1.07B**(10.7 億) |
|
| 60 |
+
| 詞彙量 | 99,384(SentencePiece BPE) |
|
| 61 |
+
| 最大序列長度 | 2,048 tokens |
|
| 62 |
+
| 訓練框架 | PyTorch(CUDA)/MLX(Apple Silicon) |
|
| 63 |
+
| 輸出格式 | HuggingFace `safetensors` + `config.json` |
|
| 64 |
+
| 授權 | CC BY-NC 4.0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 65 |
|
| 66 |
---
|
| 67 |
|
| 68 |
+
## 模型架構詳情
|
| 69 |
|
| 70 |
+
KuiXing 採用標準 Pre-Norm Decoder-Only Transformer 架構,設計重點在於繁體中文的高效表示與訓練穩定性。
|
| 71 |
|
| 72 |
+
### 整體架構
|
| 73 |
+
|
| 74 |
+
```
|
| 75 |
+
輸入 token IDs
|
| 76 |
+
↓
|
| 77 |
+
Token Embedding(vocab_size × d_model)
|
| 78 |
+
+ Position Embedding(max_seq_len × d_model)
|
| 79 |
+
+ Embedding Dropout
|
| 80 |
+
↓
|
| 81 |
+
× 12 Transformer Blocks(Pre-Norm)
|
| 82 |
+
├── RMSNorm
|
| 83 |
+
├── Multi-Head Self-Attention(Causal Mask)
|
| 84 |
+
│ ├── Q / K / V Projection(無 bias)
|
| 85 |
+
│ ├── Scaled Dot-Product(float32 精度)
|
| 86 |
+
│ ├── Causal Mask(上三角 -1e4,非 -inf)
|
| 87 |
+
│ ├── Softmax → Attention Dropout
|
| 88 |
+
│ └── Output Projection(無 bias)
|
| 89 |
+
├── Residual + Dropout
|
| 90 |
+
├── RMSNorm
|
| 91 |
+
├── Feed-Forward Network(GELU)
|
| 92 |
+
│ ├── Linear: d_model → d_ff(無 bias)
|
| 93 |
+
│ ├── GELU Activation
|
| 94 |
+
│ ├── Dropout
|
| 95 |
+
│ └── Linear: d_ff → d_model(無 bias)
|
| 96 |
+
└── Residual + Dropout
|
| 97 |
+
↓
|
| 98 |
+
Final RMSNorm
|
| 99 |
+
↓
|
| 100 |
+
LM Head(d_model → vocab_size,**與 Token Embedding 共享權重**)
|
| 101 |
+
↓
|
| 102 |
+
Logits(float32)
|
| 103 |
```
|
| 104 |
|
| 105 |
+
### 關鍵設計決策
|
| 106 |
|
| 107 |
+
**Pre-Norm(前置正規化)**
|
| 108 |
+
Norm 層置於 Attention 與 MLP 之前,訓練更穩定,梯度流動更順暢,特別適合深層網路。
|
|
|
|
|
|
|
|
|
|
| 109 |
|
| 110 |
+
**RMSNorm 取代 LayerNorm**
|
| 111 |
+
Root Mean Square Normalization 省去均值計算,計算效率更高,且在語言模型中表現與 LayerNorm 相當。
|
| 112 |
|
| 113 |
+
**Causal Mask 使用 -1e4 而非 -inf**
|
| 114 |
+
避免 bfloat16 下 `-inf` 經過 softmax 產生 `NaN` 的數值不穩定問題。
|
| 115 |
|
| 116 |
+
**Attention Score 以 float32 計算**
|
| 117 |
+
即使在 bfloat16 訓練模式下,Q·Kᵀ 的縮放點積與 softmax 仍升型至 float32 進行,確保精度。
|
| 118 |
|
| 119 |
+
**Weight Tying(權重綁定)**
|
| 120 |
+
LM Head 與 Token Embedding 共享同一組權重矩陣,減少約 2.39 億參數,並有助於語意一致性。
|
| 121 |
|
| 122 |
+
**無 Bias 的線性層**
|
| 123 |
+
所有 Q/K/V/O Projection 及 FFN 的線性層均不使用 bias,符合現代大型語言模型的主流做法。
|
| 124 |
|
| 125 |
+
**Dropout 正則化**
|
| 126 |
+
Embedding dropout、Attention dropout 及殘差連接處均加入 dropout(預設 0.1),有效防止過擬合。
|
| 127 |
|
| 128 |
+
### 架構超參數
|
|
|
|
|
|
|
| 129 |
|
| 130 |
+
| 參數 | 數值 | 說明 |
|
| 131 |
+
|------|------|------|
|
| 132 |
+
| `n_layers` | 12 | Transformer Block 層數 |
|
| 133 |
+
| `d_model` | 2,400 | 隱藏層維度 |
|
| 134 |
+
| `n_heads` | 32 | 注意力頭數 |
|
| 135 |
+
| `d_head` | 75 | 每個注意力頭的維度(d_model / n_heads) |
|
| 136 |
+
| `d_ff` | 9,600 | Feed-Forward 中間層維度(4× d_model) |
|
| 137 |
+
| `max_seq_len` | 2,048 | 最大序列長度 |
|
| 138 |
+
| `vocab_size` | 99,384 | BPE 詞彙量 |
|
| 139 |
+
| `dropout` | 0.1 | Dropout 比率 |
|
| 140 |
+
| `activation` | GELU | FFN 激活函數 |
|
| 141 |
+
| `norm` | RMSNorm | 正規化層類型 |
|
| 142 |
+
| `pos_encoding` | Learned | 可學習的位置嵌入 |
|
| 143 |
|
| 144 |
+
---
|
| 145 |
|
| 146 |
+
## 參數量統計
|
|
|
|
|
|
|
| 147 |
|
| 148 |
+
| 模組 | 參數量 |
|
| 149 |
+
|------|--------|
|
| 150 |
+
| Token Embedding | 238,521,600(238.5M) |
|
| 151 |
+
| Position Embedding | 4,915,200(4.9M) |
|
| 152 |
+
| Attention(×12 層) | 276,480,000(276.5M) |
|
| 153 |
+
| Feed-Forward(×12 層) | 552,960,000(553.0M) |
|
| 154 |
+
| RMSNorm(×25 個) | 62,400 |
|
| 155 |
+
| LM Head | 0(與 Token Embedding 共享) |
|
| 156 |
+
| **合計** | **1,072,936,800(≈ 1.07B)** |
|
| 157 |
|
| 158 |
+
> **儲存大小估算:**
|
| 159 |
+
> - float32(訓練 / safetensors 輸出):≈ **4.3 GB**
|
| 160 |
+
> - bfloat16(推理建議):≈ **2.1 GB**
|
| 161 |
|
| 162 |
+
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 163 |
|
| 164 |
+
## 訓練資料
|
| 165 |
|
| 166 |
+
| 項目 | 內容 |
|
| 167 |
+
|------|------|
|
| 168 |
+
| 主要語料 | [jslin09/wikipedia_tw](https://huggingface.co/datasets/jslin09/wikipedia_tw)(台灣維基百科) |
|
| 169 |
+
| 語言 | 繁體中文 |
|
| 170 |
+
| Tokenizer | SentencePiece BPE,從語料訓練,詞彙量 99,384 |
|
| 171 |
+
| 資料處理 | 全文 tokenize → 串接為長序列 → 切成固定長度 chunk(2,049 tokens/chunk)→ 打散 |
|
| 172 |
+
| BOS / EOS | 每篇文章前後分別加入 `<s>` / `</s>` token |
|
| 173 |
+
|
| 174 |
+
訓練支援多資料集接續(Continual Training),可在訓練完成後以不同語料繼續微調,無需重新初始化模型。
|
| 175 |
|
| 176 |
---
|
| 177 |
|
| 178 |
+
## 訓練超參數
|
| 179 |
+
|
| 180 |
+
| 超參數 | 數值 | 說明 |
|
| 181 |
+
|--------|------|------|
|
| 182 |
+
| `batch_size` | 4 | 每步實際 mini-batch 大小 |
|
| 183 |
+
| `accum_steps` | 32 | 梯度累積步數 |
|
| 184 |
+
| 有效 Batch Size | 128 | `batch_size × accum_steps` |
|
| 185 |
+
| `learning_rate` | 3×10⁻⁴ | AdamW 峰值學習率 |
|
| 186 |
+
| LR Schedule | Linear Warmup + Cosine Decay | |
|
| 187 |
+
| `warmup_steps` | 250 | 線性暖身步數 |
|
| 188 |
+
| `weight_decay` | 0.1 | AdamW L2 正則化係數 |
|
| 189 |
+
| `betas` | (0.9, 0.95) | AdamW 動量係數 |
|
| 190 |
+
| `eps` | 1×10⁻⁶ | AdamW 數值穩定項 |
|
| 191 |
+
| `grad_clip` | 1.0 | 全局梯度裁剪閾值(L2 norm) |
|
| 192 |
+
| `epochs` | 3 | 訓練回合數 |
|
| 193 |
+
| `steps` | 30,000 | 每 epoch 最大步數 |
|
| 194 |
+
| 混合精度 | bfloat16(CUDA)/float32(MPS)/bfloat16(MLX) | |
|
| 195 |
+
|
| 196 |
+
**Weight Decay 策略:** 僅對 `dim ≥ 2` 的權重矩陣施加 weight decay;bias、RMSNorm 參數不衰減。
|
| 197 |
|
| 198 |
+
---
|
| 199 |
|
| 200 |
+
## 環境需求
|
| 201 |
|
| 202 |
+
### 必要條件
|
|
|
|
|
|
|
| 203 |
|
| 204 |
+
本程式**不支援純 CPU 執行**,需要以下其中一種硬體加速環境。以下規格為**最低需求**,不符合者將無法完成訓練:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 205 |
|
| 206 |
+
| 環境 | 最低需求 | 建議機型範例 |
|
| 207 |
+
|------|----------|-------------|
|
| 208 |
+
| Apple Silicon Mac | 統一記憶體(RAM)**≥ 128 GB**,需安裝 MLX | Mac Studio / Mac Pro(M2 Ultra 192GB、M3 Ultra 192GB) |
|
| 209 |
+
| NVIDIA GPU | 單卡顯存 **≥ 92 GB**,CUDA 11.8 或以上 | H100 NVL(94 GB)、H200(141 GB) |
|
| 210 |
+
| 主機記憶體(RAM) | **≥ 64 GB**(兩種環境皆適用) | — |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 211 |
|
| 212 |
+
> ⚠️ **重要:** 訓練環境低於以上任一最低需求,程式將因記憶體不足而無法執行完整訓練。
|
| 213 |
+
>
|
| 214 |
+
> **需求說明:**
|
| 215 |
+
> - float32 模型權重 ≈ 4.3 GB;加上梯度與 AdamW 狀態(各一份,共 3× 權重大小),訓練峰值顯存約 **90 GB 以上**。
|
| 216 |
+
> - Apple Silicon 的統一記憶體由 CPU 與 GPU 共用,128 GB 為能在 MLX bfloat16 模式下穩定訓練的最低配置。
|
| 217 |
+
> - 主機記憶體(系統 RAM)需 ≥ 64 GB,以容納分詞器訓練資料、資料集 tokenize、chunk 建構及 PyTorch 的系統側暫存空間。
|
| 218 |
|
| 219 |
+
### Python 套件
|
|
|
|
|
|
|
| 220 |
|
| 221 |
+
```
|
| 222 |
+
torch >= 2.2.0
|
| 223 |
+
mlx >= 0.12.0 # 僅 Apple Silicon 需要
|
| 224 |
+
sentencepiece >= 0.1.99
|
| 225 |
+
datasets >= 2.14.0
|
| 226 |
+
transformers >= 4.38.0
|
| 227 |
+
safetensors >= 0.4.0
|
| 228 |
+
numpy >= 1.24.0
|
| 229 |
+
matplotlib >= 3.7.0
|
| 230 |
+
tqdm >= 4.65.0
|
| 231 |
```
|
| 232 |
|
| 233 |
+
---
|
| 234 |
+
|
| 235 |
+
## 安裝
|
| 236 |
|
| 237 |
```bash
|
| 238 |
+
# 1. 複製專案
|
| 239 |
+
git clone https://github.com/your-username/kuixing.git
|
| 240 |
+
cd kuixing
|
| 241 |
+
|
| 242 |
+
# 2. 建立虛擬環境(建議)
|
| 243 |
+
python -m venv venv
|
| 244 |
+
source venv/bin/activate # Windows: venv\Scripts\activate
|
| 245 |
+
|
| 246 |
+
# 3. 安裝 PyTorch(依據您的硬體選擇)
|
| 247 |
+
# CUDA 12.1:
|
| 248 |
+
pip install torch --index-url https://download.pytorch.org/whl/cu121
|
| 249 |
+
# Apple Silicon(CPU/MPS fallback):
|
| 250 |
+
pip install torch
|
| 251 |
+
|
| 252 |
+
# 4. 安裝 MLX(Apple Silicon 專用,建議安裝以獲得最佳性能)
|
| 253 |
+
pip install mlx
|
| 254 |
|
| 255 |
+
# 5. 安裝其餘相依套件
|
| 256 |
+
pip install sentencepiece datasets transformers safetensors numpy matplotlib tqdm
|
|
|
|
|
|
|
| 257 |
```
|
| 258 |
|
| 259 |
---
|
| 260 |
|
| 261 |
+
## 訓練程式用法
|
| 262 |
|
| 263 |
+
### 互動模式(無參數,推薦初次使用)
|
| 264 |
|
| 265 |
```bash
|
| 266 |
+
python KuiXing_Trainer_MLT.py
|
|
|
|
|
|
|
|
|
|
|
|
|
| 267 |
```
|
| 268 |
|
| 269 |
+
程式會自動偵測硬體環境,若有既有模型則詢問是否接續訓練及使用哪個資料集;若無既有模型則從頭開始訓練。
|
| 270 |
|
| 271 |
+
### 常用指令
|
| 272 |
|
| 273 |
```bash
|
| 274 |
+
# 從頭訓練(強制忽略已存在的模型)
|
| 275 |
+
python KuiXing_Trainer_MLT.py --from-scratch
|
|
|
|
|
|
|
|
|
|
| 276 |
|
| 277 |
+
# 直接接續訓練(不互動詢問,使用 config 預設資料集)
|
| 278 |
+
python KuiXing_Trainer_MLT.py --resume
|
| 279 |
|
| 280 |
+
# 接續訓練並切換到新資料集
|
| 281 |
+
python KuiXing_Trainer_MLT.py --resume --dataset jslin09/other_dataset --column text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 282 |
|
| 283 |
+
# 以新資料集從頭訓練
|
| 284 |
+
python KuiXing_Trainer_MLT.py --from-scratch --dataset your_org/dataset_name --column article
|
| 285 |
|
| 286 |
+
# 獨立繪圖模式(讀取訓練記錄後生成曲線圖,不啟動訓練)
|
| 287 |
+
python KuiXing_Trainer_MLT.py --plot
|
| 288 |
|
| 289 |
+
# 訓練摘要模式(顯示 loss / perplexity 統計後結束,不啟動訓練)
|
| 290 |
+
python KuiXing_Trainer_MLT.py --summary
|
|
|
|
|
|
|
|
|
|
| 291 |
```
|
| 292 |
|
| 293 |
---
|
| 294 |
|
| 295 |
+
## CLI 參數說明
|
| 296 |
+
|
| 297 |
+
| 參數 | 類型 | 說明 |
|
| 298 |
+
|------|------|------|
|
| 299 |
+
| `--from-scratch` | flag | 強制從頭訓練,忽略已存在的 checkpoint 與模型 |
|
| 300 |
+
| `--resume` | flag | 直接接續上次訓練,跳過互動詢問 |
|
| 301 |
+
| `--dataset NAME` | string | 指定 HuggingFace 資料集名稱(如 `jslin09/wikipedia_tw`) |
|
| 302 |
+
| `--column COL` | string | 指定資料集中的文章欄位名稱(如 `article`、`text`) |
|
| 303 |
+
| `--plot` | flag | 讀取 JSONL 訓練記錄,生成四格訓練曲線圖後結束 |
|
| 304 |
+
| `--summary` | flag | 讀取 JSONL 訓練記錄,顯示訓練摘要統計後結束 |
|
| 305 |
+
|
| 306 |
+
> **注意:** `--from-scratch` 與 `--resume` 互斥,不可同時使用。
|
| 307 |
+
> `--plot` 與 `--summary` 為獨立模式,不觸發硬體偵測或訓練流程。
|
| 308 |
+
|
| 309 |
+
### 訓練摘要輸出範例(`--summary`)
|
| 310 |
|
| 311 |
```
|
| 312 |
+
============================================================
|
| 313 |
+
🏁 KuiXing 訓練完成摘要
|
| 314 |
+
============================================================
|
| 315 |
+
總記錄步數 : 2,811 步(optimizer update)
|
| 316 |
+
訓練 Epoch : 3
|
| 317 |
+
學習率範圍 : 0.00e+00 → 3.00e-04
|
| 318 |
+
梯度被裁剪次數 : 51 次(佔 1.8%)
|
| 319 |
+
============================================================
|
| 320 |
+
最終 Loss : 2.741243
|
| 321 |
+
最終 Perplexity : 15.5062
|
| 322 |
+
============================================================
|
| 323 |
+
最佳 Loss : 2.639037 (第 81,311 步)
|
| 324 |
+
最佳 Perplexity : 13.9997
|
| 325 |
+
============================================================
|
| 326 |
+
末 100 步平均 Loss : 2.784486
|
| 327 |
+
末 100 步平均 PPL : 16.1915
|
| 328 |
+
============================================================
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 329 |
```
|
| 330 |
|
| 331 |
---
|
| 332 |
|
| 333 |
+
## 輸出格式與載入方式
|
| 334 |
|
| 335 |
+
訓練完成後,程式自動將模型輸出至 `./kuixing_model/`,包含以下檔案:
|
|
|
|
|
|
|
| 336 |
|
| 337 |
```
|
| 338 |
+
kuixing_model/
|
| 339 |
+
├── model.safetensors # float32 模型權重(HuggingFace 格式)
|
| 340 |
+
├── config.json # 模型架構設定
|
| 341 |
+
├── modeling_kuixing.py # 自訂架構定義(含 AutoModel 支援)
|
| 342 |
+
├── tokenizer_config.json # Tokenizer 設定
|
| 343 |
+
└── tokenizer.model # SentencePiece BPE tokenizer
|
| 344 |
```
|
| 345 |
|
| 346 |
+
### 載入方式
|
|
|
|
|
|
|
|
|
|
| 347 |
|
| 348 |
+
**方式一:直接使用自訂類別(推薦)**
|
|
|
|
|
|
|
| 349 |
|
| 350 |
+
```python
|
| 351 |
+
from modeling_kuixing import KuiXingForCausalLM
|
|
|
|
|
|
|
| 352 |
|
| 353 |
+
model = KuiXingForCausalLM.from_pretrained("./kuixing_model")
|
| 354 |
+
model = model.eval()
|
| 355 |
+
```
|
| 356 |
|
| 357 |
+
**方式二:bfloat16 推理(節省記憶體)**
|
|
|
|
|
|
|
|
|
|
|
|
|
| 358 |
|
| 359 |
+
```python
|
| 360 |
+
import torch
|
| 361 |
+
from modeling_kuixing import KuiXingForCausalLM
|
| 362 |
|
| 363 |
+
model = KuiXingForCausalLM.from_pretrained("./kuixing_model")
|
| 364 |
+
model = model.to(torch.bfloat16).eval()
|
| 365 |
```
|
| 366 |
|
| 367 |
+
**方式三:透過 HuggingFace AutoModel**
|
| 368 |
|
| 369 |
+
```python
|
| 370 |
+
from transformers import AutoModelForCausalLM
|
|
|
|
|
|
|
|
|
|
| 371 |
|
| 372 |
+
model = AutoModelForCausalLM.from_pretrained(
|
| 373 |
+
"./kuixing_model",
|
| 374 |
+
trust_remote_code=True,
|
| 375 |
+
)
|
| 376 |
+
```
|
| 377 |
|
| 378 |
+
**方式四:從 HuggingFace Hub 載入**
|
| 379 |
|
| 380 |
+
```python
|
| 381 |
+
from transformers import AutoModelForCausalLM
|
| 382 |
|
| 383 |
+
model = AutoModelForCausalLM.from_pretrained(
|
| 384 |
+
"jslin09/kuixing",
|
| 385 |
+
trust_remote_code=True,
|
| 386 |
+
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 387 |
```
|
| 388 |
|
| 389 |
---
|
| 390 |
|
| 391 |
+
## 程式限制
|
| 392 |
+
|
| 393 |
+
使用本訓練程式前,請了解以下限制:
|
| 394 |
+
|
| 395 |
+
**硬體限制**
|
| 396 |
+
- 不支援純 CPU 執行。程式於啟動時偵測硬體,若未找到 MPS 或 CUDA 裝置,將直接終止並提示錯誤。純 CPU 模式因速度過慢(預估為 GPU 的 50–200 倍)而刻意排除。
|
| 397 |
+
|
| 398 |
+
**記憶體需求為硬性限制**
|
| 399 |
+
- 訓練峰值顯存(含模型權重、梯度、AdamW 狀態)約需 **90 GB 以上**。NVIDIA GPU 需單卡顯存 ≥ 92 GB(如 H100 NVL 94 GB),Apple Silicon 需統一記憶體 ≥ 128 GB,主機 RAM 需 ≥ 64 GB。低於上述任一門檻者將因記憶體不足而無法完成訓練,此為硬性限制,無法透過縮減 `batch_size` 解決(梯度累積步數已補償批次大小,顯存瓶頸在於模型本身與優化器狀態)。
|
| 400 |
|
| 401 |
+
**MPS 平台限制**
|
| 402 |
+
- Apple Silicon 使用 MPS 後端(無 MLX)時,MPS 尚不支援 `torch.autocast`,因此以 float32 全精度訓練,速度與記憶體效率低於 MLX 路徑。建議安裝 MLX 以獲得最佳性能。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 403 |
|
| 404 |
+
**多 GPU 不支援**
|
| 405 |
+
- 本程式目前僅支援單一 GPU 訓練,未實作 DDP(DistributedDataParallel)或 FSDP,無法直接用於多卡並行訓練。
|
| 406 |
+
|
| 407 |
+
**Checkpoint 跨平台相容性**
|
| 408 |
+
- PyTorch(CUDA/MPS)與 MLX(Apple Silicon)的 checkpoint 格式不同,無法直接互換。MLX checkpoint 以 `.npz` 儲存,PyTorch checkpoint 以 `.pt` 儲存。
|
| 409 |
+
|
| 410 |
+
**Tokenizer 字型依賴**
|
| 411 |
+
- 訓練曲線繪圖功能依賴本地安裝的繁體中文字型(Noto Sans CJK TC),字型路徑硬編碼於程式中。若路徑不符,繪圖將失敗或顯示亂碼。**此設定不應修改**(程式設計刻意保留)。
|
| 412 |
+
|
| 413 |
+
**資料集格式**
|
| 414 |
+
- 目前僅支援 HuggingFace `datasets` 格式的文字資料集,需指定文字欄位名稱。不支援本地 jsonl、txt、csv 直接輸入(需先上傳至 HuggingFace 或自行修改 `build_chunks()` 函式)。
|
| 415 |
+
|
| 416 |
+
**推理功能**
|
| 417 |
+
- 本程式為**預訓練專用訓練器**,不包含文字生成(inference)功能。推理請使用輸出的 HuggingFace 格式模型搭配 `transformers` 的 `generate()` 方法。
|
| 418 |
|
| 419 |
---
|
| 420 |
|
| 421 |
+
## 目錄結構
|
| 422 |
+
|
| 423 |
+
執行訓練後,工作目錄將產生以下結構:
|
| 424 |
|
| 425 |
```
|
| 426 |
+
./
|
| 427 |
+
├── KuiXing_Trainer_MLT.py # 主訓練程式
|
| 428 |
+
│
|
| 429 |
+
├── kuixing_tokenizer/ # Tokenizer 檔案(自動生成)
|
| 430 |
+
│ ├── tokenizer.model
|
| 431 |
+
│ └── tokenizer.vocab
|
| 432 |
+
│
|
| 433 |
+
├── kuixing_checkpoints/ # 訓練 Checkpoint(自動生成)
|
| 434 |
+
│ ├── ckpt_ep0_step500.pt
|
| 435 |
+
│ ├── ckpt_ep0_step1000.pt
|
| 436 |
+
│ └── ...(保留最新 3 個)
|
| 437 |
+
│
|
| 438 |
+
├── kuixing_logs/ # 訓練記錄(自動生成)
|
| 439 |
+
│ ├── training_log.jsonl # 每步指標(loss, lr, grad_norm, ...)
|
| 440 |
+
│ └── training_curves.png # 訓練曲線圖(每 200 步更新)
|
| 441 |
+
│
|
| 442 |
+
└── kuixing_model/ # 最終輸出(訓練完成後生成)
|
| 443 |
+
├── model.safetensors
|
| 444 |
+
├── config.json
|
| 445 |
+
├── modeling_kuixing.py
|
| 446 |
+
├── tokenizer_config.json
|
| 447 |
+
└── tokenizer.model
|
| 448 |
```
|
| 449 |
|
| 450 |
---
|
| 451 |
|
| 452 |
+
## 授權事項
|
| 453 |
+
|
| 454 |
+
### 程式碼授權
|
| 455 |
+
|
| 456 |
+
本專案訓練程式碼(`KuiXing_Trainer_MLT.py` 及相關檔案)以 **MIT License** 授權,允許自由使用、修改與散布,包含商業用途,惟需保留原始版權聲明。
|
| 457 |
+
|
| 458 |
+
```
|
| 459 |
+
MIT License
|
| 460 |
+
|
| 461 |
+
Copyright (c) 2025 Chun-Hsien Lin
|
| 462 |
+
|
| 463 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
| 464 |
+
of this software and associated documentation files (the "Software"), to deal
|
| 465 |
+
in the Software without restriction, including without limitation the rights
|
| 466 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
| 467 |
+
copies of the Software, and to permit persons to whom the Software is
|
| 468 |
+
furnished to do so, subject to the following conditions:
|
| 469 |
|
| 470 |
+
The above copyright notice and this permission notice shall be included in all
|
| 471 |
+
copies or substantial portions of the Software.
|
| 472 |
|
| 473 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 474 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
| 475 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
| 476 |
+
```
|
| 477 |
|
| 478 |
+
### 模型權重授權
|
| 479 |
|
| 480 |
+
訓練完成的模型權重(`model.safetensors`)以 **Creative Commons Attribution-NonCommercial 4.0 International(CC BY-NC 4.0)** 授權發布。
|
| 481 |
|
| 482 |
+
**您可以:**
|
| 483 |
+
- ✅ 分享:以任何媒介或格式複製、散布本模型
|
| 484 |
+
- ✅ 改作:修改、轉換本模型,以其為基礎進行創作(如微調)
|
| 485 |
+
- ✅ 學術研究與個人使用
|
| 486 |
|
| 487 |
+
**但需遵守以下條件:**
|
| 488 |
+
- 📌 **姓名標示(Attribution):** 使用本模型時,需標示原始作者(jslin09 / KuiXing)及授權連結
|
| 489 |
+
- 🚫 **非商業性(NonCommercial):** 不得將本模型或其衍生物用於商業目的
|
| 490 |
+
- 📌 **相同方式分享(ShareAlike):** 若散布衍生模型,需採用相同的 CC BY-NC 4.0 或相容授權
|
| 491 |
|
| 492 |
+
完整授權條款請見:https://creativecommons.org/licenses/by-nc/4.0/
|
| 493 |
|
| 494 |
+
### 訓練資料聲明
|
| 495 |
|
| 496 |
+
本模型以台灣維基百科(`jslin09/wikipedia_tw`)為主要訓練語料,該語料源自維基媒體基金會,依據 [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/) 授權。使用者在引用本模型產出內容時,亦應留意上游授權要求。
|
| 497 |
|
| 498 |
+
### 免責聲明
|
| 499 |
+
|
| 500 |
+
本模型為研究性質的預訓練語言模型,**不保證輸出內容的正確性、完整性或安全性**。使用者需自行評估並承擔模型輸出的風險。作者不對因使用本模型造成的任何直接或間接損失負責。
|
| 501 |
|
| 502 |
---
|
| 503 |
|
| 504 |
+
## 引用
|
| 505 |
+
|
| 506 |
+
若您在研究或作品中使用了 KuiXing,請引用本專案:
|
| 507 |
|
| 508 |
+
```bibtex
|
| 509 |
+
@misc{kuixing2026,
|
| 510 |
+
author = {Chun-Hsien Lin},
|
| 511 |
+
title = {KuiXing: A Traditional Chinese Pre-trained Language Model},
|
| 512 |
+
year = {2026},
|
| 513 |
+
publisher = {HuggingFace},
|
| 514 |
+
howpublished = {\url{https://huggingface.co/jslin09/kuixing}},
|
| 515 |
+
}
|
| 516 |
+
```
|
| 517 |
+
|
| 518 |
+
---
|
| 519 |
|
| 520 |
+
<p align="center">
|
| 521 |
+
以繁體中文為本,從零開始。<br>
|
| 522 |
+
<em>Built from scratch, for Traditional Chinese.</em>
|
| 523 |
+
</p>
|