深度学习踩坑经验沉淀【持续更新】

news2025/1/10 20:49:24

背景

在深度学习炼丹过程中,总会遇到各种奇怪问题,这个时候总会在csdn和知乎平台找到答案,那每次遇到的问题是解决了,但没有记录起来,确实太可惜,因为未来某个时间或者某个人会遇到类似问题,所以在这片文章专项整理,pytorch、python、conda、pip等问题,希望能给大家更多帮助

pytorch

问题1:cuda error:device-side assert triggered

如果报错在你自己的代码中,这一般和自己的代码逻辑错误有关了:
1.检查代码,看是否是训练时loss成为nan,可以更换词向量的拼接方式等。
2.如果是分类任务,可能是标签个数不对应。
参考一篇文章,可以尝试在代码中加入:torch.backends.cudnn.enable =True, torch.backends.cudnn.benchmark = True。(对于我的问题没有用)
这种问题操作tensor异常,如数组越界、精度不匹配等

问题2:cuda out of memory

  • 改小batch_size
  • 在报错的地方加上这一句torch.cuda.empty_cache()
  • 加上这一条语句with torch.no_grad():
  • 加上这么一句model.eval()
  • loss和评价指标强制转换为float()类型的,或者在每个epoch的最后,都将loss删掉。
  • 将"pin_memory": True改为False,具体原因原博:
    pin_memory就是锁页内存,创建DataLoader时,设置pin_memory=True,则意味着生成的Tensor数据最开始是属于内存中的锁页内存,这样将内存的Tensor转义到GPU的显存就会更快一些。
    主机中的内存,有两种存在方式,一是锁页,二是不锁页,锁页内存存放的内容在任何情况下都不会与主机的虚拟内存进行交换(注:虚拟内存就是硬盘),而不锁页内存在主机内存不足时,数据会存放在虚拟内存中。显卡中的显存全部是锁页内存,当计算机的内存充足的时候,可以设置pin_memory=True。当系统卡住,或者交换内存使用过多的时候,设置pin_memory=False。因为pin_memory与电脑硬件性能有关,pytorch开发者不能确保每一个炼丹玩家都有高端设备,因此pin_memory默认为False。
    参考资料:https://blog.csdn.net/xiyou__/article/details/118529350

问题3:nn.TransformerEncoder 使用 src_key_padding_mask 时出现nan

出现nan的原因来自于src_key_padding_mask,src_key_padding_mask 是一个二值化的tensor,在需要被忽略地方应该是True,在需要保留原值的情况下,是False。检查发现src_key_padding_mask全为True,此时会导致编码后结果全为nan。
解决方法是更新mask或不使用mask。

问题4:Tensor must be contiguous

解决方法

batch_data[1].permute([1,0,2]).contiguous()

参考资料:
https://www.jianshu.com/p/51678ea7a959

问题5:加载模型后optimizer.step()处报错:RuntimeError: expected device cpu but got device cuda:0

原因:optimizer加载参数时,tensor默认在CPU上,故需将所有的tensor都放到GPU上,否则:在optimizer.step()处报错:RuntimeError: expected

device cpu but got device cuda:0。
optimizer = model.configure_optimizers(weight_decay, learning_rate, (beta1, beta2), device_type=cfg.device)
        optimizer.load_state_dict(checkpoint['optimizer'])
        for state in optimizer.state.values():
            for k, v in state.items():
                if torch.is_tensor(v):
                    state[k] = v.to(cfg.device)

问题6:进程在运行时卡住,显存分配了却不开始训练(卡在Using /home/faith/.cache/torch_extensions as PyTorch extensions root…)

解决方案:
一般会在用户主目录下会有一个自动生成的 .cache文件夹(有可能是隐藏状态,需要你打开显示隐藏文件选项),将这个文件夹删除即可,可以重新生成.cache文件夹,然后就不会有冲突啦
在这里插入图片描述

问题7:导入apex出现ImportError: cannot import name ‘UnencryptedCookieSessionFactoryConfig’

解决方法:
下载apex安装文件,手动安装!不再使用pypi管理的apex!
1、git clone git://github.com/NVIDIA/apex
2、cd apex
3、pip install -v --no-cache-dir ./

注:通过pip install apex 是不是nvidia官方文件

问题8:accelerate库 RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:1 and cuda:0! (when checking argument for argument index in method wrapper_CUDA__index_select)

注:问题还在定位分析中

python

conda

问题1:An unexpected error has occurred. Conda has prepared the above report. If submitted, this report will be used by core maintainers to improve future releases of conda.
场景
在主机上的服务器里用miniconda安装新环境时,输入
conda create -n chatgpt python==3.8.0时安装失败,遇到了An unexpected error has occurred. Conda has prepared the above report.问题。.

分析:我遇到这个问题是因为我改动了miniconda 安装类库路径了,因为我有台服务器根目录空间不够

解决方案:在网上查阅好多资料,都试过了,最终没解决问题,最后采用卸载minicoda后,重新安装,指定下新目录

参考资料:

  • [conda报错 已解决]An unexpected error has occurred. Conda has prepared the above report.
  • conda报错-Collecting package metadata (current_repodata.json): failed

pip

问题1:[ERROR: Could not install packages due to an OSError: [Errno 28] No space left on

背景:pip 安装torch库,代码如下

pip install -I https://download.pytorch.org/whl/cu118/torch-2.0.1%2Bcu118-cp38-cp38-linux_x86_64.whl

原因:pip install的过程中使用/tmp目录临时存放build需要的文件,而/tmp目录空间不足,从而导致无法安装
解决方案
将/tmp目录大文件删除,
执行命令,可以帮我们找到/tmp目录大文件

du -h --max-depth=1 | sort -hr

问题2:pip install 报错 FileNotFoundError: [Errno 2] No usable temporary directory found in [‘/tmp‘, ‘/var/tmp‘, ‘/usr/tmp’]

场景:pip 安装torch库,代码如下

pip install -I https://download.pytorch.org/whl/cu118/torch-2.0.1%2Bcu118-cp38-cp38-linux_x86_64.whl

原因:因问题1 删除了pip相关临时文件导致
解决方案
将~/.cache/pip/ 所有文件删除

下面给出几种**.cache文件清理方法**以供参考:

  • 找到日期大于365天的文件,直接删除之,命令:find ~/.cache/ -type f -atime +365 -delete
  • 找到大于10M的文件,命令:find ~/.cache/ -size +10M,然后酌情清理之。
  • 列出体积大于100M的目录,命令:du ~/.cache -t 100M,然后酌情清理之。

参考资料:https://blog.csdn.net/qq_36332660/article/details/129241167

图像库

clip

问题1:module ‘clip‘ has no attribute ‘load‘

直接用pip install clip,但此clip非彼clip,建议直接安装官网git代码仓库

网速快方式: pip install git+https://github.com/openai/CLIP.git
网上慢方式:

  • 先clone 官方代码到某个目录,git clone https://github.com/openai/CLIP.git /tmp//CLIP
  • 然后执行pip install ./ 或者python -m setup.py

问题2:model, preprocess = clip.load(‘ViT-L/14’) certificate verify failed: self signed certificate in certificate chain

场景:精简下核心代码,如下:

import torch
import clip
from PIL import Image

device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = clip.load("ViT-B/32", device=device)

原因:网络不行呗,没梯子,但有懒着弄
解决方案
手动下载吧,分析下clip源码,涉及下载操作有1个核心文件
clip.py
内容如下:

_MODELS = {
    "RN50": "https://openaipublic.azureedge.net/clip/models/afeb0e10f9e5a86da6080e35cf09123aca3b358a0c3e3b6c78a7b63bc04b6762/RN50.pt",
    "RN101": "https://openaipublic.azureedge.net/clip/models/8fa8567bab74a42d41c5915025a8e4538c3bdbe8804a470a72f30b0d94fab599/RN101.pt",
    "RN50x4": "https://openaipublic.azureedge.net/clip/models/7e526bd135e493cef0776de27d5f42653e6b4c8bf9e0f653bb11773263205fdd/RN50x4.pt",
    "RN50x16": "https://openaipublic.azureedge.net/clip/models/52378b407f34354e150460fe41077663dd5b39c54cd0bfd2b27167a4a06ec9aa/RN50x16.pt",
    "RN50x64": "https://openaipublic.azureedge.net/clip/models/be1cfb55d75a9666199fb2206c106743da0f6468c9d327f3e0d0a543a9919d9c/RN50x64.pt",
    "ViT-B/32": "https://openaipublic.azureedge.net/clip/models/40d365715913c9da98579312b702a82c18be219cc2a73407c4526f58eba950af/ViT-B-32.pt",
    "ViT-B/16": "https://openaipublic.azureedge.net/clip/models/5806e77cd80f8b59890b7e101eabd078d9fb84e6937f9e85e4ecb61988df416f/ViT-B-16.pt",
    "ViT-L/14": "https://openaipublic.azureedge.net/clip/models/b8cca3fd41ae0c99ba7e8951adf17d267cdb84cd88be6f7c2e0eca1737a03836/ViT-L-14.pt",
    "ViT-L/14@336px": "https://openaipublic.azureedge.net/clip/models/3035c92b350959924f9f00213499208652fc7ea050643e8b385c2dac08641f02/ViT-L-14-336px.pt",
}

根据使用需求,将对应模型版本文件下载到~/.cache/clip/,如ViT-B-32.pt模型,然后再执行上述代码就正常了
在这里插入图片描述

参考资料:https://zhuanlan.zhihu.com/p/613923088

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

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

相关文章

HBase应用场景和最佳实践

HBase 作为 Apache 基金会的 Hadoop 项目的一部分,将 HDFS 作为文件存储系统,使用 MapReduce 进行分布式的数据批量处理(非实时数据批量处理)、利用Zookeeper提供协同管理服务,为 Hadoop 提供海量数据管理服务&#xf…

ROS学习(5)——话题消息与服务

节点之间的消息通信分为几种形式: 话题(topic):单向消息发送/接收方式服务(service):双向消息请求/响应方式动作(action):双向消息目标(goal)/结果(result)/反馈(feedback)方式参数服务器(参数共享模式) 种类区别话题异步单向连续单向的发送/接收数据的情况服务同步…

【重生之我是蜘蛛侠】手把手教你用python爬虫,跟着做就好了

💯 博客内容:【LeetCode训练营】用栈来实现队列用队列来实现栈 详解 😀 作  者:陈大大陈 🚀 个人简介:一个正在努力学技术的准前端,专注基础和实战分享 ,欢迎私信! &am…

高可用架构之异地多活

大家好,我是易安! 当谈到架构的高可用时,无论是高可用计算架构,还是高可用存储架构,其本质的设计目的都是为了解决部分服务器故障的场景下,如何保证系统能够继续提供服务。但在一些极端场景下,有…

MySQL高级篇第一天

目录 一、索引 二、索引结构 三、索引分类 四、索引语法 五、索引设计原则 六、视图 七、存储过程与概述 八、触发器 九、总结 一、索引 (一)索引概述 索引是一种能够帮组Mysql高效的从磁盘上查询数据的一种数据结构,这些数据结构以某…

Life of a Packet in Kubernetes - Calico网络进阶(注解版)

目录 Topics — Part 2 CNI Requirements BIRD (BGP) ConfD Felix Routing Modes IP-in-IP (Default) NoEncapMode VXLAN Demo — IPIP and UnEncapMode Demo — VXLAN Disclaimer References As we discussed in Part 1, CNI plugins play an essential role in …

【面试题】Redis过期删除与内存淘汰

文章目录 Redis过期删除策略🙎‍♂️面试官:如何设置key的过期时间?🙎‍♂️面试官:什么是Redis过期删除策略?🙎‍♂️面试官:过期的key存放到哪里/如何判断key是否过期?…

又到了择业的时候

前言 记得2020年的时候,第一次买房背上贷款,一共一百多万连利息将近两百万,突然就有了危机感,不自觉的会考虑如果我的人生有什么重大变故,我的家人会怎么办?他们承担每个月的房贷月供吗?还是被…

ciscn_2019_es_2

小白垃圾做题笔记,不及建议阅读。 声明,exp来自网络,调试过程自己调试,对于题目的理解仅供参考。由于本人也是小白,且pwn全靠自己摸索,所以有很多理解不到位的地方。如有错误,欢迎指正。 1.做…

新星计划2023【网络应用领域基础】——————Day1

网络应用基础讲解 前言 什么是网络? 什么是网络,网络是什么?能为我们做什么?带着疑问博主一一给你解决 这一章我将带你了解古代人是如何利用“网络”通信的,网络的发展史,osi七层模型,带你了解T…

【2023/05/21】simula

Hello!大家好,我是霜淮子,2023倒计时第16天。 本文将讨论一个广泛关注的话题,即在信息安全领域中如何使用Simula工具进行攻击模拟和威胁情报分析。在这篇文章中,我们将介绍Simula的概念、原理和应用,评价其…

RK3568平台开发系列讲解(驱动基础篇)RK平台RTC的使用

🚀返回专栏总目录 文章目录 一、HYM8563模块二、HYM8563模块三、接口使用3.1 sysfs 接口3.2 procfs 接口3.3 ioctl 接口沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将对RK RTC的使用进行学习。 一、HYM8563模块 ROC-RK3568-PC开发板采用HYM8563作为RTC(Rea…

Android Codelabs

Android Codelabs 提供引导式、教程式、实践编码体验。将引导您完成构建小型应用程序或向现有应用程序添加新功能的过程。该项目将持续收集并整理有关 Android Codelabs 相关文章,提供给感兴趣的读者进行阅读。 使用 Kotlin 进行高级 Android 开发 本课程提供了一…

gcc确认编译器默认头文件

文章目录 1. 背景2. gcc 空编译查看3. 总结 gcc确认编译器默认头文件 1. 背景 linux下查看编译时依赖的头文件,可以直接使用 -Iinclude_path进行指定,没有指定的会从默认头文件位置去查找,如果还找不到,就会报错。那么&#xff0c…

【C++进阶】多态详解(下)

文章目录 单继承中的虚函数表多继承中的虚函数表动态绑定与静态绑定问题探究第一步:观察普通调用的汇编代码第二步:观察ptr1的汇编代码:第三步:观察ptr2的汇编代码:总结: 继承和多态常见的面试问题 单继承中的虚函数表…

Linux:shell之编程免交互

Linux:shell之编程免交互 一、Here Document 免交互1.1 Here Document 免交互概述1.2 语法格式1.3 操作 二、Expect 命令2.1 Expect 概述2.2 基本命令2.3 操作 一、Here Document 免交互 1.1 Here Document 免交互概述 使用I/O重定向的方式将命令列表提供给交互式…

ACM 1011 | 最大公约数与最小公倍数

文章目录 0x00 前言 0x01 题目描述 0x02 问题分析 0x03 代码设计 0x04 完整代码 0x05 运行效果 0x06 总结 0x00 前言 C 语言网不仅提供 C 语言,还包括 C 、 java 、算法与数据结构等课程在内的各种入门教程、视频录像、编程经验、编译器教程及软件下载、题解博…

2023上海市大学生网络安全大赛—ssql题解

Part1前言 上海市大学生网络安全大赛的一道 pwn 题目,题目用了双向链表(猜到是 Unlink 漏洞)。 还算比较简单,主要是分析代码比较复杂。分析完后漏洞限制条件少,题目给了 libc2.31,利用比较灵活。 这题白天…

linux【网络编程】TCP协议通信模拟实现、日志函数模拟、守护进程化、TCP协议通信流程、三次握手与四次挥手

linux【网络编程】TCP协议通信模拟实现、日志函数模拟、守护进程化、TCP协议通信流程 一、TCP通信简单模拟实现1.1 服务端实现1.1.1 接口认识1.1.1.1 listen:监听socket1.1.1.2 accept:获取连接 1.1.2 tcpServer.hpp1.1.3 tcpServer.cc 1.2 客户端实现1.…

软考知识点---08IP地址与域名地址

一、IP地址 (一)什么是IP地址? 连入互联网的计算机,每台计算机或者路由器都有一个由授权机构分配的号码,IP地址代表这一台计算机在网络中的地址 在同一个网络中IP地址是唯一的 IP(IPV4)地…