1. 背景
五一結(jié)束后掐场,本qiang~又投入了LLM的技術(shù)海洋中,本期將給大家?guī)鞮LM微調(diào)神器:Unsloth。
正如Unsloth官方的對外宣貫:Easily
finetune & train LLMs; Get faster with unsloth。微調(diào)訓(xùn)練LLM窑滞,可以顯著提升速度,其次顯存占用也會顯著減少恢筝。
但有一點需要說明:unsloth目前開源部分只支持單機(jī)版微調(diào)哀卫,更高效微調(diào)只能交費(fèi)使用unsloth
pro。
2. Unsloth簡介
2.1 主要特性
(1) 所有的內(nèi)核均以O(shè)penAI的Triton語言實現(xiàn)撬槽,并且手動實現(xiàn)反向傳播引擎此改。Triton語言是面向LLM訓(xùn)練加速。
(2) 準(zhǔn)確率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微調(diào)
(6) 開源代碼有5倍的訓(xùn)練效率提升苦银,Unsloth Pro可以提升至30倍
2.2 目前支撐的模型
由于底層算子需要使用triton重寫啸胧,因此部分開源模型的適配工作周期可能較長赶站。當(dāng)前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. 實戰(zhàn)
本著眼過千遍不如手過一遍的宗旨陷谱,本qiang~針對Unsloth做了一個對比實現(xiàn)烙博。對比的實驗環(huán)境分別為:P40, A40, A800,對比的模型使用的是出鍋熱乎的Llama3(8B)烟逊。
3.1 比對維度
3.2 源碼
4 實驗結(jié)果
4.1 P40
4.2 A40
4.3 A800
4.4 結(jié)論
針對于llama3-8B進(jìn)行unsloth訓(xùn)練渣窜,與基于transformers框架訓(xùn)練進(jìn)行比對,結(jié)論如下:
(1) 集成unsloth后宪躯,顯卡占用確實更少乔宿,訓(xùn)練效率確實更快,不管是哪種維度访雪。
(2) P40增加batch_size后详瑞,顯卡的內(nèi)存占用提升,但訓(xùn)練的時間也更長臣缀,說明P40針對大批次的數(shù)據(jù)處理蛤虐,性能會降低; 但A40, A800增加batch_size后,顯卡內(nèi)存占用雖然提升肝陪,但訓(xùn)練的時間更短驳庭。
(3) A800的batch_size為1時,訓(xùn)練效率不如A40氯窍,當(dāng)batch_size增加到16時饲常,A800的訓(xùn)練效率比A40快接近一倍。因此狼讨,A800更適合處理大批次的場景贝淤,對于小batch_size,殺雞不能用牛刀政供。
5. 總結(jié)
一句話足矣~
本文主要是使用unsloth框架針對llama3的高效微調(diào)實驗播聪,提供了詳細(xì)的對比代碼以及不同維度的對比分析結(jié)果。
之后會寫一篇關(guān)于Qwen1.5的對比實驗布隔,敬請期待~
6. 參考
1. unsloth:https://github.com/unslothai/unsloth
2.Qwen1.5+Unsloth:https://github.com/unslothai/unsloth/pull/428