一、环境配置

1.安装cuda

sudo apt-get install cuda-toolkit-11-4

2.环境变量配置

sudo gedit ~/.bashrc
#在最后加上
export PATH=/usr/local/cuda-11.4/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH
export CUDA_HOME=/usr/local/cuda-11.4
运行以下命令使更改生效: 
source ~/.bashrc

3.验证CUDA安装是否成功:

nvcc --version

运行示例程序:

#进入 CUDA 自带的示例程序 deviceQuery 的目录。
cd /usr/local/cuda/samples/1_Utilities/deviceQuery
#编译 deviceQuery 程序,编译成功后,会生成可执行文件 deviceQuery
sudo make
./deviceQuery

程序会检测当前系统的 CUDA 设备和驱动信息。如果看到 Result = PASS,说明 CUDA 正常工作。
4.安装必要的CUDA加速库

pip install numba cupy-cuda11x opencv-python

二、加速思路

我的原python代码耗时0.088s,说明计算本身不复杂。

Jetson Nano的GPU较弱(128核/4GB共享内存),数据传输开销可能成为瓶颈

思路:

1.识别可并行部分:图像像素级操作
2.避免并行化:小规模标量计算
3.使用OpenCV的CUDA模块 (cv2.cuda)
OpenCV提供了CUDA加速的GPU版本函数,可以直接替换部分CPU操作。
适合:图像阈值处理、矩阵运算、直方图均衡化等。
4.使用Numba的CUDA加速
适合:复杂的逐像素计算或并行化算法。
5.减少CPU-GPU数据传输
尽量减少upload(数据从CPU传到GPU)和download(数据从GPU传回CPU)的次数。
尽量在GPU上连续完成多个操作。

步骤:

  1. 初始化CUDA流和GPU内存:
    在代码开头初始化CUDA流,用于异步操作:
# 初始化CUDA流
stream = cv2.cuda_Stream()

报错的解决办法

1.SystemError: <class 'cv2.cuda.Stream'> returned a result with an error set 

通常是由于 OpenCV 的 CUDA 模块未正确编译或初始化 导致的。在 Jetson Nano 上,虽然 OpenCV 预装了 CUDA 支持,但某些情况下可能需要额外配置。

2.import cupy时 出现报错AttributeError: module 'numpy' has no attribute 'typeDict'

是NumPy 版本与 CuPy 版本不兼容 导致的
先检查NumPy版本 pip3 show numpy 如果版本是 1.20+(我是1.24.4),需要降级。降到1.19.5就兼容了。

Logo

欢迎来到FlagOS开发社区,这里是一个汇聚了AI开发者、数据科学家、机器学习爱好者以及业界专家的活力平台。我们致力于成为业内领先的Triton技术交流与应用分享的殿堂,为推动人工智能技术的普及与深化应用贡献力量。

更多推荐