LLaMA-Factory icon indicating copy to clipboard operation
LLaMA-Factory copied to clipboard

DeepSeekV3-671B-BF16 Lora Finetune

Open xs1997zju opened this issue 1 year ago • 76 comments

What does this PR do?

DeepSeekV3-671B-BF16 Lora Finetune

Fixes #6824 Fixes #6829

Before submitting

xs1997zju avatar Feb 07 '25 02:02 xs1997zju

@xs1997zju 你好,这是使用了什么硬件资源配置跑起来的?

lxg2015 avatar Feb 08 '25 02:02 lxg2015

@xs1997zju 你好,这是使用了什么硬件资源配置跑起来的?

你好, 4机32卡 A卡

xs1997zju avatar Feb 10 '25 03:02 xs1997zju

@xs1997 跑的lora训练吗?4机 A100-80G吗?

Harryjun avatar Feb 10 '25 10:02 Harryjun

@hiyouga 请问下你这边也有跑过v3-671B的lora不, 最大长度能训到多少?

xs1997zju avatar Feb 10 '25 10:02 xs1997zju

@xs1997zju 看机器数量。跑训练要修改 modeling 文件才行吧

hiyouga avatar Feb 10 '25 11:02 hiyouga

@xs1997zju 看机器数量。跑训练要修改 modeling 文件才行吧

你这边实际跑用了几机呢?

xs1997zju avatar Feb 10 '25 11:02 xs1997zju

@xs1997zju 看机器数量。跑训练要修改 modeling 文件才行吧

你这边实际跑用了几机呢?

@hiyouga

xs1997zju avatar Feb 10 '25 11:02 xs1997zju

80 张

8卡x10机, A卡还是H卡, 你测试过最大能训到多长的seq-len? 1024? 2048? @hiyouga

xs1997zju avatar Feb 10 '25 11:02 xs1997zju

能训到多长的seq-len? 1024? 2048? @hiyouga

lora rank多大? 开zero3 cpuoff吗?

Harryjun avatar Feb 10 '25 11:02 Harryjun

@hiyouga @xs1997zju 代码还不合呢

Harryjun avatar Feb 10 '25 11:02 Harryjun

80G 卡,4k seqlen

@hiyouga bf16?

xs1997zju avatar Feb 10 '25 11:02 xs1997zju

image @hiyouga 如上图,deepseek V3的MoEGate模块的forward,通过 assert not self.training 限制了模型不支持微调。这部分的代码是怎么修改的呢?

Han-Huaqiao avatar Feb 10 '25 13:02 Han-Huaqiao

80G 卡,4k seqlen

@hiyouga bf16?

@hiyouga 方便show下你的具体配置?

xs1997zju avatar Feb 10 '25 13:02 xs1997zju

80G 卡,4k seqlen

@hiyouga bf16?

@hiyouga 方便show下你的具体配置?

这个commit: https://github.com/hiyouga/LLaMA-Factory/pull/6843/files/be21531bab79793c5fc87928d63d793ca6dd8e98

Han-Huaqiao avatar Feb 10 '25 13:02 Han-Huaqiao

80G 卡,4k seqlen 确认下是4096打满的数据来测的?还是只是max_seq_len设置成了4096, 实际数据没到这个长度呢

xs1997zju avatar Feb 10 '25 14:02 xs1997zju

80G 卡,4k seqlen 确认下是4096打满的数据来测的?还是只是max_seq_len设置成了4096, 实际数据没到这个长度呢

@hiyouga

xs1997zju avatar Feb 10 '25 14:02 xs1997zju

modeling 文件需要做哪些修改啊,目前有下面两个问题 image image

flyinghu123 avatar Feb 11 '25 03:02 flyinghu123

modeling 文件需要做哪些修改啊,目前有下面两个问题 image

assert not self.training 应该可以直接忽略掉,这段是已经得到所有expert的routing scores之后算出topk,然后根据topk indices去取routing scores。中间部分都是在算topk indices,训练只要保证取出来scores也就是topk weight有梯度回传就行。

Cccei000 avatar Feb 11 '25 03:02 Cccei000

modeling 文件需要做哪些修改啊,目前有下面两个问题 image

assert not self.training 应该可以直接忽略掉,这段是已经得到所有expert的routing scores之后算出topk,然后根据topk indices去取routing scores。中间部分都是在算topk indices,训练只要保证取出来scores也就是topk weight有梯度回传就行。

如果忽略掉的话,那整个MOE模块就不会更新参数了。这样的话,是load已有的模型还好,但是如果是想要借用该文件,从零开始train的话,就肯定不成了。

但是看deepseek V2的moe模块有相关的训练代码,在试能不能复用

Han-Huaqiao avatar Feb 11 '25 03:02 Han-Huaqiao

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还在看

Cccei000 avatar Feb 11 '25 05:02 Cccei000

modeling 文件需要做哪些修改啊,目前有下面两个问题 image

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那一行 image

flyinghu123 avatar Feb 11 '25 05:02 flyinghu123

modeling 文件需要做哪些修改啊,目前有下面两个问题 image

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那一行 image

刚试了下,根据V2的 MOE的代码,修改后确实能跑。

Han-Huaqiao avatar Feb 11 '25 05:02 Han-Huaqiao

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函数的返回值进行计算

Han-Huaqiao avatar Feb 11 '25 06:02 Han-Huaqiao

我们说的不是一件事

Cccei000 avatar Feb 11 '25 06:02 Cccei000

modeling 文件需要做哪些修改啊,目前有下面两个问题 image

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那一行 image

刚试了下,根据V2的 MOE的代码,修改后确实能跑。

能分享下完整的修改吗,我裁剪模型测试,按照pr修改可以跑,下面的_set_z3_leaf_modules记得会有个报错 image

flyinghu123 avatar Feb 11 '25 06:02 flyinghu123

modeling 文件需要做哪些修改啊,目前有下面两个问题 image

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那一行 image

刚试了下,根据V2的 MOE的代码,修改后确实能跑。

能分享下完整的修改吗,我裁剪模型测试,按照pr修改可以跑,下面的_set_z3_leaf_modules记得会有个报错 image

看了下,我和你的改动一致。但是我目前是采用了单机单卡跑的,修改了hidden_size和num_hidden_layers的参数配置。如下: image

image

Han-Huaqiao avatar Feb 11 '25 06:02 Han-Huaqiao

modeling 文件需要做哪些修改啊,目前有下面两个问题 image

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那一行 image

刚试了下,根据V2的 MOE的代码,修改后确实能跑。

能分享下完整的修改吗,我裁剪模型测试,按照pr修改可以跑,下面的_set_z3_leaf_modules记得会有个报错 image

看了下,我和你的改动一致。但是我目前是采用了单机单卡跑的,修改了hidden_size和num_hidden_layers的参数配置。如下: image

image

你修改num_hidden_layers为几,正常这里超过4层应该还会存在float32 * bfloat16错误 image

image

flyinghu123 avatar Feb 11 '25 07:02 flyinghu123

modeling 文件需要做哪些修改啊,目前有下面两个问题 image

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那一行 image

刚试了下,根据V2的 MOE的代码,修改后确实能跑。

能分享下完整的修改吗,我裁剪模型测试,按照pr修改可以跑,下面的_set_z3_leaf_modules记得会有个报错 image

看了下,我和你的改动一致。但是我目前是采用了单机单卡跑的,修改了hidden_size和num_hidden_layers的参数配置。如下: image image

你修改num_hidden_layers为几,正常这里超过4层应该还会存在float32 * bfloat16错误 image

image

8

Han-Huaqiao avatar Feb 11 '25 07:02 Han-Huaqiao

modeling 文件需要做哪些修改啊,目前有下面两个问题 image

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那一行 image

刚试了下,根据V2的 MOE的代码,修改后确实能跑。

能分享下完整的修改吗,我裁剪模型测试,按照pr修改可以跑,下面的_set_z3_leaf_modules记得会有个报错 image

看了下,我和你的改动一致。但是我目前是采用了单机单卡跑的,修改了hidden_size和num_hidden_layers的参数配置。如下: image image

你修改num_hidden_layers为几,正常这里超过4层应该还会存在float32 * bfloat16错误 image image

8

有点奇怪,你有打印每层decoder输出的dtype吗

flyinghu123 avatar Feb 11 '25 07:02 flyinghu123

modeling 文件需要做哪些修改啊,目前有下面两个问题 image

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那一行 image

刚试了下,根据V2的 MOE的代码,修改后确实能跑。

能分享下完整的修改吗,我裁剪模型测试,按照pr修改可以跑,下面的_set_z3_leaf_modules记得会有个报错 image

看了下,我和你的改动一致。但是我目前是采用了单机单卡跑的,修改了hidden_size和num_hidden_layers的参数配置。如下: image image

你修改num_hidden_layers为几,正常这里超过4层应该还会存在float32 * bfloat16错误 image image

8

有点奇怪,你有打印每层decoder输出的dtype吗

还没,不过我这的grad_norm目前输出是nan

Han-Huaqiao avatar Feb 11 '25 07:02 Han-Huaqiao