news 2026/9/21 1:23:44

MXNet 云端部署实战:在 AWS 上使用 SageMaker、Deep Learning AMI 与 S3 训练深度学习模型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MXNet 云端部署实战:在 AWS 上使用 SageMaker、Deep Learning AMI 与 S3 训练深度学习模型
  • 深度学习
  • 机器学习
  • 人工智能

【免费下载链接】mxnet

Lightweight, 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 与多机并行。本文基于 MXNet 官方部署指南(cloud.md)及其配套的 EC2、SageMaker、S3 集成文档,系统讲解在 AWS 云端运行 MXNet 的四种主流方式:Amazon SageMaker、Deep Learning AMI(含 Conda 环境)、Deep Learning Container 与 Deep Learning Base AMI,并给出从 EC2 实例创建、Conda 环境激活到基于 S3 数据训练的完整可操作流程,同时结合仓库源码与测试用例佐证底层实现细节。

为什么深度学习训练适合放在云端

深度学习的算力需求有几个显著特征:模型训练需要极强的硬件(尤其是 GPU),训练耗时不可预测,且规模经常随实验迭代而扩张。与此同时,MXNet 的设计目标之一就是高效利用多 GPU 和多台机器进行并行训练——这在单机环境下很难充分满足。AWS 这类云计算平台恰好解决了这一矛盾:

  • 按需弹性扩容:可以快速拉起多台、每台多块 GPU 的实例;
  • 精确的成本控制:只为实际使用的时间付费,训练结束即可释放资源;
  • 无需一次性购买硬件:避免了本地硬件闲置或淘汰的风险。

因此,在 AWS 上运行 MXNet 训练任务,尤其是大规模模型与多机分布式训练,是一种非常贴合深度学习工作负载特征的方案。

在 AWS 上使用 MXNet 的四种方式

官方指南(cloud.md)给出了四种可以在 AWS 上使用 MXNet 的途径,它们从"全托管"到"完全自建"依次递进,读者可根据对控制力与运维成本的需求选择:

方式适用场景特点
Amazon SageMaker希望托管训练与推理、减少运维Jupyter Notebook 开箱即用,Estimator 封装训练全流程
AWS Deep Learning AMI with Conda希望在 EC2 上快速获得预装多框架环境预装 CUDA 驱动、Python 与各深度学习框架的 Conda 环境
AWS Deep Learning Container希望在容器化环境中运行官方维护的 Docker 镜像,含 MXNet 等框架的优化构建
AWS Deep Learning Base AMI + 手动安装 MXNet需要完全自定义环境仅预装系统与驱动,由用户自行安装 MXNet

其中,EC2 与 SageMaker 两条路径在官方教程中有完整的逐步说明,是本文的重点;Deep Learning Container 与 Base AMI 适合有容器化或定制化需求的用户,可作为进阶方向。

方式一:在 EC2 实例上搭建深度学习环境

在 EC2 上运行 MXNet 的完整流程记录于 use_ec2.rst。其核心思路是:选用 AWS 官方预置了深度学习框架的 Deep Learning AMI,配合 GPU 实例类型,登录后直接进入可用的训练环境。

前提条件与入口

首先需要一个 AWS 账号,登录后进入 EC2 控制台,点击 "Launch instance" 开始创建实例。创建流程的核心决策点包括:操作系统与 AMI 选择、实例类型、存储配置、SSH 密钥。

选择 Deep Learning AMI

AWS 提供专为深度学习场景优化的 Deep Learning AMI,其中预装了最新版本的深度学习框架、全部必要的依赖包与 GPU 驱动,且使用了针对 AWS 实例优化的二进制,可以显著加速模型训练与推理,让你能直接开始实现和训练模型,而无需从头配置 CUDA、cuDNN 等底层环境。官方教程使用的镜像是Deep Learning AMI (Ubuntu) Version 19.0

选择 GPU 实例类型:p2.xlarge

教程推荐选择p2.xlarge,它包含一块 Nvidia K80 GPU,是入门级 GPU 实例。不同实例的详细配置与计费各不相同,可按需查阅官方实例类型列表(如ec2instances.info类站点)进行比较。

选择实例时有一个关键前置检查:实例配额(instance limits)。需要确认当前账号在该区域可请求的资源配额是否足够,若配额不足,可以通过控制台中的申请链接请求提升容量——该审批通常需要约一个工作日。这一点在大规模多机训练时尤其重要。

存储与 I/O 配置

教程建议将默认磁盘从 8 GB 扩展到 40 GB,以便有足够空间存放规模合理的数据集;对于更大规模的数据集,可以通过 "Add new volume" 添加额外卷。

此外有一个容易被忽略的细节:如果选择了非常强大的 GPU 实例(例如 p3.8xlarge),应在卷类型(volume type)中选择Provisioned IOPS,以获得更好的 I/O 性能。这是因为 GPU 实例的算力远高于普通实例,训练时数据读取极易成为瓶颈,高 IOPS 卷能保证数据供给不拖后腿。

SSH 密钥与启动

在启动前的最后一步需要选择 SSH 密钥对。如果之前没有生成过密钥,需要先创建并妥善保存私钥——后续登录实例完全依赖它。选择其他默认选项后点击 "Launch instances",即可通过实例 ID 链接查看创建状态。

连接实例与切换 Conda 环境

实例状态变为绿色(running)后,右键选择 "Connect" 即可获得登录指令。使用给定的地址通过 SSH 登录实例后,登录界面会显示一长串可用的 Conda 环境列表——Deep Learning AMI 为不同深度学习框架、不同 CUDA 驱动版本和不同 Python 版本都预置了独立环境。

通过conda activate即可在各个环境间自由切换。例如切换到 MXNet Python 3.6 环境:

conda activate mxnet_p36

激活后即可开始开发与训练 MXNet 模型。训练过程中可以通过nvidia-smi实时查看 GPU 状态(如显存占用、GPU 利用率),确认 GPU 确实被充分利用。

方式二:使用 Amazon SageMaker 托管训练与部署

Amazon SageMaker 提供了一条更"托管化"的路径,详细说明见 use_sagemaker.rst。SageMaker 提供 Jupyter Notebook 并对 MXNet 开箱即用:Notebook 可以运行在 CPU 实例上(可享受免费层),而更强大的 CPU 实例或 GPU 实例按使用时长计费。

在 Notebook 中准备数据

在 SageMaker Notebook 内可以完成训练数据的获取、探索与预处理,并通过 SageMaker SDK 将数据上传到 S3,为训练做准备:

import mxnet as mx import sagemaker mx.test_utils.get_cifar10() # 下载 Cifar-10 数据集到 ./data sagemaker_session = sagemaker.Session() inputs = sagemaker_session.upload_data(path='data/cifar', key_prefix='data/cifar10')

mx.test_utils.get_cifar10()是 MXNet 测试工具中内置的数据下载接口,下载后的数据目录通过upload_data上传到 S3,返回的inputs将作为训练输入。

用 Estimator 启动训练

SageMaker 将整个训练流程封装在Estimator类中,无需手动配置和登录 EC2 实例。对于 MXNet,可以直接使用 SageMaker 提供的 MXNet 估算器:

from sagemaker.mxnet import MXNet as MXNetEstimator estimator = MXNetEstimator(entry_point='train.py', role=sagemaker.get_execution_role(), train_instance_count=1, train_instance_type='local', hyperparameters={'batch_size': 1024, 'epochs': 30}) estimator.fit(inputs)

关键参数说明:

  • entry_point:训练入口脚本(这里是train.py),描述模型结构与训练循环。该脚本需要提供若干特定函数,SageMaker 在训练和部署时会自动调用它们;
  • train_instance_count / train_instance_type:训练实例数量与类型。设置为'local'时在本地 Notebook 实例上训练,便于快速验证;
  • hyperparameters:以字典形式传入训练超参数。

如果需要更强大的训练平台,只需修改train_instance_type。一旦调用fit,SageMaker 会自动创建所需的 EC2 实例,在 Docker 容器内完成训练,然后立即关闭这些实例——这正是云计算"按需使用、用完即释放"的典型体现。

部署推理端点

模型训练完成后,可以使用 SageMaker 的托管服务(hosting services)部署推理:它会创建一个 HTTPS 端点对外提供模型推理能力:

predictor = estimator.deploy(initial_instance_count=1, instance_type='ml.m4.xlarge')

deploy的参数指定了用于承载推理的实例数量与类型。此后,就可以通过返回的predictor对象向端点发送推理请求。

除了基础训练与部署,SageMaker 还支持多机分布式训练、超参数调优(Hyperparameter Tuning Jobs)、用 SageMaker Neo 优化模型、构建 Groundtruth 数据集等进阶能力,适合对生产级工作流有要求的场景。

方式三与方式四:Deep Learning Container 与 Base AMI

前两种方式之外,还有两条更偏"基础设施"的路径:

  • AWS Deep Learning Container:官方提供的 Docker 容器镜像,内置经过 AWS 优化的 MXNet 等框架二进制。适合已经采用容器化部署(如 Kubernetes、ECS)的团队,将训练或推理环境以镜像形式固化,保证开发与生产环境一致。
  • AWS Deep Learning Base AMI:仅预装基础系统与必要驱动的"纯净"镜像,需要用户自行安装 MXNet。适合对框架版本、编译选项有严格定制需求的场景,例如需要从源码编译带特定算子的 MXNet。

配套实践:用 S3 上的数据训练 MXNet 模型

在云端训练的常见配套需求是"训练数据存放于 S3"。MXNet 对 S3 有深度集成——详见 s3_integration.md:任何以文件路径作为输入的数据迭代器,都可以直接传入s3://bucket-name/...形式的 URL。

第一步:编译时开启 S3 支持

S3 支持在编译阶段通过USE_S3开关启用。仓库的 make/config.mk 中默认值为USE_S3 = 0(即默认关闭),需要在从源码构建 MXNet 时显式打开:

# 构建前安装依赖(libcurl 与 openssl,用于读写 AWS S3) apt-get install libcurl4-openssl-dev libssl-dev # 在 config.mk 中追加编译开关 echo "USE_S3=1" >> config.mk

上述依赖是 MXNet 通过 libcurl 访问 S3 协议的运行时基础;缺少它们将无法读写 S3。

第二步:配置 S3 认证

MXNet 需要设置 S3 环境变量AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY(可从 AWS 控制台获取 Access Key):

export AWS_ACCESS_KEY_ID=<your-access-key-id> export AWS_SECRET_ACCESS_KEY=<your-secret-access-key>

从实现层面看,S3 文件系统模块还支持通过环境变量配置区域等参数;未显式设置区域时,日志中会出现No AWS Region set, using default region us-east-1之类的提示(对应日志行见 s3_integration.md 中的运行输出示例),即默认使用 us-east-1 区域。

第三步:上传数据到 S3

可以使用 AWS 命令行工具将本地数据递归同步到 S3:

aws s3 sync ./training-data s3://bucket-name/training-data

sync会递归地把本地目录内容复制到 S3 指定目录,并跳过已存在且未变化的文件,适合反复增量更新数据集。

第四步:使用 S3 数据训练

数据就位后,任何能从本地磁盘读写数据的迭代器都能同样从 S3 读写数据。例如使用ImageRecordIter读取位于 S3 的 .rec 格式数据集:

data_iter = mx.io.ImageRecordIter( path_imgrec="s3://bucket-name/training-data/caltech_train.rec", data_shape=(3, 227, 227), batch_size=4, resize=256)

仓库中 tests/python/train/test_conv.py 是一个使用 MNIST 数据训练卷积网络的示例(第 58-60 行通过mx.io.MNISTIter读取本地data/目录下的数据)。官方文档演示了只需将数据路径前缀从data/替换为s3://bucket-name/training-data/,即可让同一个脚本从 S3 读取数据:

sed -i -- 's/data\//s3:\/\/bucket-name\/training-data\//g' ./tests/python/train/test_conv.py

替换后的MNISTIter如下:

train_dataiter = mx.io.MNISTIter( image="s3://bucket-name/training-data/train-images-idx3-ubyte", label="s3://bucket-name/training-data/train-labels-idx1-ubyte", data_shape=(1, 28, 28), label_name='sm_label', batch_size=batch_size, shuffle=True, flat=False, silent=False, seed=10)

运行修改后的脚本,日志会依次显示 S3 文件系统初始化、MNIST 数据加载(如MNISTIter: load 60000 images)以及训练进度与验证精度。这意味着:只要在编译期启用USE_S3=1并配置好认证,MXNet 的数据管道即可无缝切换为云上数据源,无需改动任何业务逻辑。

总结与选型建议

综合以上内容,在 AWS 上运行 MXNet 可以归纳为三条清晰路径:

  1. 快速上手 / 减少运维:选择 Amazon SageMaker,用MXNetEstimator+fit完成托管训练,用deploy发布推理端点;
  2. 自建 EC2 + 预置环境:选择 Deep Learning AMI(Conda 版),用conda activate秒级切换 MXNet 环境,配合nvidia-smi监控 GPU 训练;实例选择、存储 IOPS 与配额申请是三个关键注意事项;
  3. 定制化 / 容器化:Deep Learning Container 提供官方优化镜像,Deep Learning Base AMI 则适合从零构建自定义环境。

无论选择哪条路径,配合 MXNet 原生的 S3 数据集成(USE_S3=1+s3://URL),都能实现"数据在云、算力在云、按需伸缩"的完整云端深度学习工作流。

  • 深度学习
  • 机器学习
  • 人工智能

【免费下载链接】mxnet

Lightweight, 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/21 1:22:39

Vitis 2023.1下LWIP Echo Server与YT8521S PHY调试全攻略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/21 1:22:33

Holtek BS45F3833高集成MCU如何重塑超声波雾化方案设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/21 1:21:25

MXNet Gluon 迁移学习实战:从实验训练到模型部署的完整流程

MXNet Gluon 迁移学习实战&#xff1a;从实验训练到模型部署的完整流程 【免费下载链接】mxnet Lightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Scala, Go, Javascript and m…

作者头像 李华
网站建设 2026/9/21 1:19:41

MATLAB批量处理AFM力曲线:从NSMatlabUtilities到全流程自动化实战

接手过一个接近尾声的材料表征项目&#xff0c;那阵子我每天的工作就是对着 Bruker NanoScope Analysis 里的力曲线&#xff0c;一条一条点开、框选基线、找接触点、拟合、导出。单个文件里 Force Volume 测了 3232 个点&#xff0c;一千多条曲线&#xff0c;再乘以十几个样品&…

作者头像 李华
网站建设 2026/9/21 1:16:46

基于555电路与单片机的DC-AC逆变器设计:C语言实现与调试指南

简介&#xff1a;面向有单片机与电力电子基础的研发人员和技术爱好者&#xff0c;这份基于C语言的直流-交流变换器设计实例&#xff0c;围绕555电路与单片机协同实现逆变输出的项目化学习需求展开。文档完整覆盖硬件电路设计&#xff0c;包括电源管理、555定时器、单片机控制、…

作者头像 李华