mxnet的设备管理

MXNet 使用 context 来指定用来存储和计算的设备,例如可以是 CPU 或者 GPU。默认情况下,MXNet 会将数据创建在主内存,然后利用 CPU 来计算。在 MXNet 中,CPU 和 GPU 可分别由 cpu() 和 gpu() 来表示。

需要注意的是,mx.cpu()(或者在括号里填任意整数)表示所有的物理 CPU 和内存。这意味着计算上会尽量使用所有的 CPU 核。
但 mx.gpu() 只代表一块显卡和相应的显卡内存。如果有多块 GPU,我们用 mx.gpu(i) 来表示第 i 块 GPU(i 从 0 开始)且 mx.gpu(0) 和 mx.gpu() 等价。

NDArray 的 GPU 计算

默认情况下,NDArray 存在 CPU 上

x = nd.array([1,2,3])
x
x.context
# output
[ 1.  2.  3.]
<NDArray 3 @cpu(0)>
cpu(0)

我们有多种方法将 NDArray 放置在 GPU 上。例如我们可以在创建 NDArray 的时候通过 ctx 指定存储设备。

a = nd.array([1, 2, 3], ctx=mx.gpu())
a
b = nd.random.uniform(shape=(2, 3), ctx=mx.gpu(1))
b
# output
[ 1.  2.  3.]
<NDArray 3 @gpu(0)>
[[ 0.59118998  0.313164    0.76352036][ 0.97317863  0.35454726  0.11677533]]
<NDArray 2x3 @gpu(1)>

除了在创建时指定,我们也可以通过 copyto 和 as_in_context 函数在设备之间传输数据。下面我们将 CPU 上的 x 复制到 GPU 0 上。

y = x.copyto(mx.gpu())
z = x.as_in_context(mx.gpu())

需要区分的是,如果源变量和目标变量的 context 一致,as_in_context 使目标变量和源变量共享源变量的内存;而 copyto 总是为目标变量新创建内存。

GPU 上的计算

MXNet 的计算会在数据的 context 上执行。为了使用 GPU 计算,我们只需要事先将数据放在 GPU 上面。而计算结果会自动保存在相同的 GPU 上。

注意,MXNet 要求计算的所有输入数据都在同一个 CPU/GPU 上。这个设计的原因是不同 CPU/GPU 之间的数据交互通常比较耗时。因此,MXNet 希望用户确切地指明计算的输入数据都在同一个 CPU/GPU 上。例如,如果将 CPU 上的 x 和 GPU 上的 y 做运算,会出现错误信息。

当我们打印 NDArray 或将 NDArray 转换成 NumPy 格式时,如果数据不在主内存里,MXNet 会自动将其先复制到主内存,从而带来隐形的传输开销。

Gluon 的 GPU 计算

同 NDArray 类似,Gluon 的模型可以在初始化时通过 ctx 指定设备。下面代码将模型参数初始化在 GPU 上。

net = nn.Sequential()
net.add(nn.Dense(1))
net.initialize(ctx=mx.gpu())

当输入是 GPU 上的 NDArray 时,Gluon 会在相同的 GPU 上计算结果。

net(y)
# output
[[ 0.0068339 ][ 0.01366779][ 0.02050169]]
<NDArray 3x1 @gpu(0)>

模型参数存储在相同的 GPU 上。

net[0].weight.data()
[[ 0.0068339]]
<NDArray 1x1 @gpu(0)>

转载于:https://www.cnblogs.com/houkai/p/9522182.html

MXNET:深度学习计算-GPU相关推荐

  1. 检验 pytorch,tensorflow,paddle,mxnet 深度学习框架是否正确支持GPU功能

    检验 pytorch,tensorflow,paddle,mxnet 深度学习框架是否正确支持GPU功能 1.pytorch 框架 import torch a = torch.cuda.is_ava ...

  2. 如何从系统层面优化深度学习计算?

    编者按:在图像.语音识别.自然语言处理.强化学习等许多技术领域中,深度学习已经被证明是非常有效的,并且在某些问题上已经达到甚至超越了人类的水平.然而,深度学习对于计算能力有着很大的依赖,除了改变模型和 ...

  3. 手把手教你从系统层面优化深度学习计算

    来源: 微软研究院AI头条 本文约5643字,建议阅读10分钟. 在图像.语音识别.自然语言处理.强化学习等许多技术领域中,深度学习是非常有效的,并且某些问题已经达到甚至超越了人类的水平.除了改变模型 ...

  4. mxnet深度学习(NDArray)

    mxnet深度学习(NDArray) MXNet里面的3个主要的概念: NDArray:NDArray提供了矩阵和张量(tensor)运算在CPU和GPU上,通过使用并行运算的技术. Symbol:S ...

  5. 深度学习 训练吃显卡_最新最全深度学习训练/GPU服务器硬件配置推荐2020

    人工智能随着核心算法.计算能力的迅速提升,以及海量联网数据的支持,在本世纪终于迎来了质的飞跃,人工智能将是未来应用最广泛的技术之一,在市场经济领域带来更多的机遇与机会,在医学领域可以大大加快诊断速度和 ...

  6. 系统层面优化深度学习计算

    百度首页 yuancsnuist 如何从系统层面优化深度学习计算? 搜狐科技05-1717:18 编者按:在图像.语音识别.自然语言处理.强化学习等许多技术领域中,深度学习已经被证明是非常有效的,并且 ...

  7. 广告深度学习计算:异构硬件加速实践

    丨目录: - 前沿 1. 算力需求与供给 1.1 算力需求:模型复杂度 1.2 算力供给:异构硬件计算能力 1.3 问题与优化方法 2. 算法-系统-硬件协同性能优化 2.1 算法优化 2.2 系统优 ...

  8. 普中科技开发板使用说明书_百度大脑加持,米尔科技FZ3深度学习计算卡评测

    如果你要问我现在电子产业什么最热,那无疑是AI,而基于大数据训练的深度学习技术可以说是目前AI应用的最广,最成功的产品形态了,覆盖我们生活的方方面面,诸如购物.看病.新闻编辑等,在这高深技术的背后少不 ...

  9. mxnet深度学习(KVS)

    mxnet深度学习(KVS) 分布式的键值对的存储(Ditstributed Key-value Store) KVStore是一个数据共享的地方.我们可以把它认为他是一个简单的类横跨不同的设备(GP ...

最新文章

  1. [MFC]多线程传参问题 [AfxBeginThread]
  2. c++不允许使用不完整的类型
  3. 数据库以及后台开发之写在前面
  4. Keras 实现 LSTM
  5. linux进程属主6,20150917 Linux进程查看与管理以及作业管理
  6. Deep Learning for Brain MRI Segmentation: State of the Art and Future Directions
  7. maven配置sqlServer的依赖
  8. Linux系列-Red Hat5平台下的DHCP服务搭建
  9. tomcat遇到jre\lib\ext\localedata.pack 时出错
  10. 为系统安装盘集成Server Pack补丁包
  11. android 上运行python脚本,Android上执行python脚本-QPython
  12. 【每周一文】Supervised Sequence Labelling with Recurrent Neural Networks
  13. 基于随机游走的PersonalRank
  14. bestsort 开通公众号了~欢迎关注哟~
  15. windows下用Mingw64编译qtw3d
  16. 用Python写随机密码生成
  17. android微信分享长图功能,安卓分享9宫格图片到微信
  18. MCtalk创业声音丨博学明辨:兴趣社交,给退休前后老年朋友的「小而美」空间
  19. freeswitch智能语音开发之ASR
  20. (收藏)【 数字化客户体验】NPS、CSAT和CES——2020年跟踪的客户满意度指标

热门文章

  1. 高性能服务器架构思路(五)——分布式缓存
  2. Centos6.3修改源码遇到无法yum安装的问题
  3. ubuntu12.04没有输入法。。
  4. AgileEAS.NET平台之ORM设计器
  5. 在IIS中写Python的CGI脚本
  6. shell脚本将本地docker镜像push到阿里云镜像仓库
  7. 46.Express框架 GET 方法和POST 方法
  8. 用两张图告诉你,为什么你的App会卡顿?
  9. 为什么百度首页的HTML源代码最后一行要多一行?浪费空间呀!
  10. Django基础之Model创建表