1. 背景
五一結束後,本qiang~又投入了LLM的技術海洋中,本期將給大家帶來LLM微調神器:Unsloth。
正如Unsloth官方的對外宣貫:Easily finetune & train LLMs; Get faster with unsloth。微調訓練LLM,可以顯著提升速度,其次視訊記憶體佔用也會顯著減少。
但有一點需要說明:unsloth目前開源部分只支援單機版微調,更高效微調只能交費使用unsloth pro。
2. Unsloth簡介
2.1 主要特性
(1) 所有的核心均以OpenAI的Triton語言實現,並且手動實現反向傳播引擎。Triton語言是面向LLM訓練加速。
(2) 準確率0損失,沒有近似方法,方法完全一致。
(3) 硬體層面無需變動。支援18年之後的Nvidia GPU(V100, T4, Titan V, RTX20,30,40x, A100, H100, L40等,GTX1070,1080也支撐,但比較慢),Cuda最低相容版本是7.0
(4) 透過WSL適用於Linux和Windows
(5) 基於bisandbytes包,支援4bit和16bit的 QLoRA/LoRA微調
(6) 開原始碼有5倍的訓練效率提升, Unsloth Pro可以提升至30倍
2.2 目前支撐的模型
由於底層運算元需要使用triton重寫,因此部分開源模型的適配工作週期可能較長。當前unsloth支援的模型包含Qwen 1.5(7B, 14B, 32B, 72B), Llama3-8B, Mistral-7B, Gemma-7B, ORPO, DPO Zephyr, Phi-3(3.8B), TinyLlama
2.3 模型加速效果
Qwen1.5-7B的整合是由Firefly作者封裝並驗證,效能提升30%+,顯示卡減少40%+,詳見地址。
2.4 安裝教程
conda create --name unsloth_env python=3.10 conda activate unsloth_env conda install pytorch-cuda=<12.1/11.8> pytorch cudatoolkit xformers -c pytorch -c nvidia -c xformers pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git" pip install --no-deps trl peft accelerate bitsandbytes
3. 實戰
本著眼過千遍不如手過一遍的宗旨,本qiang~針對Unsloth做了一個對比實現。對比的實驗環境分別為:P40, A40, A800,對比的模型使用的是出鍋熱乎的Llama3(8B)。
3.1 比對維度
維度 |
說明 |
顯示卡 |
是否支援bf16 |
最大文字長度 |
max_seq_length |
批次大小 |
per_device_train_batch_size |
梯度累加步長 |
gradient_accumulation_steps |
秩 |
LoRA的rank |
dropout |
lora_droput |
3.2 原始碼
針對使用unsloth和非unsloth得顯示卡及訓練加速的對比程式碼,可以參考地址:https://zhuanlan.zhihu.com/p/697557062
4 實驗結果
4.1 P40
4.2 A40
4.3 A800
4.4 結論
針對於llama3-8B進行unsloth訓練,與基於transformers框架訓練進行比對,結論如下:
(1) 整合unsloth後,顯示卡佔用確實更少,訓練效率確實更快,不管是哪種維度。
(2) P40增加batch_size後,顯示卡的記憶體佔用提升,但訓練的時間也更長,說明P40針對大批次的資料處理,效能會降低; 但A40, A800增加batch_size後,顯示卡記憶體佔用雖然提升,但訓練的時間更短。
(3) A800的batch_size為1時,訓練效率不如A40,當batch_size增加到16時,A800的訓練效率比A40快接近一倍。因此,A800更適合處理大批次的場景,對於小batch_size,殺雞不能用牛刀。
5. 總結
一句話足矣~
本文主要是使用unsloth框架針對llama3的高效微調實驗,提供了詳細的對比程式碼以及不同維度的對比分析結果。
之後會寫一篇關於Qwen1.5的對比實驗,敬請期待~
6. 參考
1. unsloth: https://github.com/unslothai/unsloth
2. Qwen1.5+Unsloth: https://github.com/unslothai/unsloth/pull/428