1. Llama Factory 到底是什麼?

1.1 簡單比喻

想象你要定製一輛汽車:

傳統方式(沒有 Llama Factory):

  • 你需要自己造發動機、設計車身、組裝零件
  • 需要懂機械工程、電子技術、材料科學
  • 整個過程複雜、容易出錯、耗時很長

使用 Llama Factory:

  • 你只需要:
  1. 選擇基礎車型(預訓練模型)
  2. 告訴工廠你的需求(訓練數據)
  3. 選擇改裝方案(訓練方法)
  4. 工廠自動完成所有改裝
  • 你不需要懂技術細節,只需要提需求

1.2 一句話定義

Llama Factory 是一個"AI模型定製工廠",它讓普通人也能輕鬆地定製和訓練自己的大語言模型。

2. 為什麼需要 Llama Factory?

2.1 傳統訓練的痛點

假設你想訓練一個懂醫療知識的AI助手:

# 傳統方式 - 需要寫很多複雜代碼
import torch
from transformers import AutoModel, AutoTokenizer, TrainingArguments, Trainer
from datasets import load_dataset
import deepspeed

# 1. 數據預處理(很複雜)
def preprocess_function(examples):
    # 需要懂分詞、填充、截斷等技術
    pass

# 2. 模型配置(容易出錯)
training_args = TrainingArguments(
    output_dir="./results",
    num_train_epochs=3,
    per_device_train_batch_size=4,
    gradient_accumulation_steps=4,
    learning_rate=2e-5,
    # ... 還有幾十個參數需要設置
)

# 3. 訓練循環(需要深度學習知識)
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_datasets,
    data_collator=data_collator,
    # ... 更多複雜配置
)

# 4. 處理各種錯誤(內存不足、配置錯誤等)

問題總結:

  • 技術門檻高:需要懂編程、深度學習、分佈式訓練
  • 配置複雜:幾十個參數需要調優
  • 容易出錯:內存溢出、配置錯誤、訓練不穩定
  • 效率低下:大量時間花在調試上

2.2 Llama Factory 的解決方案

# 使用 Llama Factory 的方式
from llama_factory import TrainArguments, run_train

# 只需要配置幾個關鍵參數
train_args = TrainArguments(
    model_name_or_path="Qwen/Qwen2-7B-Instruct",  # 基礎模型
    dataset="my_medical_data",                    # 你的數據
    finetuning_type="lora",                       # 訓練方法
    output_dir="./my_medical_ai"                  # 輸出位置
)

# 一鍵開始訓練
run_train(train_args)

3. Llama Factory 的核心功能詳解

3.1 四種訓練方法(像選擇汽車改裝方案)

方案1:全參數微調 - "整車大改裝"

        工作原理:更新模型的所有參數
        ✅ 優點:效果最好,能力最強
        ❌ 缺點:成本高,需要大量GPU內存
        💡 適合:大公司,有充足計算資源
        🔧 需求:多張A100/H100顯卡

        內存需求:模型大小 × 4 × 3 ≈ 12倍模型大小
        例如:7B模型需要 7×4×3 = 84GB GPU內存

方案2:LoRA - "加裝智能配件"

        工作原理:只訓練少量新增的參數,不改變原模型
        ✅ 優點:節省90%內存,訓練快,可切換不同任務
        ❌ 缺點:效果略低於全參數微調
        💡 適合:大多數應用場景
        🔧 需求:單張RTX 3090/4090即可

        內存需求:模型大小 + 少量額外參數
        例如:7B模型只需要 7GB + 0.1GB = 7.1GB GPU內存

方案3:QLoRA - "輕量化智能配件"

        工作原理:在LoRA基礎上,把模型壓縮到4位精度
        ✅ 優點:極省內存,消費級顯卡就能訓練大模型
        ❌ 缺點:效果有輕微損失
        💡 適合:個人開發者,資源有限
        🔧 需求:單張RTX 3080/4060即可

        內存需求:模型大小 × 0.5 + 少量參數
        例如:7B模型只需要 7×0.5 + 0.1 = 3.6GB GPU內存

方案4:P-Tuning - "只改方向盤"

        工作原理:只訓練極少量提示參數
        ✅ 優點:超級省內存,訓練極快
        ❌ 缺點:效果有限,能力提升小
        💡 適合:快速實驗,極小資源
        🔧 需求:幾乎任何顯卡都能用

        內存需求:模型大小 + 極少量參數

4. Llama Factory 的完整工作流程

4.1 第一步:準備數據(像準備菜譜)

數據格式要求:

// 你的訓練數據應該長這樣
[
  {
    "instruction": "給以下症狀提供醫療建議",
    "input": "患者發燒38.5℃,咳嗽,流鼻涕",
    "output": "建議多休息、多喝水,可服用退燒藥,如症狀持續請就醫"
  },
  {
    "instruction": "翻譯以下英文",
    "input": "Hello, how are you?",
    "output": "你好,最近怎麼樣?"
  }
]

各個字段的含義:

  • instruction:你要AI完成什麼任務
  • input:給AI的輸入信息
  • output:你期望AI輸出的正確答案

數據準備技巧:

  1. 數量:至少100條,越多越好
  2. 質量:確保答案准確、專業
  3. 多樣性:覆蓋各種場景和問題類型

4.2 第二步:選擇基礎模型(像選擇原材料)

常見基礎模型推薦:

中文任務:
- Qwen系列(阿里通義千問):對中文支持最好
- ChatGLM系列(清華):中文理解強
- Baichuan系列(百川):中文優化好

英文任務:
- Llama系列(Meta):生態豐富
- Mistral系列:性能優秀
- Gemma系列(Google):輕量高效

多語言任務:
- Qwen系列:中英文都不錯
- Llama系列:通過擴展支持多語言

選擇原則:

  • 任務語言 → 選擇對應語言優化好的模型
  • 硬件限制 → 選擇參數量合適的模型
  • 功能需求 → 選擇能力匹配的模型

4.3 第三步:配置訓練參數(像設置烹飪參數)

# 一個完整的訓練配置示例
train_args = TrainArguments(
    # 基礎配置
    model_name_or_path="Qwen/Qwen2-7B-Instruct",  # 基礎模型
    dataset="my_medical_data",                    # 數據集名稱
    finetuning_type="lora",                       # 訓練方法
    
    # LoRA 專用配置
    lora_target="q_proj,v_proj",                  # 要改動的模型部件
    lora_rank=16,                                 # 改動程度(16-64)
    lora_alpha=32,                                # 學習強度
    
    # 訓練參數
    output_dir="./my_medical_ai",                 # 保存位置
    per_device_train_batch_size=4,                # 批次大小
    gradient_accumulation_steps=4,                # 梯度累積
    learning_rate=2e-4,                           # 學習率
    num_train_epochs=3,                           # 訓練輪數
    
    # 資源優化
    fp16=True,                                    # 使用半精度節省內存
    logging_steps=10,                             # 每10步輸出日誌
)

4.4 第四步:開始訓練(像啓動智能廚房)

from llama_factory import run_train

# 一鍵開始訓練
run_train(train_args)

# 訓練過程中你會看到:
# 🔥 開始訓練...
# 📊 第1步,損失: 2.3456
# 📊 第10步,損失: 1.2345  
# 📊 第20步,損失: 0.8765
# 💾 保存檢查點...
# 🎉 訓練完成!

4.5 第五步:測試和使用(像品嚐菜品)

from llama_factory import load_model, get_infer_args

# 加載訓練好的模型
infer_args = get_infer_args({
    "model_name_or_path": "Qwen/Qwen2-7B-Instruct",
    "adapter_name_or_path": "./my_medical_ai",  # 你的訓練結果
    "template": "qwen"
})

model, tokenizer = load_model(infer_args)

# 測試你的AI助手
messages = [
    {"role": "user", "content": "我發燒38℃,應該怎麼辦?"}
]
response = model.chat(tokenizer, messages)
print(f"AI回答: {response}")

# 輸出:建議多休息、多喝水,可服用退燒藥...

5、介紹完,就可以嘗試了

LLaMA-Factory 是一個用於訓練和微調模型的工具。它支持全參數微調、LoRA 微調、QLoRA 微調、模型評估、模型推理和模型導出等功能。

微調的過程

        模型微調通過在特定任務的數據集上繼續訓練預訓練模型來進行,使得模型能夠學習到與任務相關的特定特徵和知識。這個過程通常涉及到模型權重的微幅調整,而不是從頭開始訓練一個全新的模型。微調過程主要包括以下幾個步驟:

1. 數據準備:收集和準備特定任務的數據集。

2. 模型選擇:選擇一個預訓練模型作為基礎模型。

3. 遷移學習:在新數據集上繼續訓練模型,同時保留預訓練模型的知識。

4. 參數調整:根據需要調整模型的參數,如學習率、批大小等。

5. 模型評估:在驗證集上評估模型的性能,並根據反饋進行調整。

安裝

若電腦沒有GPU,可以使用ModelScope雲服務


設計模式C++學習筆記之七(AbstractFactory抽象工廠模式) - 星晨_工作原理

前提CUDA要安裝,然後安裝llamafactory

# 構建虛擬環境
conda create -n llamafactory python=3.10 -y && conda activate llamafactory
# 下載倉庫
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
# 安裝
pip install -e .

設計模式C++學習筆記之七(AbstractFactory抽象工廠模式) - 星晨_工作原理_02

校驗
llamafactory-cli version

設計模式C++學習筆記之七(AbstractFactory抽象工廠模式) - 星晨_數據集_03

安裝完成後、可以啓動webUI界面配置,也可以直接在示例文件夾下修改。

設計模式C++學習筆記之七(AbstractFactory抽象工廠模式) - 星晨_數據_04

可以讀一下readme使用哪個方法訓練,有對應命令行的執行命令

設計模式C++學習筆記之七(AbstractFactory抽象工廠模式) - 星晨_數據集_05

打開這個文件有幾個配置

設計模式C++學習筆記之七(AbstractFactory抽象工廠模式) - 星晨_數據集_06

第一個框是它要訓練的模型路徑,默認模型文件從modelScope上下載

第二個框是用的數據集,有兩個,第一個是自我認證:

設計模式C++學習筆記之七(AbstractFactory抽象工廠模式) - 星晨_#人工智能_07

用户什麼都沒有輸入,只是讓模型知道它是誰,一個自我認證的數據集

第二個就是微調的數據集(en證明是英文的)。

設計模式C++學習筆記之七(AbstractFactory抽象工廠模式) - 星晨_數據_08

第三個框是一次訓練最大例子數量,可以調小一點加快訓練。

訓練配置完成後就可以在命令行執行:

llamafactory-cli train examples/train_qlora/llama3_lora_sft_otfq.yaml