MindSpore后端运行类
MindSpore后端运行类
Q:如何在训练过程中监控loss在最低的时候并保存训练参数?
A:可以自定义一个Callback。参考ModelCheckpoint的写法,此外再增加判断loss的逻辑:
class EarlyStop(Callback):
def __init__(self):
self.loss = None
def step_end(self, run_context):
loss = ****(get current loss)
if (self.loss == None or loss < self.loss):
self.loss = loss
# do save ckpt
Q:mindspore/tests下怎样执行单个ut用例?
A:ut用例通常需要基于debug版本的MindSpore包,官网并没有提供。可以基于源码使用sh build.sh编译,然后通过pytest指令执行,debug模式编包不依赖后端。编译选项sh build.sh -t on,用例执行可以参考tests/runtest.sh脚本。
Q:使用nn.Conv2d时,怎样获取期望大小的feature map?
A:Conv2d shape推导方法可以参考这里,Conv2d的pad_mode改成same,或者可以根据Conv2d shape推导公式自行计算pad,想要使得shape不变,一般pad为(kernel_size-1)//2。
Q:MindSpore安装完成,执行训练时发现网络性能异常,权重初始化耗时过长,怎么办?
A:可能与环境中使用了scipy 1.4系列版本有关,通过pip list | grep scipy命令可查看scipy版本,建议改成MindSpore要求的scipy版本。版本第三方库依赖可以在requirement.txt中查看。 https://gitee.com/mindspore/mindspore/blob/{version}/requirements.txt
其中version替换为MindSpore具体的版本分支。
Q:使用MindSpore可以自定义一个可以返回多个值的loss函数?
A:自定义loss function后还需自定义TrainOneStepCell,实现梯度计算时sens的个数和network的输出个数相同。具体可参考:
net = Net()
loss_fn = MyLoss()
loss_with_net = MyWithLossCell(net, loss_fn)
train_net = MyTrainOneStepCell(loss_with_net, optim)
model = Model(net=train_net, loss_fn=None, optimizer=None)
Q:MindSpore如何实现早停功能?
A:可以自定义callback方法实现早停功能。 例子:当loss降到一定数值后,停止训练。
class EarlyStop(Callback):
def __init__(self, control_loss=1):
super(EarlyStep, self).__init__()
self._control_loss = control_loss
def step_end(self, run_context):
cb_params = run_context.original_args()
loss = cb_params.net_outputs
if loss.asnumpy() < self._control_loss:
# Stop training
run_context._stop_requested = True
stop_cb = EarlyStop(control_loss=1)
model.train(epoch_size, ds_train, callbacks=[stop_cb])
Q:请问自己制作的黑底白字28*28的数字图片,使用MindSpore训练出来的模型做预测,报错提示wrong shape of image是怎么回事?
A:首先MindSpore训练使用的灰度图MNIST数据集。所以,模型使用时,对数据是有要求的,需要设置为28*28的灰度图,就是单通道才可以。
Q:在Ascend平台上,执行用例有时候会报错run task error,如何获取更详细的日志帮助问题定位?
A:可以通过开启slog获取更详细的日志信息以便于问题定位,修改/var/log/npu/conf/slog/slog.conf中的配置,可以控制不同的日志级别,对应关系为:0:debug、1:info、2:warning、3:error、4:null(no output log),默认值为1。
Q:使用ExpandDims算子报错:Pynative run op ExpandDims failed。具体代码:
context.set_context(
mode=cintext.GRAPH_MODE,
device_target='ascend')
input_tensor=Tensor(np.array([[2,2],[2,2]]),mindspore.float32)
expand_dims=ops.ExpandDims()
output=expand_dims(input_tensor,0)
A:这边的问题是选择了Graph模式却使用了PyNative的写法,所以导致报错,MindSpore支持两种运行模式,在调试或者运行方面做了不同的优化:
- PyNative模式:也称动态图模式,将神经网络中的各个算子逐一下发执行,方便用户编写和调试神经网络模型。
- Graph模式:也称静态图模式或者图模式,将神经网络模型编译成一整张图,然后下发执行。该模式利用图优化等技术提高运行性能,同时有助于规模部署和跨平台运行。
用户可以参考官网教程选择合适、统一的模式和写法来完成训练。
Q:使用Ascend平台执行训练过程,出现报错:Out of Memory!!! total[3212254720] (dynamic[0] memory poll[524288000]) malloc[32611480064] failed! 如何解决?
A:此问题属于内存占用过多导致的内存不够问题,可能原因有两种:
- batch_size的值设置过大。解决办法:将batch_size的值设置减小。
- 引入了异常大的Parameter,例如单个数据shape为[640,1024,80,81],数据类型为float32,单个数据大小超过15G,这样差不多大小的两个数据相加时,占用内存超过3*15G,容易造成Out of Memory。解决办法:检查参数的shape,如果异常过大,减少shape。
- 如果以上操作还是未能解决,可以上官方论坛发帖提出问题,将会有专门的技术人员帮助解决。
Q:MindSpore执行GPU分布式训练报错如下,如何解决:
Loading libgpu_collective.so failed. Many reasons could cause this:
1.libgpu_collective.so is not installed.
2.nccl is not installed or found.
3.mpi is not installed or found
A:此问题为MindSpore动态加载集合通信库失败,可能原因如下:
- 执行环境未安装分布式训练依赖的OpenMPI以及NCCL。
- NCCL版本未更新至v2.7.6:MindSpore v1.1.0新增GPU P2P通信算子,该特性依赖于NCCL v2.7.6,若环境使用的NCCL未升级为此版本,则会引起加载失败错误。
Q:启动缓存服务器时,若提示找不到libpython3.7m.so.1.0文件,应如何处理?
A:尝试在虚拟环境下查找其路径并设置LD_LIBRARY_PATH变量:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:{path_to_conda}/envs/{your_env_name}/lib
Q:缓存服务器异常关闭如何处理?
A:缓存服务器使用过程中,会进行IPC共享内存和socket文件等系统资源的分配。若允许溢出,在磁盘空间还会存在溢出的数据文件。一般情况下,如果通过cache_admin --stop命令正常关闭服务器,这些资源将会被自动清理。
但如果缓存服务器被异常关闭,例如缓存服务进程被杀等,用户需要首先尝试重新启动服务器,若启动失败,则应该依照以下步骤手动清理系统资源:
- 删除IPC资源。
- 检查是否有IPC共享内存残留。
一般情况下,系统会为缓存服务分配4GB的共享内存。通过以下命令可以查看系统中的共享内存块使用情况。
$ ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x61020024 15532037 root 666 4294967296 1
其中,shmid为共享内存块id,bytes为共享内存块的大小,nattch为链接到该共享内存块的进程数量。nattch不为0表示仍有进程使用该共享内存块。在删除共享内存前,需要停止使用该内存块的所有进程。
- 删除IPC共享内存。
找到对应的共享内存id,并通过以下命令删除。
ipcrm -m {shmid}
- 删除socket文件。
一般情况下,socket文件位于/tmp/mindspore/cache。进入文件夹,执行以下命令删除socket文件。
rm cache_server_p{port_number}
其中port_number为用户创建缓存服务器时指定的端口号,默认为50052。
- 删除溢出到磁盘空间的数据文件。
进入启用缓存服务器时指定的溢出数据路径。通常,默认溢出路径为/tmp/mindspore/cache。找到路径下对应的数据文件夹并逐一删除。
MindSpore后端运行类的更多相关文章
- MindSpore平台系统类
MindSpore平台系统类 Q:MindSpore只能在华为自己的NPU上跑么? A: MindSpore同时支持华为自己的Ascend NPU.GPU与CPU,是支持异构算力的. Q:MindSp ...
- MindSpore算子支持类
MindSpore算子支持类 Q:在使用Conv2D进行卷积定义的时候使用到了group的参数,group的值不是只需要保证可以被输入输出的维度整除即可了吗?group参数的传递方式是怎样的呢? A: ...
- linux后端运行
程序命令 & :将命令放入后台运行. Ctrl + z : 把一个正在运行的前端命令转移到后台运行,它等效于:程序命令 & :这样虽然把程序放在了后端运行,但是此时程序状态为暂停状态, ...
- MindSpore特性支持类
MindSpore特性支持类 Q:请问MindSpore支持梯度截断吗? A:支持,可以参考梯度截断的定义和使用. Q:如何在训练神经网络过程中对计算损失的超参数进行改变? A:暂时还未有这样的功能. ...
- 后端日期类属性date 不接受string类型日期,都是没找到解决的方法,所有前端传回的string字符串都一一转化为java定义的类型
1.比如日期 我们可以是yyyy-MM-dd 亦可以是 yyyy-MM-dd HH:mm:ss 方法1在java代码中需要的字段上加上注解 写上日期类型,不过这样很麻烦,每个人写了日期类型的接收前端的 ...
- java 27 - 6 反射之 通过配置文件运行类中的方法
在以前,如果我们想要调用一个类中的方法,只能这样子: 例: 有Cat和Dog两个类,里面有eat和run两个成员方法: public class Dog { public void eat() { S ...
- VS2010运行类向导提示“未实现该方法或操作”
因为解决方案中包含有安装项目,将这些项目排除掉,即可打开类向导.
- Java中如何在另一个类里面使用运行类中的对象,举例说明了一下。
package 计时器; import java.util.Timer; import java.util.TimerTask; /* * 主要是想在另一个类里面,使用该类的对象,如何使用呢?如何传递 ...
- linux后端运行(二)
在用管理员执行一个命令后,用Ctrl+Z把命令转移到了后台.导致无法退出root的. 输入命令:exit终端显示:There are stopped jobs. 解决方法:方法一.输入命令:jobs终 ...
随机推荐
- SpringBoot + Dubbo + Zookper 整合
经过2个小时的调试终于弄完了,过程如下, 环境: JDK1.8 .Springboot2.2.6. Windows10系统 如果不看Dubbo 管理页面的话就不用下载 Dubbo-domain了,这个 ...
- hdu5253最小生成树
题意:(中文题,直接粘过来吧) 连接的管道 ...
- The content of element type "web-app" must match "(icon?,display- name?,description?,distributable?,context-param*,filter*,filter-mapping*,listener*,servlet*,servlet- mapping*,session-config?
web.xml头部配置: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app P ...
- Android学习之TTS踩坑笔记
•前言 最近在做一款英文词典的 APP,做到语音模块的时候,我裂开,从网上搜索了各种博客,各种瞎捣鼓,模拟器就是不发音: 辗转反侧数日,终于让我找到解决之法,接下来就本次测试列出一些需要(必须)解决的 ...
- 前端基础问题:CSS vertical-align 属性
CSS vertical-align 属性与基线的那些事~ 定义和用法: vertical-align 属性设置元素的垂直对齐方式. vertical-align只对内联元素(inline.inlin ...
- spring源码解析之属性编辑器propertyEditor
异常信息造成此异常的原因bean配置文件调用代码特别说明:异常解决注册springt自带的属性编辑器 CustomDateEditor控制台输出属性编辑器是何时并如何被注册到spring容器中的?查看 ...
- Vulkan移植GPUImage(五)从P到Z的滤镜
现aoce_vulkan_extra把GPUImage里从P到Z的大部分滤镜用vulkan的ComputeShader实现了,也就是最后一部分的移植,整个过程相对前面来说比较简单,大部分我都是直接复制 ...
- 如何用Vim搭建IDE?
推荐:http://harttle.com/2015/07/18/vim-cpp.html 转自:http://harttle.com/2015/11/04/vim-ide.html 一年前我从Vim ...
- Spring Cloud Alibaba(11)---Sentinel+Nacos持久化
Sentinel+Nacos持久化 有关Sentinel之前有写过两篇 Spring Cloud Alibaba(9)---Sentinel概述 Spring Cloud Alibaba(10)--- ...
- 聊一聊 JVM 的 GC
原文链接:https://www.changxuan.top/?p=1457 引言 JVM 中的 GC 在技术博客中应该算是个老生常谈的话题,网络上也存在着许多质量参差不齐的文章,可以看出来大都是&q ...