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)>

MXNET:深度学习计算-GPU的更多相关文章

  1. MXNet深度学习库简介

    MXNet深度学习库简介 摘要: MXNet是一个深度学习库, 支持C++, Python, R, Scala, Julia, Matlab以及JavaScript等语言; 支持命令和符号编程; 可以 ...

  2. 深度学习中GPU和显存分析

    刚入门深度学习时,没有显存的概念,后来在实验中才渐渐建立了这个意识. 下面这篇文章很好的对GPU和显存总结了一番,于是我转载了过来. 作者:陈云 链接:https://zhuanlan.zhihu. ...

  3. Caffe深度学习计算框架

    Caffe | Deep Learning Framework是一个清晰而高效的深度学习框架,其作者是博士毕业于UC Berkeley的 Yangqing Jia,目前在Google工作.Caffe是 ...

  4. MXNET:深度学习计算-模型构建

    进入更深的层次:模型构造.参数访问.自定义层和使用 GPU. 模型构建 在多层感知机的实现中,我们首先构造 Sequential 实例,然后依次添加两个全连接层.其中第一层的输出大小为 256,即隐藏 ...

  5. MXNET:深度学习计算-模型参数

    我们将深入讲解模型参数的访问和初始化,以及如何在多个层之间共享同一份参数. 之前我们一直在使用默认的初始函数,net.initialize(). from mxnet import init, nd ...

  6. MXNET:深度学习计算-自定义层

    虽然 Gluon 提供了大量常用的层,但有时候我们依然希望自定义层.本节将介绍如何使用 NDArray 来自定义一个 Gluon 的层,从而以后可以被重复调用. 不含模型参数的自定义层 我们先介绍如何 ...

  7. mxnet深度学习实战学习笔记-9-目标检测

    1.介绍 目标检测是指任意给定一张图像,判断图像中是否存在指定类别的目标,如果存在,则返回目标的位置和类别置信度 如下图检测人和自行车这两个目标,检测结果包括目标的位置.目标的类别和置信度 因为目标检 ...

  8. 深度学习查看GPU实时使用情况

    1.CPU使用情况查看 动态查看 打开终端,输入: $  top按Ctrl+C退出查看. 即可看到实时的CPU使用情况. 查看版本 $ top -h 即可看到当前procps-ng的版本. 2. gp ...

  9. 科普帖:深度学习中GPU和显存分析

    知乎的一篇文章: https://zhuanlan.zhihu.com/p/31558973 关于如何使用nvidia-smi查看显存与GPU使用情况,参考如下链接: https://blog.csd ...

随机推荐

  1. Angular 个人深究(四)【生命周期钩子】

    Angular 个人深究(四)[生命周期钩子] 定义: 每个组件都有一个被 Angular 管理的生命周期. Angular 创建它,渲染它,创建并渲染它的子组件,在它被绑定的属性发生变化时检查它,并 ...

  2. MySQL数据库crash的问题分析

    [问题] 生产环境有多台slave服务器,不定期的会crash,下面是error log中的堆栈信息 Thread pointer: 0x7f1e54b26410 Attempting backtra ...

  3. JavaScript学习总结(六)——前端模块化开发

    早期的javascript版本没有块级作用域.没有类.没有包.也没有模块,这样会带来一些问题,如复用.依赖.冲突.代码组织混乱等,随着前端的膨胀,模块化显得非常迫切. 前端模块化规范如下: 一.前端模 ...

  4. 深入剖析ConcurrentHashMap

    原文是09年时写的,在公司的邮件列表发过,同事一粟 和清英 创建的并发编程网 对这方面概念和实战有更好的文章,贴出来仅供参考.pdf格式在:http://www.slideshare.net/hong ...

  5. Python字典中的值为列表或字典的构造方法

    转自: https://blog.csdn.net/buside/article/details/81323871 1.值为列表的构造方法 dic = {} dic.setdefault(key,[] ...

  6. BZOJ.3720.Gty的妹子树(树分块)

    题目链接 洛谷上惨遭爆零是为什么.. 另外这个树分块算法是假的. /* 插入删除只涉及一个数,故每次可以枚举一遍,而不是重构完后sort */ #include<cmath> #inclu ...

  7. c/c++中int main(int argc,char *argv[])的具体含义

    int main(int argc,char * argv[ ]) argv为指针的指针 argc为整数 char **argv or: char *argv[ ] or: char argv[ ][ ...

  8. 20172302 《Java软件结构与数据结构》第三周学习总结

    2018年学习总结博客总目录:第一周 第二周 第三周 教材学习内容总结 第五章 队列 1.队列是一种线性集合,其元素从一端加入,从另一端删除:队列元素是按先进先出(FIFO(First in Firs ...

  9. unity中HideFlags的利用

    HideFlags主要用于控制物体在hierarchy,Inspector视图的显示销毁等的bit mask~ None:默认情况,正常可见对象~ API: HideInHierarchy:在Hier ...

  10. 中国非正常死亡最高的行业 TOP 10

    1月2日晚,佟大为等艺人.业内人士及小马奔腾集团员工纷纷在朋友圈或微博上发布消息,小马奔腾集团董事长李明因心肌梗塞于当晚去世,年仅47岁. 这再次将创业者和职场人士健康问题推到了公众面前,而就在去年中 ...