python编译CUDA c++扩展的过程中卡住

解决方案

如果遇到因锁文件而无法进行编译的问题,可以手动删除这个锁文件来解锁编译过程。具体步骤如下:

1. 定位.cache目录
  • 这个目录通常位于用户的主目录下的.cache/torch_extensions路径中,例如~/.cache/torch_extensions。
  • 或者“C:\anaconda3\envs\XXX\Lib\site-packages\torch\utils\cpp_extension.py”。找到
baton = FileBaton(os.path.join(build_directory, 'lock'))

所在行,大概是第1686行,设置断点。使用python调试器运行自己的.py代码,程序会运行直到达到设置的断点。当程序在断点处暂停时,使用

print(build_directory)

命令来打印build_directory的值。这将显示编译缓存目录的路径 "C:\Users\AppData\Local\torch_extensions\torch_extensions\Cache\py39_cu121\_hash_encoder",这是PyTorch用于存储编译扩展的临时文件和锁文件的地方。

2. 删除锁文件
  • 在上述缓存目录路径中,找到尝试编译的扩展相关的子目录。
  • 在这个子目录中,寻找名为lock的文件,然后将其删除。
3. 重新编译
  • 删除锁文件后,重新运行编译命令,应该不会再因为锁文件的问题而被阻塞。

Lock文件介绍

在PyTorch编译和加载CUDA/C++扩展的过程中,lock文件用于同步多个并行编译进程,防止它们同时修改同一套编译产物或缓存。这是一种常见的机制,用于保证在使用共享资源时的线程安全或进程安全。下面是lock文件的一些主要用途和工作原理:

用途
  • 避免冲突:当有多个进程尝试编译同一个CUDA/C++扩展时,lock文件确保同一时间只有一个进程能进行编译,从而避免编译产物被不同进程同时写入或修改,造成数据损坏。
  • 资源管理:在编译过程中可能会生成临时文件或缓存,lock文件帮助管理这些资源,确保它们在正确的时间被创建和清理,防止因为资源未正确释放而导致的问题。
工作原理
  • 创建锁定:当一个编译进程开始时,它会检查lock文件是否存在。如果不存在,该进程会创建一个lock文件,并继续编译操作。
  • 检测锁定:如果另一个编译进程启动并发现lock文件已存在,它会知道另一个编译过程正在进行中,因此会等待直到lock文件被删除。
  • 释放锁定:当持有lock文件的编译进程完成所有编译任务后,它会删除lock文件,表明编译资源现在是空闲的。这一操作向其他等待的进程发出信号,表明它们现在可以开始自己的编译过程。
问题

尽管lock文件是一种有效的同步机制,但在某些情况下可能会导致问题:

  • 如果编译进程非正常终止(如因崩溃或强制退出),lock文件可能不会被正确删除。这会导致后续的编译尝试被不必要地阻塞。
  • 在一些系统上,因为权限或文件系统的问题,lock文件可能无法被创建或删除,同样会影响编译过程。
    自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)

录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)

img
  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值