PAI-DLC PyTorchJob 参数详解
在使用 dlc submit pytorchjob 命令提交深度学习任务时,参数主要分为两类:DLC 平台控制参数(定义任务的基础属性)和 Command 执行指令(定义容器内的具体运行逻辑)。
1. DLC 平台基础参数
这些参数位于命令的最外层,用于告诉 PAI 平台“这是一个什么样的任务”以及“需要多少资源”。
| 参数 | 说明 | 示例/备注 |
--name |
任务名称。用于在控制台标识和搜索该任务。建议使用具有描述性的命名规范(如:项目_日期_用途_版本)。 | my_project_train_v1 |
--data_sources |
数据源挂载 ID。指定任务运行时挂载的云存储(OSS/NAS)ID。容器内通常挂载在 /mnt/data/ 下。 |
d-xxxxxxxxxxxx |
--workspace_id |
工作空间 ID。指定任务所属的 PAI 工作空间,用于资源隔离和权限管理。 | 123456 |
--priority |
任务优先级。数值越大优先级越高。高优先级任务在资源紧张时会优先获得 GPU 资源。 | 1 (普通), 10 (高) |
--job_max_running_time_minutes |
最大运行时长。单位为分钟。设置超时时间可防止任务死循环导致资源浪费,超时后任务会被强制终止。 | 43200 (即 30 天) |
2. Command 执行指令 (--command)
这是任务的核心部分,定义了容器启动后执行的 Shell 脚本。通常包含三个步骤:环境准备、模型训练、模型导出。
A. 环境与依赖安装
pip install <your_custom_package_url> export ODPS_ENDPOINT=<maxcompute_endpoint_url>
pip install ...:安装自定义的 Python 依赖包。由于 DLC 镜像可能不包含所有业务库,通常需要在此处通过 URL 安装特定的 SDK(如推荐算法库tzrec等)。export ODPS_ENDPOINT=...:设置环境变量。如果你的训练数据存储在 MaxCompute (ODPS) 中,必须配置此 Endpoint 以便代码能连接到数据服务。
B. 分布式训练启动 (torchrun)
这是启动 PyTorch 分布式训练的标准方式。
torchrun \ --master_addr=$MASTER_ADDR \ --master_port=$MASTER_PORT \ --nnodes=$WORLD_SIZE \ --nproc_per_node=$NPROC_PER_NODE \ --node_rank=$RANK \ -m <your_training_module> \ [业务参数...]
torchrun:PyTorch 原生的弹性启动器,用于替代旧的torch.distributed.launch。$MASTER_ADDR/$MASTER_PORT:PAI 自动注入的环境变量。分别代表主节点的 IP 地址和通信端口,无需手动修改。--nnodes=$WORLD_SIZE:节点数量。由 DLC 平台的资源配置决定(例如你申请了 4 台机器,这里就是 4)。--nproc_per_node=$NPROC_PER_NODE:单机卡数。每台机器上启动的进程数,通常等于该机器配置的 GPU 数量(例如每台 8 卡,这里就是 8)。--node_rank=$RANK:当前节点编号。从 0 开始计数,PAI 会自动为每个容器分配唯一的 Rank ID。-m <module>:指定要运行的 Python 模块名(相当于python -m xxx)。- 业务参数(如
--pipeline_config_path,--train_input_path):这些是传递给 Python 脚本的具体参数,通常包括:
- 配置文件路径:指向挂载目录下的模型的 protobuf/ YAML/JSON 配置。
- 输入数据路径:可以是本地路径(
/mnt/data/...)或 ODPS 表路径(odps://project/tables/table_name)。 - 模型输出路径:训练好的 Checkpoint 保存位置。
C. 模型导出/评估 (可选)
在训练结束后,通常会紧接着执行导出或评估脚本。
INPUT_TILE=2 \ ODPS_ENDPOINT=<endpoint> \ torchrun \ ... (同上分布式参数) ... -m <your_export_module> \ --pipeline_config_path <path> \ --export_dir <output_path>
- 逻辑复用:导出阶段通常也需要分布式环境(特别是大模型),因此再次调用
torchrun并传入相同的分布式环境变量。 INPUT_TILE:自定义环境变量,参考https://developer.aliyun.com/article/1724206?spm=a2c6h.13148508.setting.26.700a4f0eikiz4e--export_dir:指定最终模型文件(如 SavedModel, TorchScript)的输出目录。
💡 关键提示
- **换行符
\**:在 Shell 脚本中,\表示换行续写。复制命令时请确保\后面没有空格,且紧跟回车键。 - 环境变量:
$MASTER_ADDR,$WORLD_SIZE,$RANK等变量是由 PAI-DLC 平台在任务启动时自动注入到容器环境中的,不要硬编码写死具体的 IP 或数字,否则任务无法在多机环境下正确组网。 - 路径一致性:
--data_sources挂载的路径必须与--command中引用的文件路径(如/mnt/data/deploy/...)保持一致,否则会报 "File not found" 错误。