網(wǎng)站制作與網(wǎng)站建設(shè)實際報告百度競價排名推廣
? ? 之前用https://github.com/FlagAlpha/Llama2-Chinese微調(diào)過幾個模型,總體來說llama2的生態(tài)還是比較好的,過程很順利。微調(diào)百川2就沒那么順利了,所以簡單做個記錄
? ? 1. 數(shù)據(jù)準備,我的數(shù)據(jù)是單輪對話,之前微調(diào)llama2已經(jīng)按照sft格式做好txt文件,翻看https://github.com/baichuan-inc/Baichuan2發(fā)現(xiàn)用的是json,和我所用數(shù)據(jù)格式有所出入,訓(xùn)練我還是用一開始用llama2的finetune腳本和參數(shù),按照baichuan2的數(shù)據(jù)格式調(diào)整了代碼。不過最后為了兼容llama2,我就把llama2的數(shù)據(jù)格式和tokenize_function給用在了百川2上,看起來也沒啥問題。
? ? 2. 模型選取,用baichuan2-13b-chat作為預(yù)訓(xùn)練權(quán)重,推理的時候總是頭部輸出我要的內(nèi)容,但是輸出總是無法停止,就算訓(xùn)完一個epoch也是這樣,很怪異,研究半天,不知道所以然,干脆放棄,采用不帶chat的baichuan2-13b作為預(yù)訓(xùn)練權(quán)重,這次很快出結(jié)果,只要iter 100次保存下來的模型,輸出也是我想要的內(nèi)容,所以就不換了,暫時用baichuan2-13b。主要是llama2已經(jīng)跑的很好,我實驗也就不求甚解,將就先用baichuan2-13b。在這個過程中"--lora_r 1 --lora_alpha 32 --lora_dropout 0.1"這幾個參數(shù),我按照baichuan2倉庫里設(shè)置了。
? ? 3. 給百川模型的加載統(tǒng)統(tǒng)加上trust_remote_code,不然總是提示你y/N選擇,孫悟空都會是煩死了。
? ? 4. 訓(xùn)練模型遇到的錯誤1:?
AttributeError: 'BaichuanTokenizer' object has no attribute 'sp_model'
? ? ? ? 這個錯誤通過簡單回滾transfomers解決python3 -m pip install transformers==4.33.2,另外還有一個錯誤忘了具體是啥,通過回滾bitsandbytes解決python3 -m pip install bitsandbytes==0.41.0,幸運的是llama2在這兩個模塊版本下,同樣工作。上面的錯誤,其實也有人說挪下tokenization_baichuan.py里的super的位置,我改了幾處這個文件,似乎不起作用,隨即放棄這個方案。
? ? 5. ?推理過程遇到的錯誤2,這個錯誤也是折騰了我好一會,通過給AutoModelForCausalLM.from_pretrained加上pretraining_tp=1參數(shù)解決,先跑通,原理沒去深究了。
RuntimeError: mat1 and mat2 shapes cannot be multiplied (1x20 and 9x5120)
? ? ?6. 訓(xùn)練還遇到一個內(nèi)存不足的問題3,google了兩把,按照提示加了個環(huán)境變量PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:1536,果然就好了,谷歌不欺我也。內(nèi)存不是真不足,而是碎片化嚴重,調(diào)整max_split_size_mb比降低batch size總是好的。
torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 1.20 GiB (GPU 0; 23.69 GiB total capacity; 20.29 GiB already allocated; 579.94 MiB free; 22.56 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
? ? 7. llama2微調(diào)的參數(shù)module是q_proj,k_proj,v_proj,o_proj,down_proj,gate_proj,up_proj這些,百川2很奇怪,有個自己的W_pack,把全連接打印了一下,其實還有down_proj,o_proj,up_proj,gate_proj,微調(diào)這幾個部分,效果也差不多,微調(diào)哪些更好哪些更差,暫時就不去比較了,遇到問題,也許可以調(diào)整一下。?