- 1、环境准备
- 2、PyNative简介
- 3、断点调试
1、 环境准备
准备的是一台x86 ascend机器
Linux localhost.localdomain 4.18.0-147.5.2.1.h579.eulerosv2r10.x86_64 #1 SMP Sat Jul 31 09:58:46 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
python -3.7.5
安装的是mindspore master 版本
commit_id = ‘[sha1]:4a7eaf1b,[branch]:(HEAD,origin/master,origin/HEAD,master)’
2、PyNative简介
1. pynative是通过ms.set_context(mode=ms.PYNATIVE_MODE)设置的。
图模式分为动态图和静态图两种,静态图使用JIT编译优化执行,使用静态语法,在语法上有较多限制, 相对于静态图来说动态图更加灵活,
它通过解释执行,具有动态语法亲和性。
动态图逐语句执行Python指令,因此每条Python指令执行完,都能够得到执行结果。
3、 断点调试
加入pdb.set_trace()脚本,就会停住,等待输入pdb指令
import numpy as np
import mindspore as ms
import mindspore.ops as ops
import mindspore.nn as nn
import pdb
ms.set_context(device_target="Ascend", mode=ms.PYNATIVE_MODE)
class PrintDemo(nn.Cell):
def __init__(self):
super(PrintDemo, self).__init__()
self.add1 = ops.Add()
self.add2 = ops.Add()
def construct(self, x, y):
out = self.add1(x, y)
pdb.set_trace()
out = self.add2(out, x)
return x
x = ms.Tensor(np.ones([2, 1]).astype(np.int32))
y = ms.Tensor(np.ones([2, 2]).astype(np.int32))
net = PrintDemo()
output = net(x, y)
1 打印变量y的取值 p y
2. 查看程序调用栈 bt
(Pdb) bt
/home/test/test.py(24)<module>()
-> output = net(x, y)
/root/miniconda3/envs/torch_1.12_op3.7/lib/python3.7/site-packages/mindspore/nn/cell.py(660)__call__()
-> output = self._run_construct(args, kwargs)
/root/miniconda3/envs/torch_1.12_op3.7/lib/python3.7/site-packages/mindspore/nn/cell.py(444)_run_construct()
-> output = self.construct(*cast_inputs, **kwargs)
> /home/test/test.py(18)construct()
-> out = self.add2(out, x)
(Pdb)
3 查看脚本上下文 l 1, 30 查看1-30行
4 执行代码,直到下一个断点 c
断点调试是网络调试必不可少的调试方法。