VisualGLM-6B
VisualGLM-6B copied to clipboard
使用Lora微调加载参数时自动结束进程
使用Lora微调时代码运行到加载预训练权重时会自动结束进程,也没有报错信息,请问有人知道是为什么吗? 用QLora微调时可以正常运行。 下面是运行的Log (pytorch-gpu) [xxx@localhost VisualGLM-6B]$ sh finetune_visualglm.sh NCCL_DEBUG=info NCCL_IB_DISABLE=0 NCCL_NET_GDR_LEVEL=2 deepspeed --master_port 16666 --hostfile hostfile_single finetune_visualglm.py --experiment-name finetune-visualglm-6b --model-parallel-size 1 --mode finetune --train-iters 300 --resume-dataloader --max_source_length 64 --max_target_length 256 --lora_rank 10 --layer_range 0 14 --pre_seq_len 4 --train-data ./fewshot-data/dataset.json --valid-data ./fewshot-data/dataset.json --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 [2023-08-07 20:14:37,695] [INFO] [real_accelerator.py:133:get_accelerator] Setting ds_accelerator to cuda (auto detect) [2023-08-07 20:14:46,373] [WARNING] [runner.py:196:fetch_hostfile] Unable to find hostfile, will proceed with training with local resources only. [2023-08-07 20:14:46,402] [INFO] [runner.py:555:main] cmd = /home/anaconda3/envs/pytorch-gpu/bin/python -u -m deepspeed.launcher.launch --world_info=eyJsb2NhbGhvc3QiOiBbMCwgMSwgMl19 --master_addr=127.0.0.1 --master_port=16666 --enable_each_rank_log=None finetune_visualglm.py --experiment-name finetune-visualglm-6b --model-parallel-size 1 --mode finetune --train-iters 300 --resume-dataloader --max_source_length 64 --max_target_length 256 --lora_rank 10 --layer_range 0 14 --pre_seq_len 4 --train-data ./fewshot-data/dataset.json --valid-data ./fewshot-data/dataset.json --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 [2023-08-07 20:14:47,504] [INFO] [real_accelerator.py:133:get_accelerator] Setting ds_accelerator to cuda (auto detect) [2023-08-07 20:14:49,052] [INFO] [launch.py:138:main] 0 NCCL_DEBUG=info [2023-08-07 20:14:49,052] [INFO] [launch.py:138:main] 0 NCCL_NET_GDR_LEVEL=2 [2023-08-07 20:14:49,052] [INFO] [launch.py:138:main] 0 NCCL_IB_DISABLE=0 [2023-08-07 20:14:49,052] [INFO] [launch.py:145:main] WORLD INFO DICT: {'localhost': [0, 1, 2]} [2023-08-07 20:14:49,052] [INFO] [launch.py:151:main] nnodes=1, num_local_procs=3, node_rank=0 [2023-08-07 20:14:49,052] [INFO] [launch.py:162:main] global_rank_mapping=defaultdict(<class 'list'>, {'localhost': [0, 1, 2]}) [2023-08-07 20:14:49,052] [INFO] [launch.py:163:main] dist_world_size=3 [2023-08-07 20:14:49,052] [INFO] [launch.py:165:main] Setting CUDA_VISIBLE_DEVICES=0,1,2 [2023-08-07 20:14:50,436] [INFO] [real_accelerator.py:133:get_accelerator] Setting ds_accelerator to cuda (auto detect) [2023-08-07 20:14:50,457] [INFO] [real_accelerator.py:133:get_accelerator] Setting ds_accelerator to cuda (auto detect) [2023-08-07 20:14:50,469] [INFO] [real_accelerator.py:133:get_accelerator] Setting ds_accelerator to cuda (auto detect) [2023-08-07 20:14:58,288] [INFO] using world size: 3 and model-parallel size: 1 [2023-08-07 20:14:58,289] [INFO] > padded vocab (size: 100) with 28 dummy tokens (new size: 128) [2023-08-07 20:14:58,325] [INFO] [RANK 0] > initializing model parallel with size 1 [2023-08-07 20:14:58,348] [WARNING] [config_utils.py:70:_process_deprecated_field] Config parameter cpu_offload is deprecated use offload_optimizer instead [2023-08-07 20:14:58,348] [WARNING] [config_utils.py:70:_process_deprecated_field] Config parameter cpu_offload is deprecated use offload_optimizer instead [2023-08-07 20:14:58,348] [WARNING] [config_utils.py:70:_process_deprecated_field] Config parameter cpu_offload is deprecated use offload_optimizer instead [2023-08-07 20:14:58,349] [INFO] [checkpointing.py:764:_configure_using_config_file] {'partition_activations': False, 'contiguous_memory_optimization': False, 'cpu_checkpointing': False, 'number_checkpoints': None, 'synchronize_checkpoint_boundary': False, 'profile': False} [2023-08-07 20:14:58,350] [INFO] [checkpointing.py:231:model_parallel_cuda_manual_seed] > initializing model parallel cuda seeds on global rank 0, model parallel rank 0, and data parallel rank 0 with model parallel seed: 3952 and data parallel seed: 1234 [2023-08-07 20:14:58,351] [INFO] [RANK 0] building FineTuneVisualGLMModel model ... /home/xxx/.local/lib/python3.7/site-packages/torch/nn/init.py:405: UserWarning: Initializing zero-element tensors is a no-op warnings.warn("Initializing zero-element tensors is a no-op") /home/xxx/.local/lib/python3.7/site-packages/torch/nn/init.py:405: UserWarning: Initializing zero-element tensors is a no-op warnings.warn("Initializing zero-element tensors is a no-op") replacing layer 0 attention with lora replacing layer 0 attention with lora /home/xxx/.local/lib/python3.7/site-packages/torch/nn/init.py:405: UserWarning: Initializing zero-element tensors is a no-op warnings.warn("Initializing zero-element tensors is a no-op") replacing layer 14 attention with lora replacing layer 14 attention with lora replacing layer 0 attention with lora replacing layer 14 attention with lora [2023-08-07 20:15:13,010] [INFO] [RANK 0] > number of parameters on model parallel rank 0: 7802848768 [2023-08-07 20:15:14,253] [INFO] [RANK 0] global rank 0 is loading checkpoint visualglm-6b/1/mp_rank_00_model_states.pt [2023-08-07 20:18:24,467] [INFO] [launch.py:315:sigkill_handler] Killing subprocess 6129 [2023-08-07 20:18:26,371] [INFO] [launch.py:315:sigkill_handler] Killing subprocess 6130 [2023-08-07 20:18:28,336] [INFO] [launch.py:315:sigkill_handler] Killing subprocess 6131 [2023-08-07 20:18:30,036] [ERROR] [launch.py:321:sigkill_handler] ['/home/anaconda3/envs/pytorch-gpu/bin/python', '-u', 'finetune_visualglm.py', '--local_rank=2', '--experiment-name', 'finetune-visualglm-6b', '--model-parallel-size', '1', '--mode', 'finetune', '--train-iters', '300', '--resume-dataloader', '--max_source_length', '64', '--max_target_length', '256', '--lora_rank', '10', '--layer_range', '0', '14', '--pre_seq_len', '4', '--train-data', './fewshot-data/dataset.json', '--valid-data', './fewshot-data/dataset.json', '--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'] exits with return code = -9
我也遇到了这个问题,我重启ssh链接之后就可以正常运行了,应该是某种未知原因造成的,你可以重启链接试试
我也遇到了这个问题,我重启ssh链接之后就可以正常运行了,应该是某种未知原因造成的,你可以重启链接试试
刚刚试了一下,还是不行:(
那就不懂了,等回复吧
单机多卡微调训练也出现了类似错误
是否为内存消耗过大被系统kill?
是否为内存消耗过大被系统kill?
是的,不过不应该啊
是否为内存消耗过大被系统kill?
之前用内存32G+一张显存24G的3090的也微调过,没报错这种错误,这次换了机器(4X3060)48G显存,内存64,直接被kill掉了。
单机多卡微调训练也出现了类似错误
请问QLora微调在哪设置使用哪块卡呢,我这边默认使用0卡,想换别的卡
@MoramiSu https://github.com/THUDM/VisualGLM-6B/blob/main/finetune/finetune_visualglm_qlora.sh#L55
--include localhost:0
改成--include localhost:1
,多卡也可以--include localhost:0,1,2,3
@MoramiSu https://github.com/THUDM/VisualGLM-6B/blob/main/finetune/finetune_visualglm_qlora.sh#L55
--include localhost:0
改成--include localhost:1
,多卡也可以--include localhost:0,1,2,3
好的谢谢
我是四张12g的3060和64g内存,加载模型时我看打印信息,会加载四次。导致内存爆了。请问这种需要修改那个参数
发自我的iPhone
------------------ 原始邮件 ------------------ 发件人: MoramiSu @.> 发送时间: 2023年8月9日 11:36 收件人: THUDM/VisualGLM-6B @.> 抄送: WeiXuan_Li @.>, Comment @.> 主题: Re: [THUDM/VisualGLM-6B] 使用Lora微调加载参数时自动结束进程 (Issue #227)
@MoramiSu https://github.com/THUDM/VisualGLM-6B/blob/main/finetune/finetune_visualglm_qlora.sh#L55
--include localhost:0改成--include localhost:1,多卡也可以--include localhost:0,1,2,3
好的谢谢
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>
@WeiXuanLi-1024 可以尝试把这一行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': 1})
前提是你要安装sat的0.4.4以上
@1049451037 已经将代码代码 改为
model, args = FineTuneVisualGLMModel.from_pretrained(model_type, args, overwrite_args={'model_parallel_size': 1})
sat 也更新至0.4.4
但是会报错,
我的微调环境是单机多卡(4X3060)+ 62G内存
在bash脚本这里加一句OPTIONS_SAT="LOCAL_WORLD_SIZE=4"
https://github.com/THUDM/VisualGLM-6B/blob/main/finetune/finetune_visualglm_qlora.sh#L54
@1049451037 加过后,可以成功加载,但是后面会报这个错误
几个库版本如图
我知道了……需要参考这个使用dev分支的代码(以及安装github版本的sat):https://github.com/THUDM/VisualGLM-6B/issues/229#issuecomment-1670986796
dev分支的代码本身会节省一半的内存,因此也许你就可以直接跑起来了。
如果还是跑不起来,那就在dev分支的基础上加入这个修改:
@WeiXuanLi-1024 可以尝试把这一行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': 1})
git clone https://github.com/THUDM/SwissArmyTransformer
cd SwissArmyTransformer
pip install .
按照上述命令安装sat(版本:0.4.3),然后使用dev分支的代码,同时也将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': 1})
还是会报out of cuda mem
机器单机多卡4X3060(12G)+62GRAM
如果不改代码,直接跑dev的代码会报错吗
另外你的sat版本装错了,不是0.4.3,是github最新版
如果不改代码,直接跑dev的代码会报错吗
也会报
另外你的sat版本装错了,不是0.4.3,是github最新版
git clone https://github.com/THUDM/SwissArmyTransformer cd SwissArmyTransformer pip install . 最新版是这样装的吧?
这没办法了。。要么省内存占多一点显存(因为显存会用来在不同卡之间传输权重),要么省显存多占点内存(每个rank自己加载自己的权重)
确实无解,现在已经是最优的实现了。升级硬件吧,要么内存足够装下卡数 x 每个模型大小
,要么显存大一点点能够给一点缓存用来通讯。
或者你可以自己写一个模型加载的方法,让其他rank等待加载完以后再加载。比如先让rank0占用内存,读取完以后再让rank1占用内存,以此类推。
确实无解,现在已经是最优的实现了。升级硬件吧,要么内存足够装下
卡数 x 每个模型大小
,要么显存大一点点能够给一点缓存用来通讯。 现在每个模型的大小在16G 是吧,也就是至少需要64G的内存,就可以跑起来对吧?
确实无解,现在已经是最优的实现了。升级硬件吧,要么内存足够装下
卡数 x 每个模型大小
,要么显存大一点点能够给一点缓存用来通讯。 现在每个模型的大小在16G 是吧,也就是至少需要64G的内存,就可以跑起来对吧?
是的
确实无解,现在已经是最优的实现了。升级硬件吧,要么内存足够装下
卡数 x 每个模型大小
,要么显存大一点点能够给一点缓存用来通讯。 现在每个模型的大小在16G 是吧,也就是至少需要64G的内存,就可以跑起来对吧?是的
hello, 我们最近升级下硬件 内存为128G,双3090(共48G),使用官方仓库最新的代码和requirements,训练时使用默认参数,sat:0.4.5 ; 如果使用指定单卡训练,是可以微调跑起来; 但是如果默认,也就是双卡,还是会报CUDA_OUT_MEM,这是什么原因呢?
肯定不可能有这种情况吧,单卡能训练双卡肯定也能训练。
你肯定漏了什么没说,请保持代码和github一致。