1. 背景
上一篇介紹了基於訓練加速框架Unsloth,微調訓練Llama3的顯示卡資源佔用及訓練時間對比。
近期Unsloth新增了Qwen1.5的模型適配,因此本qiang~馬不停蹄地又進行了一次實驗對比。
對Unsloth的簡介,感興趣的客觀可以查閱上一篇《LLM微調加速神器:Unsloth + LLama3》。
2. 實戰
本著眼過千遍不如手過一遍的宗旨,本qiang~針對Unsloth做了一個對比實現。
對比的實驗環境為: A800,模型為Qwen1.5-32B-Chat。
可以使用如下命令進行更新unsloth。
pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
2.1 比對維度
維度 |
說明 |
顯示卡 |
是否支援bf16 |
最大文字長度 |
max_seq_length |
批次大小 |
per_device_train_batch_size |
梯度累加步長 |
gradient_accumulation_steps |
秩 |
LoRA的rank |
dropout |
lora_droput |
2.2 原始碼
原始碼請見地址,由於Qwen1.5和Llama3的prompt模板不一致,因此原始碼層面上也稍加了改動。
3 實驗結果
3.1 A800
3.2 結論
針對於Qwen1.5-32B-Chat進行unsloth訓練,與基於transformers框架訓練進行比對,結論如下:
整合unsloth後,顯示卡佔用確實更少,平均減少20%-25%,訓練效率確實更快,不管是哪種維度,平均訓練時間減少了27%-41%。
使用40G視訊記憶體的單卡如A40,即可進行微調訓練。
4. 總結
一句話足矣~
本文主要是使用unsloth框架針對Qwen1.5的高效微調實驗,提供了詳細的對比程式碼以及不同維度的對比分析結果。
之後會研讀一遍unsloth的底層原始碼,具體是如何使用triton語言實現加速的,以及如何手寫的前饋網路和反向傳播的實現~
5. 參考
1. unsloth: https://github.com/unslothai/unsloth