본문 바로가기

언어/Python

Pytorch 설치 전 - 왜 CUDA를 설치하는가?

CUDA를 설치하지 않아도 Pytorch의 설치는 가능하다.

하지만, 이 경우 딥러닝 연산에 CPU만 사용하기 때문에 병렬적인 연산이 많이 필요한 작업에서 어려움이 있다.

 

그럼 병렬 연산은 왜 중요한가?

 

병렬 연산

컴퓨터에서 필수적인 부품이자 컴퓨터의 뇌라고 하는 CPU에는 코어라는 것이 한 개 이상 존재한다. (보통 4~16개 사이)

컴퓨터의 CPU 정보에 CPU의 코어 수가 명시되어 있다.

 

코어는 간단히 말하면 뇌에서 여러 가지 일을 동시에 처리하기 위한 기관이다.

8개 코어가 있다면 동시에 8개의 일을 처리할 수 있는 것이다.

여러 코어가 동시에 작업하는 것을 병렬적으로 처리한다고 한다.

 

사람이 하는 일로 직관적인 예를 들어보자면,

코어가 2개인 CPU로 일을 한다는 것은 양뇌가 발달한 한 사람이 양 손을 써서 한 손으로는 편지를 쓰고 한 손으로는 논문을 쓴다고 생각할 수 있지 않을까.

 

 

그럼 병렬적 처리가 딥러닝 태스크에서 중요한 이유도 쉽게 알 수 있다.

 

보통 딥러닝 태스크에서는 여러 레이어의 신경망을 구성하고 다양한 유형의 연산을 수행하게 된다.

예를 들어, 아래와 같은 연산을 고려해볼 수 있다.

 

1) 순전파 과정에서 엄청난 크기의 행렬 간의 행렬 곱셈 연산을 수행한다.

2) SGD 최적화 과정 중 하나로, mini-batch를 나누고 각 mini-batch의 역전파 과정에서 Loss에 대한 gradient를 계산한다.

 

만약, 이런 상황에서 CPU만으로 연산을 한다면 어떻게 될까?

 

예를 들어, CPU의 8개 코어가 1000 * 1000 행렬곱 연산을 병렬적으로 수행한다면 각각의 코어가 담당한 연산 개수는 약 12만개가 된다.

컴퓨터라면 이를 0.1초 안에 수행하겠지만, 만약 데이터 사이즈와 반복이 커진다면 CPU의 각 코어가 감당해야 하는 연산 수는 기하급수적으로 늘어나게 된다.

CPU의 성능이 아무리 좋아도 연산을 수행하는 속도를 더 가속할 수는 없기 때문에 딥러닝 태스크에서 처리 시간은 연산 수에 따라 늘어날 수 밖에 없다.

 

GPU를 사용하는 이유

계산 속도

그런데 만약에 1000 * 1000 행렬곱을 1000개의 뇌가 각각 1000개 연산만 맡아서 처리하게 된다면?

당연히 그 계산 속도는 비약적으로 개선될 것이다.

그래서 병렬적인 처리를 할 수 있는 코어의 수가 중요해진다.

놀랍게도 NVIDIA는 GPU를 개발하면서 내장된 작은 연산 유닛인 Cuda Core라는 것을 예전부터 만들어서 병렬적인 처리를 가능하게 만들었다. (그래서 AI 수요가 폭증한 근 몇 년 간  NVIDIA의 최근 주가가 미쳐 날뛰는 것이다)

 

RTX 4070ti Super의 CUDA 코어 수는 8448개.

 

RTX 4070ti Super의 CUDA 코어 수는 8448개로, 각각의 코어가 동시에 연산을 병렬적으로 처리할 수 있다.

엄청난 수의 CUDA 코어가 CPU 대신 작업을 하게 되면, 복잡한 계산을 훨씬 빠른 속도로 해낼 수밖에 없다.

이래서 딥러닝에서 GPU가 그렇게 중요하다고들 하는 것이다.

 

전력량

계산 속도 뿐 아니라, CPU가 잡아먹는 전력량이 상당한데, GPU를 사용하게 되면 동일한 작업을 훨씬 적은 전력으로 수행할 수 있다.

컴퓨터 전력의 소비는 일반 가정에서 큰 체감이 되지 않지만, 대용량 데이터 처리 영역으로 가면 갈수록 엄청난 차이가 발생한다.

기업 수준으로 가면, 도시 전력량이 부족해질 것이라는 전망이 급증하고 있다

 

 

이러한 이유들로 딥러닝 태스크에서는 GPU의 Cuda core를 쓰고자 하는 것이다.

 

그리고 CUDA core를 딥러닝 연산에 쓰기 위해서는 NVIDIA driver와 CUDA Toolkit, cuDNN 총 세 가지를 설치해야만 한다.

이 추가적인 소프트웨어를 설치하지 않으면 딥러닝 연산에 GPU의 CUDA core를 활용할 수 없다.

 

그래서 귀찮지만, CUDA Toolkit, cuDNN을 먼저 받아야하는 것이다.

 

그럼 Pytorch와 CUDA는 대체 무슨 관계인가?

특별한 관계가 있는 것은 아닌 것 같다.

 

Pytorch는 페이스북 AI연구 그룹에서 딥러닝 연구, 개발을 용이하게 하고자 만든 프레임워크다.

연구진들이 개발하면서 그저 여기서 CUDA도 사용하면 좋겠다 해서 CUDA를 지원하는 것이다.

(다른 딥러닝 프레임워크인 tensorflow도 CUDA를 지원하기는 마찬가지다.)

 

NVIDIA가 딥러닝 영역에서 거의 대체 불가능한 CUDA를 내놓고 이를 딥러닝에서 활용할 수 있도록 병렬적 계산을 지원하는 소프트웨어를 잘 제공해줘서 대다수의 경우 CUDA 관련 소프트웨어를 받아서 딥러닝에 활용하는 것 같다.

 

한편, CUDA 말고도 AMD GPU에서 지원하는 ROCm이라는 플랫폼도 있고, Apple에서 사용하는 GPU 프레임워크도 있다.

하지만, 현 딥러닝 생태계에서 관련 최강자의 자리는 NVIDIA의 CUDA가 가져가고 있는 것으로 보인다.

 

이 정도로 CUDA를 설치하는 이유를 마무리해본다.