Нет модуля с именем numbapro
Я запустил этот код, который я прочитал на вводной странице CUDA Python:-
import numpy as np
from timeit import default_timer as timer
from numbapro import vectorize
@vectorize(["float32(float32, float32)"], target='gpu')
def VectorAdd(a, b):
return a + b
def main():
N = 32000000
A = np.ones(N, dtype=np.float32)
B = np.ones(N, dtype=np.float32)
C = np.zeros(N, dtype=np.float32)
start = timer()
C = VectorAdd(A, B)
vectoradd_timer = timer() - start
print("C[:5] = " + str(C[:5]))
print("C[-5:] = " + str(C[-5:]))
print("VectorAdd took %f seconds" % vectoradd_timer)
if __name__ == '__main__':
main()
И я получаю следующую ошибку на терминале:-
dtn34@dtn34-ubuntu:~/Python$ python asd.py
Traceback (most recent call last):
File "asd.py", line 3, in <module>
from numbapro import vectorize
ImportError: No module named numbapro
Предполагалось запустить код с помощью gpu, но я получаю эту ошибку. Я установил anaconda, обновил conda, установил ускорение с помощью conda, установил cudatoolkit, установил numba с помощью conda. Я попытался скомпилировать его, используя как python2, так и python3
Что я делаю?
1 ответ
Понял. Как отмечают Уоррен Векессер и Роберт Кровелла, NumbaPro устарела, а все функции перенесены в numba. Таким образом, вместо Numbapro вы должны написать Numba
from numba import vectorize
Также цель должна быть установлена на "cuda" вместо "gpu"
@vectorize(["float32(float32, float32)"], target='cuda')
def VectorAdd(a, b):
return a + b
Я попытался запустить его в обоих (CPU и GPU) после модификации, CPU быстрее, чем GPU
первый в CPU:
import numpy as np
from timeit import default_timer as timer
# from numba import vectorize
# @vectorize(["float32(float32, float32)"], target='cuda')
def VectorAdd(a ,b):
return a + b
def main():
N = 32000000
A = np.ones(N, dtype=np.float32)
B = np.ones(N, dtype=np.float32)
C = np.ones(N, dtype=np.float32)
srart = timer()
C = VectorAdd(A,B)
vectoradd_time = timer() - srart
print ("C[:5] = " + str(C[:5]))
print ("C[:-5] = " + str(C[:-5]))
print ('vectoradd_time %f second' % vectoradd_time)
if __name__== '__main__':
main()
время:
vectoradd_time 0.046457 second
второй в GPU:
import numpy as np
from timeit import default_timer as timer
from numba import vectorize
@vectorize(["float32(float32, float32)"], target='cuda')
def VectorAdd(a, b):
return a + b
def main():
N = 32000000
A = np.ones(N, dtype=np.float32)
B = np.ones(N, dtype=np.float32)
C = np.zeros(N, dtype=np.float32)
start = timer()
C = VectorAdd(A, B)
vectoradd_timer = timer() - start
print("C[:5] = " + str(C[:5]))
print("C[-5:] = " + str(C[-5:]))
print("VectorAdd took %f seconds" % vectoradd_timer)
if __name__ == '__main__':
main()
время:
VectorAdd took 0.240731 seconds
этот результат зависит от характеристик вашего процессора.