MxNet系列——how_to——cloud

2023-05-16

博客新址: http://blog.xuezhisd.top
邮箱:xuezhisd@126.com


在云上配置MXNet

从头开始设置一个AWS的GPU集群

本节提供了如何设置AWS集群以使用MXNet的详细教程。描述了如何:

  • Use Amazon S3 to host data
  • Set up an EC2 GPU instance with all dependencies installed
  • Build and run MXNet on a single computer
  • Set up an EC2 GPU cluster for distributed training

使用Amazon S3来存储数据

Amazon S3 提供了分布式数据存储,便于存储大数据。使用S3,需要 AWS 证书,它包含一个 ACCESS_KEY_ID 和一个 SECRET_ACCESS_KEY

如果希望在 MXNet 中使用 S3,需要 设置环境变量 AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY,方法是:将下面的2行命令添加到 ~/.bashrc(注意:需要将环境变量的值替换成自己的密匙)。

export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

有多种将数据上传到S3的方法。一个简单的方法是使用 s3cmd。例如:

wget http://data.mxnet.io/mxnet/data/mnist.zip
unzip mnist.zip && s3cmd put t*-ubyte s3://dmlc/mnist/

设置一个EC2的GPU实例

MXNet 需要下面的库:

  • 支持C++11的C++编译器。比如, gcc >= 4.8
  • CUDA (CUDNN 可选)。用于GPU线性代数运算
  • BLAS (cblas, open-blas, atblas, mkl, 或其它) 用于CPU线性代数运算
  • opencv 用于图像预处理和数据增强。
  • curlopenssl 用于Amazon S3 存/取数据。

在EC2实例上安装 CUDA,需要较大的功夫。Caffe有一个较好的[教程](https://github.com/BVLC/caffe/wiki/Install-Caffe-on-EC2-from-scratch-(Ubuntu,-CUDA-7,-cuDNN),它描述了如何在Ubuntu 14.04上安装CUDA 7.0。

注意: 2015年11月7日,我们尝试了 CUDA 7.5,但发现存在问题。

你可以使用包管理器来安装剩下的部分。比如,在Ubuntu上:

sudo apt-get update
sudo apt-get install -y build-essential git libcurl4-openssl-dev libatlas-base-dev libopencv-dev python-numpy

Amazon Machine 镜像 ami-12fd8178中包含上面列出的安装包。

在GPU实例上构建和运行 MXNet

下面的命令用于构建支持 CUDA/CUDNN, Amazon S3, 和分布式训练的MXNet。

git clone --recursive https://github.com/dmlc/mxnet
cd mxnet; cp make/config.mk .
echo "USE_CUDA=1" >>config.mk
echo "USE_CUDA_PATH=/usr/local/cuda" >>config.mk
echo "USE_CUDNN=1" >>config.mk
echo "USE_BLAS=atlas" >> config.mk
echo "USE_DIST_KVSTORE = 1" >>config.mk
echo "USE_S3=1" >>config.mk
make -j$(nproc)

为了测试是否安装成功,使用GPU在MNIST上训练一个卷积神经网络(CNN):

python tests/python/gpu/test_conv.py

如果你已经将MNIST数据集放在 s3://dmlc/mnist,你可以使用下面的命令直接读取存储在Amazon S3上的数据:

sed -i.bak "s!data_dir = 'data'!data_dir = 's3://dmlc/mnist'!" tests/python/gpu/test_conv.py

注意: 你可以使用命令 sudo ln /dev/null /dev/raw1394 来修复 OpenCV 错误 libdc1394 error: Failed to initialize libdc1394

配置一个EC2 GPU集群,用于分布式训练

一个集群包含多个电脑。你可以使用安装了MXNet的电脑作为主电脑(Root),用于提交作业,并启动一些从电脑(slave)来执行作业。比如,使用AMI启动多个实例,镜像ami-12fd8178已经安装了依赖。有2个选项:

  • 让所有从电脑(主电脑一样)的端口可访问,通过在安全用户组中设置类型:TCP,源:任何地方来实现。
  • 使用相同的 pem 作为主计算机来访问所有从计算机,然后将 pem 文件复制到主计算机的 ~/.ssh/id_rsa 文件中。如果已经这样操作,主计算机能通过SSH来访问所有的从计算机。

现在,在多个电脑中运行CNN。假定在主计算机的一个工作目录下,比如 ~/train,且MXNet位于 ~/mxnet

  1. 为了容易同步,将 MXNet Python 库打包到工作目录 ~/train 下。
cp -r ~/mxnet/python/mxnet .
cp ~/mxnet/lib/libmxnet.so mxnet/

然后复制训练程序:

cp ~/mxnet/example/image-classification/*.py 
  1. 建立一个host文件,将所有从计算机的IPs写入该文件。例如,cat hosts
172.30.0.172
172.30.0.171
  1. 假定有2个计算机,使用2个workers训练CNN:
../../tools/launch.py -n 2 -H hosts --sync-dir /tmp/mxnet python train_mnist.py --kv-store dist_sync

注意: 有时候,即使你在主节点上已经按下 Ctrl-c,从节点上的作业依然存在。使用下面的命令终止它们:

cat hosts | xargs -I{} ssh -o StrictHostKeyChecking=no {} 'uname -a; pgrep python | xargs kill -9'

***注意:***上面使用的模型很简单,很容易训练,因此这不是一个比较好的分布式训练的基准。考虑使用其它 例程。

更多选项

使用多个数据块

将一个数据集分成几个文件很常见,尤其是在分布式环境下。MXNet支持直接从多个数据块加载数据。将所有的记录文件放到一个文件夹,并设置数据路径指向该文件夹。

使用 YARN 和 SGE

当没有集群调度框架时,使用SSH比较简单。MXNet被设计成能在不同平台之间具有可移植性。我们在tracker中提供了其它的脚本,以便于在其它集群框架(包括Hadoop-YARN和SGE)下运行MXNet。我们欢迎你贡献在你喜欢的分布式平台上运行MXNet的例程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MxNet系列——how_to——cloud 的相关文章

  • 云原生环境中的连接池

    云原生环境中还需要连接池吗 连接池 例如打开的数据库连接 在过去非常流行 我想 不知道 在云原生环境中不再需要它们了 有一个容器 pod 池 这样就不再需要连接池了 这是真的 一如既往 衡量 不要猜测 但是 是的 如果您关心性能 您仍然希望
  • ManageIQ 相对于 OpenStack Horizo​​n 有哪些优势?我目前正在 Horizo​​n 上工作,但想知道 ManageIQ 是否更好 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 这两者有什么区别 我想从仪表板将资源控制到用户级别 只是想知道使用 ManageIQ 或 Horizo n 有哪些优势 什么是更好的选择 这取决
  • Android 谷歌云消息传递示例无法正常工作

    我正在关注这里的教程http developer android com google gcm gs html http developer android com google gcm gs html为了设置 GCM 我目前正在尝试注册设
  • 使用 google-api-php-client 下载文件

    我在尝试使用位于以下位置的 php 客户端从 Google Cloud Storage 下载文件时遇到问题https code google com p google api php client https code google com
  • 我想在服务器上 24/7 运行 Python 脚本 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在制作一个模拟虚拟货币股票市场的程序 我还没有尝试过任何东西 但我想要一个Python脚本能够24
  • Erlang集群

    我正在尝试使用 Erlang 作为将所有组件粘合在一起的粘合剂来实现一个集群 我喜欢它创建一个完全连接的节点图的想法 但在在线阅读不同的文章后 似乎这不能很好地扩展 最多有 50 100 个节点 OTP 的开发者是否故意施加此限制 我确实知
  • Node+Passport.js + Sessions + 多个服务器

    护照很棒 我现在发现它处理会话的方式存在一些问题 一定是我用错了 登录 会话 我存储在数据库中的用户数据对我来说一切都很顺利 然而 我发现当我转移到生产环境 具有多个服务器的 EC2 上的云 时 我每次都会丢失登录会话 现在我很清楚这一点
  • EC2-从 EBS 快照启动,然后分离卷以降低成本

    为了方便起见 我想从 EBS 快照启动 但随后我想在启动后分离该卷 这样我就不必为此付费 这可能吗 不 这是不可能的 EBS卷是系统分区 因此它与将硬盘驱动器从服务器中拉出相同 为了降低成本 您可以尝试最小化卷的大小 以便它有足够的空间来容
  • 在 Amazon EC2 Windows 实例中自动挂载 EBS 卷

    有谁知道如何自动挂载弹性块存储 http aws amazon com ebs 在 Amazon 中启动 Windows 2003 实例时的 EBS 卷弹性计算云 http aws amazon com ec2 EC2 Setup 确保 E
  • Terraform - 我应该使用 user_data 还是 Provisioner 来引导资源?

    看来我可以使用user data使用模板文件或 远程执行 provisioner使用内联命令进行引导 那么哪一个被认为更惯用呢 你应该使用user data The 用户数据 http docs aws amazon com AWSEC2
  • Azure Web应用服务时区更改问题

    我们正在使用 Azure Web 应用程序服务进行多租户应用程序 但应用程序服务的默认时区是 UTC 我只想更改该地区的时区 我已经在应用程序设置中尝试了 WEB TIMEZONE 变量 但不起作用 You are setting wron
  • 使用 MXnet 时如何保存模型

    我正在使用 MXnet 训练 CNN 在 R 中 并且可以使用以下代码训练模型 不会出现任何错误 model lt mx model FeedForward create symbol network X train iter ctx mx
  • MXNet:nn.Activation 与 nd.relu?

    我是 MXNet 新手 我在 Python3 中使用它 他们的教程系列鼓励您定义自己的gluon blocks http gluon mxnet io chapter03 deep neural networks plumbing html
  • Amazon s3 putObject 标记不起作用

    我正在尝试使用 putObject 方法上传到 Amazon s3 时添加标签 根据文档 我已将标签创建为字符串类型 我的文件已上传到 Amazon s3 但我无法使用提供的标签数据查看文件对象的对象级别标签 根据文档遵循以下代码示例 va
  • V100 和 P100 在 Google Compute Engine 上的可用性

    描述 我刚刚尝试了一段时间 使用我的个人帐户设置或保留用于机器学习的虚拟机 我在 n1 上使用了几个月 具有大约 8 GB 或更多 GB RAM 以及用于机器学习的 P100 或 V100 现在尝试了至少一半具有 P100 V100 可用性
  • 可扩展性和弹性有什么区别?

    我听说很多人交替使用这两个术语 但在我看来 它们之间还是有区别的 可扩展性 的能力软件系统在其当前硬件资源上处理更大的工作负载 scale up 或当前和额外的硬件资源 向外扩展 应用程序服务不中断 弹性 的能力硬件层下面 通常是云基础设施
  • 用于存储应用程序用户机密的 Azure Key Vault 机密

    在我的应用程序中 我必须存储用户的非常敏感的数据 例如其他第三部分服务的各种密码 用户填写一个表格 向我们提供第三部分服务的登录名和密码 该应用程序的目标是使用从 100 多个输入生成的 powershell 脚本来设置其他复杂系统 需要将
  • Google Cloud Stackdriver 监控计算引擎磁盘使用情况

    我最近已经启动并运行了 Google 计算引擎实例 我探索了 Google Cloud stackdriver 用于监控 CPU 使用情况等 我已将 Stackdriver 代理安装到其中一个 Compute Engine 实例上进行测试
  • AWS SimpleDB 上属性的最大大小

    我正在构建一个移动应用程序 iPhone Android 并希望将应用程序数据存储到亚马逊的 SimpleDB 上 因为我们不想托管自己的服务器来提供这些服务 我已经浏览了所有文档 元素值的最大存储大小是 1024 字节 就我而言 我们需要
  • 为什么使用 no-op 来填补 paxos 事件之间的空白是合法的?

    我正在学习Paxos算法 http research microsoft com en us um people lamport pubs paxos simple pdf http research microsoft com en us

随机推荐

  • Eigen教程1 - 基础

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 固定大小的矩阵和向量 参考链接 xff1a http eigen tuxfamily org dox 2 0 Tutorial
  • Eigen教程2 - 入门

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 安装Eigen 无需安装 只需将Eigen位置添加到include路径中 Demo 1 MatrixXd xff0c X表示动
  • Eigen教程3 - 稀疏矩阵操作

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 稀疏矩阵操作 操作和求解稀疏问题需要的模块 xff1a SparseCore SparseMatrix 和 SparseVec
  • Eigen教程4 - 稀疏矩阵快速参考指南

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 本文对稀疏矩阵SparseMatrix的主要操作进行了总结 首先 xff0c 建议先阅读 Eigen教程2 稀疏矩阵操作 关于
  • Eigen教程5 - 求解稀疏线性方程组

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com Eigen中有一些求解稀疏系数矩阵的线性方程组 由于稀疏矩阵的特殊的表示方式 xff0c 因此获得较好的性能需要格外注意 查看
  • Eigen教程6 - Matrix-free solvers

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com Matrix free solvers 像ConjugateGradient 和 BiCGSTAB这样的迭代求解器可以用在 m
  • Eigen教程7 - Eigen和Matlab的比较

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com Eigen和Matlab比较 参考 http eigen tuxfamily org dox AsciiQuickRefere
  • MxNet系列——how_to——perf

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 性能 下面是一些技巧 xff0c 以尽可能的获取MXNet的最佳性能 数据 对于输入数据 xff0c 需要注意以下内容 xff
  • MxNet系列——how_to——visualize_graph

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 如何将神经网络可视化为计算图 该章节描述了如何在MXNet中使用在mx viz plot network来可视化 xff08
  • 修改antlr错误信息输出格式的方法

    找到 antlr DefaultFileLineFormatter java 修改类DefaultFileLineFormatter的函数getFormatString 我将其修改如下 以适应vc的错误信息输出格式 package antl
  • MxNet系列——how_to——torch

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 如何将MXNet用作Torch的前后端 本章节描述了如何将MXNet用作Torch的两个主要功能 xff08 前端和后端 xf
  • MxNet系列——how_to——smart_device

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 将深度学习库压缩成一个文件 xff0c 以便移植到智能设备中 深度学习系统是复杂的 xff0c 并且常常有些依赖环境 将深度学
  • MxNet系列——how_to——new_op

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 如何创建新的操作符 网络层 本节内容描述了创建新的MXNet操作符 xff08 或网络 xff09 的过程 我们已经尽了最大努
  • MxNet系列——how_to——multi_devices

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 在多个CPU GPUs上以数据并行方式运行MXNet MXNet 支持在多个CPUs和GPUs上进行训练 其中 xff0c 这
  • MxNet系列——how_to——model_parallel_lstm

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 使用模型并行的方式在多个GPUs上训练LSTM 由于复杂的数据依赖 xff0c LSTM评价很困难 LSTM的训练过程 xff
  • MxNet系列——how_to——index

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com MXNet 怎么办系列 How tos 提供了一系列的有关安装 xff0c 基本概念 xff0c 说明 xff0c 命令和使用
  • MxNet系列——how_to——faq

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 常见问题 本节回答了 mxnet issues上的常见问题 在提问前 xff0c 请先检查该页面 如果你想要贡献本页面 xff
  • MxNet系列——how_to——env_var

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 环境变量 环境可以修改MXNet的一些设置 一般情况下 xff0c 你不需要修改这些设置 本节将它们罗列出来 xff0c 用于
  • MxNet系列——how_to——develop_and_hack

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 开发和 Hack MXNet 创建新的操作符在MXNet中使用Torch设置MXNet的环境变量 其它资源 概述 MXNet的
  • MxNet系列——how_to——cloud

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 在云上配置MXNet 从头开始设置一个AWS的GPU集群 本节提供了如何设置AWS集群以使用MXNet的详细教程 描述了如何