• [API使用] 【mindspore】【算子不支持GPU】Unsupported op [Ceil] on GPU
    【功能模块】在训练时报错,提示算子不支持gpu类型【操作步骤&问题现象】1、开始训练,加载数据,走到train时就报错【截图信息】[EXCEPTION] DEVICE(35811,7f3f576f62c0,python):2022-03-03-07:28:44.866.790 [mindspore/ccsrc/runtime/device/gpu/kernel_info_setter.cc:83] SupportedTypeList] Unsupported op [Ceil] on GPUTraceback (most recent call last):  File "train.py", line 477, in <module>    train(train_paths, s3Client, trainlog, valid_paths)  File "train.py", line 373, in train    train_model(train_x, train_y)  File "/root/miniconda3/envs/py3/lib/python3.7/site-packages/mindspore/nn/cell.py", line 407, in __call__    out = self.compile_and_run(*inputs)  File "/root/miniconda3/envs/py3/lib/python3.7/site-packages/mindspore/nn/cell.py", line 734, in compile_and_run    self.compile(*inputs)  File "/root/miniconda3/envs/py3/lib/python3.7/site-packages/mindspore/nn/cell.py", line 721, in compile    _cell_graph_executor.compile(self, *inputs, phase=self.phase, auto_parallel_mode=self._auto_parallel_mode)  File "/root/miniconda3/envs/py3/lib/python3.7/site-packages/mindspore/common/api.py", line 551, in compile    result = self._graph_executor.compile(obj, args_list, phase, use_vm, self.queue_name)RuntimeError: mindspore/ccsrc/runtime/device/gpu/kernel_info_setter.cc:83 SupportedTypeList] Unsupported op [Ceil] on GPU【日志信息】(可选,上传日志内容或者附件)
  • [数据处理] 生成mindrecord格式后mindspore.mindrecord.FileReader无法读取
    用该程序生成了一个test.mindrecord格式文件用该程序读取,无法读取,报错信息如下
  • [推理] 【Ascend310,Mindspore】【Mindir文件推理】导出多输入的模型在Ascend310上Predict时出错
    【功能模块】在Ascend310上对于一个多输入的模型(由Mindir文件Bulid得到的)预测时报错,错误截图如下在mindspore python版本导出Mindir文件的代码,能正常导出,导出的代码如下在Ascend310上编译通过,报错部分的代码如下
  • [特性分析] MindSpore执行状态日志解析与应用
    ## 背景 MindSpore作为新一代深度学习框架,具有动态图灵活、易调试的特点,同时支持图模式执行,提高执行效率。动静结合的方式,加上多组件多后端,其执行流程较为复杂。**尤其是静态图模式下,图编译与执行过程是一个黑盒,这给用户跟踪MindSpore执行状态,功能调试带来挑战。** ## 特性简介 为解决跟踪MindSpore的执行状态,提出通过设计状态日志。 识别各组件的关键环节的起始与终止位置,记录状态信息日志,实现执行状态的跟踪。 MindSpore主要的执行流程包括图编译和图执行,其中图编译分为前端编译与后端编译。前端编译是与设备无关的语法解析与优化过程,后端编译是与设备相关的特化过程。 图编译的主要阶段包括如下: - `parse`:负责解析入口函数,该阶段会初步生成MindIR,如果查看IR文件,我们能观察到该阶段仅仅解析了顶层Cell的图信息; - `symbol_resolve`:负责进一步解析入口函数,主要是递归解析入口函数直接或间接引用到的其他函数和对象。如果使用了尚不支持的语法,一般会在此阶段出错; - `abstract_specialize`:根据输入信息推导出IR中所有节点的数据类型和形状信息; - `optimize`:负责硬件无关的优化,自动微分与自动并行功能也是在该阶段展开。该阶段又可细分为若干个子阶段,算子融合即是在该阶段; - `validate`:负责校验编译出来的计算图,如果到此阶段计算图中还有仅临时使用的内部算子,则会报错退出; - `task_emit`: 负责将计算图传给后端进行后端优化; - `execute`:负责启动执行图流程。 为记录mindspore的编译与执行状态,在任务的开始与结束,计算图的编译与执行各阶段打印格式化日志信息。 格式如下: ``` Status record: system init. Status record: start xxx action. Status record: end xxx action. ... Status record: start load input. xxx Status record: end load input. xxx Status record: start run graph. xxx Status record: end run graph. xxx ... Status record: system exit. ``` `system init` 表示C++后端初始化。 `star xxx action` 表示前端编译的各个阶段的开始,如`start parse action`,`start symbol_resolve action`等等。 `end xxx action` 表示前端编译的各个阶段的结束,与`start xxx action`成对出现。 如`end parse action`,`end symbol_resolve action`等。 `start load input`表示后端开始加载数据进行训练或推理,该信息后面的`xxx`表示附加说明信息,例如当前计算图的编号,当有多个计算图时,会分别记录多个计算图的起始状态。 `end load input`表示后端加载数据完成。 与`start load input`成对出现。附加说明信息中计算图的编号会保持一致,表示同一个计算图执行的开始与结束。 `start run graph`表示开始在设备上执行计算图。 附加说明信息中的计算图的编号会与加载数据的图对应。 `end run graph` 表示完成在设备上执行计算图。 与`start run graph`成对出现,附加说明信息中计算图的编号会保持一致,表示同一个计算图执行的开始与结束。 `system exit` 表示C++后端执行结束。 由于训练过程是一个循环执行,所以`start load input`, `end load input`,`start run graph`与`end run graph` 状态会打印多次,打印次数与训练的执行模式(是否图下沉)、step以及epoch有关。 在不同的后端图编译过程中,会记录不同的子阶段的执行状态,这些状态主要用于开发者定位问题,用户可以不用过多关注这些状态。 MindSpore执行状态日志级别是INFO,需要**设置环境变量GLOG_v=1**,并将执行日志落盘到文件,然后通过查询关键字`Status record:`筛选出执行状态日志。 例如,在CPU上使用mnist数据集训练lenet,获取执行状态日志的方法如下: 1、设置环境变量,指定日志打印级别为INFO: ```bash export GLOG_v=1 ``` 2、执行训练任务,指定数据集路径`$DATA_PATH`和保持checkpoints路径`$CKPT_PATH`,并落盘日志到文件: ```bash python train.py --data_path=$DATA_PATH --device_target="CPU" --ckpt_path=$CKPT_PATH > log.txt 2>&1 & ``` 3、通过关键字筛选执行状态日志: ```bash grep "Status record:" log.txt > status.txt ``` 如下是CPU上的执行状态日志: ``` Status record: system init. Status record: start parse action. Status record: end parse action. Status record: start symbol_resolve action. Status record: end symbol_resolve action. Status record: start combine_like_graphs action. Status record: end combine_like_graphs action. Status record: start inference_opt_prepare action. Status record: end inference_opt_prepare action. Status record: start abstract_specialize action. Status record: end abstract_specialize action. Status record: start auto_monad action. Status record: end auto_monad action. Status record: start inline action. Status record: end inline action. Status record: start py_pre_ad action. Status record: end py_pre_ad action. Status record: start pipeline_split action. Status record: end pipeline_split action. Status record: start optimize action. Status record: end optimize action. Status record: start py_opt action. Status record: end py_opt action. Status record: start auto_monad_reorder action. Status record: end auto_monad_reorder action. Status record: start eliminate_forward_cnode action. Status record: end eliminate_forward_cnode action. Status record: start validate action. Status record: end validate action. Status record: start task_emit action. Status record: end task_emit action. Status record: start execute action. Status record: end execute action. Status record: start load input. graph id: 0 Status record: end load input. graph id: 0 Status record: start run graph. graph id: 0 Status record: end run graph. graph id: 0 Status record: start load input. graph id: 0 Status record: end load input. graph id: 0 Status record: start run graph. graph id: 0 Status record: end run graph. graph id: 0 ... ... Status record: system exit. ``` ## 应用示例 MindSpore执行状态日志方便用户识别当前任务的状态。当出现报错时,可以快速识别出当前的故障模块,有针对性地解决问题。 此外,在多机多卡并行训练的场景下,如果不同进程之间存在执行不同步的问题,用户可以利用执行状态日志快速识别执行慢的结点或进程。 下面通过多进程并行训练场景的故障分析,说明在并行训练场景下状态日志的应用。 ### 场景1 进程意外终止,无system exit状态日志 单机多进程训练场景,一个进程在参数更新阶段会等待其他进程返回梯度信息。当某个进程意外终止退出时,其他进程因等待超时而报错。意外终止进程的INFO日志不会打印退出状态`Status record: system exit`。 使用grep命令搜索`Status record: system exit`,如果某进程日志不包含该条日志信息,则该进程为异常终止进程,其他进程执行异常由异常终止进程引起。此时,分析线程异常终止的原因即可,如原因不明,可重启训练任务。 ### 场景2 进程退出不同步 多机多进程训练场景,存在一个执行慢的节点。常见的故障场景时编译期不同步,如扩容场景下,新增节点没有编译缓存,其他旧节点存在编译缓存,没有编译缓存的节点会进行图编译,速度慢。有编译缓存的节点直接读取编译缓存,速度快。在所有节点的日志中,使用grep命令搜索`Status record: system exit`,每个节点中每个进程的INFO日志都会包含退出状态信息,比较退出状态信息的时间,可以找出退出最早和最晚的进程。退出时间相差500s左右时,可确定晚退出的节点是故障节点。**需要注意的是,不同节点的系统时间可能存在差异,需要消除时间基准不同引起的时间差异。** 消除差异的方法,可以计算`Status record: system exit` 与`Status record: system init`的时间差,时差最长的节点即为故障节点。
  • [功能调试] MindSpore报错&quot;operation does not support the type kMetaTypeNone&quot;
    ## 系统环境 Hardware Environment(Ascend/GPU/CPU): All Software Environment: MindSpore version (source or binary): 1.6.0 & Earlier versions Python version (e.g., Python 3.7.5): 3.7.6 OS platform and distribution (e.g., Linux Ubuntu 16.04): Ubuntu GCC/Compiler version (if compiled from source): gcc 9.4.0 ## python代码样例 ```python from mindspore import nn class Net(nn.Cell): def __init__(self): super(Net, self).__init__() def construct(self, x): return self.y + x net = Net() output = net(1) ``` ## 报错信息 ```bash Traceback (most recent call last): File "test_self.py", line 11, in output = net(1) File "mindspore\nn\cell.py", line 477, in __call__ out = self.compile_and_run(*args) File "mindspore\nn\cell.py", line 803, in compile_and_run self.compile(*inputs) File "mindspore\nn\cell.py", line 790, in compile _cell_graph_executor.compile(self, *inputs, phase=self.phase, auto_parallel_mode=self._auto_parallel_mode) File "mindspore\common\api.py", line 632, in compile result = self._graph_executor.compile(obj, args_list, phase, self._use_vm_mode()) RuntimeError: mindspore\ccsrc\frontend\operator\composite\multitype_funcgraph.cc:162 GenerateFromTypes] The 'add' operation does not support the type [kMetaTypeNone, Int64]. The supported types of overload function `add` is: [Tuple, Tuple], [RowTensor, Tensor], [Tensor, Tensor], [List, List], [Tensor, List], [List, Tensor], [String, String], [Tuple, Tensor], [kMetaTypeNone, kMetaTypeNone], [Number, Number], [Number, Tensor], [Tensor, Number], [Tensor, Tuple]. The function call stack (See file 'rank_0/om/analyze_fail.dat' for more details): # 0 In file test_self.py(8) return self.y + x ``` ## 原因分析 首先看报错日志信息: ``` RuntimeError: The 'add' operation does not support the type [kMetaTypeNone, Int64]. The supported types of overload function `add` is: [Tuple, Tuple],[RowTensor, Tensor], [Tensor, Tensor], [List, List],[Tensor, List], [List, Tensor], [String, String], [Tuple, Tensor], [kMetaTypeNone, kMetaTypeNone], [Number, Number], [Number, Tensor], [Tensor, Number], [Tensor, Tuple]. ``` 上述日志信息的大致意思是`add`加法操作符不支持类型`[kMetaTypeNone, Int64]`, 此外,还给出了该操作符支持的参数类型列表: ``` [Tuple, Tuple], [RowTensor, Tensor], [Tensor, Tensor], [List, List], [Tensor, List], [List, Tensor], [String, String], [Tuple, Tensor], [kMetaTypeNone, kMetaTypeNone], [Number, Number], [Number, Tensor], [Tensor, Number], [Tensor, Tuple] ``` 在这里的疑问是,`kMetaTypeNone`什么类型, 哪里引入的类型报错?我们继续看报错信息。 在`The function call stack:`后面打印了函数的调用栈,对应的是用户代码行`return self.y + x`。就是说,该加法操作引入了不支持的参数类型。 **在mindspore中,`construct`函数里使用未定义的变量将作为None处理,对应的类型也就是`kMetaTypeNone`**。关于mindspore中变量的定义与使用,详情可参考官网:https://www.mindspore.cn/docs/note/zh-CN/r1.6/static_graph_syntax_support.html?highlight=kMetaTypeNone。 在样例源码中,我们可以发现,变量`self.y`并没有定义,使用未定义的变量导致了编译报错。 ## 解决方法 由于执行报错是因使用未定义变量引起,因此,解决的方法便是在网络的初始化函数`__init__(self):`中定义该变量。需要注意的是,只有将变量定义为self的成员变量,才能够在`construct(self, x)`方法中使用。 ``` from mindspore import nn class Net(nn.Cell): def __init__(self): super(Net, self).__init__() self.y = 1.0 def construct(self, x): return self.y + x net = Net() output = net(1) ``` 如果将`self.y = 1.0`写成`y = 1.0`, 同样会因为变量未定义而报错。 ## 总结 MindSpore前端语法是Python语法的子集, 撰写模型时需要遵循Python语法。学习掌握一些python语言的特性,对于MindSpore运行机制理解和问题定位很有帮助。 ## 参考文档 mindspore静态语法:https://www.mindspore.cn/docs/note/zh-CN/r1.6/static_graph_syntax_support.html
  • [热门活动] 参与中文API检视,做MindSpore贡献者
    API中文上线啦!需要你的检视!快提交Issue或PR,加入MindSpore贡献~奖品预览1.自选奖(30位)200元京东自营商品额度!2.激励奖(60位)电动抽水机、毛球修剪器、厨房精确电子秤、打发器。活动时间3月1日——3月31日活动方式每周发布待检接口和当前排名信息,用户自行选择检视中文文档,对照英文版(检视要点请从下方附件下载)。用户发现问题后,去MindSpore/mindspore仓提交Issue,并提交PR解决。Issue标题规范:【*问题接口名称*】【检视活动】简单描述用户每周汇总一次个人Issue和PR的链接,在论坛“活动体验”版块发帖。Issue和PR数总计前30名用户获自选奖。Issue和PR各前30名获得激励奖。自选奖与激励奖不可兼得。时间待检API注意事项3月1日更新mindspore      mindspore.common.initializermindspore.context     mindspore.mindrecordmindspore.nn  mindspore.ops合入存在时间差,若同一个文件夹内,存在中英文混杂的情况,不属于BUG,无需提交PR。3月7日更新mindspore.communication  mindspore.parallel  mindspore.parallel.nn  mindspore.dataset  mindspore.dataset.audio  mindspore.dataset.config3月14日更新mindspore.nn.transformer  mindspore.profiler  mindspore.train  mindspore.boost3月22日更新mindspore.dataset.text     mindspore.dataset.transforms    mindspore.dataset.vision   所有待检视范围为已有的中文,未翻译部分不需要检视。不知道如何提交issue或PR?看这里!***gitee上提交PR和issue的流程和注意事项*** 注意,提交PR后还要时时关注PR下方的评论意见,确保优先合入哦!本次PR负责人:无需指定,请按照issue标题规范提交即可。注意事项请勿刷帖,刷帖一律删帖并做无效参与处理。Issue和PR需经确认合格后方可计入总数。请勿盗取他人截图或内容,一经发现做无效参与处理。同一问题按issue提交时间确认优先级。*最终解释权归MindSpore团队所有。
  • [执行问题] mindspore dropout api 变更求助。华为盘古开源模型报错
    git 地址 https://github.com/huawei-noah/Pretrained-Language-Model/tree/master/PanGu-%CE%B1#%E5%BE%AE%E4%BF%A1%E4%BA%A4%E6%B5%81%E7%BE%A4代码文件  Pretrained-Language-Model/PanGu-α/pangu_alpha.py121-131行 方法drop对象 使用了 drop_gen_mask和  drop_do_mask方法执行脚本  报错 AttributeError: The 'Dropout' object has no attribute 'dropout_gen_mask'.请问 drop对象 可以使用 drop_gen_mask和  drop_do_mask方法 mindspore应该安装多少的版本?
  • [推理] 【Mindspore 1.5rc】【Graph Mode性能】Graph Mode下,网络结构中存在较多循环时编译速度过慢
    【问题背景】推理时,我需要写一个自回归的过程,循环调用我的model,如x=init() for i in range(200): x=model(x)我希望把这个过程放在一个nn.Cell类的construct方法里,这样可以在Graph Mode的时候速度快很多(否则就是在静态图之外,用python的过程来做这个循环)。【问题】当这个循环数量小的时候,我启动程序,还挺快的;但是一旦这个循环次数增加,启动程序时,程序会卡在编译阶段特别特别慢,难以忍受的慢(数小时)。请问应该如何把这种循环放在静态图的遍历过程中,感觉太慢了啊,而且好像很吃显存
  • [基础知识] MindSpore术语歧义解释
    由于MindSpore的各种遗留原因,在针对AI领域的很多术语有些歧义,简单记录一下,也让大家尽可能避坑。术语业界定义MindSpore定义正确名词算子(ops)计算图中的节点,为一种计算函数,如Sigmoid或Conv2d。通常不区分粒度同业界算子算子(nn)无对算子的封装,在`mindspore.nn`下的所有接口层(或nn层)。直接和神经网络层对应。一般框架对算子进行封装,方便AI研究者直接使用。无人称之为算子数据加载算子无数据加载接口,为匹配pipeline设计(数据处理流图中的节点),也称之为算子。与Tensorflow的数据加载器类似,但TF从不采用算子这一名词DataLoader(或数据加载器)。数据处理算子通常指图像和音频传统处理方法,一般英文为Transform,不翻译为算子。MindSpore扩大了Transform的范围,试图将文本的预处理方法也加入其中。但是其实违背了NLPer的使用习惯。且算子一次过于泛化。数据处理操作。沿用Operation的翻译,但是不采用算子一词。精度通常指机器学习的经典评价指标(准确率、精确率、召回率)中的精确率,英文为Precision。泛指所有模型在指定任务上使用的评价指标最终得分,包括但不限于Accuracy、BLEU、ROC等等性能(评价指标得分)。一般论文中以Performance一词指代评价指标得分,直译为性能。性能通常指模型在任务上的表现(评价指标得分)特指模型训练或推理速度。英文描述中通常会直接以faster一词直接描述速度提升。有时会用Efficiency,即效率。通常直接用数值倍数表达。把大家惯用的名词进行泛化或者更改了原意,本身就给AI领域的人一些困惑,同时也让学习的人增加隐形成本。这里进行记录和纠错,希望后续不要强行让大家使用第一列的名词。作为一个后来者,创词和违背既定习惯都是不可取的。就写到这,后续有新词会持续更新。也欢迎大家纠错和指正。
  • [安装经验] 树莓派4B源码编译Mindspore 1.60CPU版本
    上次编译完了gcc aarch64版本,那就趁热打铁(其实已过了好些时日),把源码编译aarch64的CPU版本走下去吧!git clone https://gitee.com/mindspore/mindspore.git -b r1.6cd mindsporebash build.sh -e cpu -j4当然,也没那么简单。一开始,树莓派就给张小白一个下马威:张小白发了论坛帖问了下专家:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=179684终于决定用源码安装tclsh:cd 打开 http://www.tcl.tk/software/tcltk/8.6.html下载源码:wget https://prdownloads.sourceforge.net/tcl/tcl8.6.12-src.tar.gztar -zxvf tcl8.6.12-src.tar.gzcd tcl*cd unix./configure --prefix=/usr/tclmakesudo make install制作软链接使得tclsh生效:继续编译:bash build.sh -e cpu -j4耐心等待。。突然又报了 CMAKE_CXX_COMPILER的错。真奇怪,cmake和gcc都是一切正常。不过张小白想起某次论坛跟帖中专家的话,似乎cmake版本高一点会解决这个问题,于是努力地付诸实践:下载cmake源码包:打开https://github.com/Kitware/CMake/下载最新的releases(张小白编译的时候还是 cmake3.23.0-rc1,现在截图的时候变成了rc2,唉,说明截图要趁早。。)wget https://github.com/Kitware/CMake/releases/download/v3.23.0-rc1/cmake-3.23.0-rc1.tar.gz./bootstrapmake -j8sudo make install -j8cmake -version好了,cmake已升级,再继续编译:好像过了这关,继续往下编译了。。。直到:原来是NUMA没有安装。只是按照手册apt安装直接报错:于是张小白没有办法,只要继续源码安装NUMA:打开 https://github.com/numactl/下载最新版本源码并传到树莓派上,解压:./configuremake -j8sudo make install -j8再继续编译mindspore:可见找到了NUMA而且往下走了。。。。。莫名停了:重试一下:。。。看样子像是内存不足,那就照例加虚拟内存吧!增加虚拟内存6G:再试试:...。。...源码编译完毕。检查一下:跟上次Nano的3.7.5的编译whl不同,这次树莓派是3.9编译的。所以文件名为:mindspore-1.6.0-cp39-cp39-linux_aarch64.whl那么正好就在树莓派官方系统缺省的python 3.9.2的环境下做个验证。cd ~/mindspore/outputpip install ./mindspore-1.6.0-cp39-cp39-linux_aarch64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple是的,已经装过了。那就先删了,再装新的。pip uninstall mindsporepip install ./mindspore-1.6.0-cp39-cp39-linux_aarch64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple验证下:最后来试一下LeNet网络:需要下载models代码仓:git clone https://gitee.com/mindspore/models.gitcd models/official/cv/lenetmkdir MNISTmkdir ckpt装pyyamlpip install pyyaml -i https://pypi.tuna.tsinghua.edu.cn/simple下载MNIST数据集:wget http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz wget http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gzwget http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gzwget http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz按照README指定的方式解压:python train.py --data_path=./MNIST/ --device_target="CPU" --ckpt_path=./ckpt耐心等待10轮epoch每轮1875step的训练结束:。。。可见训练完的loss已经是非常低了。再查看生成的ckpt文件:拿最后一个ckpt文件做个评估:python eval.py --data_path=./MNIST/ --device_target="CPU" --ckpt_path=./ckpt/checkpoint_lenet-10_1875.ckpt精确度为0.98左右。于是,这就完成了对源码编译生成的whl文件的验证。张小白将编译好的包传到百度网盘,有心的人可以像Nano的包那样尝试一下:链接:https://pan.baidu.com/s/14ik3UJ--CXLakbWty2lF9A 提取码:6t4n
  • [数据处理] 【mindspore】【池化层】mindspore的池化操作(如Maxpool2d)问题
    【功能模块】mindspore 1.3.0python 3.7.5【操作步骤&问题现象】mindspore池化操作pad到底是怎么补零的?跟pytorch池化操作后的结果完全不一样,导致迁移过来的模型推理出来乱七八糟为什么不能像pytorch那样设定padding值呢,或者有什么办法可以使mindspore的池化层可以像pytorch池化一样padding?下面是测试mindspore和pytorch最大池化操作的样例截图,同样都是k=3,s=2,输出的尺寸大小也一样,但内容却南辕北辙。看了半天都没搞懂mindspore这个池化是按什么规则的,补零是怎么个补零法?这个设计多少沾点天才了。【截图信息】【日志信息】(可选,上传日志内容或者附件)import numpy as npfrom mindspore import Tensorimport mindspore.nn as nn2import mindspore.common.dtype as mstypeimport torchimport torch.nn as nna = np.random.randn(1,2,3,4)m1 = nn.MaxPool2d(3, stride=2, padding=1)m2 = nn2.MaxPool2d(kernel_size=3, stride=2,  pad_mode='same')input1 = torch.Tensor(a)input2 = Tensor(a, mstype.float32)output1 = m1(input1)output2 = m2(input2)print("input\n", a)print("output_pytorch\n", output1)print("output_mindspore\n", output2)
  • [调试调优] mindspore上训练的模型准确率比pytorch上差
    【功能模块】mindspore和pytorch框架训练对比【操作步骤&问题现象】1、在cifar10数据集上,同样的训练参数训练60个epoch,resnet18模型在pytorch上训练准确率为77.8%,在mindspore只有74.8%(训练日志忘了截图)2、使用学习率指数衰减(nn.learning_rate_schedule.ExponentialDecayLR)和余弦退火衰减(nn.learning_rate_schedule.CosineDecayLR),训练准确率反而比不用学习率衰减更低(训练日志截图如下)模型用的是modelzoo里面的https://gitee.com/ascend/modelzoo,附件是代码【截图信息】两个框架的训练结果比较------------------------------------------------------2022.02.28更新点进去源码查看两个框架的resnet里的权重初始化方式是一样的,卷积层都是kaiming_normal,最后一层全连接层都是kaiming_uniform,而且参数都是一样的。唯一不同的一小点是最后一层全连接层的偏置层初始化,ms是全0初始化,pytorch也是kaiming_uniform。就这么一点初始化权重的差距我感觉没有办法使最后准确率差距达到3%以上。ms的fc层初始化实现pytorch的fc层初始化实现此外,我检查了两种框架的kaiming_uniform的实现,发现也都是一样的,并且做了样例测试,二者初始化后的均值和方差都是一样的ms的kaiming_uniform初始化样例结果:pytorch的kaiming_uniform层样例结果:【日志信息】(可选,上传日志内容或者附件)
  • [算子编译] pytorch的apply方法在mindspore中怎么实现
    【功能模块】mindspore版本1.6【操作步骤&问题现象】1、我在做自定义算子时遇到了一个问题,pytorch中有module.apply函数一次性对所有子模块初始化权重赋值,但msp中没有cell.apply2、所以msp中怎么实现相应方法呢【截图信息】pytorch代码:minspore代码【日志信息】(可选,上传日志内容或者附件)
  • [推理] 参考mindspore官方yolov3_darknet53推理报错
    参考例子为https://gitee.com/mindspore/models/tree/master/official/cv/yolov3_darknet53在云上modelarts完成训练,在310环境,mindspore1.5.2中把ckpt转为mindir正常输出,执行推理步骤时报错,已尝试在main.cc中加上ascend310->SetPrecisionMode("allow_fp32_to_fp16");,也返回fail
  • [API使用] 请问mindspore.ops.Squeeze进行压缩时能不能连续进行压缩
    input_x = Tensor(np.ones(shape=[3,1,1, 1, 1]), mindspore.float32) squeeze = ops.Squeeze(3).Squeeze(3) output = squeeze(input_x) print(output.shape)