VLM-R1 实战训练教程

https://www.dong-blog.fun/post/1961

基础环境

构建docker环境:

# docker pull pytorch/pytorch:2.6.0-cuda12.4-cudnn9-devel

docker pull pytorch/pytorch:2.5.1-cuda12.4-cudnn9-devel

# docker run -it --gpus all pytorch/pytorch:2.6.0-cuda12.4-cudnn9-devel bash 

docker run -it --gpus all pytorch/pytorch:2.5.1-cuda12.4-cudnn9-devel bash 

apt update

apt install vim git -y

git clone https://github.com/om-ai-lab/VLM-R1.git

cd VLM-R1/

bash setup.sh

pip install transformers==4.49.0

此docker环境已经被我上传为 kevinchina/deeplearning:2.5.1-cuda12.4-cudnn9-devel-vlmr1

使用此镜像:

docker run -it --gpus '"device=0,1,2,3,4,5,6,7"' --shm-size=64g -v /data/xiedong:/data/xiedong --net host kevinchina/deeplearning:2.5.1-cuda12.4-cudnn9-devel-vlmr1 bash

下载预训练模型

pip install modelscope

# 下载到这个目录
/data/xiedong# modelscope download --model Qwen/Qwen2.5-VL-3B-Instruct --local_dir Qwen2.5-VL-3B-Instruct

GRPO训练

准备数据:

  1. wget https://huggingface.co/datasets/omlab/VLM-R1/resolve/main/train2014.zip

  2. wget https://huggingface.co/datasets/omlab/VLM-R1/resolve/main/rec_jsons_processed.zip

  3. 在src/open-r1-multimodal/data_config/rec.yaml中写入数据路径

vim src/open-r1-multimodal/data_config/rec.yaml

datasets:
    - json_path: /data/xiedong/rec_jsons_processed/refcoco_train.json
    - json_path: /data/xiedong/rec_jsons_processed/refcocop_train.json
    - json_path: /data/xiedong/rec_jsons_processed/refcocog_train.json
  1. 运行训练bash src/open-r1-multimodal/run_scripts/run_grpo_rec.sh

这文件里面长这样:
vim src/open-r1-multimodal/run_scripts/run_grpo_rec.sh

cd src/open-r1-multimodal

export DEBUG_MODE="true"
# export CUDA_VISIBLE_DEVICES=4,5,6,7

RUN_NAME="Qwen2.5-VL-3B-GRPO-REC"
export LOG_PATH="./debug_log_$RUN_NAME.txt"

torchrun --nproc_per_node="8" \
    --nnodes="1" \
    --node_rank="0" \
    --master_addr="127.0.0.1" \
    --master_port="12346" \
    src/open_r1/grpo_rec.py \
    --deepspeed local_scripts/zero3.json \
    --output_dir output/$RUN_NAME \
    --model_name_or_path /data/xiedong/Qwen2.5-VL-3B-Instruct \
    --dataset_name data_config/rec.yaml \
    --image_root /data/xiedong \
    --max_prompt_length 1024 \
    --num_generations 8 \
    --per_device_train_batch_size 1 \
    --gradient_accumulation_steps 2 \
    --logging_steps 1 \
    --bf16 \
    --torch_dtype bfloat16 \
    --data_seed 42 \
    --report_to wandb \
    --gradient_checkpointing false \
    --attn_implementation flash_attention_2 \
    --num_train_epochs 2 \
    --run_name $RUN_NAME \
    --save_steps 100 \
    --save_only_model true

训练时候:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. torchrun: 一个用于分布式训练的 PyTorch 脚本运行工具。

  2. --nproc_per_node="8": 指定每个节点上的进程数为 8。

  3. --nnodes="1": 指定训练使用的节点数为 1。

  4. --node_rank="0": 指定当前节点的排名,这里是0号节点。

  5. --master_addr="127.0.0.1": 指定 master 节点的地址,用于分布式训练的通信。

  6. --master_port="12346": 指定 master 节点的端口号。

  7. src/open_r1/grpo_rec.py: 运行的 python 脚本。

  8. --deepspeed local_scripts/zero3.json: 使用 DeepSpeed 优化器并指定配置文件 local_scripts/zero3.json

  9. --output_dir output/$RUN_NAME: 指定输出目录,训练结果将保存到 output/$RUN_NAME

  10. --model_name_or_path /data/xiedong/Qwen2.5-VL-3B-Instruct: 指定预训练模型的路径。

  11. --dataset_name data_config/rec.yaml: 指定数据集配置文件的路径。

  12. --image_root /data/xiedong: 指定图像数据根目录。

  13. --max_prompt_length 1024: 指定生成模型输入的最大 prompt 长度。

  14. --num_generations 8: 指定每个输入生成的输出序列数。

  15. --per_device_train_batch_size 1: 指定每个设备上的训练批次大小为 1。

  16. --gradient_accumulation_steps 2: 指定梯度积累的步数,即在执行反向传播之前累积的梯度步数。

  17. --logging_steps 1: 每隔多少步进行一次日志记录。

  18. --bf16--torch_dtype bfloat16: 指定使用 bfloat16 数据类型进行训练,以更好地利用 GPU 的计算能力。

  19. --data_seed 42: 指定用于数据乱序的随机种子。

  20. --report_to wandb: 使用 Weights & Biases 工具进行实验跟踪和报告。

  21. --gradient_checkpointing false: 指定是否使用梯度检查点技术以减少显存使用。这里设置为 false。

  22. --attn_implementation flash_attention_2: 指定注意力机制的实现方法。

  23. --num_train_epochs 2: 指定训练的总轮数为 2。

  24. --run_name $RUN_NAME: 指定运行名称,用于标识当前实验。

  25. --save_steps 100: 指定每隔 100 步保存一次模型。

  26. --save_only_model true: 指定仅保存模型权重,不保存优化器状态等信息。

多个数据文件和图像文件夹可以使用":"作为分隔符指定:

--data_file_paths /path/to/data1.jsonl:/path/to/data2.jsonl \
--image_folders /path/to/images1/:/path/to/images2/
智能网联汽车的安全员高级考试涉及多个方面的专业知识,包括但不限于自动驾驶技术原理、车辆传感器融合、网络安全防护以及法律法规等内容。以下是针对该主题的一些核心知识解析: ### 关于智能网联车安全员高级考试的核心内容 #### 1. 自动驾驶分级标准 国际自动机工程师学会(SAE International)定义了六个级别的自动驾驶等级,从L0到L5[^1]。其中,L3及以上级别需要安全员具备更高的应急处理能力。 #### 2. 车辆感知系统的组成与功能 智能网联车通常配备多种传感器,如激光雷达、毫米波雷达、摄像头和超声波传感器等。这些设备协同工作以实现环境感知、障碍物检测等功能[^2]。 #### 3. 数据通信与网络安全 智能网联车依赖V2X(Vehicle-to-Everything)技术进行数据交换,在此过程中需防范潜在的网络攻击风险,例如中间人攻击或恶意软件入侵[^3]。 #### 4. 法律法规要求 不同国家和地区对于无人驾驶测试及运营有着严格的规定,考生应熟悉当地交通法典中有关自动化驾驶部分的具体条款[^4]。 ```python # 示例代码:模拟简单决策逻辑 def decide_action(sensor_data): if sensor_data['obstacle'] and not sensor_data['emergency']: return 'slow_down' elif sensor_data['pedestrian_crossing']: return 'stop_and_yield' else: return 'continue_driving' example_input = {'obstacle': True, 'emergency': False, 'pedestrian_crossing': False} action = decide_action(example_input) print(f"Action to take: {action}") ``` 需要注意的是,“同学”作为特定平台上的学习资源名称,并不提供官方认证的标准答案集;建议通过正规渠道获取教材并参加培训课程来准备此类资格认证考试
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值