yule-BUAA / MergeLM

Codebase for Merging Language Models (ICML 2024)
745 stars 42 forks source link

about Table1 #37

Open LianShuQuan opened 1 week ago

LianShuQuan commented 1 week ago

您好,我有以下几个疑问:

  1. 按照您在其他issue回答里给的命令,执行 python3 merge_llms_instruct_math_code.py --merge_instruct --merge_math --merge_code --merging_method_name mask_merging --use_weight_rescale --weight_mask_rate 0.1 --mask_apply_method task_arithmetic --scaling_coefficient 1.0 --tensor_parallel_size 1 会爆CPU内存。
  2. Table1 的 merge方法包括Task arithmetic 和 TIES ,但是代码里的argument parser只给了linear和 task arithmetic的选项,且您在其他issue回答里提及的也是linear和task arithmetic。如果我没理解错代码,task arithmetic是直接把Task Vector全都加到backbone上,如果设置好scaling coefficient,就和linear是等价的。
  3. 因为爆cpu内存,我尝试优化了代码,执行上面的命令,gsm8k得分只有34.1925701,与论文中的56.48差距较大(可能我代码改的有点问题)。
yule-BUAA commented 5 days ago

Hi,

  1. 我们当前的实现在合并模型时,首先会将全部模型加载到CPU中,再进行合并,这会导致需要较高的RAM。我们在服务器上运行DARE合并三个LLM时,大约需要750GB左右的RAM。如果你的设备空间受限,那么可以考虑使用mergekit这个高效的模型合并库来减少内存需求,里面也集成了DARE方法。
  2. 对的,task arithmetic可以设置不同的scaling coefficient,等价于linear合并。Table 1中合并LLM的TIES是在论文Rebuttal期间添加的,当前这个仓库中的TIES并不支持对LLM的合并(因为当前的TIES实现是遵照原始论文,从全局统计最小量级的参数)。我们另一篇后续工作的代码库MergeLLM中实现的TIES方法支持了合并LLM(最小量级参数的统计从全局变为了每个参数内部),所以要是想尝试TIES的话,可以使用MergeLLM
  3. 如果是因为设备内存受限的话,可以利用回答1中提到的mergekit来尝试效果。
qq31415926 commented 4 days ago

我有一个问题,就是table1的结果的merging超参数每一种方法是否都是不一样的,例如instruct和math融合的最优超参数和instruct和code的超参数不一样

yule-BUAA commented 7 hours ago

我有一个问题,就是table1的结果的merging超参数每一种方法是否都是不一样的,例如instruct和math融合的最优超参数和instruct和code的超参数不一样

是的,不同的merging任务的参数设置不同。例如,对于average_merging方法,instruct和math融合的weight_mask_rate为0.6,instruct和code融合的weight_mask_rate为0.4,math和code融合的weight_mask_rate为0.9。