File size: 4,722 Bytes
01cf98b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | #!/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是存储文件的地址
|