THUDM / VisualGLM-6B

Chinese and English multimodal conversational language model | 多模态中英双语对话语言模型
Apache License 2.0
4.08k stars 415 forks source link

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

Open sunxiaoyu12 opened 1 year ago

sunxiaoyu12 commented 1 year ago

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

1049451037 commented 1 year ago

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

sunxiaoyu12 commented 1 year ago

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

调整之后依旧OOM了 image

1049451037 commented 1 year ago

那可能需要开启模型并行了,把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 commented 1 year ago

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

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

1049451037 commented 1 year ago

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

shituo123456 commented 1 year ago

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

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

1049451037 commented 1 year ago

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

sunxiaoyu12 commented 1 year ago

那可能需要开启模型并行了,把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 commented 1 year ago

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

截屏2023-08-16 11 39 07
sunxiaoyu12 commented 1 year ago

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

1049451037 commented 1 year ago

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

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

sunxiaoyu12 commented 1 year ago

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

1049451037 commented 1 year ago

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

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

1049451037 commented 1 year ago

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

LOCAL_WORLD_SIZE=4

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

sunxiaoyu12 commented 1 year ago

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

LOCAL_WORLD_SIZE=4

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

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

1049451037 commented 1 year ago

那可能需要开启模型并行了,把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 commented 1 year ago

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

image

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

image

1049451037 commented 1 year ago

哦,是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 commented 1 year ago

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

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

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

1049451037 commented 1 year ago

图是不是贴错了

sunxiaoyu12 commented 1 year ago

图是不是贴错了

更新了图

1049451037 commented 1 year ago

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

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

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

sunxiaoyu12 commented 1 year ago

修复了,可以安装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 commented 1 year ago

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

sunxiaoyu12 commented 1 year ago

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

sunxiaoyu12 commented 4 months ago

你好,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: @.***>

yiyi0810 commented 4 months ago

你好,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: @.***>

谢谢 已经解决啦