上一篇文章說完了安裝绵患,這下我要喂自己的數(shù)據(jù)了。
1. 準(zhǔn)備數(shù)據(jù)
首先要按照給的格式創(chuàng)建自己的json數(shù)據(jù)悟耘,這個(gè)比較好創(chuàng)建落蝙,之前沒用過json搜一下就行了。
原文的格式如下:
[
{
"instruction": "Give three tips for staying healthy.",
"input": "",
"output": "1. Eat a balanced diet and make sure to include plenty of fruits and vegetables. \n2. Exercise regularly to keep your body active and strong. \n3. Get enough sleep and maintain a consistent sleep schedule."
},
{
"instruction": "What are the three primary colors?",
"input": "",
"output": "The three primary colors are red, blue, and yellow."
},
]
這個(gè)格式就是一個(gè)存了dict的list,換成自己的數(shù)據(jù),代碼如下:
import json
data = []
for p in x: ##這里將自己的數(shù)據(jù)每個(gè)換成了對(duì)應(yīng)的dict,然后用list存儲(chǔ)所有的dict
a={
"instruction":x[0],
"input":x[1],
"output":x[2]
}
data.append(a)
直接將data全部以json的格式存到文件里筏勒。
with open('./file.json',"w",encoding="utf-8") as f:
# ensure_ascii 顯示中文赚瘦,不以ASCII的方式顯示
json.dump(data,f, ensure_ascii=False, indent=2) ##縮進(jìn)2格,dump函數(shù)將數(shù)據(jù)格式成json類型
得到的格式就跟源碼一樣拉奏寨,直接喂給gpt學(xué)把起意!本文采用了40W條指令,batch_size=128病瞳,結(jié)果gpu超出20G了揽咕,重新把size調(diào)小了試試,可憐兮兮...
2. 下載參數(shù)
LLaMA-7B-HF 大模型下載:
python
>>> from huggingface_hub import snapshot_download
>>> snapshot_download(repo_id="decapoda-research/llama-7b-hf")
Lora 參數(shù)下載:
>>> snapshot_download(repo_id="tloen/alpaca-lora-7b")
調(diào)整finetun.py里的base_model字符串套菜,改成上面的LLaMA-7B-HF大模型的地址就行亲善。
另外在運(yùn)行的時(shí)候發(fā)現(xiàn)程序在驗(yàn)證會(huì)報(bào)GPU爆掉的錯(cuò)誤,搜了一圈說是因?yàn)樵隍?yàn)證的時(shí)候梯度累積了(但是鏈接的庫太多了不知道在哪里執(zhí)行了驗(yàn)證程序)逗柴,后來我在對(duì)應(yīng)的錯(cuò)誤代碼上加了以下的代碼:
torch.cuda.empty_cache();
nvidia-smi查看gpu使用情況蛹头,發(fā)現(xiàn)確實(shí)是會(huì)少,但是仍然爆顯存戏溺,后來我把batch_size改成了10渣蜗,運(yùn)行的時(shí)候一直查看gpu,一到驗(yàn)證測(cè)試的時(shí)候就開始飆升旷祸,前面幾輪勉勉強(qiáng)強(qiáng)過去耕拷,差那么1G就爆了,結(jié)果還是在800的時(shí)候爆掉托享,后來看了下代碼骚烧,發(fā)現(xiàn)一個(gè)參數(shù):
gradient_accumulation_steps = 2
查閱了下資料,表示的是梯度累積的步數(shù)闰围,正常來說是一次batch_size進(jìn)行一次反向傳播赃绊,設(shè)置了gradient_accumulation_steps為2,那就是2次進(jìn)行一次反向傳播羡榴,這樣我們就可以每次處理的batch_size少一點(diǎn)了碧查,從而可以減少顯存的使用。
比如我目前的batch_size是10炕矮,gradient_acc_steps為5么夫,表示每處理10 * 5條命令就進(jìn)行一次反向傳播(源代碼是100*2)。每次僅需處理10條命令就可肤视,累積到次數(shù)后反向傳播修正參數(shù)。(照理說不是直接的原因涉枫,因?yàn)槲沂堑津?yàn)證的時(shí)候就爆顯存邢滑,但是改了gradient后真的不超了,后面再研究研究)。
跑起來了后面再繼續(xù)構(gòu)建自己的實(shí)驗(yàn)~加油@Ш蟆@种健!