PyTorch로 Numpy를 대체하여 성능을 끌어올려보자 #pytorch #numpy #gpu #cuda #python #colab
2020. 3. 8. 05:08ㆍDiary
PyTorch의 Tensor와 Numpy의 ndarray는 유사한 형태를 가지고 있고 PyTorch의 경우 GPU를 사용한 연산이 가능하기 때문에 Numpy로 작업시 연산 부분을 PyTorch대체해서 처리 속도를 끌어 올릴 수 있다.
다음과 같이 Numpy로 배열을 만들고 10000번의 연산을 했을때 소요 시간은 5.11초이다.
%%time
import numpy as np
x = np.ones(1024000)
for i in range(10000):
x += 1
print (type(x))
print (x)
<class 'numpy.ndarray'>
[10001. 10001. 10001. ... 10001. 10001. 10001.]
CPU times: user 5.11 s, sys: 2.45 ms, total: 5.11 s
Wall time: 5.12 s
동일한 로직에 Numpy 배열을 Torch Tensor로 변환하고 Tensor를 CPU에서 GPU로 옮기고 연산이 끝난 후에 Tensor를 다시 GPU에서 CPU로 옮긴 후 Tensor를 Numpy 배열로 변환해주는 코드를 추가 했을때 소요 시간은 0.339이다. 이리저리 변환작업이 추가되지만 Numpy로 연산을 했을때보다 Torch로 GPU 연산을 했을때 16배정도 빠르다는 것을 확인할 수 있다.
%%time
import numpy as np
import torch
x = np.ones(1024000)
x = torch.from_numpy(x)
x = x.to(torch.device('cuda'))
for i in range(10000):
x += 1
b = x.to(torch.device('cpu'))
c = b.numpy()
print (type(c))
print (c)
<class 'numpy.ndarray'>
[10001. 10001. 10001. ... 10001. 10001. 10001.]
CPU times: user 268 ms, sys: 68 ms, total: 336 ms
Wall time: 339 ms
Google CoLab에서 주피터 노트북으로 테스트하였다.
'Diary' 카테고리의 다른 글
[SQL] CONCAT, 문자열 결합하기 #Postgresql #SQL #CONCAT (0) | 2020.03.10 |
---|---|
[SQL] WERER절에 IN 연산자 사용하기 #Postgresql #psycopg2 #Python (0) | 2020.03.09 |
웹툰 이미지에서 대사만 지워보자 #OCR #GCP #Python #OpenCV (1) | 2020.03.05 |
'레드옥션' 개발 후기 #Python #Flask #Chartjs #경매 (1) | 2020.03.05 |
Imgur API와 ProxyRotator를 활용하여 다수의 이미지를 업로드하자 (0) | 2020.02.19 |