ChatGLM-6B 微調(diào):P-Tuning,LoRA,F(xiàn)ull parameter
發(fā)布日期:2023/6/20 23:19:57 瀏覽量:
本視頻的分點(diǎn)摘要:
1. 本報(bào)告將從頭到尾手把手教大家如何翻譯ChatGLM6B模型。
2. GLM模型是一個(gè)語言模型,其預(yù)訓(xùn)練過程與GPT有所不同。
3. GLM模型包括GLM、GLM 130B和GLM 6B等不同規(guī)模的模型,需要不同算力來實(shí)現(xiàn)高效微調(diào)或全量微調(diào)。
4. Finetune過程中,介紹了Mixed Precision和ZeRO優(yōu)化器等基礎(chǔ)知識(shí),以及P tuning和Lora等高效微調(diào)方法。
5. 借助Gradio,可以將模型前端部署,實(shí)現(xiàn)與用戶的交互。
6. 使用Finetune方法,4bit量化的情況下可以用7GB,否則需要十幾個(gè)GB,全量微調(diào)的話需要50多個(gè)GB,使用4張A100可以跑起來。
7. 借助NVIDIA Pytorch,可在Linux機(jī)器上起一個(gè)Torch container,方便快捷地進(jìn)行環(huán)境配置。
8. 下載checkpoint可以參考hugging face view,需首先下載git-lfs并按照操作系統(tǒng)進(jìn)行操作。手動(dòng)下載也可通過github repo內(nèi)的方法來實(shí)現(xiàn)。
9. 下載checkpoint時(shí)需注意鏡像的源問題,建議使用三條命令來快速放遠(yuǎn)。若從hugging face下載,則需注意LFS運(yùn)行過程沒有回顯的問題。
10. 手動(dòng)下載checkpoint文件時(shí),推薦使用清華cloud downloader工具,可以快速下載。
11. 下載完checkpoint后,需要克隆官方的源代碼并手動(dòng)安裝適合的torch,然后install requirements。
12. 在web demo和CL demo中,需要把tokenizer和model的相對(duì)路徑改成自己的路徑才能運(yùn)行。
13. 可以通過量化支持來減小模型的顯存占用。
14. 在CL demo中,可以通過指定顯存大小來避免顯存不足的情況。
15. 可以使用cli或webdemo進(jìn)行推理,簡(jiǎn)化前端開發(fā)。
16. 通過使用半精度浮點(diǎn)數(shù)(如FP16或Brain Flow16)可以提高模型訓(xùn)練效率,節(jié)約顯存,但可能會(huì)丟失精度。
17. 在訓(xùn)練中將參數(shù)、Momentum和Variance這三個(gè)參數(shù)都用高精度來表示,以避免出現(xiàn)非常小的gradients 而影響模型訓(xùn)練。
18. Gradio是一種非常適合深度學(xué)習(xí)模型展示和推理的前后端框架。
19. 在使用demo時(shí)需要注意路徑修改和顯存不足的解決方法。
20. 使用半精度浮點(diǎn)數(shù)可以提升模型訓(xùn)練效率,但需要注意Dynamic Loss Scaling技術(shù),避免訓(xùn)練過程中出現(xiàn)下溢情況。
21. 推薦使用Gradio框架進(jìn)行前端開發(fā)和模型推理,需要注意demo使用時(shí)的細(xì)節(jié)。
22. Zero Redundancy是一種可以幫助省略顯存的技術(shù),結(jié)合數(shù)據(jù)并行和模型并行可以有效提高訓(xùn)練效率。
23. Mono parallel技術(shù)可以實(shí)現(xiàn)模型并行,在不同的GPUs上分別運(yùn)行不同分塊的計(jì)算,并在訓(xùn)練的過程中進(jìn)行數(shù)據(jù)交換。
24. 拆分模型到多張卡上可能會(huì)導(dǎo)致慢速和內(nèi)存問題,不建議用CPU訓(xùn)練。
25. Model parallel的通信太慢,而data parallel有較大冗余,Zero Redundancy 提出了拆分optimizer state的解決方案。
26. Pgminv2 是一種高效微調(diào)方法,通過在每層添加 learnable parameter 來節(jié)約GPU memory和訓(xùn)練時(shí)間,且具有較好的性能。
27. Pgminv2 在大型模型上的表現(xiàn)不錯(cuò)。
28. 前文介紹了Pgminv2的高效微調(diào)方法和Zero Redundancy的optimizer state拆分方案,用于多卡訓(xùn)練中的內(nèi)存和通信效率問題。
29. 本段內(nèi)容是關(guān)于一個(gè)廣告數(shù)據(jù)集的例子,用于描述模型將一組屬性轉(zhuǎn)化為易于閱讀的廣告詞的過程。
30. 在運(yùn)行這個(gè)例子時(shí),需要下載并安裝相關(guān)依賴,可以設(shè)置quantization bet參數(shù)以控制量化程度。
31. 問題包括災(zāi)難性遺忘和過擬合,可以通過各種數(shù)據(jù)增強(qiáng)和減少訓(xùn)練epoch等方式緩解。
32. 最后,可以使用已經(jīng)訓(xùn)練好的模型的checkpoint文件進(jìn)行評(píng)估,設(shè)置do predict參數(shù)指示訓(xùn)練還是推理,提供prompt和response列指示訓(xùn)練數(shù)據(jù)中的相關(guān)信息。
33. 可以通過override cache來節(jié)約debug時(shí)間;
34. 在evaluate的時(shí)候,可以開啟output directory來保存結(jié)果;
35. 可以通過max source/target length來限制token的長度并進(jìn)行padding;
36. 需要使用accumulation state來模擬大的batch size來進(jìn)行高效微調(diào);
37. evaluate函數(shù)可以增加prompt輸出讓結(jié)果更明確。
38. LoRa放在后面,使用另外一個(gè)倉庫zeroNLP,節(jié)省倉庫時(shí)間。
39. 使用full parameter時(shí)要用dbscript實(shí)現(xiàn)zero,指定模型名稱或路徑,使用4張卡進(jìn)行訓(xùn)練。
40. 當(dāng)使用dbc時(shí),不要使用cuda-available-devices做設(shè)備排序,要使用include參數(shù)。
41. LoRa方法是加入一個(gè)d矩陣來模擬fine-tuning的效果,省去復(fù)雜計(jì)算。
42. LoRa在GPT上表現(xiàn)佳,在中國語料庫chineseopaca上也有應(yīng)用,詞表已被刪減以節(jié)約顯存。
43. LoRa方法和應(yīng)用。
44. china6166更新情況:刪除icetk依賴,并在早期版本的基礎(chǔ)上添加支持LoRa和avch數(shù)據(jù)集的修改。
45. 翻譯使用無外乎就是需要一個(gè)prompt,模型識(shí)別prompt模式,輸出response。
46. 能夠仿造以上流程處理不同的數(shù)據(jù)集。
47. 對(duì)于訓(xùn)練新任務(wù),數(shù)據(jù)量的要求會(huì)根據(jù)任務(wù)不同而有所不同,需要投入足夠的數(shù)據(jù)才能學(xué)會(huì)。
48. P-tuning V2和Lower兩種翻譯方式都可以嘗試,使用哪種方式要看實(shí)際情況。
49. 原始能力丟失不一定與P-tuning和Lower有關(guān),F(xiàn)ine-tune過程中需要保持原始能力可以用預(yù)設(shè)的數(shù)據(jù)集進(jìn)行微調(diào)。
50. 全量微調(diào)需要的配置較少,只需要改好模型路徑和數(shù)據(jù)集位置即可。
51. 微調(diào)之后,Out-of-Distribution數(shù)據(jù)可能會(huì)回答不準(zhǔn)確,如果出現(xiàn)卡死的情況可以設(shè)置Max Length或Max New Token。
52. 提供了關(guān)于訓(xùn)練新任務(wù)、翻譯方式選擇、原始能力丟失、全量微調(diào)配置和微調(diào)后回答出現(xiàn)錯(cuò)誤等問題的具體建議和解決方案。
53. 介紹了一些成功案例和應(yīng)對(duì)方法,如0nlp和Lora的使用。
54. 參考了前文提到的chinese alpaca的數(shù)據(jù),構(gòu)建了相應(yīng)的數(shù)據(jù)集,進(jìn)行了訓(xùn)練。
55. 在訓(xùn)練和數(shù)據(jù)處理過程中,需要注意代碼修改和數(shù)據(jù)格式的處理。
56. 根據(jù)微調(diào)訓(xùn)練的具體情況,精細(xì)調(diào)整模型參數(shù),避免出現(xiàn)過擬合和性能不佳的問題。
57. 在微調(diào)時(shí)可以使用高效微調(diào)和增加更多場(chǎng)景下的對(duì)話數(shù)據(jù)提升模型性能。
58. 訓(xùn)練時(shí)需要注意修改代碼和處理數(shù)據(jù)格式,微調(diào)時(shí)需要精細(xì)調(diào)整避免性能不佳。
59. 在訓(xùn)練過程中,可以調(diào)整max step以減少訓(xùn)練時(shí)間,同時(shí)需要注意處理集大小與訓(xùn)練步數(shù)的關(guān)系。
60. 在微調(diào)過程中,通過使用統(tǒng)一的prompt和添加前置prompt來提升模型效果。
61. 在進(jìn)行分類任務(wù)時(shí),通過增加一個(gè)新的head可以實(shí)現(xiàn)輸出分類標(biāo)簽和分類概率。
62. 在構(gòu)建專業(yè)數(shù)據(jù)問答機(jī)器人時(shí),需要準(zhǔn)備大量的專業(yè)問答數(shù)據(jù),并進(jìn)行簡(jiǎn)單的數(shù)據(jù)增廣和微調(diào)。
63. 對(duì)于max target length的設(shè)置,需要考慮硬件需求和截?cái)嗟挠绊懀约笆褂胠ogic processor等工具來保證穩(wěn)定輸出。
64. 通過減少fine tune step、加入明顯的pattern或prompt等方式,可以緩解fine tune過程中原始能力丟失的問題。
65. 對(duì)于不同的任務(wù),需要準(zhǔn)備不同量級(jí)的數(shù)據(jù),如專業(yè)問答需要大量的對(duì)話數(shù)據(jù)。
66. 對(duì)于訓(xùn)練有限的問答機(jī)器人,建議增加retrieval模塊以提高準(zhǔn)確率。
67. 訓(xùn)練過程中的關(guān)鍵點(diǎn)包括pre-sequence length和參數(shù)大小,應(yīng)根據(jù)數(shù)據(jù)集大小進(jìn)行調(diào)整。
68. 若需要在多個(gè)場(chǎng)景中微調(diào)模型,可考慮使用多個(gè)channel的GM6b模型。
69. instruction tuning的channelGM6b可根據(jù)具體數(shù)據(jù)集采用經(jīng)典的instruction input,output形式。
70. 建議在知識(shí)庫embedding時(shí),將長文檔拆分為多個(gè)段落,并將其作為prompt進(jìn)行信息抽取。
71. 在構(gòu)建問答機(jī)器人中應(yīng)加強(qiáng)retrieval模塊,以提高準(zhǔn)確率。
72. 根據(jù)數(shù)據(jù)集大小調(diào)整pre-sequence length和參數(shù)大小。
73. 使用多個(gè)channel、instruction tuning的channelGM6b和知識(shí)庫embedding等方法來提高機(jī)器人的表現(xiàn)。
74. 訓(xùn)練模型做混淆解密需要大量相關(guān)訓(xùn)練數(shù)據(jù),且加入這些數(shù)據(jù)可能會(huì)降低機(jī)器人的對(duì)話能力。 作者:層林盡染 https://www.bilibili.com/read/cv24092488?jump_opus=1 出處:bilibili
馬上咨詢: 如果您有業(yè)務(wù)方面的問題或者需求,歡迎您咨詢!我們帶來的不僅僅是技術(shù),還有行業(yè)經(jīng)驗(yàn)積累。
QQ: 39764417/308460098 Phone: 13 9800 1 9844 / 135 6887 9550 聯(lián)系人:石先生/雷先生