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

微调Lora需要多少GPU资源 #209

Open
sunxiaoyu12 opened this issue Jul 31, 2023 · 27 comments
Open

微调Lora需要多少GPU资源 #209

sunxiaoyu12 opened this issue Jul 31, 2023 · 27 comments

Comments

@sunxiaoyu12
Copy link

你好,目前使用3个节点对visualGLM进行微调(Lora),每个节点4张16GB的卡,一共是12张16GB的卡,依旧报OOM,请问我还需要增加多少才够用?

@1049451037
Copy link
Member

尝试调小batch size,设置batch size=1试一下

@sunxiaoyu12
Copy link
Author

尝试调小batch size,设置batch size=1试一下

调整之后依旧OOM了
image

@1049451037
Copy link
Member

1049451037 commented Jul 31, 2023

那可能需要开启模型并行了,把finetune_visualglm.sh里的第四行MP_SIZE=1改成MP_SIZE=2,然后代码里这一行:https://github.com/THUDM/VisualGLM-6B/blob/main/finetune_visualglm.py#L178

改为

model, args = FineTuneVisualGLMModel.from_pretrained(model_type, args, overwrite_args={'model_parallel_size':2})

另外还需要把这行代码https://github.com/THUDM/VisualGLM-6B/blob/main/finetune_visualglm.py#L175 注释掉

不过要使用这个功能需要保证你的sat和visualglm都是最新版本的代码。

git clone https://github.com/THUDM/SwissArmyTransformer
cd SwissArmyTransformer
pip install .

@shituo123456
Copy link

你好,目前使用3个节点对visualGLM进行微调(Lora),每个节点4张16GB的卡,一共是12张16GB的卡,依旧报OOM,请问我还需要增加多少才够用?

你好,如何使用多卡finetune呢,在.sh脚本中需要添加什么呢,谢谢

@1049451037
Copy link
Member

1049451037 commented Aug 1, 2023

什么都不用添加,默认就是所有卡(qlora脚本的话就改一下--include)

@shituo123456
Copy link

什么都不用添加,默认就是所有卡(qlora脚本的话就改一下--include)

请问,我想调试下fine的代码,因为不熟悉qlora怎么实现的,但是执行文件是很长的.sh文件,如何在sat库中查看下qlora呢。感谢

@1049451037
Copy link
Member

用vscode定位引用库,或者直接在sat里搜索qlora

@sunxiaoyu12
Copy link
Author

sunxiaoyu12 commented Aug 16, 2023

那可能需要开启模型并行了,把finetune_visualglm.sh里的第四行MP_SIZE=1改成MP_SIZE=2,然后代码里这一行:https://github.com/THUDM/VisualGLM-6B/blob/main/finetune_visualglm.py#L178

改为

model, args = FineTuneVisualGLMModel.from_pretrained(model_type, args, overwrite_args={'model_parallel_size':2})

另外还需要把这行代码https://github.com/THUDM/VisualGLM-6B/blob/main/finetune_visualglm.py#L175 注释掉

不过要使用这个功能需要保证你的sat和visualglm都是最新版本的代码。

git clone https://github.com/THUDM/SwissArmyTransformer
cd SwissArmyTransformer
pip install .

你好,我使用了最新的visualglm代码,sat也更新到0.4.3,修改了以上的代码,运行报错:
AssertionError: node group is not initialized, please pass LOCAL_WORLD_SIZE environment variable.
报错具体信息:
image

以下是finetune_visualglm.sh代码:

#! /bin/bash
NUM_WORKERS=1
NUM_GPUS_PER_WORKER=4
MP_SIZE=2

script_path=$(realpath $0)
script_dir=$(dirname $script_path)
main_dir=$(dirname $script_dir)
MODEL_TYPE="visualglm-6b"
MODEL_ARGS="--max_source_length 64 \
    --max_target_length 256 \
    --lora_rank 10 \
    --layer_range 0 14 \
    --pre_seq_len 4"

OPTIONS_SAT="LOCAL_WORLD_SIZE=4" 
# OPTIONS_SAT="SAT_HOME=$1" #"SAT_HOME=/raid/dm/sat_models"
OPTIONS_NCCL="NCCL_DEBUG=info NCCL_IB_DISABLE=0 NCCL_NET_GDR_LEVEL=2 NCCL_SOCKET_IFNAME=eth0 NCCL_P2P_DISABLE=1"
HOST_FILE_PATH="myhostfile"
# HOST_FILE_PATH="hostfile_single"

train_data="./fewshot-data/dataset.json"
eval_data="./fewshot-data/dataset.json"


gpt_options=" \
       --experiment-name finetune-$MODEL_TYPE \
       --model-parallel-size ${MP_SIZE} \
       --mode finetune \
       --train-iters 300 \
       --resume-dataloader \
       $MODEL_ARGS \
       --train-data ${train_data} \
       --valid-data ${eval_data} \
       --distributed-backend nccl \
       --lr-decay-style cosine \
       --warmup .02 \
       --checkpoint-activations \
       --save-interval 300 \
       --eval-interval 10000 \
       --save "./checkpoints" \
       --split 1 \
       --eval-iters 10 \
       --eval-batch-size 8 \
       --zero-stage 1 \
       --lr 0.0001 \
       --batch-size 1 \
       --skip-init \
       --fp16 \
       --use_lora
"

              

# run_cmd="${OPTIONS_NCCL} ${OPTIONS_SAT} deepspeed --master_port 16666 --hostfile ${HOST_FILE_PATH} finetune_visualglm.py ${gpt_options}"
MASTER_PORT=$(shuf -n 1 -i 10000-65535)
run_cmd="${OPTIONS_NCCL} ${OPTIONS_SAT} deepspeed --num_gpus 4 --num_nodes 10 --master_port $MASTER_PORT --hostfile ${HOST_FILE_PATH} finetune_visualglm.py ${gpt_options}"

echo ${run_cmd}
eval ${run_cmd}

set +x

finetune_visualglm.py修改了如下两行:
image

@1049451037
Copy link
Member

多机跑的话可以用.deepspeed_env传环境变量,参考:https://www.deepspeed.ai/getting-started/

截屏2023-08-16 11 39 07

@sunxiaoyu12
Copy link
Author

使用这种方式,依旧报了同样的错误

@1049451037
Copy link
Member

1049451037 commented Aug 16, 2023

说明你使用的方式不对。所以你需要研究一下deepspeed如何传环境变量(因为你也没提供更多信息,我也只能这么回复了。。)

大概是你的.deepspeed_env文件没放对位置吧

@sunxiaoyu12
Copy link
Author

sunxiaoyu12 commented Aug 17, 2023

感谢你的耐心解答。环境变量设置的没有问题,不开启模型并行已经可以跑通了,我用了10个节点,每个节点4块16G的卡,只不过每张卡使用度高达15.1G。
使用了最新的visualglm代码,sat也更新到0.4.4,模型并行还是不通,除了修改这里的代码(https://github.com/THUDM/VisualGLM-6B/issues/209#issuecomment-1657960196), 还需要修改其他配置吗?

@1049451037
Copy link
Member

1049451037 commented Aug 17, 2023

模型并行报什么错,环境变量没问题是什么意思?没问题的话就不会报没有LOCAL_WORLD_SIZE的错误呀

因为LOCAL_WORLD_SIZE就是模型并行要用的环境变量,你不开模型并行肯定就不报错了,但是你要开模型并行就必须设置这个变量

@1049451037
Copy link
Member

在你运行程序的当前目录(应该是VisualGLM-6B目录)创建一个名为.deepspeed_env的文件,里面写上

LOCAL_WORLD_SIZE=4

这样deepspeed就会传递这个环境变量了。

@sunxiaoyu12
Copy link
Author

在你运行程序的当前目录(应该是VisualGLM-6B目录)创建一个名为.deepspeed_env的文件,里面写上

LOCAL_WORLD_SIZE=4

这样deepspeed就会传递这个环境变量了。

感谢你的解答,这个问题已解决。但是模型划分的时候出现了维度不对齐的问题,问题描述如下:
image

@1049451037
Copy link
Member

那可能需要开启模型并行了,把finetune_visualglm.sh里的第四行MP_SIZE=1改成MP_SIZE=2,然后代码里这一行:https://github.com/THUDM/VisualGLM-6B/blob/main/finetune_visualglm.py#L178

改为

model, args = FineTuneVisualGLMModel.from_pretrained(model_type, args, overwrite_args={'model_parallel_size':2})

另外还需要把这行代码https://github.com/THUDM/VisualGLM-6B/blob/main/finetune_visualglm.py#L175 注释掉

不过要使用这个功能需要保证你的sat和visualglm都是最新版本的代码。

git clone https://github.com/THUDM/SwissArmyTransformer
cd SwissArmyTransformer
pip install .

说明你没按照这里改对

@sunxiaoyu12
Copy link
Author

你好,代码中需要修改的地方我已经改好了的:
image

image

还是报了维度不匹配的问题;

image

@1049451037
Copy link
Member

1049451037 commented Aug 18, 2023

哦,是lora的问题。

你把https://github.com/THUDM/VisualGLM-6B/blob/main/finetune_visualglm.py#L16C9-L19C9 16行到18删掉挪到下面去:

https://github.com/THUDM/VisualGLM-6B/blob/main/finetune_visualglm.py#L16C9-L19C9 179行的位置插入如下代码:

if args.use_lora:
    model.add_mixin("lora", LoraMixin(args.num_layers, args.lora_rank, layer_range=args.layer_range), reinit=True)

这样做以后训练应该是可以跑通了,但是inference的时候也需要修改一下,也在from_pretrained后面加上这两句。

@sunxiaoyu12
Copy link
Author

sunxiaoyu12 commented Aug 18, 2023

不好意思,我又按照你说的修改了代码,首先把下面这段删掉:
image

接着在from_pretrained后面加了如下两行:
image

可是还是报了维度不匹配的错误:
image

@1049451037
Copy link
Member

图是不是贴错了

@sunxiaoyu12
Copy link
Author

图是不是贴错了

更新了图

@1049451037
Copy link
Member

1049451037 commented Aug 18, 2023

修复了,可以安装github最新版sat试一下:

git clone https://github.com/THUDM/SwissArmyTransformer
cd SwissArmyTransformer
pip install .

不过据我观察model parallel开到2,显存还是会占用14.7G,开到4大概10G。

@sunxiaoyu12
Copy link
Author

修复了,可以安装github最新版sat试一下:

git clone https://github.com/THUDM/SwissArmyTransformer
cd SwissArmyTransformer
pip install .

不过据我观察model parallel开到2,显存还是会占用14.7G,开到4大概10G。

非常感谢你的细心解答!我安装了最新版本的sat(0.4.5),model parallel开到4,已经成功训练了,训练日志显示每次迭代MaxMemAllocated=4.2GB. 还有个小问题,是不是我使用多少个节点,model parallel就能开到多少,比如我现在10个节点,最多只能开到10?

@1049451037
Copy link
Member

10个节点总共40张卡的话,最多可以开到40,只要hidden size能整除model parallel size就可以。

@sunxiaoyu12
Copy link
Author

好的!再次感谢你,学到了很多!

@sunxiaoyu12
Copy link
Author

sunxiaoyu12 commented May 16, 2024 via email

@yiyi0810
Copy link

你好,https://github.com/THUDM/SwissArmyTransformer/issues/130这里面有你遇到的问题,你可以试试 ----- Original Message ----- From: yiyi0810 @.> To: THUDM/VisualGLM-6B @.> Cc: sunxiaoyu12 @.>, Mention @.> Subject: Re:[THUDM/VisualGLM-6B]微调Lora需要多少GPU资源(Issue#209) Date: 2024-05-15 18:56 @1049451037 @sunxiaoyu12 两位好,抱歉打扰了,请问一下我按照这个流程修改可以使用lora进行微调了,但是在进行推理时,报错了。 执行命令:python cli_demo_mp.py --from_pretrained my_pretrained_path 报错如下: 2024-05-15.18.54.32.png (view on web) 请问知道如何解决吗? — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you were mentioned.Message ID: @.***>

谢谢 已经解决啦

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