DLC常见问题

更新时间:
复制为 MD 格式

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

有问题先问小PAI

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

image

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

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

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

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数量,或修改您的代码中内存申请的数量。

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)任务时,您可以关联所需的数据集,并在启动命令中通过配置相应命令将训练结果输出至已挂载的数据集目录中。在训练任务的环境信息配置中,添加自定义数据集并将挂载路径设置为 /mnt/data/,然后在启动命令中输入 cp -r ./output /mnt/data,将训练产出的模型文件复制到已挂载的数据集目录。

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

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长时间处于排队中,但是资源充足,节点也没有发现故障:

任务请求资源为 CPU: 512、内存: 4.00 TiB、GPU: 32,超出角色 PAI.WorkspaceOutsider 的配额上限(CPU: 184、Memory: 1800、GPU: 8),完整错误信息为 {"CodeType":"ConfigRule","Code":"roleMaximumResource","Reason":"Current Limit is CPU: 184 limited by Role PAI.WorkspaceOutsider.Memory: 1800 limited by Role PAI.WorkspaceOutsider.GPU: 8 limited by Role PAI.WorkspaceOutsider."}

排查思路&过程:

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

此时出队失败原因列显示完整错误信息:{"CodeType":"ConfigRule","Code":"roleMaximumResource","Reason":"Current Limit is CPU: 184 limited by Role PAI.WorkspaceAdmin. Memory: 1800 limited by Role PAI.WorkspaceAdmin. GPU: 8 limited by Role PAI.WorkspaceAdmin."},表明当前角色的资源配额上限为 CPU 184、Memory 1800、GPU 8。

问题原因:

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

在工作空间的资源使用额度配置中,可查看各角色(如管理员、算法开发、算法运维)对应的最高可使用 GPU 卡数最高可使用 CPU 核数最高可使用内存数等限制,单击修改配置可调整相关额度。

解决方案:

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

Q:访问/mnt/data数据集报错"Transport endpoint is not connected"?

问题描述:

DLC任务启动后,执行命令中访问已挂载的数据集路径(如/mnt/data)时报错:Transport endpoint is not connected,表示NFS挂载点已断开连接。

常见原因:

  • CPFS VPC不匹配:使用CPFS数据集时,训练任务所在VPC必须与CPFS文件系统的VPC一致,否则挂载失败。

  • 数据集未就绪:通过AI资产管理创建的数据集可能仍在初始化中。

  • 挂载路径配置错误:任务配置中指定的挂载路径与数据集实际挂载点不一致。

解决方案:

  1. AI资产管理中确认数据集状态为"可用"(Available)。

  2. 如果使用CPFS数据集:创建训练任务时确保配置的VPCCPFS文件系统的VPC一致。详情请参见创建训练任务中的VPC配置说明。

  3. 检查挂载路径:在任务日志中执行 ls -la /mnt/data 确认挂载是否可访问。

  4. 如果使用OSS数据集:尝试使用存储挂载方式替代数据集挂载,兼容性更好。

Q:DLC任务一直卡在"环境准备中",报错"Unable to attach or mount volumes"?

问题描述:

DLC任务启动过程中,一直卡在网络初始化/环境准备阶段,日志中出现如下报错:

Unable to attach or mount volumes: unmounted volumes=[hostpath-volume], unattached volumes=[...]: timed out waiting for the condition

常见原因:

  • 节点磁盘空间不足:计算节点本地磁盘空间已满,无法挂载hostpath-volume。

  • 存储后端异常:NAS/CPFS/OSS等存储后端出现暂时性故障或连接超时。

  • 节点资源争抢:多个任务同时调度到同一节点,导致volume挂载排队超时。

解决方案:

  1. 重新提交任务:大多数情况下,该错误为暂时性问题,重新创建任务即可恢复。

  2. 检查存储连通性:确认数据集关联的NAS/CPFS/OSS服务状态正常,VPC和安全组配置正确。

  3. 如果问题持续出现,请联系阿里云技术支持并附上任务ID和完整错误日志。