python 加速(1)

本文介绍了如何利用CUDA和C++加速Python中的PyTorch操作。通过安装Cmake、CUDA,配置CLion环境,创建并编译C++与CUDA文件,以及设置VS C++环境,实现从Python到C++再到CUDA的转换。教程强调,只有加速GPU操作才能带来真正意义的性能提升,并推荐了相关资源和步骤。
摘要由CSDN通过智能技术生成


因为要修改yolo系列里NMS处的计算,如果用python,速度巨慢。torchvision 有自己的加速后的NMS function。但是不和形变后的IOU通用。因此需要做一个类似的。
回看torchvion, 发现里面有cpp的文件,因为之前没有接触过加速(资源比较丰富)。
C++ 并不是加速NMS那步操作的解药,解药是CUDA kernel。因此,如果要加速任何的function在model里,CUDA kernel 是最终目的。

自己之前误入歧途,以为C++就能加速一切。试图用libtorch & c++ 替代之前python的操作。但其实只要不能加速GPU操作,这些办法都毫无意义。在用libtorch 改写时,发现python导出的.pt文件,并没有办法被C++ 的libtorch直接load. 在试图解决这个bug,发现了,其实我该用cuda 改写~就无语。。。。

感谢:AI葵
https://www.youtube.com/watch?v=_QqG_I8nfH0

简单步骤

Header

wiou.h


                
Python 加速程序运行主要有以下几个途径: 1. **优化算法**:选择更高效的算法可以大幅度提升程序性能。有时候,即使是简单的优化也能带来显著的效果。 2. **利用 Python 编程库和框架**:很多针对特定任务设计的库和框架已经经过了大量的优化工作。例如,对于数据处理、科学计算等应用领域,`NumPy`、`Pandas` 和 `SciPy` 等库通常比原生 Python 要快得多。同时,如`Dask`这样的库可以帮助处理大型数据集而不会导致内存溢出。 3. **多线程与异步编程**:利用 Python 的 `concurrent.futures` 模块或第三方库如 `asyncio` 进行多线程或多进程编程,可以并行执行任务,提高程序的执行效率。注意,由于 GIL(全局解释器锁),单 CPU 核心下多线程可能不会提供预期的速度提升;但对于多核心处理器,多线程仍然有明显的加速效果。 4. **使用 JIT 编译器**:JIT(Just-In-Time)编译器可以在程序运行时将部分或全部 Python 代码转换成机器码,减少解释过程带来的性能损耗。例如,`Numba` 就是一个流行的 Python JIT 编译器,它特别擅长加速数学密集型代码。 5. **降低 IO 开销**:IO 操作通常是 Python 程序的瓶颈之一。优化文件读写、数据库查询等操作,比如通过缓存策略减少频繁访问,可以有效提升性能。 6. **编写 Cython 或 C/C++ 插件**:对于最核心的部分,可以考虑使用 C/C++ 编写代码并通过 Cython 或其他工具将其集成到 Python 中,这种方式可以极大提高关键模块的执行速度。 7. **避免全局变量和递归调用**:过多使用全局变量可能导致性能下降,因为每次函数调用都需要从堆栈上下文切换和恢复状态。递归调用同样会消耗大量的系统资源,并可能导致栈溢出错误。 8. **使用低级语言编写的高性能库**:如使用 Cython 直接调用 C 函数,或者使用像 Numexpr 这样的库,它们底层都是用 C 或 C++ 实现的,能提供极高的性能。 9. **调整 Python 解释器设置**:适当调整 Python 解释器的配置选项,如启用 GC(垃圾回收)优化、调整循环缓冲区大小等,有时也可以提高程序运行效率。 实施上述方法时,应先对程序进行详细的性能分析,找出瓶颈所在,然后针对性地采取措施。记住,在追求性能的同时,也要考虑到代码的可维护性和可读性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值