ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

NNI 结合阿里云 PAI-DLC 训练服务:配置、原理与实战

NNI 结合阿里云 PAI-DLC 训练服务:配置、原理与实战 人工智能AutoML机器学习深度学习模型压缩特征工程【免费下载链接】nniAn open source AutoML toolkit for automate machine learning lifecycle, including feature engineering, neural architecture search, model compression and hyper-parameter tuning.项目地址https://gitcode.com/gh_mirrors/nn/nni点击查看免费下载导读本文基于 NNI 官方文档《PAI-DLC Training Service》系统讲解如何让 NNI 实验在阿里云 PAI-DSW 上运行、并将 Trial 提交到基于 ACK 的 PAI-DLC 深度学习容器集群执行。读完本文你将掌握 DLC 训练服务的前置环境搭建、完整配置 YAML 的每个字段含义与取值约束、启动与监控实验的实操流程以及 NNI 底层如何通过 Python SDK 完成 DLC 任务提交与状态轮询。一、架构定位PAI-DSW 负责提交PAI-DLC 负责训练NNI 的 DLC 训练服务采用控制面与执行面分离的设计PAI-DSWData Science Workshop扮演 NNI 实验的承载服务器负责运行 NNI 进程、调度 Trial、收集结果同时承担向 PAI-DLC 提交训练作业的角色PAI-DLCDeep Learning Containers是基于阿里云 ACK容器服务的深度学习容器平台Trial 训练作业真正运行的地方。由于实际计算全部发生在 DLC 集群PAI-DSW 服务器本身的资源占用很小官方文档明确指出你只需要一台 CPU 配置的 DSW 服务器即可。从源码可以印证这一分工NNI Manager 侧的实现位于 ts/nni_manager/training_service/reusable/dlc/dlcClient.tsDlcClient通过 PythonShell 启动dlcUtil.py脚本与阿里云 PAI-DLC SDK 交互提交 DLC 任务并获取 job_id而 DSW 与 DLC 之间的文件共享则依赖两者挂载同一块 NAS 磁盘详见下文localStorageMountPoint/containerStorageMountPoint两个关键配置。二、前置条件四步完成环境准备Step 1. 安装 NNI在 PAI-DSW 服务器上安装 NNI请按项目安装指南操作确保nnictl命令可用。Step 2. 创建 PAI-DSW 服务器参考阿里云官方文档创建 PAI-DSW 实例。由于训练实际在 DLC 上执行DSW 不承担计算压力CPU 实例即可满足需求无需 GPU。Step 3. 配置 PAI-DLC 数据集并挂载 NAS在 PAI-DLC 控制台的数据集配置页面选择与 DSW 服务器相同的 Region并挂载与 DSW 服务器相同的 NAS 磁盘。注意目前 NNI 的 DLC 训练服务仅支持DLC 公共集群public-cluster。这一步是整个方案能够运转的关键DSW 与 DLC 必须共享同一块 NASNNI 才能在 DSW 侧写入训练代码与配置、在 DLC 容器内读取并执行见后文共享存储挂载一节。Step 4. 在 DSW 上安装 PAI-DLC Python SDK打开 DSW 的命令行下载并安装 PAI-DLC 的 Python SDK若已安装可跳过wget https://sdk-portal-cluster-prod.oss-cn-zhangjiakou.aliyuncs.com/downloads/u-3536038a-3de7-4f2e-9379-0cb309d29355-python-pai-dlc.zip unzip u-3536038a-3de7-4f2e-9379-0cb309d29355-python-pai-dlc.zip pip install ./pai-dlc-20201203 # pai-dlc-20201203 为解压后的 SDK 目录名请按实际情况替换三、配置详解DLC 模式下的 NNI 配置文件NNI 官方以examples/trials/mnist-pytorch为例演示 DLC 用法仓库中对应的完整配置为 examples/trials/mnist-pytorch/config_dlc.yml# working directory on DSW, please provide FULL path searchSpaceFile: search_space.json # the command on trial runner (or, DLC container), be aware of data_dir trialCommand: python mnist.py --data_dir /root/data/{your_data_dir} trialConcurrency: 1 # NOTE: please provide number 3 due to DLC system limit. maxTrialNumber: 10 tuner: name: TPE classArgs: optimize_mode: maximize trainingService: platform: dlc type: Worker image: registry-vpc.cn-beijing.aliyuncs.com/pai-dlc/pytorch-training:1.6.0-gpu-py37-cu101-ubuntu18.04 jobType: PyTorchJob # choices: [TFJob, PyTorchJob] podCount: 1 ecsSpec: ecs.c6.large region: cn-hangzhou workspaceId: ${your_workspace_id} accessKeyId: ${your_ak_id} accessKeySecret: ${your_ak_key} nasDataSourceId: ${your_nas_data_source_id} # NAS datasource ID, e.g., datat56by9n1xt0a ossDataSourceId: ${your_oss_data_source_id} # OSS datasource ID, in case your data is on oss localStorageMountPoint: /home/admin/workspace/ # default NAS path on DSW containerStorageMountPoint: /root/data/ # default NAS path on DLC container, change it according your setting3.1 顶层配置字段字段取值/说明searchSpaceFile搜索空间 JSON 文件内容与本地模式一致trialCommand在 DLC 容器Trial 运行端内执行的命令。注意容器内数据集统一位于/root/data/挂载点下因此示例中通过--data_dir /root/data/{your_data_dir}指定数据目录trialConcurrency并发 Trial 数。由于 DLC 系统限制请务必设为 ≤ 3maxTrialNumber最大 Trial 数示例为 10tuner调参算法示例使用 TPE 并以maximize模式优化3.2 trainingService 关键字段与本地训练服务相比DLC 模式在trainingService下额外引入了以下配置项字段说明platform必须设置为dlcNNI 据此选择 DLC 训练服务。这是启动 DLC 模式实验的前提typeDLC JobSpec 类型示例为WorkerimageDLC 训练容器的 Docker 镜像地址示例使用北京 VPC 内的 PyTorch 1.6 GPU 镜像jobType作业类型可选TFJob或PyTorchJobpodCount每个作业的 Pod 数量示例为 1ecsSpec训练使用的 ECS 实例规格示例为ecs.c6.largeregionDLC 所在地域必须与 DSW 及 NAS 所在 Region 一致workspaceIdPAI 工作空间 IDaccessKeyId/accessKeySecret阿里云访问密钥用于调用 PAI-DLC APInasDataSourceIdNAS 数据源 ID如datat56by9n1xt0a在 DLC 数据集配置页面创建 NAS 数据源后复制其DataSet ConfigurationIDossDataSourceIdOSS 数据源 ID可选当训练数据存放在 OSS 时使用3.3 共享存储挂载两个容易被忽略的关键配置DLC 模式要求 DSW 与 DLC 挂载同一块 NAS 磁盘以共享实验信息因此额外引入了两个路径配置localStorageMountPointNAS 在DSW 服务器上的默认挂载路径示例为/home/admin/workspace/必须填写完整路径containerStorageMountPoint同一块 NAS 在DLC 容器内的挂载路径示例为/root/data/可依据你的实际挂载设置调整。从源码看这两个路径直接决定了 NNI 实验目录的读写位置。在 ts/nni_manager/training_service/reusable/environments/dlcEnvironmentService.ts 的构造函数中NNI 使用MountedStorageService挂载式存储服务以localStorageMountPoint为根目录构建实验目录nni-experiments/{experimentId}在startEnvironment中本地工作目录与容器内运行目录分别由两者拼接而成const environmentRoot path.join(this.config.containerStorageMountPoint, /nni-experiments/${this.experimentId}); const localRoot path.join(this.config.localStorageMountPoint, /nni-experiments/${this.experimentId});随后 DLC 容器内执行命令会被改写为cd ${environmentRoot} 原始命令并把标准输出/错误重定向到容器内 NAS 目录下的日志文件。这意味着只要两块 NAS 挂载一致DSW 侧就能直接读取 DLC 容器产生的训练产物与日志。四、启动实验与监控作业4.1 拉取示例并启动在 PAI-DSW 命令行中执行git clone -b ${NNI_VERSION} https://github.com/microsoft/nni cd nni/examples/trials/mnist-pytorch # 按实际情况修改 config_dlc.yml 中的占位符 ... nnictl create --config config_dlc.yml其中${NNI_VERSION}替换为已发布的版本名或分支名例如v2.3。启动前务必在config_dlc.yml中填写真实的workspaceId、accessKeyId、accessKeySecret、nasDataSourceId等占位符并把镜像、Region、ECS 规格调整为你账号实际可用的资源。4.2 在 DLC 控制台监控作业NNI 实验启动后DLC 作业的状态需要前往PAI-DLC 控制台的任务列表页面查看可以按实验名nni_exp_${experimentId}_env_${environmentId}找到对应作业并观察其运行状态、日志与资源使用情况。五、源码级原理解读NNI 如何提交与管理 DLC 作业5.1 配置结构DlcConfig在 NNI Manager 中DLC 训练服务的配置接口定义于 ts/nni_manager/common/experimentConfig.ts 的DlcConfig它继承了通用TrainingServiceConfig并声明了localStorageMountPoint、containerStorageMountPoint、nasDataSourceId等字段与 YAML 中的键一一对应。运行时配置最终会落在 ts/nni_manager/training_service/reusable/dlc/dlcConfig.ts 的DlcClusterConfig/DlcTrialConfig中分别承载集群级参数与 Trial 级参数镜像、命令、代码目录。5.2 任务提交PythonShell dlcUtil.pyDlcClient.submit()dlcClient.ts通过 PythonShell 以python3 -u启动./config/dlc/dlcUtil.py一次性传入type/image/job_type/pod_count/ecs_spec/region/workspace_id/nas_data_source_id/oss_data_source_id/access_key_id/access_key_secret/experiment_name/user_command/log_dir等参数随后解析脚本回传的job_id消息并 resolve 出作业 ID。getTrackingUrl()用于获取 DLC 控制台的跟踪链接stop()向脚本发送stop指令实现作业终止。5.3 底层 SDK 调用dlcUtil.py提交脚本本体位于 ts/nni_manager/config/dlc/dlcUtil.py它基于阿里云alibabacloud_pai_dlc20201203Python SDK 实现根据region构造 DLC Client支持share这一特殊共享地域使用pai-dlc-share.aliyuncs.com端点将 NAS、OSS 数据源封装为DataSourceItem挂载到作业组装CreateJobRequest/JobSpec提交 DLC 作业作业名称格式为nni_exp_${experiment_id}_env_${environment_id}将异常写入log_dir下的dlc_exception.log便于 DSW 侧排查提交失败原因。5.4 状态轮询与失败处理DlcEnvironmentService.refreshEnvironmentsStatus()dlcEnvironmentService.ts周期性向 DLC 查询作业状态并做如下映射DLC 原始状态NNI 环境状态CREATING/CREATED/WAITING/QUEUEDWAITINGRUNNINGRUNNINGCOMPLETED/SUCCEEDEDSUCCEEDEDFAILEDFAILED并等待 60 秒再创建新作业避免连续失败风暴STOPPED/STOPPINGUSER_CANCELED此外DlcEnvironmentService通过FileCommandChannel建立 NNI 与 Trial 之间的命令通道命令与日志文件均落在共享 NAS 上DSW 侧写入、DLC 容器内读取这正是DSW 与 DLC 必须挂载同一 NAS这一前置条件的根本原因。六、常见注意事项Region 一致性DSW、DLC、NAS 三者必须位于同一地域否则无法挂载数据源或提交作业。并发上限trialConcurrency受 DLC 系统限制官方建议不超过 3。仅支持公共集群目前 NNI 的 DLC 训练服务只支持 DLC 公共集群私有集群暂不可用。完整路径localStorageMountPoint与trialCommand中的路径需填写完整路径FULL path占位符如{your_working_dir}、{your_data_dir}必须替换为实际目录。镜像与资源规格请使用你账号在对应 Region 内可访问的镜像地址与 ECS 规格GPU 任务需选择带 GPU 的ecsSpec与 GPU 镜像。密钥安全accessKeyId/accessKeySecret是阿里云 API 调用凭证请妥善保管避免提交到公开仓库。赞分享人工智能AutoML机器学习深度学习模型压缩特征工程【免费下载链接】nniAn open source AutoML toolkit for automate machine learning lifecycle, including feature engineering, neural architecture search, model compression and hyper-parameter tuning.项目地址https://gitcode.com/gh_mirrors/nn/nni点击查看免费下载相关推荐终极入门教程用pytest-asyncio编写你的第一个异步测试终极入门教程用pytest asyncio编写你的第一个异步测试 pytest asyncio是一个专为pytest设计的插件它提供了简单高效的异步测试支持测试异步编程【亲测免费】 pai-megatron-patch: 阿里云大模型训练增强套件pai megatron patch: 阿里云大模型训练增强套件 项目介绍 pai megatron patch 是由阿里巴巴云开发的一个深度学习训练工具包专创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表