本文详细介绍Aladdin平台RunTask命令的使用方法与工作原理。RunTask支持通过执行脚本或Python程序启动分布式训练任务,自动完成多节点通信参数的注入与编排,帮助用户简化复杂的分布式环境配置,实现一键启动多节点训练任务。文章内容涵盖容器资源配置、环境变量自动注入机制、日志验证方法,以及torchrun、Llama-Factory、Swift、Megatron-LM等主流训练框架的命令示例,适用于各类分布式训练场景。
RunTask是Aladdin提供的高级命令,支持通过执行脚本或Python程序启动分布式训练任务,简化多节点分布式环境的配置与启动流程。

如上图所示,Resource字段用于指定任务所需的计算资源。示例中配置了2个节点,每个节点配备8张NVIDIA-H800A-NV-80G GPU,并为每张GPU分配13核CPU和200 GB内存。
容器配置
以下以torchrun分布式训练任务为例,说明RunTask的使用方式。
torchrun --nproc_per_node $nproc_per_node \
--nnodes $nnodes \
--node_rank $node_rank \
--master_addr $master_addr \
--master_port $master_port \
./llama_pretrain/llama_pretrain.py \
......在双节点分布式场景中,torchrun通常需显式指定nproc_per_node、nnodes、node_rank、master_addr、master_port等参数,且需在每个节点上分别执行启动命令。
典型手动启动方式如下:
### 节点1:主节点
torchrun --nproc_per_node 8 \
--nnodes 2 --node_rank 0 --master_addr 127.0.0.1 --master_port $master_port \
./llama_pretrain/llama_pretrain.py \
......
### 节点2
torchrun --nproc_per_node 8 \
--nnodes 2 --node_rank 0 --master_addr 127.0.0.1 --master_port $master_port \
./llama_pretrain/llama_pretrain.py \
......那么,使用RunTask提交任务时,平台内部执行了哪些操作,使得用户仅需一条命令即可完成多节点任务的启动与运行?
实际上,当RunTask任务提交后,Aladdin会自动创建指定数量的Pod,每个Pod按配置分配GPU。同时,平台为每个容器注入以下环境变量,实现分布式通信参数的自动编排:
| 环境变量 | 节点1 | 节点2 | 说明 |
|---|---|---|---|
| nproc_per_node | 8 | 8 | 配置中每个节点的GPU数量 |
| nnodes | 2 | 2 | 配置中指定的worker数量 |
| node_rank | 0 | 1 | 按创建顺序自动分配 |
| master_addr | 本机IP | 节点1的IP | worker0的IP地址 |
| master_port | 统一端口 | 与节点1相同 | 平台自动分配的端口 |
基于上述环境变量,RunTask中的脚本命令会被自动展开为完整的torchrun分布式命令,无需用户手动配置节点间通信参数。
为验证上述机制,可执行以下脚本:
### 输出环境变量
echo nproc_per_node=$nproc_per_node
echo nnodes=$nnodes
echo node_rank=$node_rank
echo master_addr=$master_addr
echo master_port=$master_port
### 输出环境变量展开后的命令
torchrun --nproc_per_node $nproc_per_node \
--nnodes $nnodes \
--node_rank $node_rank \
--master_addr $master_addr \
--master_port $master_port \
./llama_pretrain/llama_pretrain.py \
--model_type llama \
--config_overrides "num_attention_heads=32,num_hidden_layers=1,num_key_value_heads=1" \
--tokenizer_name ./llama_tokenizer \
--train_file ./llama_pretrain/data/pretrain_data.txt \
--per_device_train_batch_size 1 \
--per_device_eval_batch_size 1 \
--bf16 True \
--overwrite_output_dir \
--do_train \
--do_eval \
--logging_strategy steps \
--logging_steps 10 \
--output_dir ./llama_pretrain/tmp \
--save_strategy no \
--num_train_epochs 1在RunTask中执行上述脚本后,按下图步骤查看各Worker日志。


分别查看worker0与worker1的日志,可得到如下结果:
2025-04-29 16:58:23.637 [INFO] 172.19.131.52 task-tlptpvki11-9f77e533-0c70-490b-8487-3fd32c57d4b3-worker-1
2025-04-29 16:58:23.683 [INFO] * Starting OpenBSD Secure Shell server sshd
2025-04-29 16:58:23.697 [INFO] ...done.
2025-04-29 16:58:23.876 [INFO] nproc_per_node=4
2025-04-29 16:58:23.876 [INFO] nnodes=2
2025-04-29 16:58:23.876 [INFO] node_rank=0
2025-04-29 16:58:23.876 [INFO] master_addr=172.19.131.247
2025-04-29 16:58:23.876 [INFO] master_port=23456
2025-04-29 16:58:23.876 [INFO] torchrun --nproc_per_node 4 --nnodes 2 --node_rank 0 --master_addr 172.19.131.247 --master_port 23456 ./llama_pretrain/llama_pretrain.py --model_type llama --config_overrides num_attention_heads=32,num_hidden_layers=1,num_key_value_heads=1 --tokenizer_name ./llama_tokenizer --train_file ./llama_pretrain/data/pretrain_data.txt --per_device_train_batch_size 1 --per_device_eval_batch_size 1 --bf16 True --overwrite_output_dir --do_train --do_eval --logging_strategy steps --logging_steps 10 --output_dir ./llama_pretrain/tmp --save_strategy no --num_train_epochs 12025-04-29 16:58:23.741 [INFO] 172.19.131.247 task-tlptpvki11-9f77e533-0c70-490b-8487-3fd32c57d4b3-worker-0
2025-04-29 16:58:23.786 [INFO] * Starting OpenBSD Secure Shell server sshd
2025-04-29 16:58:23.798 [INFO] ...done.
2025-04-29 16:58:23.871 [INFO] nproc_per_node=4
2025-04-29 16:58:23.871 [INFO] nnodes=2
2025-04-29 16:58:23.871 [INFO] node_rank=1
2025-04-29 16:58:23.871 [INFO] master_addr=172.19.131.247
2025-04-29 16:58:23.871 [INFO] master_port=23456
2025-04-29 16:58:23.871 [INFO] torchrun --nproc_per_node 4 --nnodes 2 --node_rank 1 --master_addr 172.19.131.247 --master_port 23456 ./llama_pretrain/llama_pretrain.py --model_type llama --config_overrides num_attention_heads=32,num_hidden_layers=1,num_key_value_heads=1 --tokenizer_name ./llama_tokenizer --train_file ./llama_pretrain/data/pretrain_data.txt --per_device_train_batch_size 1 --per_device_eval_batch_size 1 --bf16 True --overwrite_output_dir --do_train --do_eval --logging_strategy steps --logging_steps 10 --output_dir ./llama_pretrain/tmp --save_strategy no --num_train_epochs 1
从日志输出可见,两个worker均已正确注入分布式训练所需的环境变量,RunTask自动完成了多节点通信参数的编排。
常见平台的命令示例
以下列出主流训练框架在RunTask中的启动命令示例,便于直接复用。
torchrun
torchrun --nproc_per_node $nproc_per_node \
--nnodes $nnodes \
--node_rank $node_rank \
--master_addr $master_addr \
--master_port $master_port \
./llama_pretrain/llama_pretrain.py \
.......
Llama-Factory
FORCE_TORCHRUN=1 NPROC_PER_NODE=$nproc_per_node NNODES=$nnodes NODE_RANK=$node_rank MASTER_ADDR=$master_addr MASTER_PORT=$master_port \
llamafactory-cli train train_example.yaml
Swift
NPROC_PER_NODE=$nproc_per_node \
NNODES=$nnodes \
NODE_RANK=$node_rank \
MASTER_ADDR=$master_addr \
MASTER_PORT=$master_port \
PYTORCH_CUDA_ALLOC_CONF="expandable_segments:True,max_split_size_mb:128" \
swift sft \
--model "/model/Qwen/Qwen2.5-7B-Instruct" \
--train_type lora \
--dataset "/workspace/swift-math-sft/blossom-math-v3-10k.json" \
--output_dir "saves/qwen-sft-math/lora" \
--num_train_epochs 1 \
......
Megatron-LM
Megatron-LM通常用于大规模预训练任务,其启动依赖于PyTorch分布式训练框架torchrun。
export CUDA_DEVICE_MAX_CONNECTIONS=1
### 输出环境变量
echo nproc_per_node=$nproc_per_node
echo nnodes=$nnodes
echo node_rank=$node_rank
echo master_addr=$master_addr
echo master_port=$master_port
GPUS_PER_NODE=$nproc_per_node
MASTER_ADDR=$master_addr
MASTER_PORT=$master_port
NUM_NODES=$nnodes
NODE_RANK=$node_rank
WORLD_SIZE=$(($GPUS_PER_NODE*$NUM_NODES))
......
torchrun ${DISTRIBUTED_ARGS[@]} ./Megatron-LM/pretrain_gpt.py \
${GPT_MODEL_ARGS[@]} \
${TRAINING_ARGS[@]} \
${MODEL_PARALLEL_ARGS[@]} \
${DATA_ARGS[@]} \
${EVAL_AND_LOGGING_ARGS[@]}总结
RunTask是Aladdin平台简化分布式训练任务启动的核心功能。它通过自动注入环境变量、编排多节点通信参数,使得用户无需手动配置复杂的分布式启动命令,仅需一条脚本即可高效启动多节点训练任务。该功能支持torchrun、Llama-Factory、Swift、Megatron-LM等主流训练框架,覆盖从个人实验到大规模预训练的全场景需求,帮助用户显著降低分布式环境配置成本,提升训练效率。
最后更新于
