liqi / code /rerank_ins /scripts /submit /submit_train_qwen3vl_cot.sh
WaitXian's picture
Upload liqi files (part 2)
01cf98b verified
Raw History Blame Contribute Delete
4.72 kB
#!/bin/bash
# Qwen3-VL CoT reranker 训练 - Nebula 提交(训练参数直接在本文件配置)
# Usage: sh scripts/submit/submit_train_qwen3vl_cot.sh
# 远程机器上 OSS 挂载在 /data/oss_bucket_0/,模型/数据/输出都直接走该路径
## 集群资源配置(每个 worker = 8 卡;gpu:800 表示 8 张卡)
CLUSTER_CONFIG='./cluster.json'
cat <<EOT > ${CLUSTER_CONFIG}
{
"worker": {
"gpu": 800,
"cpu": 9600,
"memory": 400000
}
}
EOT
WORKER_COUNT=2
NPROC_PER_NODE=8
## ============ 模型设置 ============
MODEL_ID=qwen3-vl-2b
MODEL_LOCAL_PATH=/data/oss_bucket_0/liqi/models/Qwen3-VL-2B-Instruct
## 换 8B 时改成(需确认该路径已在 OSS 上):
# MODEL_ID=qwen3-vl-8b
# MODEL_LOCAL_PATH=/data/oss_bucket_0/liqi/models/Qwen3-VL-8B-Instruct
## ============ 数据集设置(cot_gen 生成并合并后的 CoT 数据) ============
TRAIN_DATA_PATH=/data/oss_bucket_0/liqi/dataset/reranker/train_cot.jsonl
EVAL_DATA_PATH=/data/oss_bucket_0/liqi/dataset/reranker/eval_cot.jsonl
NUM_TRAIN_DOCS=10
FULL_CROP_MODE=False
FORMAT_PROMPT=train_cot/listwise_cot_reranker_v1.jinja
## ============ 训练参数设置 ============
### 视觉部分
TRAIN_VISION_ENCODER=False
USE_VISION_LORA=False
TRAIN_VISION_PROJECTOR=False
### LoRA(USE_LORA=False 走全参数微调)
USE_LORA=True
Q_LORA=False
LORA_R=128
LORA_ALPHA=256
### DS 和基本训练参数
DS_STAGE=zero2
PER_DEVICE_BATCH_SIZE=4
GRAD_ACCUM=2
NUM_EPOCHS=10
LR=5e-5
MODEL_MAX_LEN=10240
SAVE_STEPS=50
## 自定义 CoT 评测(生成式)触发间隔,走 train_reranker_qwen3vl_cot.py 里的 CustomCallback
EVAL_STEPS=50
## ============ 保存设置 ============
RUN_ID=${MODEL_ID}-cot-reranker_lora_${USE_LORA}
OUTPUT_DIR=/data/oss_bucket_0/liqi/cot_reranker/cot_sft/${RUN_ID}
## ============ wandb 设置 ============
## WANDB_API_KEY / WANDB_PROJECT / WANDB_MODE 在 train_cot/train_reranker_qwen3vl_cot.py 开头通过环境变量默认值配置
## ============ 拼装启动与训练参数(由 entry 使用 torchrun 拉起每节点 8 个进程) ============
args="\
--training_script train_cot/train_reranker_qwen3vl_cot.py \
--nnodes $WORKER_COUNT \
--nproc_per_node $NPROC_PER_NODE \
--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 $EVAL_STEPS \
--eval_accumulation_steps 4 \
--save_strategy epoch \
--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/*,cot_data/* \
--job_name=${RUN_ID} \
--queue="pailitao_algo_high_2" \
--entry="scripts/entry/train_qwen3vl_entry.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 在每个 worker 上通过 torchrun 启动 NPROC_PER_NODE 个训练进程
# worker_count 是机器数量,每台机器的卡数由 cluster.json 的 gpu 决定(800 = 8 卡)
# nas_file_system_id 和 oss是存储文件的地址