MiuLab / Taiwan-LLM

Traditional Mandarin LLMs for Taiwan
https://twllm.com
Apache License 2.0
938 stars 81 forks source link

請問訓練用的程式碼是用哪一套? #58

Open wennycooper opened 2 months ago

wennycooper commented 2 months ago

請問訓練 (pretraining & fine-tuning)用的程式碼是用哪一套? Axolotl? Llama-factory? 或是其它呢? (huggingface_trl 似乎不支援 pretraining) 可否分享訓練用的設定檔案? 謝謝!

adamlin120 commented 1 month ago

如果你用多(>=8)張高級顯卡 (A/H 系列) 建議用 NVIDIA 原生 Nemo, Megatron, 或是開源的 nanotron。 非以上情境,我個人最喜歡用 axolotl,雖然時不時會有小坑哈哈

TRL 是相對乾淨的套件,如果想掌握全程,也蠻推薦的。

BTW twllm 這個 project v1, v2 訓練腳本是幾乎我自己重寫的,但現在建議任何階段都用現有套件就好。

wennycooper commented 1 month 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?

請問我這觀念正確嗎? 謝謝您!

adamlin120 commented 1 month ago

CPT 和 SFT 單純是資料準備 (格式) 不同。 Apply chat template to conversations == text。 要說做 SFT == cPT 技術上沒問題,但可能會造成溝通上的誤會。

btw 有些人做 SFT 會不學習 (不算 loss) user-side 的對話,只學習 assistant-side 的對話。這樣可以加快訓練,但表現上不會有太大差意。

adamlin120 commented 1 month ago

FYI,twllm v3 cPT 和 sft 就是一起做,然後只學習 assistant-side。

wennycooper commented 1 month ago

感謝助教!! 您的回覆和網上發布的教學videos對我的研究和工作都很有幫助. 謝謝您!

wennycooper commented 4 weeks ago

抱歉助教我再接續請教, CPT的訓練資料是取corpus, 由於語言模型有context window size限制, 請問要如何從corpus split出 一筆 example row? 還有要BOS 和EOS 要補到哪裡呢?

關於split, 我想得到的有: 1.以sentence 為單位, 取多個sentences, 盡量塞滿 context window. 2.以段落為單位, 取多個段落, 盡量塞滿 context window. 或是有什麼較正規的作法呢??