modelscope / ms-swift

Use PEFT or Full-parameter to finetune 350+ LLMs or 100+ MLLMs. (LLM: Qwen2.5, Llama3.2, GLM4, Internlm2.5, Yi1.5, Mistral, Baichuan2, DeepSeek, Gemma2, ...; MLLM: Qwen2-VL, Qwen2-Audio, Llama3.2-Vision, Llava, InternVL2, MiniCPM-V-2.6, GLM4v, Xcomposer2.5, Yi-VL, DeepSeek-VL, Phi3.5-Vision, ...)
https://swift.readthedocs.io/zh-cn/latest/Instruction/index.html
Apache License 2.0
4.03k stars 357 forks source link

微调InternVL2特别占显存 #1726

Closed lisenjie757 closed 2 months ago

lisenjie757 commented 2 months ago
  1. 我的设备是八卡A100-80G,全参数微调InternVL2-2B就已经八卡全部都消耗了约78G的显存,微调InternVL2-8B就直接OOM了,这是正常的显存消耗吗,如果不是要怎么解决?
  2. 训练速度也特别慢,100K条数据需要微调10天,这要怎么解决,是因为图片用的url导致的吗?
ruian1 commented 2 months ago

这个issue里面给了一个办法, https://github.com/modelscope/ms-swift/issues/1560, 我的数据里面最多有3张图片,给url应该不是原因

我的训练代码是

CUDA_VISIBLE_DEVICES=0,1,2,3 nohup swift sft --model_type internvl2-8b --model_id_or_path /root/.cache/modelscope/hub/OpenGVLab/InternVL2-8B/     --dataset ./output/jsonl/train_dataset.jsonl   --max_length 4096 --use_flash_attn true --gradient_checkpointing true --learning_rate 1e-6 --num_train_epochs=3   --gradient_accumulation_steps 64 --preprocess_num_proc 48 --batch_size=2 --device_max_memory 80GB 80GB 80GB 80GB& 

但是,还是有两个问题

  1. 训练速度确实很慢,150k的数据集,要14天
  2. GPU 分配不均, 如图显示, batch_size大于2就会oom,上面的训练代码也根据这里的OOM分配不均提示改了 https://github.com/modelscope/ms-swift/blob/main/docs/source/Multi-Modal/internvl%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5.md Screenshot 2024-08-15 at 10 14 11 PM

我想是不是因为多图片的训练数据会在之后的训练过程中增加显存,而不是在刚开始分配模型的时候,所以导致了在之后的过程中出现OOM,最开始的时候四张卡的分配大概是 43G, 11G, 11G, 20G

lisenjie757 commented 2 months ago

@ruian1 你好,没看懂这个issue里的内容,https://github.com/modelscope/ms-swift/issues/1560, 没有引用错嘛 所以解决OOM问题核心是用 --device_max_memory 来限制最大内存?

ruian1 commented 2 months ago

@ruian1 你好,没看懂这个issue里的内容,#1560, 没有引用错嘛 所以解决OOM问题核心是用 --device_max_memory 来限制最大内存?

是这个 --use_flash_attn true repo里面应该是什么地方有个bug,因为即使不加这个,model_config里面显示的 也是"use_flash_attn": true,加上之后 SftArguments里面use_flash_attn=None变成use_flash_attn=True, somehow就能跑起来,我的数据里面最多3张图片

我也只是试出来可以跑,没去细看哪里参数没读对

tastelikefeet commented 2 months ago

目前已经支持了deepspeed zero3,可以试一下,这个应该会减少很大的显存使用