MxNet系列——how_to——faq

本文解答了MXNet在构建安装、运行速度及内存使用等方面的常见问题,并提供了优化建议。此外,还介绍了如何复制模型参数及提取特征图等高级用法。

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


常见问题

本节回答了 mxnet/issues上的常见问题。在提问前,请先检查该页面。如果你想要贡献本页面,请尽量使问题和答案简单。如果你的回答非常详细,请发布在其它地方并提供链接。

构建和安装

关于构建和安装的问题,绝大多数问题的答案都可以在 build page 上找到。

速度

在GPU上启动花费很长时间

尝试禁止OpenCV使用GPU: build opencv from source with GPU module disabled.

It’s slow on a single GPU

检查下面几条:

  1. 确保 CUDA/驱动 版本不是太老。
  2. 构建时使用 USE_CUDNN=1。这一般能提速 50+%。尝试使用最近版。
  3. 在运行前执行 export MXNET_CUDNN_AUTOTUNE_DEFAULT=1。这一般能提速 10%-15%。
  4. 如果你使用的是 Tesla GPUs,那么执行命令 nvidia-smi -e 0,来禁用ECC。这需要root权限和重启。You might need root permission and have to reboot.
  5. 对于 Tesla 显卡,执行命令 nvidia-smi -ac ??,设置最大时钟。详细细节,参考 this blog
  6. No throttle reason 一般是由于温度引起的。 nvidia-smi -q -d PERFORMANCE
使用多个GPU或机器,但速度没有提升

检查下面几条:

  1. 你的神经网络是否已经很快了?比如,>1000样本/秒,或>10 批/秒?如果是的话,由于通信开销,不能通过添加更多资源来提速。
  2. 批的尺度是不是很小?尝试增大批尺度。
  3. GPUs数量是否超过4个? 使用 --kv-store=device

内存使用

CPU内存使用异常

这可能是因为数据预取。查看 issue 2111

等待审核

下面的话题需要被审核。

如何将部分参数复制到另一个模型

大部分MXNet包含2部分,参数数组和符号。你可以简单地将参数数组复制到另一个模型的参数数组。例如,在Python模型API中,你可以如下操作:

copied_model =  mx.model.FeedForward(ctx=mx.gpu(), symbol=new_symbol,
                                     arg_params=old_arg_params, aux_params=old_aux_params,
                                     allow_extra_params=True);

关于从已存的old_arg_params复制模型参数的更多信息,请查看 notebook

如何提取某一层的特征图

请查看 notebook.

MXNet 和 CXXNet, Minerva, 与 Purine2是什么关系?
  • MXNet 是由来自以上3个项目的作者们相互协作创建的。
  • MXNet 反映了我们已从这些项目中学习到的东西。
  • MXNet 组合了这些项目的重要方面:效率高,灵活和内存利用率高。
  • MXNet 也包含了新的方法:允许你组合使用不同的编程方式,写出比 CXXNet 和 Purine内存利用率高的CPU/GPU应用,比Minerva更加灵活。
MXNet 和 TensorFlow的是什么关系?
  • MXNet 和 TensorFlow都使用计算图抽象化,它最早在Theano中使用,后来被其它库所采用,比如,CGT, Caffe2, 和 Purine。当前,TensorFlow 使用一个优化的符号API。MXNet 支持一种混合方法,该方法使用动态依赖调度器来组合符号编程和命令编程。

  • 简而言之,MXNet是轻量级的,混合的。既有命令式编程的灵活性,又因计算图(符号编程)而变得速度快和内存高效。

`torch gather` 和 MXNet的`F.gather_nd` 都是用来从张量中选取特定索引元素的功能,但在使用上有一些细微差别。 1. **PyTorch (torch)**: `gather`函数主要用于沿着给定维度`dim`获取指定索引处的元素。它接受两个参数,第一个参数是源张量(`input`),第二个参数是一个长度匹配源张量该维度的整数切片(`index`)。例如,如果你有一个三维张量和一维索引,你可以选择每个索引对应的列。输出的张量将与输入的形状相同,除了指定的维度会变为1。 ```python input = torch.tensor([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) index = torch.tensor([0, 1]) output = torch.gather(input, dim=1, index=index) # 输出: tensor([[1, 4], # [5, 8]]) ``` 2. **MXNet (F.gather_nd)**: `F.gather_nd`与`torch`的`gather`类似,但它可以处理更高维度的索引,允许你通过多个索引来取出多维张量的元素。这个函数需要一个数据张量`(data)`、一个形状匹配的数据张量`(indices)`作为索引以及一个轴`(axis)`。这个函数返回的是一个由索引指定元素组成的张量,形状是 `(indices.shape[:-1] + data.shape[axis+1:])`。 ```python import mxnet as mx data = mx.nd.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) indices = mx.nd.array([[0, 1], [1, 0]]) # 二维索引 output = mx.nd.F.gather_nd(data, indices) # 输出: [[1, 3], [6, 5]] ``` **区别总结**: - PyTorch的`gather`更适用于单个或低维度索引的情况。 - MXNet的`F.gather_nd`支持高维度或多维索引,适合提取多位置的元素。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值