Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
wennycooper opened this issue Apr 12, 2024 · 7 comments
Open

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

wennycooper opened this issue Apr 12, 2024 · 7 comments

Comments

@wennycooper
Copy link

wennycooper commented Apr 12, 2024

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

@adamlin120
Copy link
Collaborator

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

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

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

@wennycooper
Copy link
Author

wennycooper commented May 22, 2024

感謝助教, 我再接下去問.
如果我用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
Copy link
Collaborator

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

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

@adamlin120
Copy link
Collaborator

adamlin120 commented May 24, 2024

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

@wennycooper
Copy link
Author

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

@wennycooper
Copy link
Author

wennycooper commented May 31, 2024

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

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

@adamlin120
Copy link
Collaborator

只要你的文章是連續的,就可以擺在一起,越長越好。以你的例子應該是段落甚至是文章
每一筆資料插入BOS 在最開始, cos 最後面。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants