厲害!請教預訓練所需硬體資源 以及訓練代碼原理

#2
by nps798 - opened

你好
我想要依照您的方式也實作一個繁體中文版的phi
根據你的ipynb您的預訓練是擴增vocab然後使用跑了4 epoch嗎 所需要資源大概是怎麼樣的gpu多少vram呢
我想跑在3090 ti 24gb不知道可否

另外我想請教,有人提到說其實fine tuning跟pretrainin的代碼其實是一樣的 因為都是在預測next token請問是這樣嗎 謝謝

第一个问题,如果需要纯繁体中文的词表(vocab)可以自己训练tokenizer,训练代码在GitHub仓库有。如果要保存简体中文的话,可以做扩充操作。这个是实验性的项目,只训练了3-4天,数据量也比较少。我这边预训练、sft、rlhf都是在同一个机器完成的,配置如下:

CPU: Intel(R) i5-13600k @ 5.1GHz
内存:32 GB
显卡:NVIDIA GeForce RTX 4060 Ti 16GB * 1

预训练数据少(比如500万行*每行320个字符)且词表扩充后不超过6万的话,3090TI 24G肯定是够了的,大不了多训练几天就是了。如果数据集非常大,还是建议上多卡并行。

第二个问题,预训练(pre_train)和微调(sft,Supervised fine-tuning)阶段95%以上的代码是一样的。
区别是loss的处理方式不一样,对于phi这种clm(causal language model,因果语言模型)模型来说:

  • pretrain阶段,shift移动一位后计算全部输入的loss,phi源码写有,比较容易理解。
  • sft阶段,输入的形式变了,比如这种:
input_txt:
##提问:写一篇关于多次迟到的检讨。##回答:balababala

特殊标记##回答:及之前的损失不会被计算(被mask了),之后的token损失计算就和pretrain一样了,shift移动一位后计算预测下一个词的损失loss。

phi2是一个实验项目,如果还想知道更多的中文小模型的数据处理、预训练等流程的话,可以参考我的另一个项目:ChatLM-mini-Chinese

謝謝您大大

請問你,您提到的在supervised fine-tuning (具體來說應該是instruction fine tuning的部分)

特殊标记##回答:及之前的损失不会被计算(被mask了),之后的token损失计算就和pretrain一样了,shift移动一位后计算预测下一个词的损失loss

是否具體來說就是sft.ipynb下面這段代碼去實現的?

data_collator = DataCollatorForCompletionOnlyLM(instruction_template=instruction_template, response_template=response_template, tokenizer=tokenizer, mlm=False)

我參考的來源是看別人的forum問答https://github.com/huggingface/trl/issues/632
提到DataCollatorForCompletionOnlyLM的運作原理是利用把response_template結束之前的所有東西pad_tokens are set to -100 讓pytorch去忽略 ##回答: 出來之前所有token

Owner

是的,sft阶段loss的mask是通过DataCollatorForCompletionOnlyLM的实现。pretrain阶段是通过DataCollatorForLanguageModeling实现。

Sign up or log in to comment