songmzhang / DSKD

Repo for the EMNLP'24 Paper "Dual-Space Knowledge Distillation for Large Language Models". A general white-box KD framework for both same-tokenizer and cross-tokenizer LLM distillation.
51 stars 8 forks source link

bash出错 #28

Open MrQinlala opened 3 weeks ago

MrQinlala commented 3 weeks ago

你好 请问一下我执行 bash scripts/eval/run_eval.sh ${CKPT_PATH} ${EVAL_BATCH_SIZE}时报错awk: run time error: negative field index $-3 FILENAME="-" FNR=1 NR=1 awk: run time error: negative field index $-3 FILENAME="-" FNR=1 NR=1 awk: run time error: negative field index $-3 FILENAME="-" FNR=1 NR=1 awk: run time error: negative field index $-3 FILENAME="-" FNR=1 NR=1 awk: run time error: negative field index $-3 FILENAME="-" FNR=1 NR=1 awk: run time error: negative field index $-3 FILENAME="-" FNR=1 NR=1 awk: run time error: negative field index $-3 FILENAME="-" FNR=1 NR=1 awk: run time error: negative field index $-3 FILENAME="-" FNR=1 NR=1 awk: run time error: negative field index $-2 FILENAME="-" FNR=1 NR=1 awk: run time error: negative field index $-2 FILENAME="-" FNR=1 NR=1 awk: run time error: negative field index $-2 FILENAME="-" FNR=1 NR=1 awk: run time error: negative field index $-2 FILENAME="-" FNR=1 NR=1 awk: run time error: negative field index $-2 FILENAME="-" FNR=1 NR=1 awk: run time error: negative field index $-2 FILENAME="-" FNR=1 NR=1 awk: run time error: negative field index $-2 FILENAME="-" FNR=1 NR=1 awk: run time error: negative field index $-2 FILENAME="-" FNR=1 NR=1 awk: run time error: negative field index $-2 FILENAME="-" FNR=1 NR=1 然后执行bash scripts/gpt2/sft_gpt2_base.sh命令的时候没有任何反映输出为空是什么原因呢

songmzhang commented 3 weeks ago

您好,对于第一个问题,请问运行run_eval.sh的时候是否传入的是CKPT的绝对路径呢?如果不是可能需要改为绝对路径。对于第二个问题,我们当前训练脚本设置为后台运行,执行后程序会后台运行,终端不会输出信息,而是会将输出信息打印到一个log文件里,您可以在{your_work_dir}/outputs/gpt2/gpt2-base/sft/...下找到该文件

MrQinlala commented 2 weeks ago

您好,对于第一个问题,请问运行run_eval.sh的时候是否传入的是CKPT的绝对路径呢?如果不是可能需要改为绝对路径。对于第二个问题,我们当前训练脚本设置为后台运行,执行后程序会后台运行,终端不会输出信息,而是会将输出信息打印到一个log文件里,您可以在{your_work_dir}/outputs/gpt2/gpt2-base/sft/...下找到该文件

收到您的回复了 真的很有帮助 但我现在还有几个问题可以麻烦您帮忙解答一下吗, 一是我注意到您的代码中是通过criterion来将不同消融类传递到model中进行微调?所以整个项目是在微调的过程中完成蒸馏的吗 不知我的理解是否有误 第二点我想请问一下如果我现在想测试一个新的蒸馏方法需要做哪些方面的修改呢,或者说传递给Model(criterion)时,criterion编写原则是只需要该criterion类有一个foward函数然后通过 loss, logging_output = model( criterion, batch, logging_output, loss_denom)前向传播的时候自动执行该forward函数吗 第三点是我看项目使用的数据其中一项是Dolly貌似是你们自己做的数据集 请问一下在基准评估中使用的数据集只需将数据集按照{instruction,prompt,input,output}格式处理在运行测评脚本就可以了吗,例如我想使用C-eval数据集直接将数据处理为该格式后就可以进行测评了吗 最后一点是想问一下我在训练过程中想中途停止应该怎么做呢 我在linux环境下终端输入ctrld ctrlc 都没用 最后只能重启终端kill进程 请问又别的方法吗 这是我的四个问题 再次麻烦您解答一下可以嘛!

songmzhang commented 1 week ago

您好,对于第一个问题,请问运行run_eval.sh的时候是否传入的是CKPT的绝对路径呢?如果不是可能需要改为绝对路径。对于第二个问题,我们当前训练脚本设置为后台运行,执行后程序会后台运行,终端不会输出信息,而是会将输出信息打印到一个log文件里,您可以在{your_work_dir}/outputs/gpt2/gpt2-base/sft/...下找到该文件

收到您的回复了 真的很有帮助 但我现在还有几个问题可以麻烦您帮忙解答一下吗, 一是我注意到您的代码中是通过criterion来将不同消融类传递到model中进行微调?所以整个项目是在微调的过程中完成蒸馏的吗 不知我的理解是否有误 第二点我想请问一下如果我现在想测试一个新的蒸馏方法需要做哪些方面的修改呢,或者说传递给Model(criterion)时,criterion编写原则是只需要该criterion类有一个foward函数然后通过 loss, logging_output = model( criterion, batch, logging_output, loss_denom)前向传播的时候自动执行该forward函数吗 第三点是我看项目使用的数据其中一项是Dolly貌似是你们自己做的数据集 请问一下在基准评估中使用的数据集只需将数据集按照{instruction,prompt,input,output}格式处理在运行测评脚本就可以了吗,例如我想使用C-eval数据集直接将数据处理为该格式后就可以进行测评了吗 最后一点是想问一下我在训练过程中想中途停止应该怎么做呢 我在linux环境下终端输入ctrld ctrlc 都没用 最后只能重启终端kill进程 请问又别的方法吗 这是我的四个问题 再次麻烦您解答一下可以嘛!

抱歉回复这么晚。以下是对您问题的逐点回复:

MrQinlala commented 6 days ago

您好,对于第一个问题,请问运行run_eval.sh的时候是否传入的是CKPT的绝对路径呢?如果不是可能需要改为绝对路径。对于第二个问题,我们当前训练脚本设置为后台运行,执行后程序会后台运行,终端不会输出信息,而是会将输出信息打印到一个log文件里,您可以在{your_work_dir}/outputs/gpt2/gpt2-base/sft/...下找到该文件

收到您的回复了 真的很有帮助 但我现在还有几个问题可以麻烦您帮忙解答一下吗, 一是我注意到您的代码中是通过criterion来将不同消融类传递到model中进行微调?所以整个项目是在微调的过程中完成蒸馏的吗 不知我的理解是否有误 第二点我想请问一下如果我现在想测试一个新的蒸馏方法需要做哪些方面的修改呢,或者说传递给Model(criterion)时,criterion编写原则是只需要该criterion类有一个foward函数然后通过 loss, logging_output = model( criterion, batch, logging_output, loss_denom)前向传播的时候自动执行该forward函数吗 第三点是我看项目使用的数据其中一项是Dolly貌似是你们自己做的数据集 请问一下在基准评估中使用的数据集只需将数据集按照{instruction,prompt,input,output}格式处理在运行测评脚本就可以了吗,例如我想使用C-eval数据集直接将数据处理为该格式后就可以进行测评了吗 最后一点是想问一下我在训练过程中想中途停止应该怎么做呢 我在linux环境下终端输入ctrld ctrlc 都没用 最后只能重启终端kill进程 请问又别的方法吗 这是我的四个问题 再次麻烦您解答一下可以嘛!

抱歉回复这么晚。以下是对您问题的逐点回复:

  • 对于第一点,您说的对,这个项目是通过criterion来选择不同的蒸馏算法,并在微调中完成蒸馏
  • 对于第二点,本项目对蒸馏方法的支持是插件式的。如果您想新建一个蒸馏方法,可以在criterions目录下新建一个文件,仿照其他criterion的格式(尤其是forward函数)写好后再在该目录下的init.py文件中进行声明即可(即为这个方法起个名字,方便在训练脚本中调用),然后训练时会根据你脚本中的设置自动选择对应的criterion并执行其forward
  • 对于第三点,如果您想使用自己的数据集,那么将其处理成dolly的类似格式即可
  • 对于第四点,当前训练脚本默认为后台运行,因此执行后在终端中不会有等待。如果您想通过ctrl+c来终止进程,可以将训练脚本最后的后台运行去掉,换用tee命令来同时将输出内容打印到log文件和终端,如${CMD} 2>&1 | tee -a ${SAVE_PATH}/train.log,这样您就可以直接通过ctrl+c来中断。

收到啦 十分感激您的解答!