DLC常见问题

本文汇总使用DLC模块遇到的常见问题、定位思路以及解决办法。

有问题先问小PAI

PAI智能助手(小PAI)针对PAI全链路产品功能使用提供详细说明及使用指引,提供DSW实例、DLC任务、EAS服务运维诊断能力,自动诊断失败原因,提供下一步操作工具/建议。

image

Q:模型训练时报错:SupportsDistributedTraining false, please set InstanceCount=1

  • 报错原因:当前训练任务启用了多个实例(节点数大于1),但该模型不支持分布式训练。

  • 解决方案:将节点数量设置为1。

    image

Q:模型训练时报错:failed to compose dlc job specs, resource limiting triggered, you are trying to use more GPU resources than the threshold

训练任务当前限制最多同时运行2*GPU,超过会触发资源限制。请等待正在运行中的训练任务完成再启动,或提交工单申请增加配额。

Q:“exited with code 137”,遇到错误码137怎么办?

当您遇到错误码137时,如“xxx exited with code 137”,您可以尝试更换内存规格更大的实例,或增加worker数量,或修改您的代码中内存申请的数量。

image

Linux系统中,错误码137表示进程被SIGKILL信号强制中止了,最常见的原因是内存使用量过高,即OOM(Out Of Memory)错误。您可以结合任务详情中worker的内存水位来进一步判断内存不足的原因,或更换内存规格更大的实例,或增加worker数量,或修改您的代码中内存申请的数量。

Q:当DLC任务执行状态为已失败或已出队时该如何处理?

DLC的任务执行状态顺序为:

任务类型

任务执行状态顺序

使用按量计费资源提交DLC任务

使用灵骏智算竞价资源

创建中->竞价中->环境准备中->运行中->已成功/已失败/已停止

使用灵骏智算或通用计算公共资源

创建中->环境准备中->运行中->已成功/已失败/已停止

使用包年包月资源提交DLC任务

创建中->排队中->环境准备中->运行中->已成功/已失败/已停止

  • 当任务执行状态为环境准备中时如何处理?

    如果任务长时间处于环境准备中状态,可能是因为您创建的分布式训练任务配置了CPFS类型的数据集,但没有配置专有网络导致的。您需要重新创建分布式训练任务,配置CPFS类型数据集并配置专有网络,且选择的专有网络需要与CPFS一致,详情请参见创建训练任务

  • 当任务执行状态为已失败时如何处理?

    您可以在任务详情页面中,将鼠标悬浮到任务执行状态后的image.png,或者查看实例操作日志,来初步定位任务执行失败的原因,详情请参见查看训练详情

Q:使用公共资源的DLC任务后期能调整为专属资源吗?

您需要重新创建任务来调整所使用的资源。您可以在原始任务操作列下单击克隆,以创建一个新的任务,该任务将复用原始任务的配置,避免重新输入和配置相同的参数。关于计费详情介绍,请参见分布式训练(DLC)计费说明

Q:在DLC中使用多机多卡如何设置?

您可以在创建DLC任务时,配置以下启动命令,更多配置详情,请参见创建训练任务

python -m torch.distributed.launch \ --nproc_per_node=2 \ --master_addr=${MASTER_ADDR} \ --master_port=${MASTER_PORT} \ --nnodes=${WORLD_SIZE} \ --node_rank=${RANK} \ train.py --epochs=100

Q:如何将在PAI-DLC平台训练得到的模型下载到本地?

在提交分布式训练(DLC)任务时,您可以关联所需的数据集,并在启动命令中通过配置相应命令将训练结果输出至已挂载的数据集目录中。image

这样,在训练完成后,生成的模型文件会自动保存到已挂载的数据集目录中。后续您可以直接访问已挂载数据集对应的文件系统,并从中下载模型文件到本地。

Q:在DLC中如何使用Docker镜像?

  • 使用Docker镜像创建DLC任务:您可以将Docker镜像推送至阿里云容器镜像服务ACR中,然后再将其添加至PAI工作空间自定义镜像中,即可在创建DLC任务时选择对应镜像启动实例。

  • DLC容器中安装和使用Docker:DLC任务本身运行在容器中,因此无法在DLC中再安装和使用Docker。

Q:DLC 任务有部分节点已经完成要怎么配置才能释放给其他dlc使用?

问题描述

DLC任务启动多worker分布式训练任务时,由于每个worker数据不完全一致(比如数据倾斜),会有部分worker先完成,并正常退出的现象。但是默认配置下,部分worker仍会占用调度的节点。

解决方案可以参考PAI-DLC高级参数ReleaseResourcePolicy,该参数默认不配置时,计算资源只有在任务整体完成时才释放,如果配置为pod-exitworker退出,相应的计算资源就会释放。

Q:DLC任务报错OSError: [Errno 116] Stale file handle?

问题描述

多个Worker在执行PyTorchtorch.compile(AOT编译)时,因读取缓存文件失败而报错OSError: [Errno 116] Stale file handle。

排查思路&过程:

同步复现发现:该错误通常发生在NFS(Network File System)环境下,当某个进程持有文件句柄但文件在服务器端已被删除或移动时,客户端尝试访问会导致句柄失效。

问题原因:

根因在于PyTorchAOT编译机制会将优化后的计算图缓存到文件系统(默认在/tmp,通常是本地tmpfs),但在集群计算等环境下,缓存可能被存储到NFS挂载的CPFS(分布式文件系统),而NFS对文件删除操作敏感。 触发Stale file handle的条件包括:PyTorch自动清理旧缓存或其他进程删除缓存目录导致文件被删除;NFS服务器端文件被移动、删除或权限更改,但客户端仍持有旧句柄;NFS客户端默认缓存文件属性,可能导致客户端感知不到服务器端的变更。此外,环境因素加剧了问题:CPFS基于NFS,而NFS在高并发访问时容易出现Stale file handle,尤其是临时缓存等短生命周期文件;多Worker并发访问可能同时读写或清理缓存,进一步导致竞争条件。

解决方案

  • 优先验证:强制缓存使用本地tmpfs(通过环境变量TORCHINDUCTOR_CACHE_DIR=/dev/shm/torch_cache)。

备选方案

  1. 参考Torch官方文档改用Redis作为共享缓存(需搭建Redis服务)。

  2. 检查CPFSNFS配置(noac挂载选项可能缓解但影响性能)。

  3. 禁用缓存(TORCHINDUCTOR_CACHE_DIR="",但牺牲编译性能)。

Q:DLC出队失败,错误码roleMaximumResource ?

问题描述:

客户的DLC长时间处于排队中,但是资源充足,节点也没有发现故障:

image

最后报出队失败:

image

排查思路&过程:

怀疑是RAM账号在工作空间权限受阻问题,让主账号添加了管理员权限后还是失败,但是报错角色变成了PAI.WorkspaceAdmin:

image

问题原因:

原因是工作空间管理员还限制了资源使用额度:

image

解决方案:

让工作空间管理员取消该限制,或者将限制提升到DLC所需的资源以上即可。