Open wennycooper opened 2 months ago
感謝助教, 我再接下去問. 如果我用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. 或是有什麼較正規的作法呢??
請問訓練 (pretraining & fine-tuning)用的程式碼是用哪一套? Axolotl? Llama-factory? 或是其它呢? (huggingface_trl 似乎不支援 pretraining) 可否分享訓練用的設定檔案? 謝謝!