python安装numba_Jetson Nano安装Numba遇到的一些坑

一开始简单粗暴的pip3 install numba,结果安装llvmlite时候报错。

然后百度,参考了CSDN上的一篇博客

以下为博客中内容:

首先numba安装需要依赖包llvmlite,llvmlite又需要安装llvm

本次安装numba版本为0.31.0,llvmlite版本为0.16.0,llvm版本为3.9

首先安装llvm-3.9,命令为sudo apt-get install llvm-3.9

然后源码安装llvmlite0.16.0,命令为sudo LLVM_CONFIG=/usr/bin/llvm-config-3.9

python3 setup.py install,需要进入源码目录中安装。

最后安装numba ,命令为sudo LLVM_CONFIG=/usr/bin/llvm-config-3.9 pip3

install numba==0.31

源码包可以先pip3 install llvmlite==0.16.0在终端里显示出的链接中下载。

安装成功以后,跑了一个CUDA Python的程序:

import matplotlib.pyplot as plt

from PIL import Image

#显示待处理的图片

infer_path='mojave.jpg'

image=Image.open(infer_path)

print(image.size)

plt.imshow(image)

#plt.show()

#定义GPU CPU处理函数

import cv2

import numpy as np

from numba import cuda

import time

import math

#Create an image.

img = cv2.imread('mojave.jpg')

#GPU function

@cuda.jit

def process_gpu(img,channels):

tx = cuda.blockIdx.x*cuda.blockDim.x+cuda.threadIdx.x

ty = cuda.blockIdx.y*cuda.blockDim.y+cuda.threadIdx.y

for c in range(channels):

color = img[tx,ty][c]*2.0+30

if color>255:

img[tx,ty][c]=255

elif color<0:

img[tx,ty][c]=0

else:

img[tx,ty][c]=color

#CPU function

def process_cpu(img,dst):

rows,cols,channels=img.shape

for i in range(rows):

for j in range(cols):

for c in range(3):

color=img[i,j][c]*2.0+30

if color>255:

dst[i,j][c]=255

elif color<0:

dst[i,j][c]=0

else:

dst[i,j][c]=color

rows,cols,channels=img.shape

##GPU process

dImg = cuda.to_device(img)

threadsperblock = (16,16)

blockspergrid_x = int(math.ceil(rows/threadsperblock[0]))

blockspergrid_y = int(math.ceil(cols/threadsperblock[1]))

blockspergrid = (blockspergrid_x,blockspergrid_y)

cuda.synchronize()

dst_gpu = img.copy()

start_gpu = time.time()

process_gpu[blockspergrid,threadsperblock](dImg,channels)

cuda.synchronize()

end_gpu = time.time()

dst_gpu = dImg.copy_to_host()

time_gpu = (end_gpu-start_gpu)

print("GPU process time: "+str(time_gpu))

#save

cv2.imwrite("result_gpu.jpg",dst_gpu)

#GPU处理的图片

infer_path='result_gpu.jpg'

image=Image.open(infer_path)

plt.imshow(image)

plt.show()

##CPU process

dst_cpu = img.copy()

start_cpu = time.time()

process_cpu(img,dst_cpu)

end_cpu = time.time()

time_cpu = (end_cpu-start_cpu)

print("CPU process time: "+str(time_cpu))

#save

cv2.imwrite("result_cpu.jpg",dst_cpu)

#CPU处理的图片

infer_path='result_cpu.jpg'

image=Image.open(infer_path)

plt.imshow(image)

plt.show()

是一个对比CPU和GPU处理图片亮度时间的代码

运行程序后出现报错:

Traceback (most recent call last): File

“/usr/local/lib/python3.6/dist-packages/numba/cuda/cudadrv/nvvm.py”,

line 111, in new

inst.driver = open_cudalib(‘nvvm’, ccc=True) File “/usr/local/lib/python3.6/dist-packages/numba/cuda/cudadrv/libs.py”,

line 41, in open_cudalib

raise OSError(‘library %s not found’ % lib) OSError: library nvvm not found

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File “1.py”, line 76, in

process_gpublockspergrid,threadsperblock File “/usr/local/lib/python3.6/dist-packages/numba/cuda/compiler.py”, line

701, in call

kernel = self.specialize(*args) File “/usr/local/lib/python3.6/dist-packages/numba/cuda/compiler.py”, line

712, in specialize

kernel = self.compile(argtypes) File “/usr/local/lib/python3.6/dist-packages/numba/cuda/compiler.py”, line

730, in compile

kernel.bind() File “/usr/local/lib/python3.6/dist-packages/numba/cuda/compiler.py”, line

489, in bind

self._func.get() File “/usr/local/lib/python3.6/dist-packages/numba/cuda/compiler.py”, line

370, in get

ptx = self.ptx.get() File “/usr/local/lib/python3.6/dist-packages/numba/cuda/compiler.py”, line

342, in get

**self._extra_options) File “/usr/local/lib/python3.6/dist-packages/numba/cuda/cudadrv/nvvm.py”,

line 463, in llvm_to_ptx

cu = CompilationUnit() File “/usr/local/lib/python3.6/dist-packages/numba/cuda/cudadrv/nvvm.py”,

line 146, in init

self.driver = NVVM() File “/usr/local/lib/python3.6/dist-packages/numba/cuda/cudadrv/nvvm.py”,

line 116, in new

raise NvvmSupportError(errmsg % e) numba.cuda.cudadrv.error.NvvmSupportError: libNVVM cannot be found. Do

conda install cudatoolkit: library nvvm not found Exception ignored

in:

>

Traceback (most recent call last): File

“/usr/local/lib/python3.6/dist-packages/numba/cuda/cudadrv/nvvm.py”,

line 152, in del

driver = NVVM() File “/usr/local/lib/python3.6/dist-packages/numba/cuda/cudadrv/nvvm.py”,

line 116, in new

raise NvvmSupportError(errmsg % e) numba.cuda.cudadrv.error.NvvmSupportError: libNVVM cannot be found. Do

conda install cudatoolkit: library nvvm not found

找不到nvvm,但是cuda10.0已经安装了,百度一下后得知是缺少环境变量。

在.bashrc中添加如下内容:

export NUMBAPRO_NVVM=/usr/local/cuda-10.0/nvvm/lib64/libnvvm.so

export NUMBAPRO_LIBDEVICE=/usr/local/cuda-10.0/nvvm/libdevice/

CUDA的环境变量之前配置好了已经,加上上面两条完整的如下:

export CUDA_HOME=/usr/local/cuda-10.0

export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:$LD_LIBRARY_PATH

export PATH=/usr/local/cuda-10.0/bin:$PATH

export NUMBAPRO_NVVM=/usr/local/cuda-10.0/nvvm/lib64/libnvvm.so

export NUMBAPRO_LIBDEVICE=/usr/local/cuda-10.0/nvvm/libdevice/

然后再次执行py程序,出现新的报错:

Traceback (most recent call last): File “1.py”, line 61, in

process_gpublockspergrid,threadsperblock File “/usr/local/lib/python3.6/dist-packages/numba/cuda/compiler.py”, line

701, in call

kernel = self.specialize(*args) File “/usr/local/lib/python3.6/dist-packages/numba/cuda/compiler.py”, line

712, in specialize

kernel = self.compile(argtypes) File “/usr/local/lib/python3.6/dist-packages/numba/cuda/compiler.py”, line

730, in compile

kernel.bind() File “/usr/local/lib/python3.6/dist-packages/numba/cuda/compiler.py”, line

489, in bind

self._func.get() File “/usr/local/lib/python3.6/dist-packages/numba/cuda/compiler.py”, line

370, in get

ptx = self.ptx.get() File “/usr/local/lib/python3.6/dist-packages/numba/cuda/compiler.py”, line

342, in get

**self._extra_options) File “/usr/local/lib/python3.6/dist-packages/numba/cuda/cudadrv/nvvm.py”,

line 464, in llvm_to_ptx

libdevice = LibDevice(arch=opts.get(‘arch’, ‘compute_20’)) File “/usr/local/lib/python3.6/dist-packages/numba/cuda/cudadrv/nvvm.py”,

line 340, in init

raise RuntimeError(MISSING_LIBDEVICE_FILE_MSG.format(arch=arch)) RuntimeError: Missing libdevice file for compute_50. Please ensure you

have package cudatoolkit 7.5. Install package by:

conda install cudatoolkit=7.5

但是我也没用使用conda,报错中提示的命令对我无效。百度了很久找不到办法,终于在CSDN的一篇博客的评论里找到了解决方法:

因为Missing libdevice file for compute_50,在/usr/local/cuda-10.0/nvvm/libdevice下发现只有一个

libdevice.10.bc。这里我们创建一个软链接sudo ln -s libdevice.10.bc libdevice.compute_50.10.bc

再次运行py程序,正常运行!

最后說一下Jetson Nano跑这个程序的速度,处理图片的分辨率是5120x2880标准5K图片,用CPU跑全程单核在跑,最终用时大概1090秒,用GPU跑1秒钟左右。

相同程序在PC机,至强U跑大概160秒。Tesla V100显卡跑大搞0点几秒。

不得不感叹CUDA处理这些性能强大!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值