DeepSeekV3-671B-BF16 Lora Finetune
What does this PR do?
DeepSeekV3-671B-BF16 Lora Finetune
Fixes #6824 Fixes #6829
Before submitting
- [ ] Did you read the contributor guideline?
- [ ] Did you write any new necessary tests?
@xs1997zju 你好,这是使用了什么硬件资源配置跑起来的?
@xs1997zju 你好,这是使用了什么硬件资源配置跑起来的?
你好, 4机32卡 A卡
@xs1997 跑的lora训练吗?4机 A100-80G吗?
@hiyouga 请问下你这边也有跑过v3-671B的lora不, 最大长度能训到多少?
@xs1997zju 看机器数量。跑训练要修改 modeling 文件才行吧
@xs1997zju 看机器数量。跑训练要修改 modeling 文件才行吧
你这边实际跑用了几机呢?
@xs1997zju 看机器数量。跑训练要修改 modeling 文件才行吧
你这边实际跑用了几机呢?
@hiyouga
80 张
8卡x10机, A卡还是H卡, 你测试过最大能训到多长的seq-len? 1024? 2048? @hiyouga
能训到多长的seq-len? 1024? 2048? @hiyouga
lora rank多大? 开zero3 cpuoff吗?
@hiyouga @xs1997zju 代码还不合呢
80G 卡,4k seqlen
@hiyouga bf16?
80G 卡,4k seqlen
@hiyouga bf16?
@hiyouga 方便show下你的具体配置?
80G 卡,4k seqlen
@hiyouga bf16?
@hiyouga 方便show下你的具体配置?
这个commit: https://github.com/hiyouga/LLaMA-Factory/pull/6843/files/be21531bab79793c5fc87928d63d793ca6dd8e98
80G 卡,4k seqlen 确认下是4096打满的数据来测的?还是只是max_seq_len设置成了4096, 实际数据没到这个长度呢
80G 卡,4k seqlen 确认下是4096打满的数据来测的?还是只是max_seq_len设置成了4096, 实际数据没到这个长度呢
@hiyouga
modeling 文件需要做哪些修改啊,目前有下面两个问题
modeling 文件需要做哪些修改啊,目前有下面两个问题
assert not self.training 应该可以直接忽略掉,这段是已经得到所有expert的routing scores之后算出topk,然后根据topk indices去取routing scores。中间部分都是在算topk indices,训练只要保证取出来scores也就是topk weight有梯度回传就行。
modeling 文件需要做哪些修改啊,目前有下面两个问题
assert not self.training 应该可以直接忽略掉,这段是已经得到所有expert的routing scores之后算出topk,然后根据topk indices去取routing scores。中间部分都是在算topk indices,训练只要保证取出来scores也就是topk weight有梯度回传就行。
如果忽略掉的话,那整个MOE模块就不会更新参数了。这样的话,是load已有的模型还好,但是如果是想要借用该文件,从零开始train的话,就肯定不成了。
但是看deepseek V2的moe模块有相关的训练代码,在试能不能复用
assert not self.training 应该可以直接忽略掉,这段是已经得到所有expert的routing scores之后算出topk,然后根据topk indices去取routing scores。中间部分都是在算topk indices,训练只要保证取出来scores也就是topk weight有梯度回传就行。
如果忽略掉的话,那整个MOE模块就不会更新参数了。这样的话,是load已有的模型还好,但是如果是想要借用该文件,从零开始train的话,就肯定不成了。
但是看deepseek V2的moe模块有相关的训练代码,在试能不能复用
为啥忽略掉就不会更新参数,是这个实现中topk_weight没有梯度吗?我现在没资源,你是跑过发现这个情况吗?还有我这里只是说MoEGate,DeepseekV3MoE哪个moe_infer还在看
modeling 文件需要做哪些修改啊,目前有下面两个问题
assert not self.training 应该可以直接忽略掉,这段是已经得到所有expert的routing scores之后算出topk,然后根据topk indices去取routing scores。中间部分都是在算topk indices,训练只要保证取出来scores也就是topk weight有梯度回传就行。
如果忽略掉的话,那整个MOE模块就不会更新参数了。这样的话,是load已有的模型还好,但是如果是想要借用该文件,从零开始train的话,就肯定不成了。
但是看deepseek V2的moe模块有相关的训练代码,在试能不能复用
不理解assert not self.training忽略掉,为什么整个MOE模块就不会更新参数,下面的DeepseekV3MoE forward在V2上看到对应train代码,看上去可以复用,应该要去掉Aux loss那一行
modeling 文件需要做哪些修改啊,目前有下面两个问题
assert not self.training 应该可以直接忽略掉,这段是已经得到所有expert的routing scores之后算出topk,然后根据topk indices去取routing scores。中间部分都是在算topk indices,训练只要保证取出来scores也就是topk weight有梯度回传就行。
如果忽略掉的话,那整个MOE模块就不会更新参数了。这样的话,是load已有的模型还好,但是如果是想要借用该文件,从零开始train的话,就肯定不成了。 但是看deepseek V2的moe模块有相关的训练代码,在试能不能复用
不理解assert not self.training忽略掉,为什么整个MOE模块就不会更新参数,下面的DeepseekV3MoE forward在V2上看到对应train代码,看上去可以复用,应该要去掉Aux loss那一行
刚试了下,根据V2的 MOE的代码,修改后确实能跑。
assert not self.training 应该可以直接忽略掉,这段是已经得到所有expert的routing scores之后算出topk,然后根据topk indices去取routing scores。中间部分都是在算topk indices,训练只要保证取出来scores也就是topk weight有梯度回传就行。
如果忽略掉的话,那整个MOE模块就不会更新参数了。这样的话,是load已有的模型还好,但是如果是想要借用该文件,从零开始train的话,就肯定不成了。 但是看deepseek V2的moe模块有相关的训练代码,在试能不能复用
为啥忽略掉就不会更新参数,是这个实现中topk_weight没有梯度吗?我现在没资源,你是跑过发现这个情况吗?还有我这里只是说MoEGate,DeepseekV3MoE哪个moe_infer还在看
可以看下,DeepseekV3MoE的forward函数,根据它现在的代码,训练时,返回值y 实际没有使用 self.gate函数的返回值进行计算
我们说的不是一件事
modeling 文件需要做哪些修改啊,目前有下面两个问题
assert not self.training 应该可以直接忽略掉,这段是已经得到所有expert的routing scores之后算出topk,然后根据topk indices去取routing scores。中间部分都是在算topk indices,训练只要保证取出来scores也就是topk weight有梯度回传就行。
如果忽略掉的话,那整个MOE模块就不会更新参数了。这样的话,是load已有的模型还好,但是如果是想要借用该文件,从零开始train的话,就肯定不成了。 但是看deepseek V2的moe模块有相关的训练代码,在试能不能复用
不理解assert not self.training忽略掉,为什么整个MOE模块就不会更新参数,下面的DeepseekV3MoE forward在V2上看到对应train代码,看上去可以复用,应该要去掉Aux loss那一行
刚试了下,根据V2的 MOE的代码,修改后确实能跑。
能分享下完整的修改吗,我裁剪模型测试,按照pr修改可以跑,下面的_set_z3_leaf_modules记得会有个报错
modeling 文件需要做哪些修改啊,目前有下面两个问题
assert not self.training 应该可以直接忽略掉,这段是已经得到所有expert的routing scores之后算出topk,然后根据topk indices去取routing scores。中间部分都是在算topk indices,训练只要保证取出来scores也就是topk weight有梯度回传就行。
如果忽略掉的话,那整个MOE模块就不会更新参数了。这样的话,是load已有的模型还好,但是如果是想要借用该文件,从零开始train的话,就肯定不成了。 但是看deepseek V2的moe模块有相关的训练代码,在试能不能复用
不理解assert not self.training忽略掉,为什么整个MOE模块就不会更新参数,下面的DeepseekV3MoE forward在V2上看到对应train代码,看上去可以复用,应该要去掉Aux loss那一行
刚试了下,根据V2的 MOE的代码,修改后确实能跑。
能分享下完整的修改吗,我裁剪模型测试,按照pr修改可以跑,下面的_set_z3_leaf_modules记得会有个报错
看了下,我和你的改动一致。但是我目前是采用了单机单卡跑的,修改了hidden_size和num_hidden_layers的参数配置。如下:
modeling 文件需要做哪些修改啊,目前有下面两个问题
assert not self.training 应该可以直接忽略掉,这段是已经得到所有expert的routing scores之后算出topk,然后根据topk indices去取routing scores。中间部分都是在算topk indices,训练只要保证取出来scores也就是topk weight有梯度回传就行。
如果忽略掉的话,那整个MOE模块就不会更新参数了。这样的话,是load已有的模型还好,但是如果是想要借用该文件,从零开始train的话,就肯定不成了。 但是看deepseek V2的moe模块有相关的训练代码,在试能不能复用
不理解assert not self.training忽略掉,为什么整个MOE模块就不会更新参数,下面的DeepseekV3MoE forward在V2上看到对应train代码,看上去可以复用,应该要去掉Aux loss那一行
刚试了下,根据V2的 MOE的代码,修改后确实能跑。
能分享下完整的修改吗,我裁剪模型测试,按照pr修改可以跑,下面的_set_z3_leaf_modules记得会有个报错
看了下,我和你的改动一致。但是我目前是采用了单机单卡跑的,修改了hidden_size和num_hidden_layers的参数配置。如下:
![]()
你修改num_hidden_layers为几,正常这里超过4层应该还会存在float32 * bfloat16错误
modeling 文件需要做哪些修改啊,目前有下面两个问题
assert not self.training 应该可以直接忽略掉,这段是已经得到所有expert的routing scores之后算出topk,然后根据topk indices去取routing scores。中间部分都是在算topk indices,训练只要保证取出来scores也就是topk weight有梯度回传就行。
如果忽略掉的话,那整个MOE模块就不会更新参数了。这样的话,是load已有的模型还好,但是如果是想要借用该文件,从零开始train的话,就肯定不成了。 但是看deepseek V2的moe模块有相关的训练代码,在试能不能复用
不理解assert not self.training忽略掉,为什么整个MOE模块就不会更新参数,下面的DeepseekV3MoE forward在V2上看到对应train代码,看上去可以复用,应该要去掉Aux loss那一行
刚试了下,根据V2的 MOE的代码,修改后确实能跑。
能分享下完整的修改吗,我裁剪模型测试,按照pr修改可以跑,下面的_set_z3_leaf_modules记得会有个报错
看了下,我和你的改动一致。但是我目前是采用了单机单卡跑的,修改了hidden_size和num_hidden_layers的参数配置。如下:
![]()
你修改num_hidden_layers为几,正常这里超过4层应该还会存在float32 * bfloat16错误
8
modeling 文件需要做哪些修改啊,目前有下面两个问题
assert not self.training 应该可以直接忽略掉,这段是已经得到所有expert的routing scores之后算出topk,然后根据topk indices去取routing scores。中间部分都是在算topk indices,训练只要保证取出来scores也就是topk weight有梯度回传就行。
如果忽略掉的话,那整个MOE模块就不会更新参数了。这样的话,是load已有的模型还好,但是如果是想要借用该文件,从零开始train的话,就肯定不成了。 但是看deepseek V2的moe模块有相关的训练代码,在试能不能复用
不理解assert not self.training忽略掉,为什么整个MOE模块就不会更新参数,下面的DeepseekV3MoE forward在V2上看到对应train代码,看上去可以复用,应该要去掉Aux loss那一行
刚试了下,根据V2的 MOE的代码,修改后确实能跑。
能分享下完整的修改吗,我裁剪模型测试,按照pr修改可以跑,下面的_set_z3_leaf_modules记得会有个报错
看了下,我和你的改动一致。但是我目前是采用了单机单卡跑的,修改了hidden_size和num_hidden_layers的参数配置。如下:
![]()
你修改num_hidden_layers为几,正常这里超过4层应该还会存在float32 * bfloat16错误
![]()
8
有点奇怪,你有打印每层decoder输出的dtype吗
modeling 文件需要做哪些修改啊,目前有下面两个问题
assert not self.training 应该可以直接忽略掉,这段是已经得到所有expert的routing scores之后算出topk,然后根据topk indices去取routing scores。中间部分都是在算topk indices,训练只要保证取出来scores也就是topk weight有梯度回传就行。
如果忽略掉的话,那整个MOE模块就不会更新参数了。这样的话,是load已有的模型还好,但是如果是想要借用该文件,从零开始train的话,就肯定不成了。 但是看deepseek V2的moe模块有相关的训练代码,在试能不能复用
不理解assert not self.training忽略掉,为什么整个MOE模块就不会更新参数,下面的DeepseekV3MoE forward在V2上看到对应train代码,看上去可以复用,应该要去掉Aux loss那一行
刚试了下,根据V2的 MOE的代码,修改后确实能跑。
能分享下完整的修改吗,我裁剪模型测试,按照pr修改可以跑,下面的_set_z3_leaf_modules记得会有个报错
看了下,我和你的改动一致。但是我目前是采用了单机单卡跑的,修改了hidden_size和num_hidden_layers的参数配置。如下:
![]()
你修改num_hidden_layers为几,正常这里超过4层应该还会存在float32 * bfloat16错误
![]()
8
有点奇怪,你有打印每层decoder输出的dtype吗
还没,不过我这的grad_norm目前输出是nan





