定位调试两手抓,报错真的不可怕 | MindSpore报错调试宝典(二):网络构建与训练类报错之context配置问题
上一期我们讲解了数据加载与处理类报错如何调试解决,今天给大家继续带来网络构建与训练类报错中的context配置问题,本期仍将以案例的形式展开,详细讲解mindspore.set_context算子的使用方法以及配置方法,希望大家在后续使用context算子过程中可以轻松解决相关的报错问题!同时也欢迎大家多多留言,给我们提提建议!废话不多说,请看下图!
图中引用 [1]:API文档
【昇思MindSpore报错解决地图】常见报错问题和解决方案: https://www.hiascend.com/forum/thread-0229108045633055169-1-1.html
往期内容: 昇思MindSpore报错调试宝典(一):数据加载与处理类
文字内容:
小孢子:昇思MindSpore,你好呀!我在网络构建中进行模型训练的时候遇到了这样的报错,能麻烦您帮我瞅瞅是啥问题不?
MindSpore: 没问题!先让我看看你的代码内容和报错信息~
小孢子:代码内容是这样的:
from mindspore import context
context.set_context(device_target="GPU") # ③
报错信息:
RuntimeError: Unsupported device target GPU. This process only supports one of the ['CPU'].① Please check whether the GPU environment is installed and configured correctly②, and check whether current mindspore wheel package was built with "-e GPU". For details, please refer to "Device load error message".
MindSpore:首先分析你的报错内容,①说明目标设备device_target并不支持GPU,而是支持CPU,②需要检查是否安装了GPU环境。而代码③‘context.set_context(device_target="GPU")’表示设置的device_target为GPU。这类问题在进行demo调试或进行模型训练时很常见。
这样一来的话再给我看看你的环境设置呗~
小孢子:系统环境:
Hardware Environment(Ascend/GPU/CPU): CPU
Software Environment:
MindSpore version (source or binary): 2.0.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):
MindSpore:那就没错啦!问题定位成功,硬件环境为CPU,说明支持CPU环境,但是代码设定目标设备为GPU,说明脚本设置的运行后端与脚本运行的硬件不匹配,就会出现这样的报错。改成device_target=CPU,那么问题就迎刃而解啦!
当然啦,这个案例仅仅只解决了系统配置中device_target的问题,那么可以拓展一下,通过昇思MindSpore官网查找API文档[1]发现:mindspore.set_context用于进行环境、调试及执行相关的配置,包含很多配置项,每一个选项都有其依赖的执行后端,如果设置有误可能会执行失败或影响程序的正常执行逻辑。
再举个例子:比如想要保存编译过程中的图文件,可以使用`save_graphs= True`选项进行配置,硬件平台CPU/GPU/Ascend都适用,详细使用方法可以参考上述我们提到的API文档[1]。
小孢子:那我就明白啦!遇到这类问题首先需要了解set_context中相关的配置选项,然后找到想要执行的操作并查看后端支持情况,之后再进行相关配置。
MindSpore:是的!你说的这类问题我们统一称之为context配置问题。属于网络构建与训练类报错中的一种,其他的报错还有语法错误、算子编译错误、算子执行错误以及资源不足这四类。
常见错误类型 |
错误说明 |
context配置问题 |
系统进行上下文配置时的错误 |
语法错误 |
包括Python语法错误和MindSpore静态图语法错误,例如控制流语法不支持、Tensor切片错误等 |
算子编译错误 |
包括算子参数值/类型/shape不满足要求、算子功能限制等 |
算子执行错误 |
包括输入数据异常、算子实现错误、功能限制、资源限制等 |
资源不足 |
包括设备内存不足、函数调用栈超限、流资源超限等 |
小孢子:明白啦!成年人不做选择,下期大佬给我具体讲讲麻烦语法错误吧!
MindSpore:随时欢迎!