- 深度学习
- 机器学习
- 人工智能
【免费下载链接】mxnet
Lightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Scala, Go, Javascript and more
导读
深度学习训练往往需要极其强大的硬件,且使用时长难以精确预估,而 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_ID与AWS_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-datasync会递归地把本地目录内容复制到 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 可以归纳为三条清晰路径:
- 快速上手 / 减少运维:选择 Amazon SageMaker,用
MXNetEstimator+fit完成托管训练,用deploy发布推理端点; - 自建 EC2 + 预置环境:选择 Deep Learning AMI(Conda 版),用
conda activate秒级切换 MXNet 环境,配合nvidia-smi监控 GPU 训练;实例选择、存储 IOPS 与配额申请是三个关键注意事项; - 定制化 / 容器化: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
相关推荐
macOS ESP-IDF 安装完整指南:3 步装好,2 分钟验收 hello_world
macOS ESP IDF 安装完整指南:3 步装好,2 分钟验收 hello_world 装好 ESP IDF 后,你能在自己的 ESP32 开发板上编译、烧
物联网嵌入式Facial_Details_Synthesis表情先验怎么选:FACS动作单元与Emotion情绪分类双通道完整对比指南
Facial_Details_Synthesis表情先验怎么选:FACS动作单元与Emotion情绪分类双通道完整对比指南 Facial_Details_Syn
人工智能深度学习机器学习在 AWS 上部署与运行 MXNet:EC2、SageMaker、云端训练与 S3 数据集集成实战指南
在 AWS 上部署与运行 MXNet:EC2、SageMaker、云端训练与 S3 数据集集成实战指南 本指南系统讲解如何在 AWS 云平台上部署与运行 MXN
深度学习人工智能机器学习分布式训练
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考