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

使用neat_packing进行sft训练,模型性能指标下降明显 #5426

Open
1 task done
muziyongshixin opened this issue Sep 12, 2024 · 6 comments
Open
1 task done
Labels
pending This problem is yet to be addressed

Comments

@muziyongshixin
Copy link

Reminder

  • I have read the README and searched the existing issues.

System Info

None

Reproduction

neat_packing: True

Expected behavior

有人遇到过使用neat_packing训练后的模型,性能指标下降明显吗?
我尝试使用neat_packing,差不多可以加速3倍,但是训练完的模型比不开neat_packing的效果要差很多。所有benchmark上都掉点。

想请教一下如果训练集有多个文件,在训练时会首先进行全局shuffle吗?
neat_packing在数据打包的时候是随机挑选不同的任务数据进行组合的吗?还是挑选相邻的sample进行组合?

Others

No response

@github-actions github-actions bot added the pending This problem is yet to be addressed label Sep 12, 2024
@hiyouga
Copy link
Owner

hiyouga commented Sep 13, 2024

@YeQiuO 和你有类似的问题

@YeQiuO
Copy link
Contributor

YeQiuO commented Sep 13, 2024

收到作者召唤 ૮꒰ ˶• ༝ •˶꒱ა
我的提问在 PR 里,但暂无结论 #4224

@YeQiuO
Copy link
Contributor

YeQiuO commented Sep 13, 2024

针对你的问题

  1. 我的尝试结果是,微调后的效果 不用 packing > 用 packing >>> neat_packing
  2. data_args.mix_strategy 参数给了三种不同的多数据源融合方法,可以按照你的需求选
  3. 目前 packing 基于贪心背包算法实现高效打包(为了不切分数据),所以可以看作随机挑选

neat_packing 方法在 axolotl、swift、functionary 内均有实现,但我只试了 lf 的,指标确实降低很多,和你说的一样

为了查明原因,我 Debug 了 Qwen2 的 _get_unpad_data() 方法(neat 实现方法就是替换该方法,实现 4D 掩码)并没有发现问题,按照 attention 计算逻辑,每个 batch 内的每个序列在 mask 后,Software 的结果不会关注到相邻元素,且 RoPE 使其不受packing 后的位置影响【所以按道理不应该由此问题】

我很想要搞明白原因,希望大佬们不吝赐教

@muziyongshixin
Copy link
Author

针对你的问题

  1. 我的尝试结果是,微调后的效果 不用 packing > 用 packing >>> neat_packing
  2. data_args.mix_strategy 参数给了三种不同的多数据源融合方法,可以按照你的需求选
  3. 目前 packing 基于贪心背包算法实现高效打包(为了不切分数据),所以可以看作随机挑选

neat_packing 方法在 axolotl、swift、functionary 内均有实现,但我只试了 lf 的,指标确实降低很多,和你说的一样

为了查明原因,我 Debug 了 Qwen2 的 _get_unpad_data() 方法(neat 实现方法就是替换该方法,实现 4D 掩码)并没有发现问题,按照 attention 计算逻辑,每个 batch 内的每个序列在 mask 后,Software 的结果不会关注到相邻元素,且 RoPE 使其不受packing 后的位置影响【所以按道理不应该由此问题】

我很想要搞明白原因,希望大佬们不吝赐教

而且我还试过调整lr,按理说neat_packing后相当于增大的batchsize,所以我调大的lr到5e-5,发现训练loss和eval loss都确实比lr=1e-5的时候低。

但是实际在各个benchmark上lr=1e-5 效果反而更高,但是依然不如不pack的。

@AlongWY
Copy link
Contributor

AlongWY commented Sep 17, 2024

我可能找到了问题所在,解决方案在 #5458

AlongWY added a commit to AlongWY/LLaMA-Factory that referenced this issue Sep 17, 2024
2. update mistral format function call
3. fix knapsack, may cause hiyouga#5443
4. avoid supervised examples wrongly truncation hiyouga#5426
@2877992943
Copy link

Reminder

  • I have read the README and searched the existing issues.

System Info

None

Reproduction

neat_packing: True

Expected behavior

有人遇到过使用neat_packing训练后的模型,性能指标下降明显吗? 我尝试使用neat_packing,差不多可以加速3倍,但是训练完的模型比不开neat_packing的效果要差很多。所有benchmark上都掉点。

想请教一下如果训练集有多个文件,在训练时会首先进行全局shuffle吗? neat_packing在数据打包的时候是随机挑选不同的任务数据进行组合的吗?还是挑选相邻的sample进行组合?

Others

No response

find the same issue, just

针对你的问题

  1. 我的尝试结果是,微调后的效果 不用 packing > 用 packing >>> neat_packing
  2. data_args.mix_strategy 参数给了三种不同的多数据源融合方法,可以按照你的需求选
  3. 目前 packing 基于贪心背包算法实现高效打包(为了不切分数据),所以可以看作随机挑选

neat_packing 方法在 axolotl、swift、functionary 内均有实现,但我只试了 lf 的,指标确实降低很多,和你说的一样
为了查明原因,我 Debug 了 Qwen2 的 _get_unpad_data() 方法(neat 实现方法就是替换该方法,实现 4D 掩码)并没有发现问题,按照 attention 计算逻辑,每个 batch 内的每个序列在 mask 后,Software 的结果不会关注到相邻元素,且 RoPE 使其不受packing 后的位置影响【所以按道理不应该由此问题】
我很想要搞明白原因,希望大佬们不吝赐教

而且我还试过调整lr,按理说neat_packing后相当于增大的batchsize,所以我调大的lr到5e-5,发现训练loss和eval loss都确实比lr=1e-5的时候低。

但是实际在各个benchmark上lr=1e-5 效果反而更高,但是依然不如不pack的。

直接用的原始仓库的代码效果好,LF太笨重 找问题都要找好几个月

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
pending This problem is yet to be addressed
Projects
None yet
Development

No branches or pull requests

5 participants