DeepSeek-VL2使用swift微调的环境搭建和微调过程

服务器环境:

  • 8张RTX3090显卡
  • Ubuntu 22.04.3 LTS
  • 内存256G

一、部署 DeepSeek-VL2运行环境

conda create --name DeepSeek-VL2_fine_tune python=3.10
git clone https://github.com/deepseek-ai/DeepSeek-VL2
pip install -e .
pip install -e .[gradio]

然后运行gradio demo,看看DeepSeek-VL2能不能正常运行:

CUDA_VISIBLE_DEVICES=2 python web_demo.py \
--model_name "deepseek-ai/deepseek-vl2"  \
--port 37914

如果出现cuda out of memory,看我上一篇文章解决。

二、部署 swift微调环境

DeepSeek-VL2跟swift版本依赖严重冲突,随意修改依赖库的版本,会出现更多的版本冲突错误,以下为测试没问题的依赖库版本,直接安装即可:

pip install 'ms-swift[all]==3.0.0' -U
pip install timm==1.0.9
pip install xformers==0.0.22.post7  # 默认会卸载 torch 2.6.0,安装torch-2.1.0
pip uninstall torchvision
pip install torchvision==0.16.0    # 安装与torch配套的torchvision
pip install deepspeed==0.14.4

三、修改topk_method参数

训练时如果使用"noaux_tc"策略就会和assert not self.training冲突,所以把可以试一下把
deepseek-ai/deepseek-vl2/config.json、deepseek-ai/deepseek-vl2-small/config.json、deepseek-ai/deepseek-vl2-tiny/config.json文件中的"topk_method"设置为"greedy"。

ps: 官方模型里tiny和small模型中topk_method默认都是“greedy”,而最大模型opk_method默认是“noaux_tc”,记着修改。

四、微调tiny模型

tiny模型用一张RTX3090就能跑起来,训练命令如下:

nproc_per_node=8
NPROC_PER_NODE=$nproc_per_node \
MASTER_PORT=29502 \
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 swift sft \
    --model ./deepseek-ai/deepseek-vl2-tiny  \
    --train_type lora \
    --dataset 1.jsonl \
    --num_train_epochs 3 \
    --learning_rate 8e-5 \
    --lora_rank 8 \
    --lora_alpha 12 \
    --max_length 4096 \
    --save_only_model True \
    --eval_steps 2000 \
    --save_steps 2000 \
    --save_total_limit -1 \
    --output_dir ./deepseek-ai/test/deepseek-vl2-tiny \
    --deepspeed zero2 \
    --lazy_tokenize True \
    --per_device_train_batch_size 2 \
    --torch_dtype bfloat16 \
    --logging_steps 5 \
    --dataloader_num_workers 24

五、微调small模型

small模型如何也用上面的命令去跑,8张卡都跑不动,为了避免cuda out of memory,可通过下面命令去跑:

export PYTORCH_CUDA_ALLOC_CONF="max_split_size_mb:32"
export FLASH_ATTENTION=1

nproc_per_node=8
NPROC_PER_NODE=$nproc_per_node \
MASTER_PORT=29502 \
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 swift sft \
    --model ./deepseek-ai/deepseek-vl2-small \
    --train_type lora \
    --dataset 1.jsonl \
    --num_train_epochs 3 \
    --learning_rate 8e-5 \
    --lora_rank 8 \
    --lora_alpha 12 \
    --max_length 4096 \
    --save_only_model True \
    --eval_steps 2000 \
    --save_steps 2000 \
    --save_total_limit -1 \
    --output_dir ./deepseek-ai/test/deepseek-vl2-small \
    --deepspeed zero2 \
    --lazy_tokenize True \
    --per_device_train_batch_size 2 \
    --torch_dtype bfloat16 \
    --logging_steps 5 \
    --dataloader_num_workers 24

六、微调最大模型

最大模型用8张卡跑起来很难,需要降低--lora_rank、--lora_alpha、--max_length、--deepspeed、--per_device_train_batch_size、--gradient_accumulation_steps、--dataloader_num_workers才能刚好跑起来,虽然跑起来了,但训练速度却非常的慢。

export PYTORCH_CUDA_ALLOC_CONF="max_split_size_mb:32"
export FLASH_ATTENTION=1
nproc_per_node=8
NPROC_PER_NODE=$nproc_per_node \
MASTER_PORT=29502 \
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 swift sft \
    --model ./deepseek-ai/deepseek-vl2 \
    --train_type lora \
    --dataset 1.jsonl \
    --num_train_epochs 3 \
    --learning_rate 8e-5 \
    --lora_rank 4 \
    --lora_alpha 8 \
    --max_length 2048 \
    --save_only_model True \
    --eval_steps 2000 \
    --save_steps 2000 \
    --save_total_limit -1 \
    --output_dir ./deepseek-ai/test/deepseek-vl2 \
    --deepspeed zero3 \
    --lazy_tokenize True \
    --per_device_train_batch_size 1 \
    --gradient_accumulation_steps 2 \
    --torch_dtype bfloat16 \
    --logging_steps 5 \
    --dataloader_num_workers 8

七、合并Lora

CUDA_VISIBLE_DEVICES=0 swift export --ckpt_dir deepseek-ai/test/deepseek-vl2-tiny/v0-20250304-161045/checkpoint-3 --merge_lora true

模型合并后,将模型复制到deepseek-vl2/deepseek-ai/目录下,使用deepseek-vl2的web.demo可以跑一下看看运行效果。

CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 python web_demo.py --model_name "deepseek-ai/deepseek-vl2-tiny" --ip 0.0.0.0 --port 37914

八、自定义数据集

自定义数据集正在研究,空了更新。

参考:DeekSeek-VL2微调报错 · Issue #2805 · modelscope/ms-swift

ms-swift/docs/source/Instruction/命令行参数.md at main · modelscope/ms-swift 

Swift微调命令参数 - 岁 - 博客园 

ms-swift/docs/source/Multi-Modal/internvl最佳实践.md at release/2.5 · modelscope/ms-swift 

Deepseek-vl2微调环境部署及各种报错解决方案_deepseek vl2 微调-CSDN博客 

SWIFT 后训练 Deepseek-VL2 参数_deepseek-vl2 ms-swift-CSDN博客 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值