brunch

You can make anything
by writing

C.S.Lewis

by 유윤식 Jul 07. 2021

Python: TF2.X Vs. Torch

#파이토치가 10배 빠르다고?

텐서플로보다 파이토치가 10배가 빠르다고?


Case By Case 일 것 같다는 생각으로,

실험을 진행.


개요는 이렇다.

약 650,000 개의 Row 와 200 개의 Dim 을 갖는 배열 준비.

MatMul 함수를 통해서 총 650,000 개의 Row 와 650,000 개의 결과값

즉,

Shape : (650000, 650000) 형태의 결과값을 도출해보자.


텐서플로와 파이토치의 코드는 비슷하다.

비슷한걸 넘어 거의 같다.


우선 데이터 형태를 직접 보자면.


# Tensorflow

xx = tf.convert_to_tensor(

    x, dtype=None, dtype_hint=None, name=None

)


yy = tf.convert_to_tensor(

    y, dtype=None, dtype_hint=None, name=None

)


try:

    batch_size = 1000

    for i in range(len(xx) // batch_size):

        c = tf.matmul(xx[i*batch_size:(i+1)*batch_size], yy, transpose_b=True)

        print('tensorflow2 ', i+1, ' : ', c.shape)

except RuntimeError as e:

    print(e)


배치는 1000 크기만큼 할당했다.

x, y 는 같은 벡터를 할당받았다.

이를 각각 tensor 로 만들고 numpy 형식으로 데이터를 직접 확인해 볼 수 있다.

실행 환경은 GPU 16GB 1개를 제공받아서 사용한다.

회사 리소스를 좀 사용했다.


실행 결과는,


이게 느리다, 빠르다 판단은 상대적인 것이다.

암산으로 다 계산할 수 있는데 1초에 할 수 있다면 그 사람이 더 빠르다.


비교 대상을 실험해보자.

파이토치도 위와 유사한 코드로 진행한다.



# PyTorch

cuda1 = torch.device('cuda:1')

xx = torch.tensor(x, device=cuda1)

yy = torch.tensor(y, device=cuda1)


try:

    batch_size = 1000

    for i in range(len(xx) // batch_size):

        c = torch.matmul(xx[i*batch_size:(i+1)*batch_size], yy.T).cuda(device=cuda1)

        print('pytorch ', i+1, ' : ', c.shape)

except RuntimeError as e:

    print(e)


차이점은 없다.


바로 실행결과를 보면,

놀랍다.

10배 빠른게 맞는건가?

1초는 1000ms 인데... 분명 그렇게 배웠는데...


이 또한 Case By Case 일거라 생각이 든다...


GPU 메모리만 허락된다면,

사이즈가 더 큰 데이터도 GPU에 올려서 다양한 실험을..

해보고싶다...


실험에서 분명한 점은,

차이를 두지 않고,

각각 실험을 같은 환경에서 진행했다.


PyTorch를 사용하고 싶은가?

아니면 Tensorflow를 사용하고 싶은가?


단적인 예만을 보고 선택하는 것은 바람직하지 못하다.

하지만,

초보자라면 분명 PyTorch 에서 더 빠른 성장과 다양한 실험을 경험해 볼 수 있다고

생각한다.


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari