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

The issue with the Data Selection Pipeline #33

Open
kuang1216 opened this issue Oct 18, 2024 · 6 comments
Open

The issue with the Data Selection Pipeline #33

kuang1216 opened this issue Oct 18, 2024 · 6 comments

Comments

@kuang1216
Copy link

kuang1216 commented Oct 18, 2024

请问,目前我运行了你的相关代码,我心中存在以下的疑惑:
(1)步骤二:

CKPT=105
TRAINING_DATA_NAME=dolly
TRAINING_DATA_FILE=../data/train/processed/dolly/dolly_data.jsonl # when changing data name, change the data path accordingly
GRADIENT_TYPE="adam"
MODEL_PATH=../out/llama2-7b-p0.05-lora-seed3/checkpoint-${CKPT}
OUTPUT_PATH=../grads/llama2-7b-p0.05-lora-seed3/${TRAINING_DATA_NAME}-ckpt${CKPT}-${GRADIENT_TYPE}
DIMS="8192"

./less/scripts/get_info/get_train_lora_grads.sh "$TRAINING_DATA_FILE" "$MODEL_PATH" "$OUTPUT_PATH" "$DIMS" "$GRADIENT_TYPE"

步骤三:

步骤三的第一个脚本

CKPT=105
TASK=tydiqa
MODEL_PATH=../out/llama2-7b-p0.05-lora-seed3/checkpoint-${CKPT}
OUTPUT_PATH=../grads/llama2-7b-p0.05-lora-seed3/${TASK}-ckpt${CKPT}-sgd # for validation data, we always use sgd
DATA_DIR=../data
DIMS="4096 8192" # We use 8192 as our default projection dimension 

./less/scripts/get_info/get_eval_lora_grads.sh "$TASK" "$DATA_DIR" "$MODEL_PATH" $OUTPUT_PATH "$DIMS"

步骤三的第二个脚本

DIM=8192 # decide which dimension to use
GRADIENT_PATH=../grads/llama2-7b-p0.05-lora-seed3/{}-ckpt{}-adam/dim${DIM}
TRAIN_FILE_NAMES="flan_v2 cot dolly oasst1"
CKPTS="105 211 317 420" # checkpoing index
CHECKPOINT_WEIGHTS="1.6877e-05 1.2859e-05 7.7030e-06 2.5616e-06" # average lr of the epoch

VALIDATION_GRADIENT_PATH=../grads/llama2-7b-p0.05-lora-seed3/{}-ckpt{}-sgd/dim${DIM}
TARGET_TASK_NAMES="tydiqa"
SELECTED_DATA_OUTPUT_PATH="../selected_data"

./less/scripts/data_selection/matching.sh "$GRADIENT_PATH" "$TRAIN_FILE_NAMES" "$CKPTS" "$CHECKPOINT_WEIGHTS" "$VALIDATION_GRADIENT_PATH" "$TARGET_TASK_NAMES" "$SELECTED_DATA_OUTPUT_PATH"

是否需要对每个CKPT都进行运算还是只需要对最后一次的CKPT进行运算?(我一共有4个CKPT,是需要对4个都进行运算,还是只需要对最后一个进行运算?)

(2)在我的实验中,我只使用了最后一次的CKPT(一共有4次,分别是422、845、1268、1688),CKPT选择了最后一次保存的CKPT,在步骤三的第一个脚本中,我使用CKPTS=‘1688’。我一共进行了两次实验,第一次实验的设置如下:步骤二除了CKPT外其余的不变,在步骤三的第二个脚本中,我将CKPTS=1688,TRAIN_FILE_NAMES=dolly (因为我只得到了dolly的数据梯度),在MMLU和BBH任务中得到的结果分别是46.9和41.2。在第二次实验中,步骤二中CKPT=1688,TRAINING_DATA_NAME=flan_v2 cot dolly oasst1,在步骤三的第二个脚本中,我将CKPTS=1688,TRAIN_FILE_NAMES=flan_v2 cot dolly oasst1,在MMLU和BBH任务中得到的结果分别是43.9和40.0。请问我使用了更多的数据集为什么得到的结果还不如使用少量的数据集?
(3)Data Selection Pipeline的一些脚本问题,最开始只使用dolly数据集得到训练数据的梯度,但是到最后使用了4个数据集flan_v2 cot dolly oasst1来计算影响力分数,感觉这一点有点混乱。

@cafeii
Copy link

cafeii commented Oct 19, 2024

你好,我不是原作者,我也在复现这篇工作。

按照论文所报告的参数,bz大小为128,四个数据集合在一起总的数据量除以bz应该是105,也就是CKPT=105的来源。考虑到sh脚本里给的默认参数gradient accumulate step是32,他们的实验应该运行在4张GPU上,我认为你需要检查一下你实验中的设置有没有跟他对齐

@kuang1216
Copy link
Author

kuang1216 commented Oct 21, 2024

你好,我不是原作者,我正在复现这篇工作。

根据论文所报告的参数,bz大小为128,四个数据集合在一起总的数据量除以bz应该是105,那么CKPT=105的来源。到sh脚本里给出的默认参数梯度累加步长是32,他们的实验应该运行在4张GPU上,我认为你需要检查一下你实验中的设置有没有跟他对齐

确实,他们的实验是在4张GPU上运行的,我的是在一张GPU上运行的。

我还有个问题就是是否需要将所有的数据集和ckpt获取数据梯度,我看他的第二步只是使用了一个数据集和一个ckpt进行数据梯度的获取,第三步计算影响力分数时使用的确却是所有的数据集和ckpt(如图1和图2),我个人觉得应该是对所有数据集和ckpt进行计算吧?

我目前实现了只对最后一个ckpt进行实验(也就是ckpt=1688),数据集使用了1个和4个分别进行了实验,但是得到的结果却是使用1个数据集的效果明显好于使用4个数据集。(模型是llama2-7b).图3是我运行步骤二得到的数据。
1
图1
2
图2
5
图3

@cafeii
Copy link

cafeii commented Oct 22, 2024

你好,我不是原作者,我正在复现这篇工作。
根据论文所报告的参数,bz大小为128,四个数据集合在一起总的数据量除以bz应该是105,那么CKPT=105的来源。到sh脚本里给出的默认参数梯度累加步长是32,他们的实验应该运行在4张GPU上,我认为你需要检查一下你实验中的设置有没有跟他对齐

确实,他们的实验是在4张GPU上运行的,我的是在一张GPU上运行的。

我还有个问题就是是否需要将所有的数据集和ckpt获取数据梯度,我看他的第二步只是使用了一个数据集和一个ckpt进行数据梯度的获取,第三步计算影响力分数时使用的确却是所有的数据集和ckpt(如图1和图2),我个人觉得应该是对所有数据集和ckpt进行计算吧?

我目前实现了只对最后一个ckpt进行实验(也就是ckpt=1688),数据集使用了1个和4个分别进行了实验,但是得到的结果却是使用1个数据集的效果明显好于使用4个数据集。(模型是llama2-7b).图3是我运行步骤二得到的数据。 1 图1 2 图2 5 图3

是的,原文中这样写:
LESS performs warmup training on a randomly selected 5% of the complete dataset Dwarmup for N = 4 epochs and computes 8192-dimensional gradient features on the data D (§4.1).
以及:
For each subtask D(j) val , we compute its average gradient feature for every model checkpoint θ1, ..., θN :
所以确实要在四个checkpoint上面计算average grad

不过一个数据集好于四个数据集确实比较神奇,这个数据集是哪个数据集?在哪个任务上测试的?我后面尝试复现一下这个结果

@kuang1216
Copy link
Author

你好,我不是原作者,我正在复现这篇工作。
根据论文所报告的参数,bz大小为128,四个数据集合在一起总的数据量除以bz应该是105,那么CKPT=105的来源。到sh脚本里给出的默认参数加重累加步长是32,他们的实验应该在4张GPU上运行,我认为你需要检查一下你实验中的设置有没有跟他对齐

确实,他们的实验是在4张GPU上运行的,我是在一张GPU上运行的。
我还有问题是是否需要将所有的数据集和ckpt获取数据梯度,我看他的第二步只是使用了一个数据集和一个ckpt进行数据梯度的获取,第三步计算影响力分数时使用确实是所有的数据集和ckpt(如图1和图2),我个人觉得应该是对所有的数据集和ckpt进行计算吧?
我目前实现了只对最后一个ckpt进行了实验(因为ckpt=1688),使用了1个和4个数据集分别进行了实验,但是得到的结果却是使用1个数据集的效果明显好于使用4个数据集。(模型是llama2-7b).图3是我运行步骤二得到的数据。1图12图25图3

是的,译文中是这样写的: LESS 对随机选择的 5% 的完整数据集 Dwarmup 进行 N = 4 epoch 的预热训练,并在数据 D (§4.1) 上计算 8192 维梯度特征。 以及: 对于每个子任务 D (j) val ,我们计算每个模型检查点 θ1, ..., θN 的平均梯度特征: 所以确实要在上面的四个检查点计算平均梯度

一个数据集好于四个数据集确实比较神奇,这个数据集是哪个数据集?在哪个任务上测试的?我后面尝试复现一下这个结果

我是分别在dolly这一个数据集和flan_v2、dolly、cot、oasst1这四个数据集上分别获取数据梯度,在MMLU上进行测试。也许可能是我在实验中只使用了ckpt=1688,没有计算每个checkpoint的平均梯度,才导致的。

@xavierdawn
Copy link

你好,我不是原作者,我也在复现这篇工作。

按照论文所报告的参数,bz大小为128,四个数据集合在一起总的数据量除以bz应该是105,也就是CKPT=105的来源。考虑到sh脚本里给的默认参数gradient accumulate step是32,他们的实验应该运行在4张GPU上,我认为你需要检查一下你实验中的设置有没有跟他对齐

步骤一中使用四张卡训练的话,除了设置torchrun --nproc_per_node 4和export CUDA_VISIBLE_DEVICES=4,5,6,7还有什么地方需要设置吗,因为目前分布式训练好像并没有成功使用多张卡

@t07902301
Copy link

@xavierdawn torchrun --nproc_per_node 4 should be enough to kick off distribued training. I only changed this setting without explictly indicating CUDA_VISIBLE_DEVICES to enable distribued training. You can use nvidia-smi to check GPU usage.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants