LLM實戰:LLM微調加速神器-Unsloth + LLama3

mengrennwpu發表於2024-05-14

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

相關文章