Download code/multi_vlm2vec_train/scripts/train/train_nebula_qwen.sh from WaitXian/liqi: direct link, hf CLI and curl.
- Browser
- Download file 4.31 kB
-
https://huggingface.co/WaitXian/liqi/resolve/main/code/multi_vlm2vec_train/scripts/train/train_nebula_qwen.sh
- Command line
-
hf download hf://WaitXian/liqi/code/multi_vlm2vec_train/scripts/train/train_nebula_qwen.sh
-
curl -L -o train_nebula_qwen.sh https://huggingface.co/WaitXian/liqi/resolve/main/code/multi_vlm2vec_train/scripts/train/train_nebula_qwen.sh
4.31 kB
| # 基于LAMRA实现拍立淘同款embed模型训练 - Nebula 提交(InfoNCE 对比学习) | |
| # Usage: sh scripts/train/train_nebula_qwen.sh | |
| # 远程机器上 OSS 挂载在 /data/oss_bucket_0/,模型/输出都直接走本地路径 | |
| ## 集群资源配置(每个 worker),按需调整 | |
| CLUSTER_CONFIG='./cluster_infonce.json' | |
| cat <<EOT > ${CLUSTER_CONFIG} | |
| { | |
| "worker": { | |
| "gpu": 800, | |
| "cpu": 9600, | |
| "memory": 400000 | |
| } | |
| } | |
| EOT | |
| WORKER_COUNT=2 | |
| ## 模型设置 | |
| ### backbone proj模型设置 | |
| MODEL_ID=qwen3vl | |
| MODEL_LOCAL_PATH=/data/oss_bucket_0/peifeng/vlm2vec/models/qwen/Qwen3-VL-Embedding-2B/ | |
| EMBED_DIM=2048 | |
| YITU=bianji | |
| ## 数据集设置 | |
| ### 训练数据 json(OSS 挂载路径,支持单个 json / json 目录 / 逗号分隔的多个 json) | |
| DATA_PATH=/data/oss_bucket_0/liqi/dataset/embedding_pf/cot_output_new/${YITU}_train_cot.json | |
| ### 最大读取数据行数,-1 表示不截断 | |
| MAX_LINES=-1 | |
| IMAGE_TYPE="both" | |
| TEXT_REQUIRE=True | |
| ### 图片所在的 OSS 挂载目录(不传则用代码里的默认值) | |
| IMAGE_PATH_PREFIX=/data/oss_bucket_0/peifeng/multi_vlm2vec/dataset/merge/image | |
| ## InfoNCE 候选池设置 | |
| TEMPERATURE=0.02 | |
| ### InfoNCE 负样本共享的卡数:1=只用本卡 batch;8=单机 8 卡共享;-1/world_size=全部卡共享 | |
| ### 候选池 = 2 * NEG_GATHER_SIZE * PER_DEVICE_BATCH_SIZE,负样本数 = 候选池 - 1 | |
| NEG_GATHER_SIZE=8 | |
| ## 训练设置 | |
| ### 训练参数设置 | |
| TRAIN_VISION_ENCODER=False | |
| USE_VISION_LORA=False | |
| TRAIN_LLM=True | |
| USE_LORA=True | |
| Q_LORA=False | |
| LORA_R=128 | |
| LORA_ALPHA=256 | |
| ### DS和基本训练参数设置 | |
| DS_STAGE=zero2 | |
| PER_DEVICE_BATCH_SIZE=8 | |
| GRAD_ACCUM=2 | |
| NUM_EPOCHS=5 | |
| SAVE_STEPS=200 | |
| LR=1e-5 | |
| MODEL_MAX_LEN=768 | |
| ## 保存和读取设置 | |
| OUTPUT_DIR=/data/oss_bucket_0/liqi/cot_embedding/qwenvl_baseline_lora${USE_LORA} | |
| RUN_ID=qwen_train_baseline_lora${USE_LORA} | |
| # OUTPUT_DIR=/data/oss_bucket_0/liqi/cot_embedding/qwenvl_baseline | |
| # RUN_ID=qwen_train_baseline | |
| RESUME=False ## 除了可以给定False或者True,也可以直接给定读取的地址,其中当没有ckpt保存在其中的时候,就选择False | |
| echo "begin training!" | |
| args="\ | |
| --model_id $MODEL_ID \ | |
| --data_path ${DATA_PATH} \ | |
| --image_path_prefix ${IMAGE_PATH_PREFIX} \ | |
| --max_lines $MAX_LINES \ | |
| --output_dir ${OUTPUT_DIR}/${RUN_ID} \ | |
| --report_to tensorboard \ | |
| --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 12 \ | |
| --gradient_accumulation_steps $GRAD_ACCUM \ | |
| --eval_strategy "no" \ | |
| --save_strategy "epoch" \ | |
| --save_total_limit 200 \ | |
| --learning_rate ${LR} \ | |
| --weight_decay 0. \ | |
| --warmup_ratio 0.03 \ | |
| --lr_scheduler_type "constant_with_warmup" \ | |
| --logging_steps 10 \ | |
| --tf32 True \ | |
| --model_max_length $MODEL_MAX_LEN \ | |
| --gradient_checkpointing False \ | |
| --dataloader_num_workers 16 \ | |
| --train_vision_encoder $TRAIN_VISION_ENCODER \ | |
| --use_vision_lora $USE_VISION_LORA \ | |
| --use_lora $USE_LORA \ | |
| --q_lora $Q_LORA \ | |
| --lora_r $LORA_R \ | |
| --lora_alpha $LORA_ALPHA \ | |
| --model_local_path $MODEL_LOCAL_PATH \ | |
| --use_flash_attn True \ | |
| --save_steps $SAVE_STEPS \ | |
| --stage classify \ | |
| --embed_dim ${EMBED_DIM} \ | |
| --resume_from_checkpoint $RESUME \ | |
| --image_type $IMAGE_TYPE \ | |
| --text_require $TEXT_REQUIRE \ | |
| --train_llm $TRAIN_LLM \ | |
| --temperature $TEMPERATURE \ | |
| --neg_gather_size $NEG_GATHER_SIZE" | |
| CURRENT_TIME=$(date +"%Y%m%d_%H%M") | |
| nebulactl run mdl \ | |
| --engine=xdl \ | |
| --ignore=venv/*,data/*,.git/* \ | |
| --worker_count=${WORKER_COUNT} \ | |
| --queue=pailitao_algo_high_2 \ | |
| --access_id=LTAI5tMZb5HHH6HHgAExAyiL \ | |
| --access_key=6MVP8JnTE01t4TLUHhPoFV0swZNTrb \ | |
| --entry=train/train_tuwen_qwen3vl_infonce.py \ | |
| --oss_access_id=LTAI5tMZb5HHH6HHgAExAyiL \ | |
| --oss_access_key=6MVP8JnTE01t4TLUHhPoFV0swZNTrb \ | |
| --oss_bucket=pailitao-ai \ | |
| --oss_endpoint=oss-cn-zhangjiakou-internal.aliyuncs.com \ | |
| --algo_name=pytorch2100 \ | |
| --file.cluster_file=${CLUSTER_CONFIG} \ | |
| --user_params="$args" \ | |
| --job_name="train_qwen3vl_infonce_embedding_${RUN_ID}" \ | |
| --requirements_file_name="./requirements.txt" \ | |
| --force | |
| rm ${CLUSTER_CONFIG} | |