一步步帶你用LoRA微調(diào)大模型-執(zhí)行篇
一、配置與安裝
我在嘗試運(yùn)行Alpaca-LoRA工具給大模型做微調(diào)時(shí),發(fā)現(xiàn)了準(zhǔn)備篇中的一些方法存在問(wèn)題。經(jīng)過(guò)了反復(fù)摸索,有以下幾點(diǎn)需要重新配置一下。
1. 由于https://huggingface.co/ 國(guó)內(nèi)無(wú)法訪問(wèn),需要預(yù)先從鏡像站:https://hf-mirror.com/ 下載好模型文件,而且需要重新選擇 baffo32/decapoda-research-llama-7B-hf 模型進(jìn)行微調(diào),因?yàn)檫@是Alpaca-LoRA工具的推薦模型,為了提高成功率,本次先選它。
2. 我們準(zhǔn)備用huggingface_hub工具下載模型,先激活conda虛擬環(huán)境,在虛擬環(huán)境中安裝。
pip install -U huggingface_hub
用huggingface-cli 下載,我們把模型文件放到 /home/abcde/models 目錄,這里需要 huggingface token ,記得在指令末尾加上 --token hf_***, huggingface token需要在官網(wǎng)上注冊(cè)申請(qǐng)。
$huggingface-cli download --resume-download baffo32/decapoda-research-llama-7B-hf --local-dir /home/abcde/models --local-dir-use-symlinks False --token hf_***
當(dāng)然在網(wǎng)頁(yè)上點(diǎn)擊下載也是可行的,而且無(wú)需huggingface token。大家記得要把模型文件放在同一文件夾中。
3. 在虛擬環(huán)境中安裝 peft, transformers, sentencepiece, gradi, scipy, bitsandbytes 這幾個(gè)python包。
用虛擬環(huán)境中執(zhí)行:
$pip install accelerate appdirs loralib black datasets fire peft==0.3.0 transformers==4.29.2 sentencepiece gradio==3.32.0 scipy bitsandbytes==0.37.2
執(zhí)行結(jié)果:
(alpaca_lora) abcde@abcde:~/alpaca-lora$ pip install accelerate appdirs loralib black datasets fire peft==0.3.0 transformers==4.29.2 sentencepiece gradio==3.32.0 scipy bitsandbytes==0.37.2
Requirement already satisfied: accelerate in /home/abcde/miniconda3/envs/alpaca_lora/lib/python3.9/site-packages (0.34.2)
Requirement already satisfied: appdirs in /home/abcde/miniconda3/envs/alpaca_lora/lib/python3.9/site-packages (1.4.4)
Requirement already satisfied: loralib in /home/abcde/miniconda3/envs/alpaca_lora/lib/python3.9/site-packages (0.1.2)
Requirement already satisfied: black in /home/abcde/miniconda3/envs/alpaca_lora/lib/python3.9/site-packages (24.8.0)
Requirement already satisfied: datasets in /home/abcde/miniconda3/envs/alpaca_lora/lib/python3.9/site-packages (3.0.0)
Requirement already satisfied: fire in /home/abcde/miniconda3/envs/alpaca_lora/lib/python3.9/site-packages (0.6.0)
Collecting peft==0.3.0
Downloading peft-0.3.0-py3-none-any.whl.metadata (21 kB)
Collecting transformers==4.29.2
Downloading transformers-4.29.2-py3-none-any.whl.metadata (112 kB)
Requirement already satisfied: sentencepiece in /home/abcde/miniconda3/envs/alpaca_lora/lib/python3.9/site-packages (0.2.0)
- transformers 庫(kù)用于加載、訓(xùn)練、保存模型
- peft 庫(kù)則是用于幫助你使用LoRA的
- bitsandbytes 用于使用GPU資源訓(xùn)練模型
4. 在執(zhí)行前,設(shè)置transformers、datasets庫(kù)的離線模式,在SHELL中添加變量,在虛擬環(huán)境中執(zhí)行。
HF_DATASETS_OFFLINE=1 TRANSFORMERS_OFFLINE=1
二、啟動(dòng)微調(diào)
完成上述安裝與配置后,在conda建立的虛擬環(huán)境中,用以下指令啟動(dòng)微調(diào),如果啟動(dòng)時(shí)還有各種報(bào)錯(cuò),可能還是相關(guān)的Python包安裝不正確導(dǎo)致,遇到問(wèn)題也歡迎各位留言。
python finetune.py \
--base_model '/home/abcde/models' \
--data_path /home/abcde/data/trans_chinese_alpaca_data.json' \
--output_dir './AlpacaLora_model' \
--batch_size 128 \
--micro_batch_size 4 \
--num_epochs 3 \
--learning_rate 1e-4 \
--cutoff_len 512 \
--val_set_size 2000 \
--lora_r 8 \
--lora_alpha 16 \
--lora_dropout 0.05 \
--lora_target_modules '[q_proj,v_proj]' \
--train_on_inputs \
--group_by_length
參數(shù)簡(jiǎn)單說(shuō)明如下:
--base_model : 模型文件存放文件夾,注意是文件夾名稱,并非模型名稱。
--data_path: 數(shù)據(jù)集文件名,包括數(shù)據(jù)集的完整路徑與文件名稱。
--output_dir: 微調(diào)結(jié)果輸出文件夾,就是微調(diào)完成后的文件存放地。
--batch_size: 每次訓(xùn)練迭代中處理的樣本總數(shù),對(duì)訓(xùn)練的效率和穩(wěn)定性有顯著影響。
--micro_batch_size: 是微批次的大小,會(huì)通過(guò)梯度累積的方式來(lái)節(jié)省顯存。值越大,占用的顯存越高,請(qǐng)根據(jù)實(shí)際情況調(diào)整。
--num_epochs: 訓(xùn)練輪數(shù),2~3個(gè)epoch基本上可以達(dá)到較好的效果
--learning_rate:訓(xùn)練時(shí)的學(xué)習(xí)率,`1e-4`即`0.0001`
--cutoff_len: 處理數(shù)據(jù)時(shí)將輸入文本截?cái)嗟淖畲箝L(zhǎng)度,有助于控制內(nèi)存消耗和計(jì)算成本。
--val_set_size: 用于驗(yàn)證的數(shù)據(jù)集的大小,有助于監(jiān)控模型在未見(jiàn)數(shù)據(jù)上的表現(xiàn)。
--lora_r: 在LoRA適配器中使用的秩(rank)。秩決定了適配器中低秩矩陣的大小,從而影響模型的靈活性和需要訓(xùn)練的參數(shù)數(shù)量。
--lora_alpha: 定義了LoRA適配器的學(xué)習(xí)率縮放因子。
--lora_dropout:用于指定LoRA適配器中的dropout率。Dropout是一種正則化技術(shù),用于防止模型過(guò)擬合。
--lora_target_modules:用于指定哪些模型組件(模塊)將應(yīng)用LoRA適配器。通過(guò)選擇性地對(duì)模型的某些部分進(jìn)行微調(diào),可以減少訓(xùn)練參數(shù)的數(shù)量,從而提高微調(diào)的效率。
--train_on_inputs:決定是否在訓(xùn)練過(guò)程中同時(shí)更新模型的輸入?yún)?shù)。如果設(shè)置為True,則模型的輸入表示也會(huì)在訓(xùn)練過(guò)程中被更新。
--group_by_length:控制數(shù)據(jù)加載時(shí)是否根據(jù)序列長(zhǎng)度對(duì)批次進(jìn)行分組,如果設(shè)置為True,相似長(zhǎng)度的序列將被分組在一起。
如果一切正常,你將看到以下畫面,開(kāi)始微調(diào)。
微調(diào)過(guò)程花了大概6小時(shí)50分鐘,整個(gè)過(guò)程都用nvitop監(jiān)控,我的RTX4090基本是全速開(kāi)火的,核心溫度飆升到80多度,整機(jī)功率500多w,機(jī)箱風(fēng)扇全速開(kāi)動(dòng),呼呼地噴著熱氣,比暖氣機(jī)都好使,有點(diǎn)小興奮,也有點(diǎn)小擔(dān)心,溫度會(huì)不會(huì)太高了,燒機(jī)了。最后還好,微調(diào)完成后,GPU核心溫度慢慢降到60度以下的正常水平。看來(lái)機(jī)箱還有加強(qiáng)散熱才行。
微調(diào)完成
三、小結(jié)
以上介紹的是Alpaca-Lora基于LLaMA(7B)大模型的微調(diào)方法,它的魅力在于能夠在相對(duì)較短的時(shí)間內(nèi),用相對(duì)有限的GPU資源完成模型的優(yōu)化,它是一種大模型優(yōu)化的重要方法,為打造企業(yè)和個(gè)人的私有大模型提供了一種高效的方法。
本文轉(zhuǎn)載自??碼農(nóng)隨心筆記??,作者:碼農(nóng)隨心筆記
