昇思MindSpore进阶教程--报错分析

news2024/10/2 6:35:55

大家好,我是刘明,明志科技创始人,华为昇思MindSpore布道师。
技术上主攻前端开发、鸿蒙开发和AI算法研究。
努力为大家带来持续的技术分享,如果你也喜欢我的文章,就点个关注吧

概述

本章节用于介绍MindSpore为神经网络开发者和框架开发者提供的多种功能调试能力,功能调试指开发者在开发神经网络或者框架功能过程中的调试能力,与功能实现后的性能、精度的调试调优有所区别。从不同的使用目的将功能调试分为网络开发调试与框架开发调试,网络开发调试用于满足网络开发者(也被称为用户)完成神经网络开发过程中的错误调试、控制与观察网络执行的调试诉求,框架开发调试用于满足框架开发者的调试诉求。

  • 网络开发调试:为神经网络开发者提供的功能调试能力,可分为网络报错调试与网络执行调试。

  • 网络报错调试:提供网络报错时的错误诊断与调试能力,例如:错误描述、使用PyNative调试。

  • 网络执行调试:提供网络正常执行时的观测与执行控制能力,例如:callback、hook。

  • 框架开发调试:为MindSpore框架开发者提供的功能调试能力,例如:日志、RDR(运行数据保存)等。

网络开发调试与框架开发调试仅是从更适用的角度进行区分,并非严格的功能划分,网络开发者也可以使用框架开发调试功能进行问题调试,反之亦然。

网络报错调试

网络报错调试是解决网络训练或推理过程中出现的报错问题。通过理解报错信息的含义,假设问题的原因,并利用调试方法验证假设。网络报错调试通常是多次假设与验证的循环的过程。网络报错调试包括报错分析和调试定位两个部分。报错分析是获取报错内容,理解报错描述并分析原因的过程,主要包括信息归纳、错误分析以及错误检索;调试定位是针对问题场景,选择合适的调试策略,对报错问题的假设进行验证的过程,主要包括策略选择,故障复现,以及调试验证。如下图所示。
在这里插入图片描述

报错分析

报错分析是获取报错内容,理解报错描述并分析原因的过程。

信息归纳

进行网络报错调试的第一步是进行信息归纳,这里的信息归纳是指将获取到的各种信息进行归类整理并理解信息含义,为进行错误分析提供依据。一般在错误发生时需要获取几类信息:

  1. 发生错误的环境信息,包括:操作系统类型与版本、MindSpore版本、执行模式(动态图模式or静态图模式)、设备信息(x86或ARM,Ascend或GPU等)

  2. 错误描述信息,包括:错误类型、错误描述、错误的堆栈等。

  3. 怀疑是框架问题,则需要获取框架打印的日志信息。

  4. 理解错误描述信息含义,对问题分析有着重要作用,如下将介绍如何阅读与理解MindSpore的报错信息。

MindSpore报错信息采用Python Traceback处理,包括Python堆栈信息、报错类型与报错描述、与网络开发者相关的报错信息以及与框架开发者相关的报错信息。如下图所示。
在这里插入图片描述

错误分析

进行错误分析是网络报错调试的重要步骤。错误分析是指基于获取到的网络、框架各种信息(例如:错误信息、网络代码等信息)进行错误原因分析,推断错误的可能原因。

MindSpore网络训练的一般过程是数据加载与处理,网络构建与训练。在分布式并行场景下,还包括分布式并行模式配置。网络报错的错误分析通常包括如下步骤:

  1. 根据错误信息,确认是哪种问题场景,如数据加载与处理问题场景、网络构建与训练问题场景或者分布式并行问题场景。通常,可以利用与网络开发者相关的报错信息可进行区分。

  2. 分析问题场景,进一步确认是该问题场景下的哪种问题类型。如数据加载与处理问题场景下,包括数据准备问题、数据加载问题与数据增强问题三种类型。通常,需要根据报错中报错类型和报错描述进行区分。

  3. 根据Python调用栈以及报错信息,分析发生报错的位置。在动态图模式下,代码报错位置较容易判断。在静态图模式下,需要结合报错信息中“The Traceback of Net Construct Code”部分内容,分析报错位置。

基于可能的报错问题场景以及类型,假设导致报错问题的可能原因。

错误搜索

基于报错信息和报错代码位置,结合不同场景下常见报错及可能原因,一般可以解决常见的参数配置错误,API接口使用错误,静态图语法错误等问题。对于较复杂的报错分析,可以首先尝试搜索案例。当然,为提高解决问题效率,遇到报错问题时,可直接进行错误搜索。

  • FAQ

MindSpore提供常见报错问题FAQ,包括数据处理、编译执行、分布式并行等场景。可根据错误分析中得出的问题场景,使用报错描述信息进行问题搜索。

搜索地址:FAQ。

  • 报错案例

为覆盖更多报错场景,提高用户解决问题能力,在华为云论坛MindSpore提供常见的典型报错案例,介绍报错分析与解决方法。错误搜索的前提是选择合适的搜索关键字。通常,搜索关键字在错误信息中的报错类型和报错描述部分中进行选择。通常在云论坛进行搜索时,可以使用主语+谓语+宾语、动词+宾语、主语+系动词+表语等结构进行搜索。例如,有如下报错信息:

Unexpected error. Invalid file, DB file can not match file

Exceed function call depth limit 1000, (function call depth: 1001, simulate call depth: 997).

'self.val' should be initialized as a 'Parameter' type

可以选择“DB file can not match file”,“Exceed function call depth limit”,“should be initialized as a Parameter” 作为关键词。

  • 社区Issue

此外,MindSpore开源社区有很多开发者反馈的问题单,涉及网络开发报错、框架故障等多种问题。用户可以使用例如网络名称、报错内容关键字进行搜索相似问题。关键字选择可参考报错案例。

调试定位

策略选择

  • 静转动调试策略

动态图模式是更好的调试执行模式。 设置动态图模式方式:set_context(mode=mindspore.PYNATIVE_MODE)。 动态图模式下程序按照代码的编写顺序逐行执行,避免静态图模式下的前后端编译优化,保证了用户代码与执行逻辑统一。其次,动态图逐行代码执行,避免图模式下整图下沉的黑盒执行,更方便打印执行结果,跟踪执行过程。

  • 异步转同步调试策略

动态图模式为提高动态图执行效率,默认使用异步执行方式,错误信息在执行的最后阶段显示。在图3中可以看到异步执行方式报错信息会有告警信息,对报错分析造成干扰。

MindSpore提供切换同步执行的方法,通过设置set_context(mode=mindspore.PYNATIVE_MODE, pynative_synchronize=True) 切换到同步方式执行,如果算子执行错误时,任务直接终止并显示当前错误信息。具体内容可参考PyNative同步执行。

  • 二分法策略

简化问题场景是提高调试效率的有效方法,根据报错信息,通常能够确认报错问题的范围,排除不必要的影响因素是可靠的方法。在报错范围不能准确判断的情况下,可采用二分法进行尝试。例如,网络计算过程包含nan值,此时可利用二分法分别调试数据处理模块与网络计算模块,验证网络计算输入的数据是否包含nan值,确认异常值是数据引入还是计算过程中产生。

  • 演绎推理策略

演绎推理是根据问题推断原因并进一步验证得出结论的过程,MindSpore的报错调试即是根据问题传播的因果链条逐步反向推理,定位问题出的根本原因。例如,MindSpore算子执行报错问题,其直接原因是算子的输入数据含有非法值,而非法值是有前一个算子的计算得出,此时需要分析前一个算子的输入数据和计算过程是否正确。如果前一个算子的计算过程存在问题,即确认了问题范围,如果前一个算子的输入数据也存在非法值,则需要继续分析前面的算子,直到找到问题的根源。

问题复现

问题稳定复现是网络调试的前提,也是验证问题是否彻底解决的条件。网络训练过程因随机初始化网络参数、不同的输入数据等引入随机性,容易造成运行结果或报错位置不一致。

网络执行调试

网络执行调试是MindSpore为满足网络开发者对网络执行过程的观测与执行控制诉求提供了相应的调试能力,可分为网络执行观测与网络执行控制。

  • 网络执行观测:在网络执行过程中,获取网络的内部状态或数据以观察网络执行信息。例如:训练过程可视化、中间文件(即IR)保存功能等。

  • 网络执行控制:在网络执行的特定时期执行特定动作,例如:监控loss、保存模型参数、提前终止训练任务等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2183941.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS画出三角形的做法

引言: 在网页中,会有三角形的出现,我们脑海里会有很多想法,如何去实现他们,我来提供一种比较好玩的做法。 方法: 我们实现一个三角形,当然可以使用精灵图、或者iconfont的做法,这…

redis中的数据类型(Set与ZSet)

(一)set set在我们目前有两个意思,首先就是这里使用的集合,第二个是我们的set和get方法 因为set是一个集合,所以他具有集合的一些特点: 1.集合中的元素无序 2.集合中的元素是不可重复的 3.集合间是可…

关于按键状态机解决Delay给程序带来的问题

问题产生 我在学习中断的过程中,使用EXTI15外部中断,在其中加入HAL_Delay();就会发生报错 错误地方 其它地方配置 问题原因 在中断服务例程(ISR)中使用 HAL_Delay() 会导致问题的原因是: 阻塞性: HAL_D…

Codeforces Round 976 (Div. 2 ABCDE题)视频讲解

A. Find Minimum Operations Problem Statement You are given two integers n n n and k k k. In one operation, you can subtract any power of k k k from n n n. Formally, in one operation, you can replace n n n by ( n − k x ) (n-k^x) (n−kx) for any no…

计算机的错误计算(一百一十)

摘要 计算机的错误计算(四十五)探讨了(二)中一个循环迭代案例的错误计算原因。本节分析(二)中例1循环迭代错误计算的原因。 例1. 已知 计算 在 的错数,并用实例分析计算过程中的错误数…

【Python报错已解决】error: subprocess-exited-with-error

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

课设实验-数据结构-线性表-手机销售

题目&#xff1a; 代码&#xff1a; #include<stdio.h> #include<string.h> #define MaxSize 10 //定义顺序表最大长度 //定义手机结构体类型 typedef struct {char PMod[10];//手机型号int PPri;//价格int PNum;//库存量 }PhoType; //手机类型 //记录手机的顺序…

Ceph RocksDB 深度调优

介绍 调优 Ceph 可能是一项艰巨的挑战。在 Ceph、RocksDB 和 Linux 内核之间&#xff0c;实际上有数以千计的选项可以进行调整以提高存储性能和效率。由于涉及的复杂性&#xff0c;比较优的配置通常分散在博客文章或邮件列表中&#xff0c;但是往往都没有说明这些设置的实际作…

插槽slot在vue中的使用

介绍 在 Vue.js 中&#xff0c;插槽&#xff08;slot&#xff09;是一种用于实现组件内容分发的功能。通过插槽&#xff0c;可以让父组件在使用子组件时自定义子组件内部的内容。插槽提供了一种灵活的方式来组合和复用组件。 项目中有很多地方需要调用一个组件&#xff0c;比…

SemiDesgin中后台组件库,字节跳动出品,能否火,有待检验。

2021年字节跳动SemiDesgin中后台组件库发布。 SemiDesgin官方解释&#xff1a;SemiDesgin由是字节跳动抖音前端与UED团队设计、开发并维护&#xff0c;包含设计语言、React 组件、主题等开箱即用的中后台解决方案&#xff0c;帮助设计师与开发者打造高质量产品。 SemiDesgin&a…

Python画笔案例-072 绘制弹跳扇子

1、绘制弹跳扇子 通过 python 的turtle 库绘制 弹跳扇子,如下图: 2、实现代码 绘制弹跳扇子,以下为实现代码: """弹跳扇子.py """ import time import turtleturtle.speed(0) turtle.left(

【Windows】如何取消显示Windows聚焦在桌面上生成的“了解此图片”图标

如下图所示&#xff0c;在更换Windows聚焦显示的时候&#xff0c;会在桌面多出一个“了解此图片”的图标&#xff0c;看着很烦&#xff0c;但又因为Windows聚焦自带的壁纸比其他主题的壁纸好看很多。 下面是消除办法&#xff1a; 打开注册表&#xff08;按WindowsR&#xff0…

网络编程套接字TCP

前集回顾 上一篇博客中我们写了一个UDP的echo server&#xff0c;是一个回显服务器&#xff1a;请求是啥&#xff0c;响应就是啥 一个正常的服务器&#xff0c;要做三个事情&#xff1a; 读取请求并解析根据请求&#xff0c;计算响应把响应写回到客户端 DatagramPacket res…

车辆重识别(2021NIPS在图像合成方面,扩散模型打败了gans网络)论文阅读2024/10/01

本文在架构方面的创新&#xff1a; ①增加注意头数量&#xff1a; 使用32⇥32、16⇥16和8⇥8分辨率的注意力&#xff0c;而不是只使用16⇥16 ②使用BigGAN残差块 使用Big GAN残差块对激活进行上采样和下采样 ③自适应组归一化层 将经过组归一化操作后的时间步和类嵌入到每…

十三、减少磁盘延迟时间的方法

1.交替编号 让逻辑上相邻的扇区在物理上不相邻&#xff1b; 原因&#xff1a;由于磁头在读取完一个扇区之后需要等待一段时间才能再次读入下一个扇区&#xff0c;如果逻辑上相邻的扇区在物理上相邻的话&#xff0c;需要等待磁盘转完一圈才能读取到。 2.错位命名 让相邻盘面上…

观测云对接 SkyWalking 最佳实践

简介 SkyWalking 是一个开源的 APM&#xff08;应用性能监控&#xff09;和可观测性分析平台&#xff0c;专为微服务、云原生架构和基于容器的架构设计。它提供了分布式追踪、服务网格遥测分析、度量聚合和可视化一体化的解决方案。如果您的应用中正在使用SkyWalking &#xf…

opencv实战项目二十八:基于Shi-Tomasi算法的箱子角点检测

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、角点检测方法概述二、Shi-Tomasi角点检测法 前言 随着科技的飞速发展&#xff0c;计算机视觉技术在我们的日常生活中扮演着越来越重要的角色。从无人驾驶汽…

Oracle exadata存储节点更换内存操作及报错处理

1.报错信息 在进行Oracle exadata巡检时&#xff0c;发现cell节点有一根内存报错&#xff0c;报错信息如下&#xff1a; 报错内存位置为&#xff1a;CPU1 P1/D2槽位 报错内存信息&#xff1a; 根据报错信息确认内存PN号、大小等息&#xff0c;并将信息反馈公司&#xff0c;及…

git初级使用学习(图文)

以后工作少不了使用git&#xff0c;记录一下今天的学习&#xff0c;防止忘记 Git 是一个分布式版本控制系统&#xff0c;常用于代码管理和团队协作 首先新建一个文件夹&#xff0c;作为本地仓库 mkdir git-practice 初始化仓库 git init 新建个test1.cpp文件&#xff0c;…

CSS中字体图标的使用

引言&#xff1a; 在网页设计当中&#xff0c;会有很多很简洁的图标&#xff0c;比如箭头&#xff0c;照相机&#xff0c;放大镜等 这些大概率都是使用字体图标来完成的&#xff0c;因为字体图标比较简洁高效&#xff0c;不会像图片一样需要向浏览器请求数据。那么字体图标该…