請問訓練用的程式碼是用哪一套?
請問訓練 (pretraining & fine-tuning)用的程式碼是用哪一套? Axolotl? Llama-factory? 或是其它呢? (huggingface_trl 似乎不支援 pretraining) 可否分享訓練用的設定檔案? 謝謝!
如果你用多(>=8)張高級顯卡 (A/H 系列) 建議用 NVIDIA 原生 Nemo, Megatron, 或是開源的 nanotron。 非以上情境,我個人最喜歡用 axolotl,雖然時不時會有小坑哈哈
TRL 是相對乾淨的套件,如果想掌握全程,也蠻推薦的。
BTW twllm 這個 project v1, v2 訓練腳本是幾乎我自己重寫的,但現在建議任何階段都用現有套件就好。
感謝助教, 我再接下去問. 如果我用TRL, 請問如何做continuous pre-training? 技術上與 SFT 有何不一樣? 是不是其實只是資料上的不同??
我知道概念上, pre-training 要準備的是 corpus, 而supervised fine-tuning 要準備的是 QA pair dataset.
我看網路上大多都在談用TRL 的SFTrainer + QA pair dataset做 supervised fine-tuning. 少有在談 pre-training,
https://huggingface.co/docs/trl/sft_trainer#quickstart 我看這個範例中, 資料集其實就是一個 text欄位,
我的理解是, 反正訓練LLM就是訓練它產生下一個token, 即使是做supervised training, QA pair資料 最終也是把Q & A 透過prompt_template 給 concatenate 在一起變成一個text欄位拿去訓練, 所以其實 pre-training 跟 supervised fine-tuning 技術其實一樣?
也是不是可以說, 我可以把一筆一筆預訓練用的字串準備好, 用SFTTrainer訓練, 這樣也就是做pre-training?
請問我這觀念正確嗎? 謝謝您!
CPT 和 SFT 單純是資料準備 (格式) 不同。 Apply chat template to conversations == text。 要說做 SFT == cPT 技術上沒問題,但可能會造成溝通上的誤會。
btw 有些人做 SFT 會不學習 (不算 loss) user-side 的對話,只學習 assistant-side 的對話。這樣可以加快訓練,但表現上不會有太大差意。
FYI,twllm v3 cPT 和 sft 就是一起做,然後只學習 assistant-side。
感謝助教!! 您的回覆和網上發布的教學videos對我的研究和工作都很有幫助. 謝謝您!
抱歉助教我再接續請教, CPT的訓練資料是取corpus, 由於語言模型有context window size限制, 請問要如何從corpus split出 一筆 example row? 還有要BOS 和EOS 要補到哪裡呢?
關於split, 我想得到的有: 1.以sentence 為單位, 取多個sentences, 盡量塞滿 context window. 2.以段落為單位, 取多個段落, 盡量塞滿 context window. 或是有什麼較正規的作法呢??
只要你的文章是連續的,就可以擺在一起,越長越好。以你的例子應該是段落甚至是文章。
每一筆資料插入BOS 在最開始, cos 最後面。