【官方教程】ChatGLM-6B 微調(diào):P-Tuning,LoRA,F(xiàn)ull p

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