【PyTorch基础教程19】Debug指南

简介: 代码量少时debug:使用print和log调试代码;better做法:一遍运行一遍检查里面的变量和方法。

一、ipdb介绍

代码量少时debug:使用print和log调试代码;

better做法:一遍运行一遍检查里面的变量和方法。

pdb是python交互式的调试工具,其作用:

根据需求跳转到任意的python代码断点

查看任意变量、单步执行代码

甚至修改变量的值,不必重启程序

ipdb是增强版的pdb,提供了调试模式下的代码自动补全,有更好的语法高亮和代码溯源,与pdb接口完全兼容。

二、小栗子

结合pytorch和ipdb进行调试。

要使用ipdb,在需要调试的地方插入ipdb.set_trace即可(还有在代码开头加上try和except两行)。

现在有栗子如下,sum和mul函数分别计算列表x中的元素的累加和累乘:

# -*- coding: utf-8 -*-
"""
Created on Sun Dec 12 16:33:07 2021
@author: 86493
"""
try:
    import ipdb
except:
    import pdb as ipdb
def sum(x):
    r = 0
    for i in x:
        r += i
    return r
def mul(x):
    r = 1
    for i in x:
        r *= i
    return r
ipdb.set_trace()
x = [1, 2, 3, 4, 5]
r = sum(x)
r = mul(x)

程序运行到ipdb.set_trace()后自动进行debug模式:

ipdb> list 7,27 # 查看第7到27行代码
      7 try:
      8     import ipdb
      9 except:
     10     import pdb as ipdb
     11 
     12 def sum(x):
     13     r = 0
     14     for i in x:
     15         r += i
     16     return r
     17 
     18 def mul(x):
     19     r = 1
     20     for i in x:
     21         r *= i
     22     return r
     23 
     24 ipdb.set_trace()
---> 25 x = [1, 2, 3, 4, 5]
     26 r = sum(x)
     27 r = mul(x)
ipdb> n # next执行下一步
> d:\桌面文件\ipdb.py(26)<module>()
ipdb> s # step的缩写,此处进入sum函数内部
--Call--
> d:\桌面文件\ipdb.py(12)sum()
ipdb> u # up的缩写,调回上一层的调用
> d:\桌面文件\ipdb.py(26)<module>()
ipdb> down # down的缩写,跳到调用的下一层
> d:\桌面文件\ipdb.py(15)sum()
ipdb> return # 继续执行到函数返回,返回15即为sum的结果 
--Return--
15

同时也可以查看或者修改变量,再继续执行代码也是按照修改后的变量运算,如果要退出debug模式则是q(debug的缩写)。

ipdb的小技巧:

<tab>键能自动补齐,和IPyhton中类似

j(ump)<lineno>能够跳过中间某些行代码的执行

可以直接在ipdb中改变变量值

h(elp)能够查看调试命令的用法,如h h查看help命令的用法等。

三、在pytorch中debug

pytorch可以执行计算的同时定义计算图(该定义过程是用python完成的,虽然底层是用C++完成)。

3.1 pytorch和ipdb结合的好处

1)通过debug暂停程序:当程序进入debug模式之后,将不再执行GPU和CPU运算,但是内存和显存集相应的堆栈空间不会释放

2)通过debug分析程序,查看每个层的输出,查看网络的参数情况:通过u\d\s等命令,能够进入指定的代码,通过n可以进行单步执行,从而可以看见每一层的运算结果,便于分析网络的数值分布等信息

3)作为动态图框架,pytorch拥有python动态语言解释执行的优点,我们能够在运行程序时,通过ipdb修改某些变量的值或属性,这些修改能够立即生效。例如可以在训练开始不久后根据损失函数调整学习率,不必重启程序

4)如果在IPython中通过%run魔法方法运行程序,那么在程序异常退出时,可以使用%debug命令,直接进入debug模式,通过u和d调到报错的地方,查看对应的变量。然后找出原因后修改相应的代码即可。

因为有时模型训练好几个小时后,却在要保存模型之前,因为一个小小的拼写错误异常退出。这时候最好的办法就是利用%debug进入调试模式,在调试模式中直接运行model.save()保存模型

在ipython中,%pdb魔术方法能够使得程序出现问题后,不用手动输入%debug而自动进入调试模式,建议使用

pytorch调用cuDNN报错时,报错信息诸如CUDNN_STATUS_BAD_PARAM,从这些报错信息内容很难得到有用的帮助信息,最好先利用CPU运行代码,此时一般会得到相对友好的报错信息。

3.2 常见的错误有如下几种:

1)类型不匹配问题:如CrossEntropyLoss的输入target应该是一个LongTensor,而很多人输入FloatTensor

2)部分数据忘记从CPU转到GPU:例如当model存放与GPU时,输入input耶需要转移到GPU才能输入到model中

还有可能是把多个model存放在一个list对象,而在执行model.cuda()时,这个list中的对象是不会被转移到CUDA上的,正确的用法是使用ModuleList替代

3)Tensor形状不匹配:此类问题一般是输入数据形状不对,或是网络结构设计有问题,一般通过u命令跳到指定代码,查看输入和模型参数的形状即可得知

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
18天前
|
存储 物联网 PyTorch
基于PyTorch的大语言模型微调指南:Torchtune完整教程与代码示例
**Torchtune**是由PyTorch团队开发的一个专门用于LLM微调的库。它旨在简化LLM的微调流程,提供了一系列高级API和预置的最佳实践
124 59
基于PyTorch的大语言模型微调指南:Torchtune完整教程与代码示例
|
3天前
|
并行计算 监控 搜索推荐
使用 PyTorch-BigGraph 构建和部署大规模图嵌入的完整教程
当处理大规模图数据时,复杂性难以避免。PyTorch-BigGraph (PBG) 是一款专为此设计的工具,能够高效处理数十亿节点和边的图数据。PBG通过多GPU或节点无缝扩展,利用高效的分区技术,生成准确的嵌入表示,适用于社交网络、推荐系统和知识图谱等领域。本文详细介绍PBG的设置、训练和优化方法,涵盖环境配置、数据准备、模型训练、性能优化和实际应用案例,帮助读者高效处理大规模图数据。
23 5
|
3月前
|
并行计算 Ubuntu PyTorch
Ubuntu下CUDA、Conda、Pytorch联合教程
本文是一份Ubuntu系统下安装和配置CUDA、Conda和Pytorch的教程,涵盖了查看显卡驱动、下载安装CUDA、添加环境变量、卸载CUDA、Anaconda的下载安装、环境管理以及Pytorch的安装和验证等步骤。
526 1
Ubuntu下CUDA、Conda、Pytorch联合教程
|
6月前
|
PyTorch 算法框架/工具 异构计算
PyTorch 2.2 中文官方教程(十八)(1)
PyTorch 2.2 中文官方教程(十八)
196 2
PyTorch 2.2 中文官方教程(十八)(1)
|
6月前
|
并行计算 PyTorch 算法框架/工具
PyTorch 2.2 中文官方教程(十七)(4)
PyTorch 2.2 中文官方教程(十七)
193 2
PyTorch 2.2 中文官方教程(十七)(4)
|
6月前
|
PyTorch 算法框架/工具 异构计算
PyTorch 2.2 中文官方教程(十九)(1)
PyTorch 2.2 中文官方教程(十九)
133 1
PyTorch 2.2 中文官方教程(十九)(1)
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch 2.2 中文官方教程(十八)(3)
PyTorch 2.2 中文官方教程(十八)
95 1
PyTorch 2.2 中文官方教程(十八)(3)
|
6月前
|
API PyTorch 算法框架/工具
PyTorch 2.2 中文官方教程(十八)(2)
PyTorch 2.2 中文官方教程(十八)
176 1
PyTorch 2.2 中文官方教程(十八)(2)
|
6月前
|
异构计算 PyTorch 算法框架/工具
PyTorch 2.2 中文官方教程(十七)(3)
PyTorch 2.2 中文官方教程(十七)
96 1
PyTorch 2.2 中文官方教程(十七)(3)
|
6月前
|
PyTorch 算法框架/工具 机器学习/深度学习
PyTorch 2.2 中文官方教程(十七)(2)
PyTorch 2.2 中文官方教程(十七)
140 1
PyTorch 2.2 中文官方教程(十七)(2)