Files
zk-data-agent/skills/model-iteration/scripts/sft_train_job.yaml.tpl
T
hupenglong1 d2bb525e38 修改
2026-05-25 19:34:49 +08:00

118 lines
3.9 KiB
Smarty
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
jobName: "sft-train-r{RUNDIC}"
description: "AutoResearch R{RUNDIC} SFT training (40k+ samples, qwen3-4B base, 3 epochs FSDP2)"
accessType: PUBLIC
imageConfig:
imageUrl: micr.cloud.mioffice.cn/vllm-image/ai-arch-llm-prod:vllm-v0.12.0-f098b188
imageCommand: |-
set -ex
cd {AUTORESEARCH_ROOT}
# 0a. 验环境 + 装缺的包(vllm 镜像 py3.12 + torch 已含)
python3 --version
python3 -c "import torch; print(f'torch={torch.__version__}')"
pip install -q --no-deps "accelerate==1.7.0" 2>&1 | tail -3
pip install -q --ignore-installed blinker 2>&1 | tail -2
pip install -q peft 2>&1 | tail -3
pip install -q wandb bitsandbytes 2>&1 | tail -3
pip install -q luigi mlflow scikit-learn openpyxl pyyaml sentencepiece tiktoken protobuf pynvml datasets 2>&1 | tail -3
pip install -q "transformers>=4.45" 2>&1 | tail -3
python3 -c 'import torch, accelerate, transformers, peft; print(torch.__version__, accelerate.__version__, transformers.__version__, peft.__version__)'
# 0c. 把 HF cache 重定向到容器本地大盘(默认在 ~/.cache 可能是 juicefsmmap 易 SIGBUS
export HF_HOME=/tmp/hf_cache
export HF_DATASETS_CACHE=/tmp/hf_cache/datasets
export TRANSFORMERS_CACHE=/tmp/hf_cache/transformers
mkdir -p /tmp/hf_cache/datasets /tmp/hf_cache/transformers
df -h /tmp /dev/shm 2>/dev/null || true
# 强制 datasets 加载进内存而不是 arrow mmap(避免 /dev/shm 溢出 SIGBUS
export HF_DATASETS_IN_MEMORY_MAX_SIZE=20000000000
export HF_DATASETS_NUM_PROC=1
export TOKENIZERS_PARALLELISM=false
export OMP_NUM_THREADS=1
export MKL_NUM_THREADS=1
# 关闭 NCCL 用 shm 通信(改 socket 通道)
export NCCL_SHM_DISABLE=1
export NCCL_P2P_DISABLE=0
export NCCL_DEBUG=WARN
# 0b. 把上一轮产出搬走(cml job 内幂等,本地搬过就跳过)
if [ -d sft_output ] && [ ! -d sft_output_r{PREV_RUNDIC} ]; then
mv sft_output sft_output_r{PREV_RUNDIC}
fi
rm -rf sft_output
# 1. 组装数据
python3 {AUTORESEARCH_ROOT}/scripts/prepare_and_train_sft.py prepare \
--output_dir {AUTORESEARCH_ROOT}/sft_data
# 2. 启动训练(绝对路径,避免相对路径在容器内找不到 zk_trainer
python3 {AUTORESEARCH_ROOT}/scripts/prepare_and_train_sft.py train \
--data_dir {AUTORESEARCH_ROOT}/sft_data \
--model_path /mnt/wangsenhao/verl_zk/Qwen3-4B-Instruct-2507 \
--model_type qwen3 \
--train_output {AUTORESEARCH_ROOT}/sft_output \
--epochs 3 --lr 1e-5
# 3. 训练成功标记(被 watcher 检测)
[ -f {AUTORESEARCH_ROOT}/sft_output/config.json ] && \
touch {AUTORESEARCH_ROOT}/sft_output/_SUCCESS
# 挂载 wangsenhao + xiaoai-zk-model-train-tj5 + verl_zk 所在卷
juiceFsMountConfigs:
- volume: wangsenhao
juiceFsCluster: tj5-common
subPath: /
mountPath: /mnt/wangsenhao
readOnly: false
- volume: xiaoai-zk-model-train-tj5
juiceFsCluster: tj5-common
subPath: /
mountPath: /mnt/xiaoai-zk-model-train-tj5
readOnly: false
envConfigs:
- key: PYTHONPATH
value: {AUTORESEARCH_ROOT}/zk_trainer
- key: WANDB_DISABLED
value: "true"
- key: WANDB_MODE
value: offline
- key: VOLUME_PREFIX
value: /mnt/xiaoai-zk-model-train-tj5
- key: HF_HOME
value: /mnt/wangsenhao/.hf_cache
# h20-96g 8 卡 FSDP2
queueId: "6052"
priority: 5
preemptible: false
framework: pytorch
resourceConfigs:
- nodeRole: worker
nodeNumber: 1
perNodeResourceSpec:
resourcePriority: GUARANTEED
resourceName: cloudml.ng2h20-8-8.20-199
resourceNumber: 8
# 故障自动重试(节点级失败)
retryConfig:
enableRetry: true
maxRetryTimes: 2
policySets:
- NodeFailure
# 失败/完成飞书告警
alertConfig:
enableAlert: true
alertItems:
- alertConditions:
- FAILED
- SUCCEED
alertLevel: P2
alertReceivers:
persons:
- wangsenhao