尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

MXNet 在 AWS 云端部署实战:EC2 实例、SageMaker 托管训练与 S3 数据集成

MXNet 在 AWS 云端部署实战:EC2 实例、SageMaker 托管训练与 S3 数据集成 MXNet 在 AWS 云端部署实战EC2 实例、SageMaker 托管训练与 S3 数据集成【免费下载链接】mxnetLightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Scala, Go, Javascript and more项目地址: https://gitcode.com/gh_mirrors/mxnet1/mxnet导读深度学习的训练往往需要强大的计算资源且使用时长难以预测而 MXNet 本身可以同时利用多块 GPU 与多台机器进行分布式训练因此以 AWS 为代表的云计算环境特别适合运行 MXNet 训练任务。本篇技术指南以 MXNet 官方部署教程 run-on-aws 文档 为核心系统讲解在 Amazon EC2 上创建 GPU 实例并配置深度学习环境、使用 Amazon SageMaker 以托管方式训练与部署模型、以及将 Amazon S3 对象存储作为训练数据源的全部流程。读者学完后将能够独立完成创建 AWS 资源 → 搭建 MXNet 环境 → 托管训练 → 部署推理端点 → 使用 S3 数据训练的完整云端工作流。AWS EC2 控制台启动实例界面为什么选择在云端运行 MXNet在 MXNet on the Cloud 中官方给出了选择云计算的核心理由算力需求巨大且时间不可预测深度学习的训练可能需要极其强大的硬件且训练时长波动很大MXNet 天然受益于多 GPU 与多机扩展MXNet 的分布式训练能力包括多 GPU、多机器在云端可以按需组合按需弹性伸缩使用 AWS 可以随时快速启动多台配备多块 GPU 的机器并且只在需要的时间段内保留资源、精确计费。AWS 提供了多种将 MXNet 投入云端使用的方式官方推荐的四条路径如下使用Amazon SageMaker托管平台使用带Conda的AWS Deep Learning AMI预装深度学习框架镜像使用AWS Deep Learning Container预置深度学习容器在AWS Deep Learning Base AMI上自行安装 MXNet。其中Deep Learning AMI 自带最新版本的深度学习框架、驱动以及全部必要软件包并且使用针对 AWS 实例优化过的二进制文件来加速模型训练与推理可以让你跳过繁琐的环境搭建直接开始实现与训练模型。以下各节将逐一展开这些路径的具体操作。在 EC2 实例上运行 MXNet本节内容以 Run on an EC2 Instance 教程为主体完整演示如何申请一台 CPU/GPU 实例并搭建深度学习环境。第一步准备 AWS 账号并进入 EC2 控制台首先需要注册一个AWS 账号登录后进入EC2 控制台点击Launch instance启动实例按钮开始创建实例。启动向导的第一步是选择操作系统AMI与实例类型。第二步选择 Deep Learning AMIAWS 提供了名为Deep Learning AMI的预配置镜像这些镜像包含最新版本的深度学习框架、必要的软件包与驱动开箱即用。本教程使用的是Deep Learning AMIUbuntuVersion 19.0。EC2 启动向导中选择实例类型的界面第三步选择合适的实例类型本教程选择p2.xlarge实例它包含一块 NVIDIA K80 GPU4 vCPU、61 GB 内存足以支撑 MXNet 模型的原型开发与中等规模训练。AWS 提供了大量不同规格的实例类型具体的配置与计费信息可以参考ec2instances.info这类实例规格查询站点进行比对。需要注意实例配额Instance Limits在请求资源前应先确认账号的实例限制是否足够。若配额不足可通过右侧链接申请提升容量该申请通常需要一个工作日左右处理完成。第四步扩展磁盘与 I/O 配置在向导的后续步骤中官方建议将磁盘从默认的8 GB 扩展到 40 GB以便有足够空间存放合理规模的数据集。对于超大规模数据集可以通过Add new volume添加新卷的方式挂载额外存储。此外如果选择了 p3.8xlarge 这类高性能 GPU 实例务必在卷类型中选择Provisioned IOPS以获得更好的 I/O 性能——因为训练大模型时数据读取往往是瓶颈。其余选项保持默认值即可随后进入启动前的最后一步。第五步配置 SSH 密钥对启动前的最后一步是选择 SSH 密钥对key pair。如果此前没有密钥需要先生成并妥善保存一份该密钥是后续通过 SSH 登录实例的唯一凭证务必保管好私钥文件。第六步启动实例并等待运行点击Launch instances后可通过点击实例 ID 链接查看实例状态。当实例状态变为绿色running后右键点击实例并选择Connect连接即可获取登录实例的访问指令与地址。第七步SSH 登录并激活 MXNet 环境使用给定的地址登录实例后登录界面会显示一长串可用的conda 环境列表覆盖不同深度学习框架、CUDA 驱动版本与 Python 版本组合。使用conda activate即可轻松切换环境。例如切换到 MXNet Python 3.6 环境conda activate mxnet_p36激活后即可开始开发和训练 MXNet 模型。第八步用 nvidia-smi 验证 GPU 状态开始训练后可以使用nvidia-smi命令查看 GPU 的实时使用状态显存占用、利用率、温度等这是验证训练是否真正跑在 GPU 上、排查性能瓶颈的最直接手段。使用 Amazon SageMaker 托管训练与部署本节内容以 Run on Amazon SageMaker 教程为主体介绍基于 AWS 托管机器学习平台 SageMaker 运行 MXNet 的方式。SageMaker 的深度教程可以参考 AWS 官方文档这里给出高层次的完整流程概览。SageMaker 的优势与 Notebook 实例SageMaker开箱即用地支持 MXNet并提供 Jupyter Notebook 环境。Notebook 可以运行在 CPU 实例上可利用免费额度而更强大的 CPU/GPU 实例按使用时长计费。在 Notebook 中可以直接完成训练数据的获取、探索与预处理。在 Notebook 中准备数据SageMaker 的 Python SDK 与 MXNet 无缝衔接。以下代码在 Notebook 中下载 CIFAR-10 数据集并将数据上传到 SageMaker 会话管理的 S3 存储中import mxnet as mx import sagemaker mx.test_utils.get_cifar10() # 下载 Cifar-10 数据集到 ./data sagemaker_session sagemaker.Session() inputs sagemaker_session.upload_data(pathdata/cifar, key_prefixdata/cifar10)可以看到mx.test_utils.get_cifar10()直接复用 MXNet 的测试工具下载数据集而upload_data负责把本地数据上传至 S3后续训练任务直接从 S3 读取输入。用 Estimator 启动训练数据就绪后通过 SageMaker SDK 即可启动训练无需手动配置和登录 EC2 实例。你可以自带模型BYOM也可以使用 SageMaker 内置算法——后者针对计算机视觉、NLP 等特定场景做了定制优化。SageMaker 将训练过程封装在Estimator类中from sagemaker.mxnet import MXNet as MXNetEstimator estimator MXNetEstimator(entry_pointtrain.py, rolesagemaker.get_execution_role(), train_instance_count1, train_instance_typelocal, hyperparameters{batch_size: 1024, epochs: 30}) estimator.fit(inputs)关键参数说明entry_point入口脚本如train.py描述了模型结构与训练循环roleSageMaker 执行角色IAM Role由sagemaker.get_execution_role()自动获取train_instance_count训练实例数量1 即分布式训练train_instance_type训练实例类型local表示先在本地 Notebook 实例上运行hyperparameters以字典形式传入的超参数会注入到训练脚本中。弹性伸缩与自动回收如果需要更强大的训练平台只需修改train_instance_type即可。一旦调用fit()SageMaker 会自动完成以下动作自动创建所需的 EC2 实例在 Docker 容器内完成模型训练训练结束后立即关闭这些实例按需计费不产生闲置成本。fit()要求入口脚本提供特定函数SageMaker 在训练与部署模型时会自动调用这些约定函数详见 AWS 官方关于 MXNet 训练/推理代码模板的文档。部署推理端点当模型训练完毕、准备上线时可以使用SageMaker 的托管服务Hosting创建 HTTPS 推理端点对外提供模型推理能力predictor estimator.deploy(initial_instance_count1, instance_typeml.m4.xlarge)Amazon SageMaker 控制台训练作业、端点和 Notebook 实例更高级的 SageMaker 使用场景还包括多机分布式训练、超参数调优作业Hyperparameter Tuning、使用 SageMaker Neo 优化模型以及构建 Ground Truth 标注数据集等均可基于上述Estimator/deploy工作流扩展。使用 S3 数据训练让数据迭代器直接读取云端对象存储在 Use data from S3 for training 这篇官方 FAQ 中MXNet 展示了与 S3 的深度集成AWS S3 是一种低成本的海量对象存储服务非常适合存放大型训练数据集。MXNet 的任何一个接受文件路径作为参数的数据迭代器都可以直接传入s3://协议 URL 来读写云端数据。例如data_iter mx.io.ImageRecordIter( path_imgrecs3://bucket-name/training-data/caltech_train.rec, data_shape(3, 227, 227), batch_size4, resize256)下面是从源码构建到实际训练的完整步骤。Step 1构建支持 S3 的 MXNet按照项目文档从源码安装 MXNet并额外完成以下两个操作以启用 S3 集成安装libcurl4-openssl-dev与libssl-dev两个系统包——它们是 MXNet 读写 AWS S3 所依赖的底层库在构建前向config.mk追加USE_S31echo USE_S31 config.mkStep 2配置 S3 认证令牌MXNet 要求设置 S3 环境变量AWS_ACCESS_KEY_ID与AWS_SECRET_ACCESS_KEY访问密钥可在 AWS 控制台的 IAM 中获取export AWS_ACCESS_KEY_IDyour-access-key-id export AWS_SECRET_ACCESS_KEYyour-secret-access-keyStep 3上传数据到 S3上传数据的方式有多种最简单的是使用 AWS 命令行工具。下面的sync命令会将本地目录递归复制到 S3 目录aws s3 sync ./training-data s3://bucket-name/training-dataStep 4用 S3 数据训练数据进入 S3 后MXNet 中任何能从本地磁盘读写数据的迭代器同样可以直接从 S3 读写数据——只需把文件路径替换为s3://地址。以 MNIST 手写数字识别训练为例将tests/python/train/test_conv.py中的数据路径从本地磁盘替换为 S3train_dataiter mx.io.MNISTIter( images3://bucket-name/training-data/train-images-idx3-ubyte, labels3://bucket-name/training-data/train-labels-idx1-ubyte, data_shape(1, 28, 28), label_namesm_label, batch_size100, shuffleTrue, flatFalse, silentFalse, seed10) val_dataiter mx.io.MNISTIter( images3://bucket-name/training-data/t10k-images-idx3-ubyte, labels3://bucket-name/training-data/t10k-labels-idx1-ubyte, data_shape(1, 28, 28), label_namesm_label, batch_size100, shuffleTrue, flatFalse, silentFalse)随后直接运行脚本即可python ./tests/python/train/test_conv.py从官方 FAQ 给出的运行日志可以看到训练任务直接从 S3 拉取数据并顺利完成MNISTIter 加载 60000 张训练图与 10000 张测试图最终验证准确率约 0.955。底层实现佐证数据迭代器如何支持 S3 路径从源码结构看MXNet 之所以能对任意迭代器透明地支持s3://路径是因为数据迭代器对文件系统的访问被统一抽象封装例如 src/io/iter_mnist.cc 中定义的MNISTIter接受image与label路径参数并直接加载数据其文件读取层会依据 URL 协议自动切换到 S3 后端因此在调用侧只需把本地路径换成s3://bucket-name/...即可。同理src/io/iter_image_recordio.cc 等图像迭代器也遵循同一模式这正是ImageRecordIter可以直接接收s3://格式path_imgrec的原因。总结四种云端部署路径的选择建议综合 run-on-aws 索引页 及其四个子教程可以将 MXNet 在 AWS 上的部署路径归纳为下表部署路径适用场景关键操作对应文档EC2 Deep Learning AMI需要完全掌控环境、长期使用固定实例Launch instance → 选 AMI/实例类型 → 配密钥 → SSH 登录 →conda activate激活 MXNet 环境use_ec2.rstAmazon SageMaker希望托管训练与推理、免运维 EC2Notebook 准备数据 →Estimator.fit()训练 →deploy()创建 HTTPS 端点use_sagemaker.rstS3 数据集成大规模数据集存储与多机共享构建时启用USE_S31→ 配置密钥 → 数据迭代器直接使用s3://路径s3_integration.mdDeep Learning Container / Base AMI容器化部署或自定义环境使用官方容器镜像或在 Base AMI 上自行安装 MXNetcloud.md四条路径各有侧重EC2 Deep Learning AMI强调开箱即用的深度学习环境与完全可控性SageMaker强调训练与部署的托管化、弹性化与按需回收S3 集成则是所有云端训练方案共用的数据底座让数据迭代器与云端对象存储无缝衔接。三者组合起来即可构成一套从数据、训练到推理的完整 MXNet 云端解决方案。【免费下载链接】mxnetLightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Scala, Go, Javascript and more项目地址: https://gitcode.com/gh_mirrors/mxnet1/mxnet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表