Alaya NeW Cloud
RunTask命令详解

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

RunTask是Aladdin提供的高级命令,支持通过执行脚本或Python程序启动分布式训练任务,简化多节点分布式环境的配置与启动流程。

setting-example

如上图所示,Resource字段用于指定任务所需的计算资源。示例中配置了2个节点,每个节点配备8张NVIDIA-H800A-NV-80G GPU,并为每张GPU分配13核CPU和200 GB内存。

容器配置

以下以torchrun分布式训练任务为例,说明RunTask的使用方式。

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_nodennodesnode_rankmaster_addrmaster_port等参数,且需在每个节点上分别执行启动命令。

典型手动启动方式如下:

torchrun分布式命令示例
### 节点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_node88配置中每个节点的GPU数量
nnodes22配置中指定的worker数量
node_rank01按创建顺序自动分配
master_addr本机IP节点1的IPworker0的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日志。

view log

choose worker

分别查看worker0与worker1的日志,可得到如下结果:

worker0 日志
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 1
worker1 日志
2025-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
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

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

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。

Megatron-LM
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等主流训练框架,覆盖从个人实验到大规模预训练的全场景需求,帮助用户显著降低分布式环境配置成本,提升训练效率。

Last updated on

Was this page helpful?

On this page