当前位置: 首页 > article >正文

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博客 


http://www.kler.cn/a/576660.html

相关文章:

  • Linux文管读写书签
  • 分布式存储—— HBase数据模型 详解
  • React基础之useEffect
  • HOW - 用户在前端页面长时间停留数据状态一致性保持方案
  • MySQL复合查询深度解析:概念、类型与实战指南
  • Python可视化——地理空间型图表(自用)
  • HarmonyOS:基于hmrouter实现Page的生命周期监听
  • LLM | 论文精读 | GIS Copilot : 面向空间分析的自主GIS代理
  • 计算机毕业设计SpringBoot+Vue.js疗养院管理系统(源码+文档+PPT+讲解)
  • qt open3dBPA重建
  • Linux - 网络基础(应用层,传输层)
  • 即屋科技(深圳)有限公司-简介
  • CPENT、CEH、OSCP的对比分析
  • vue3.2.37源码调试步骤
  • vscode 查看3d
  • 编程语言介绍:Rust
  • Next.js 连接 Angthing llm 实现本地大模型的流式传输
  • Ubuntu搭建最简单WEB服务器
  • 【微知】命令行如何对Centos关机?如何完全关机?(shutdown -h now、poweroff; halt、init 0)
  • 「科大讯飞」正式加入 Karmada 用户组!携手社区共建多集群生态