Spaces:
Paused
Paused
File size: 7,785 Bytes
8d90bfe | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 | ---
title: Llama NBCD Second Fine-tuning Platform
emoji: 🦙
colorFrom: blue
colorTo: purple
sdk: gradio
sdk_version: "4.44.0"
app_file: app.py
pinned: false
license: mit
---
# 🦙 Llama NBCD 二次微調完整平台
互動式 Llama 模型二次微調和預測平台,支持多種參數高效微調方法 (LoRA, AdaLoRA, Adapter, BitFit, Prompt Tuning)。
## 🌟 功能特色
- 🎯 **第一次微調**: 從純 Llama 開始訓練,支持 5 種 PEFT 方法
- 🔄 **二次微調**: 基於第一次模型用新數據繼續訓練
- 📊 **Baseline 比較**: 自動比較未微調 vs 微調模型的效果
- 🧪 **新數據測試**: 同時比較 3 個模型在新數據上的表現
- 🎨 **指標選擇**: 可選擇最佳化指標(F1、Accuracy、Precision、Recall、Sensitivity、Specificity)
- 🔮 **即時預測**: 訓練後可直接預測新樣本
- 💾 **模型管理**: 自動儲存和管理多個訓練模型
- 🧹 **記憶體管理**: 自動清理 GPU 記憶體,避免 OOM
## 📋 使用方式
### 📑 頁面結構 (5個Tab)
#### 1️⃣ 第一次微調
1. **上傳資料**: CSV 檔案需包含 `Text` 和 `label` 欄位
2. **選擇模型**: 設定 Llama 模型(預設: meta-llama/Llama-3.2-1B)
3. **選擇微調方法**:
- ✅ **LoRA**: 通用,效果好
- ✅ **AdaLoRA**: 自適應,效果更優
- ✅ **Adapter**: 適合多任務
- ✅ **BitFit**: 極快速,參數最少
- ✅ **Prompt Tuning**: 適合小數據集
- ❌ **Prefix Tuning**: 暫不支持(兼容性問題)
4. **設定參數**: 調整資料平衡、訓練參數和 PEFT 參數
5. **開始訓練**: 點擊「開始第一次微調」按鈕
6. **查看結果**: 比較未微調和微調模型的表現
#### 2️⃣ 二次微調
1. **選擇基礎模型**: 從下拉選單選擇已訓練的第一次微調模型
2. **上傳新資料**: 上傳新的訓練數據 CSV
3. **調整參數**:
- ⚠️ 微調方法自動繼承第一次
- 建議 Epochs 更少 (3-5 輪)
- 建議 Learning Rate 更小 (5e-5)
4. **開始訓練**: 點擊「開始二次微調」按鈕
5. **查看結果**: 查看二次微調後的表現
#### 3️⃣ 新數據測試
1. **上傳測試數據**: 上傳測試用的 CSV 檔案
2. **選擇要比較的模型**:
- 純 Llama (Baseline) - 可選
- 第一次微調模型 - 可選
- 第二次微調模型 - 可選
3. **開始測試**: 點擊「開始測試」按鈕
4. **查看結果**: 並排比較所有選擇的模型在新數據上的表現
#### 4️⃣ 模型預測
1. **選擇模型**: 從下拉選單選擇已訓練的模型
2. **輸入文本**: 輸入要預測的文本
3. **查看結果**: 同時顯示未微調和微調模型的預測結果
#### 5️⃣ 使用說明
- 完整的操作流程說明
- 微調方法詳細比較
- 參數調整建議
- 注意事項和常見問題
## 🔐 重要設定
### Hugging Face Token
如果要使用 Llama 模型,需要:
1. 在 [Hugging Face Settings](https://huggingface.co/settings/tokens) 創建 Token
2. 在 Space 的 Settings → Repository secrets 中加入:
- Name: `HF_TOKEN`
- Value: 你的 token
或在本地設定環境變數:
```bash
export HF_TOKEN=your_token_here
```
## ⚙️ 預設參數
### 第一次微調
- **訓練輪數**: 3
- **批次大小**: 4
- **學習率**: 1e-4
- **LoRA rank**: 16
- **LoRA alpha**: 32
- **目標樣本數**: 700 筆/類別
- **類別權重**: 啟用
### 二次微調(建議)
- **訓練輪數**: 3-5(比第一次少)
- **批次大小**: 4
- **學習率**: 5e-5(比第一次小)
- **其他參數**: 自動繼承第一次
## 📊 資料格式
CSV 檔案需包含以下欄位:
```csv
Text,label
"Patient data text here...",0
"Another patient data...",1
```
或
```csv
text,Label
"Patient data text here...",0
"Another patient data...",1
```
- `Text`/`text`: 文本資料
- `Label`/`label`: 標籤 (0 或 1)
## 🎯 微調方法比較
| 方法 | 參數量 | 記憶體 | 訓練速度 | 效果 | 適用場景 |
|------|--------|--------|----------|------|----------|
| **LoRA** | 很少 (~1%) | 低 | 快 | 良好 | 通用,效果好 |
| **AdaLoRA** | 很少 (~1%) | 低 | 快 | 優秀 | 自適應,效果更優 |
| **Adapter** | 少 (~2-5%) | 低 | 中 | 良好 | 多任務學習 |
| **BitFit** | 極少 (~0.1%) | 極低 | 極快 | 可接受 | 快速微調 |
| **Prompt Tuning** | 極少 (可調) | 極低 | 快 | 良好 | 小數據集 |
## 💡 二次微調建議
### 適用場景
1. **領域適應**: 第一次用通用醫療數據,第二次用特定醫院數據
2. **增量學習**: 隨時間增加新病例數據
3. **數據稀缺**: 先用大量相關數據預訓練,再用少量目標數據微調
### 參數調整原則
- **Epochs**: 第二次建議 3-5 輪(第一次通常 5-8 輪)
- **Learning Rate**: 第二次建議 5e-5(第一次通常 1e-4)
- **避免**: 第二次不要用太大的學習率,會破壞已學習的知識
## 📈 評估指標說明
- **F1 Score**: 精確率和召回率的調和平均,平衡指標
- **Accuracy**: 整體準確率
- **Precision**: 預測為正類中的準確率
- **Recall**: 實際正類中被正確識別的比例
- **Sensitivity**: 敏感度,等同於 Recall
- **Specificity**: 特異性,正確識別負類的能力
## ⚠️ 注意事項
- 訓練時間依資料量和硬體而定(通常 10-30 分鐘)
- 需要 Hugging Face Token 才能下載 Llama 模型
- **GPU 訓練強烈建議**: CPU 訓練會非常慢
- 資料量建議: 每個類別至少 500 筆資料
- 二次微調自動繼承第一次的微調方法,無法更改
- Prefix Tuning 因 PEFT 庫兼容性問題暫不支持,請使用 Prompt Tuning 替代
## 🔧 已知問題與解決方案
### ✅ 已修復
- **AdaLoRA**: 簡化配置參數,避免版本兼容性問題
- **BitFit**: 正確處理 gradient 設置,包含分類頭訓練
- **參數顯示**: 各方法現在會正確顯示專屬參數界面
### ❌ 暫不支持
- **Prefix Tuning**: 因 PEFT 版本與 transformers 的 DynamicCache 不兼容
- **錯誤**: `'DynamicCache' object has no attribute 'key_cache'`
- **替代方案**: 使用 Prompt Tuning,功能類似且更穩定
- **預計修復**: 等待 PEFT 庫更新
## 🚀 快速開始
```bash
# 1. 安裝依賴
pip install -r requirements.txt
# 2. 設定 HF Token (可選,但建議設定)
export HF_TOKEN=your_token_here
# 3. 啟動應用
python app.py
# 4. 打開瀏覽器訪問
# http://localhost:7860
```
## 📁 專案結構
```
.
├── app.py # 主程式
├── requirements.txt # 依賴套件
├── README.md # 說明文件
├── saved_llama_models_list.json # 模型列表(自動生成)
└── llama_nbcd_*/ # 訓練模型目錄(自動生成)
```
## 💻 系統需求
### 最低需求
- **CPU**: 4 核心以上
- **RAM**: 16GB 以上
- **硬碟**: 20GB 可用空間
### 建議配置
- **GPU**: NVIDIA GPU with 16GB+ VRAM (如 V100, A100, RTX 3090/4090)
- **RAM**: 32GB 以上
- **硬碟**: 50GB 可用空間(用於儲存多個模型)
### 無 GPU 訓練
- 可以使用 CPU 訓練,但速度會非常慢(可能需要數小時)
- 建議使用 Google Colab 或 HuggingFace Spaces 的免費 GPU
## 🤝 貢獻
歡迎提交 Issue 和 Pull Request!
## 📝 License
MIT License
## 🙏 致謝
- [Hugging Face Transformers](https://github.com/huggingface/transformers)
- [PEFT](https://github.com/huggingface/peft)
- [Gradio](https://github.com/gradio-app/gradio)
- [Meta Llama](https://ai.meta.com/llama/)
## 📧 聯繫方式
如有問題或建議,請開 Issue 討論。
---
**⚡ 提示**: 首次使用建議先閱讀「使用說明」頁面,了解完整的操作流程!
|