#!/bin/bash # Qwen3-VL reranker 训练 - Nebula 提交(训练参数直接在本文件配置) # Usage: sh scripts/submit/submit_train_qwen3vl.sh # 远程机器上 OSS 挂载在 /data/oss_bucket_0/,模型/数据/输出都直接走该路径 # entry 直接指向训练脚本,nebula 会自动按多机多卡分布式拉起,无需手写 torchrun ## 集群资源配置(每个 worker = 8 卡;gpu:800 表示 8 张卡) CLUSTER_CONFIG='./cluster.json' cat < ${CLUSTER_CONFIG} { "worker": { "gpu": 800, "cpu": 9600, "memory": 400000 } } EOT WORKER_COUNT=2 ## ============ 模型设置 ============ MODEL_ID=qwen3-vl-2b MODEL_LOCAL_PATH=/data/oss_bucket_0/liqi/models/Qwen3-VL-2B-Instruct ## ============ 数据集设置 ============ TRAIN_DATA_PATH=/data/oss_bucket_0/siku/Last_reranker/dataset/all_data_wo_q_bbox/00-07/with_bbox/train_format/train.jsonl EVAL_DATA_PATH=/data/oss_bucket_0/siku/Last_reranker/dataset/all_data_wo_q_bbox/00-07/with_bbox/train_format/eval.jsonl NUM_TRAIN_DOCS=10 FULL_CROP_MODE=False FORMAT_PROMPT=format_prompt/listwise_reranker_v1.jinja ## ============ 训练参数设置 ============ ### 视觉部分 TRAIN_VISION_ENCODER=False USE_VISION_LORA=False TRAIN_VISION_PROJECTOR=False ### LoRA(USE_LORA=False 走全参数微调) USE_LORA=False Q_LORA=False LORA_R=128 LORA_ALPHA=128 ### DS 和基本训练参数 DS_STAGE=zero2 PER_DEVICE_BATCH_SIZE=4 GRAD_ACCUM=2 NUM_EPOCHS=10 LR=5e-6 MODEL_MAX_LEN=8192 SAVE_STEPS=100 ## ============ 保存设置 ============ RUN_ID=${MODEL_ID}-reranker-baseline OUTPUT_DIR=/data/oss_bucket_0/liqi/cot_reranker/baseline/ ## ============ wandb 设置 ============ ## WANDB_API_KEY / WANDB_PROJECT / WANDB_MODE 在 train/train_reranker_qwen3vl.py 开头通过环境变量默认值配置 ## ============ 拼装训练参数(user_params 会原样传给 entry 训练脚本) ============ args="\ --model_id $MODEL_ID \ --output_dir $OUTPUT_DIR \ --report_to wandb \ --run_name $RUN_ID \ --deepspeed ./ds_configs/${DS_STAGE}.json \ --bf16 True \ --num_train_epochs $NUM_EPOCHS \ --per_device_train_batch_size $PER_DEVICE_BATCH_SIZE \ --per_device_eval_batch_size 4 \ --gradient_accumulation_steps $GRAD_ACCUM \ --eval_strategy no \ --eval_steps 100 \ --eval_accumulation_steps 4 \ --save_strategy steps \ --save_steps $SAVE_STEPS \ --save_total_limit 500 \ --learning_rate ${LR} \ --weight_decay 0. \ --warmup_ratio 0.03 \ --lr_scheduler_type cosine \ --logging_steps 1 \ --tf32 True \ --model_max_length $MODEL_MAX_LEN \ --gradient_checkpointing True \ --dataloader_num_workers 8 \ --train_vision_encoder $TRAIN_VISION_ENCODER \ --use_vision_lora $USE_VISION_LORA \ --train_vision_projector $TRAIN_VISION_PROJECTOR \ --use_lora $USE_LORA \ --q_lora $Q_LORA \ --lora_r $LORA_R \ --lora_alpha $LORA_ALPHA \ --model_local_path $MODEL_LOCAL_PATH \ --train_data_path $TRAIN_DATA_PATH \ --eval_data_path $EVAL_DATA_PATH \ --use_flash_attn True \ --format_prompt $FORMAT_PROMPT \ --num_train_docs $NUM_TRAIN_DOCS \ --full_crop_mode $FULL_CROP_MODE \ --max_full_tokens 20 \ --max_crop_tokens 80" nebulactl run mdl \ --engine=xdl \ --ignore=venv/*,data/*,.git/* \ --job_name=${RUN_ID} \ --queue="pailitao_algo_high_2" \ --entry="train/train_reranker_qwen3vl.py" \ --nebula_project=pailitao_v100 \ --algo_name=pytorch280 \ --worker_count=${WORKER_COUNT} \ --file.cluster_file="./cluster.json" \ --user_params="$args" \ --nas_file_system_id=98d384a407-okl3.cn-zhangjiakou.nas.aliyuncs.com \ --oss_access_id=LTAI5tMZb5HHH6HHgAExAyiL \ --oss_access_key=6MVP8JnTE01t4TLUHhPoFV0swZNTrb \ --oss_bucket=pailitao-ai \ --oss_endpoint=oss-cn-zhangjiakou.aliyuncs.com \ --requirements_file_name=requirements_qwen3vl.txt rm ${CLUSTER_CONFIG} # queue是队列名,algo_name由队列所决定 # nebula_project是集群名 # entry是要运行的主文件(nebula 自动做分布式拉起) # worker_count 是机器数量,每台机器的卡数由 cluster.json 的 gpu 决定(800 = 8 卡) # nas_file_system_id 和 oss是存储文件的地址