引言
Post-Training(即模型後訓練)作為大模型落地的重要一環,能顯著優化模型性能,適配特定領域需求。相比於 Pre-Training(即模型預訓練),Post-Training 階段對計算資源和數據資源需求更小,更易迭代,因此備受推崇。
近期,我們將體系化地分享基於阿里雲人工智能平台 PAI 在強化學習、模型蒸餾、數據預處理、SFT等方向的技術實踐,旨在清晰地展現 PAI 在 Post-Training 各個環節的產品能力和使用方法,歡迎大家隨時交流探討。
對於大模型而言,預訓練由於對算⼒和數據的需求非常⼤,因此在使用大模型時,用户一般不會涉及到預訓練,更多的是基於開源的預訓練基礎模型(如Qwen、DeepSeek、Llama等)做模型微調。
本期介紹常見的模型微調訓練方式,以及如何使用阿里雲人工智能平台 PAI 的產品模塊實現模型微調。
常用模型微調訓練方式
模型微調的目的是讓模型更好地理解特定任務的需求。例如,通過使用對話數據集對模型進行微調,可以讓模型在遇到問題時生成更相關的答案。
廣義上説,模型微調有多種方式,常見的如監督微調、偏好對齊、強化學習微調等。下面我們介紹幾種現在常用的微調算法。
SFT
SFT(Supervised Fine-Tuning,監督微調)是在預訓練模型的基礎上,使⽤特定任務的標註數據進⾏⼆次訓練,使模型能夠更好地適應⽬標任務的需求。其核⼼思想是“遷移學習”,利⽤預訓練模型已有的知識,通過微調快速適配新任務。
SFT需要使用有標註的數據通過有監督方式微調模型,這些標註數據通常包含了問題和答案對,或者其他特定任務的數據。
SFT根據更新參數量不同可以分為以下兩種:
- 全量參數更新 FFT(Full Fine-tuning):即對預訓練模型的所有參數進⾏更新,訓練速度較慢,消耗機器資源較多。
- 參數⾼效微調 PEFT(Parameter-Efficient Fine-Tuning):只對部分參數做調整,訓練速度快,消耗機器資源少。常見的如LoRA微調、QLoRA微調。
- LoRA微調:在固定模型本身參數的基礎上,僅對自注意力權重矩陣進行低秩分解,並更新低秩矩陣參數。該訓練方法訓練時間短,但效果可能會略差於全參微調,但在某些情況下可減少訓練過擬合的風險。
- QLoRA微調:QLoRA結合了模型量化和LoRA技術,除了引入LoRA旁路矩陣,QLoRA在加載時將大模型量化為4bit或8bit,相比LoRA微調進一步降低了顯存佔用。該訓練方法訓練時間短,但效果可能會略差於全參微調和LoRA。
DPO
偏好對齊也是一種微調模型的方式,目的是使大模型的輸出更符合人類偏好,常用於對齊人類價值觀(如減少有害內容)或提升生成結果的可讀性、安全性。
DPO(Direct Preference Optimization,直接偏好優化)是一種現在常用的偏好對齊方式。大模型對齊方法有多種,如ChatGPT使用的RLHF,但RLHF較為複雜且缺乏穩定性。相比之下,DPO算法簡化了這一過程:它不需要訓練專門的獎勵模型,而是通過簡單的分類損失來解決標準的RLHF問題。DPO算法不僅具有良好的穩定性和卓越的性能,而且計算需求較低。
上圖左側展示了RLHF算法,而右側則是DPO算法,通過兩者的對比可以清楚地看到DPO的改進之處。
- RLHF算法包含了獎勵模型和策略模型,通過偏好數據結合強化學習進行不斷迭代,以優化策略模型。
- DPO算法去掉了獎勵模型和強化學習過程,直接利用偏好數據進行模型微調,將強化學習過程簡化為監督微調,從而使訓練過程更加簡單和高效,其主要改進集中在損失函數方面(即DPO使用監督學習的訓練方式,達到了接近RLHF類似的效果)。
目前較常見的微調方式可以是先對基模進行SFT,然後再進行DPO,從而使模型具備業務領域能力同時輸出符合價值觀偏好。
GRPO
隨着DeepSeek-R1模型的爆火,GRPO技術也收到業界的廣泛關注(GPRO:Group Relative Policy Optimization,羣組相對策略優化)。GRPO旨在通過優化模型在一組候選答案中的相對偏好,而不是依賴於單一的“黃金”答案來進行學習,從而提升模型的性能,尤其在數學推理等複雜任務上。
相比於PPO等傳統算法,GRPO算法具備以下特點:
- 不需要單獨的價值函數模型(Value Model):不同於PPO,GRPO無需維護單獨的價值函數模型,簡化了訓練步驟,減少了內存消耗,提高了整體效率。
- 基於組的優勢計算:GRPO通過為每個輸入利用一組輸出來計算基線獎勵(Baseline Reward),計算方法為該組輸出的平均得分。這種組基方法與獎勵模型訓練更加契合,尤其對推理任務有所幫助。
- 直接優化KL散度:GRPO將KL散度直接集成到損失函數中進行優化,實現比PPO中通過獎勵信號間接控制更細緻的管理。
微調算法比較
以下為 SFT、DPO和GRPO 這三種微調算法的使用門檻難度以及應用場景對比,供您參考比較。
PAI模型微調實踐
阿里雲人工智能平台PAI提供了完整的模型微調產品能力,根據客户需求及代碼能力層級,分別提供了PAI-Model Gallery 一鍵微調、PAI-DSW Notebook編程微調、PAI-DLC容器化任務微調的全套產品功能。
PAI-Model Gallery
PAI-Model Gallery集成了眾多AI開源社區中優質的預訓練模型,支持零代碼實現模型微調、模型壓縮、模型評測、模型部署操作,給開發者帶來更快、更高效、更便捷的AI應用體驗。對於希望零代碼完成模型微調的用户來説,PAI-Model Gallery的一鍵微調功能是您的理想選擇。
- 選擇想要微調的基礎模型。PAI-Model Gallery提供了豐富的基礎模型,您可以在模型廣場瀏覽並選擇您想要微調的基礎模型,點擊模型卡片進入模型詳情頁。
- 在模型詳情頁點擊“訓練”按鈕。我們以Qwen3-8B模型為例,模型支持零代碼完成部署、訓練和評測,詳情頁右上角有對應的操作按鈕,選擇點擊“訓練”按鈕。
- 提交訓練任務。PAI-ModelGallery 支持 SFT、GRPO 等多樣化的訓練方式,按需選擇訓練方式、配置訓練數據集、配置訓練超參數、計算資源後,即可一鍵提交訓練任務。
(注:不同模型提供的訓練方式有所不同,具體請參照各模型詳情頁)
需注意的是,您需要提前準備好訓練用的數據集。以SFT任務為例,訓練數據集格式示例如下:(不同類型訓練任務的訓練集格式示例可參考模型詳情頁中的描述)
{
"instruction": "你是一個心血管科醫生,請根據患者的問題給出建議:我患高血壓五六年啦,天天喝藥吃煩啦,哪種東西能根治高血壓,高血壓剋星是什麼?",
"output": "高血壓的患者可以吃許多新鮮的水果蔬菜或者是芹菜山藥之類的食物,可以起些降血壓的作用,另外高血壓的患者平時也應當注意低鹽,低脂,低膽固醇飲食,適當的實施體育運動和鍛練高血壓的患者還應當在醫生的指導下口服降血壓的藥物,斷然不可擅自停藥,防止對血壓引發影響。"
},
{
"instruction": "你是一個呼吸科醫生,請根據患者的問題給出建議:風寒感冒咳白痰怎麼治療?",
"output": "風寒感冒,咳有白痰的患者,主要症咳嗽痰多色白量多,兼具胸脘作悶,鼻塞,流清涕,全身痠痛,易疲勞等症狀。臨牀診斷上常用杏蘇散和二陳丸實施治療。在用藥物治療的同時,應忌食辛辣刺激性的食物和寒涼性食物,多吃易消化營養豐富的食物,宜清淡飲食,留意歇息。"
}
]
關於訓練超參數的介紹和如何調整,可參考文檔:https://help.aliyun.com/zh/pai/user-guide/llm-fine-tuning-exp...
- 查看訓練任務。提交訓練任務後,頁面會自動跳轉到訓練任務詳情頁(也可以從PAI-Model Gallery首頁-任務管理-訓練任務中找到),該頁面會顯示訓練任務的狀態。任務完成後,微調後的模型會自動註冊到PAI模型資產中,模型文件會輸出到您指定的對象存儲OSS中。同時,PAI-Model Gallery提供模型血緣功能,幫助追蹤模型的上下游全鏈路,根據血緣功能,可以看出模型微調任務的上游基礎模型和數據集以及下游產出模型的存儲路徑,從整體上清晰地瞭解模型微調訓練任務流程。
- (可選)在線部署微調後的模型。在訓練任務詳情頁右上角,您可以選擇把微調後的模型直接進行一鍵部署,將模型部署為在線服務,可通過API或其他方式實現調用。
PAI-DSW
PAI-DSW是為AI開發者量身定製的雲端機器學習交互式開發IDE,隨時隨地開啓Notebook快速讀取數據、開發算法、訓練及部署模型。對於熟悉python、Notebook等環境的AI開發者,可以使用PAI-DSW進行代碼形式的交互式模型微調。
下面以使用PAI自研大模型全鏈路訓練工具庫Pai-Megatron-Patch + PAI靈駿智算資源微調Qwen2.5-7b模型為例,介紹如何在PAI-DSW中微調模型。
- 在PAI上啓動一個DSW實例,選擇專屬鏡像 dsw-registry.cn-wulanchabu.cr.aliyuncs.com/pai/pai-megatron-patch:25.01
具體資源配置信息如下:
資源規格:8卡GPU,96核,1600G
掛載數據集:建議掛載CPFS數據集,用來存放模型、代碼、數據等,方便後續開啓多機訓練(本文以CPFS數據集掛載到/mnt/data 為例)
- 下載Pai-Megatron-Patch包
mkdir qwen25_sft
cd qwen25_sft
#(Option 1)直接從github上下載Pai-Megatron-Patch
git clone --recurse-submodules https://github.com/alibaba/Pai-Megatron-
Patch.git
- 準備模型Qwen2.5-7B模型的checkpoints(建議提前準備好模型文件)
mkdir qwen-ckpts
cd qwen-ckpts
mkdir Qwen2.5-7B
cd Qwen2.5-7B
pip install modelscope
modelscope download --model Qwen/Qwen2.5-7B --local_dir ./
- 數據集準備:自制數據集準備過程可以參照示例:https://github.com/alibaba/Pai-Megatron-Patch/tree/main/toolkits/sft_data_preprocessing。也可以直接下載處理好的開源數據集。
mkdir qwen-datasets
cd qwen-datasets
wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/qwen-datasets/mmap_qwen2_sft_datasets_text_document.bin
wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/qwen-datasets/mmap_qwen2_sft_datasets_text_document.idx
此時目錄結構為:Pai-Megatron-Patch 中是訓練所需要的代碼;qwen-ckpts 是原始模型文件;qwen-datasets 是訓練數據集存放地址
- 將原始模型的checkpoint轉化為megatron 格式(Pai-Megatron-Patch提供了各類豐富的格式轉換工具)
bash scripts/qwen2_5/run_8xH20.sh \
7B \
/mnt/data/yy/qwen25_sft/qwen-ckpts/Qwen2.5-7B \
/mnt/data/yy/qwen25_sft/qwen-ckpts/Qwen2.5-7B-to-mcore \
false \
true \
bf16
- 執行SFT全參微調命令。
參數説明:
MODEL_SIZE=$2 # 模型結構參數量級: 0.5B/1.5B/3B/7B/14B/32B/72B
BATCH_SIZE=$3 # 一次迭代一個數據並行內的樣本數
GLOBAL_BATCH_SIZE=$4 # 一次迭代多個數據並行的總樣本數
LR=$5 # 學習率
MIN_LR=$6 # 最小學習率
SEQ_LEN=$7 # 序列長度
PAD_LEN=$8 # Padding長度
PR=${9} # 訓練精度: fp16, bf16, fp8
TP=${10} # 模型並行度
PP=${11} # 流水並行度
CP=${12} # 上下文並行度
SP=${13} # 是否使用序列並行: true, false
DO=${14} # 是否使用Megatron版Zero-1降顯存優化器: true, false
FL=${15} # 是否優先使用Flash Attention: true, false
SFT=${16} # 是否執行微調訓練: true, false
AC=${17} # 激活檢查點模式: sel, full, offload, false
OPTIMIZER_OFFLOAD=${18} # 是否啓用Offload optimizer: false, static, auto
SAVE_INTERVAL=${19} # 保存ckpt的間隔
DATASET_PATH=${20} # 訓練數據集路徑
VALID_DATASET_PATH=${21} # 驗證數據集路徑
PRETRAIN_CHECKPOINT_PATH=${22} # 預訓練模型路徑
TRAIN_TOKENS_OR_ITERS=${23} # 訓練TOKEN或者Iter數
WARMUP_TOKENS_OR_ITERS=${24} # 預熱TOKEN或者Iter數
OUTPUT_BASEPATH=${25} # 訓練輸出日誌文件路徑
執行命令:
sh run_mcore_qwen.sh \
dsw \
7B \
1 \
8 \
1e-5 \
1e-6 \
128 \
128 \
bf16 \
1 \
1 \
1 \
true \
true \
true \
true \
false \
false \
100 \
/mnt/workspace/yy/qwen25_sft/qwen-datasets/mmap_qwen2_sft_datasets_text_document \
/mnt/workspace/yy/qwen25_sft/qwen-datasets/mmap_qwen2_sft_datasets_text_document \
/mnt/workspace/yy/qwen25_sft/qwen-ckpts/Qwen2.5-7B-to-mcore \
1000 \
100 \
/mnt/workspace/yy/qwen25_sft/qwen-ckpts/output_mcore_qwen2.5_finetune
-
查看執行過程及結果。在DSW中可以查看訓練過程的日誌,也可以通過查看資源監控來觀察任務運行狀態。
模型訓練好後,在qwen-ckpts中可以看到如下目錄: