jingyaogong / minimind

「大模型」3小时完全从0训练26M的小参数GPT,个人显卡即可推理训练!
https://jingyaogong.github.io/minimind
Apache License 2.0
2.34k stars 277 forks source link

请教如何调整model的参数配置 #40

Open yiyuanli939 opened 3 weeks ago

yiyuanli939 commented 3 weeks ago

在README.md 中,有一个提示是“2.3 在./model/LMConfig.py 中调整model的参数配置“。能请教一下如何比如将模型调成最小的吗?

WangRongsheng commented 3 weeks ago

现在LMconfig就是配置的最小参数:https://github.com/jingyaogong/minimind/blob/master/model/LMConfig.py

jingyaogong commented 3 weeks ago

在README.md 中,有一个提示是“2.3 在./model/LMConfig.py 中调整model的参数配置“。能请教一下如何比如将模型调成最小的吗?

有提到哦 Model Name params len_vocab n_layers d_model kv_heads q_heads share+route TopK
minimind-v1-small 26M 6400 8 512 8 16 - -
minimind-v1-moe 4×26M 6400 8 512 8 16 2+4 2
minimind-v1 108M 6400 16 768 8 16 - -
dim就是token-dimension 默认= 512
n_layers 就是 TransformerBlock的层数 默认= 8

“将模型调成最小的”不知道你说的是调整成我训练过的几个版本里最小的 512+8=26.88M 还是继续尝试缩小,比如 256+8=7.54M 128+8=2.39M

yiyuanli939 commented 3 weeks ago

非常感谢二位的帮助和指出!!

yiyuanli939 commented 3 weeks ago

在README.md 中,有一个提示是“2.3 在./model/LMConfig.py 中调整model的参数配置“。能请教一下如何比如将模型调成最小的吗?

有提到哦

Model Name params len_vocab n_layers d_model kv_heads q_heads share+route TopK minimind-v1-small 26M 6400 8 512 8 16 - - minimind-v1-moe 4×26M 6400 8 512 8 16 2+4 2 minimind-v1 108M 6400 16 768 8 16 - -

dim就是token-dimension 默认= 512
n_layers 就是 TransformerBlock的层数 默认= 8

“将模型调成最小的”不知道你说的是调整成我训练过的几个版本里最小的 512+8=26.88M 还是继续尝试缩小,比如 256+8=7.54M 128+8=2.39M

当时还不太明白,现在明白了。Mac上一些加速不支持(比如bfloat16,autocast)。已经尝试通过把模型调成128 + 4来减少训练时间了。

jingyaogong commented 3 weeks ago

在README.md 中,有一个提示是“2.3 在./model/LMConfig.py 中调整model的参数配置“。能请教一下如何比如将模型调成最小的吗?

有提到哦 Model Name params len_vocab n_layers d_model kv_heads q_heads share+route TopK minimind-v1-small 26M 6400 8 512 8 16 - - minimind-v1-moe 4×26M 6400 8 512 8 16 2+4 2 minimind-v1 108M 6400 16 768 8 16 - -

dim就是token-dimension 默认= 512
n_layers 就是 TransformerBlock的层数 默认= 8

“将模型调成最小的”不知道你说的是调整成我训练过的几个版本里最小的 512+8=26.88M 还是继续尝试缩小,比如 256+8=7.54M 128+8=2.39M

当时还不太明白,现在明白了。Mac上一些加速不支持(比如bfloat16,autocast)。已经尝试通过把模型调成128 + 4来减少训练时间了。

对的,用更小的参数训练必然更快,能跑通流程,但是效果肯定就完全丧失了

128+4 对应1.6M大小模型,160万参数 512+8 对应26M大小模型,2600万参数

可以简单的理解成,需要一个模型刷题,刷成千上万的题,全人类的语言百科都给他刷一遍,但是只给它分配了160万的记忆细胞,一定是学完就忘,白学一遍,对草履虫弹琴。

想象一下,160万参数模型,权重文件占10MB左右的文件。训练假设学了10GB的文本语料,相当于把10GB的文件知识点全部无损压缩到10MB模型权重里面去,压缩率是1000倍。听起来不可思议,确实是不可能的。

但是0~1M量级的模型,也有很多它用武之地。 可以做成bert衍生出简单的文本分类情感标注任务,不需要模型那么强的逻辑和记忆力。 在视觉里就多了,检测、识别、逆问题......当然gan/vae/diffusion的生成任务也还是免谈,太小了

具备2600万记忆细胞的 512+8 模型尚可勉强一战,越大越好,参数多多益善。

yiyuanli939 commented 3 weeks ago

在README.md 中,有一个提示是“2.3 在./model/LMConfig.py 中调整model的参数配置“。能请教一下如何比如将模型调成最小的吗?

有提到哦 Model Name params len_vocab n_layers d_model kv_heads q_heads share+route TopK minimind-v1-small 26M 6400 8 512 8 16 - - minimind-v1-moe 4×26M 6400 8 512 8 16 2+4 2 minimind-v1 108M 6400 16 768 8 16 - -

dim就是token-dimension 默认= 512
n_layers 就是 TransformerBlock的层数 默认= 8

“将模型调成最小的”不知道你说的是调整成我训练过的几个版本里最小的 512+8=26.88M 还是继续尝试缩小,比如 256+8=7.54M 128+8=2.39M

当时还不太明白,现在明白了。Mac上一些加速不支持(比如bfloat16,autocast)。已经尝试通过把模型调成128 + 4来减少训练时间了。

对的,用更小的参数训练必然更快,能跑通流程,但是效果肯定就完全丧失了

128+4 对应1.6M大小模型,160万参数 512+8 对应26M大小模型,2600万参数

可以简单的理解成,需要一个模型刷题,刷成千上万的题,全人类的语言百科都给他刷一遍,但是只给它分配了160万的记忆细胞,一定是学完就忘,白学一遍,对草履虫弹琴。

想象一下,160万参数模型,权重文件占10MB左右的文件。训练假设学了10GB的文本语料,相当于把10GB的文件知识点全部无损压缩到10MB模型权重里面去,压缩率是1000倍。听起来不可思议,确实是不可能的。

但是0~1M量级的模型,也有很多它用武之地。 可以做成bert衍生出简单的文本分类情感标注任务,不需要模型那么强的逻辑和记忆力。 在视觉里就多了,检测、识别、逆问题......当然gan/vae/diffusion的生成任务也还是免谈,太小了

具备2600万记忆细胞的 512+8 模型尚可勉强一战,越大越好,参数多多益善。

学到了!不过macbook本地很多cuda加速不能用,如果直接改的话一个epoch预计要350min,太恐怖了。可能还是得先本地先跑一轮然后之后尝试租用一些云上的英伟达GPU再去做512+8。