Chapter 4. 딥러닝 학습을 위한 프레임워크
자, 딥러닝을 위한 밑작업이 어느 정도 마무리되었으니, 이제 본격적으로 딥러닝 학습에 직접적으로 이용되는 프레임워크들을 알아보겠습니다. 현업에서 주로 쓰이는 라이브러리에는 현재 파이토치(PyTorch)와 텐서플로(TensorFlow) 등이 있으며, 최근 몇 년간을 기준으로 파이토치의 점유율이 조금씩 커지고 있는 추세입니다. 깃허브 등에 들어가면 상당수의 머신러닝, 딥러닝 코드가 파이토치로 작성되고 있죠.
텐서플로만 쓸 줄 알았던 저 같은 유저들은 뒷목을 잡았습니다...
하지만 그렇다 해도 파이토치와 텐서플로 두 프레임워크의 장단점이 있기 때문에 파이토치와 텐서플로의 순서대로 두 프레임워크를 모두 배워보겠습니다.
04-01 파이토치(PyTorch) 개요
들어가기에 앞서: 파이토치와 텐서플로로 학습하는 데이터는 CPU를 이용할 수도 있지만, 대부분의 경우 학습 속도를 높이기 위해 GPU(그래픽 카드)의 힘을 빌립니다. 이 때, 두 프레임워크 모두 NVIDIA(엔비디아) 사에서 발매하는 그래픽 카드의 CUDA라는 기능을 이용하기 때문에 그 외의 그래픽카드 제조사(AMD 또는 인텔)의 그래픽 카드로는 GPU 가속을 사용할 수 없습니다. 따라서 이번 챕터에서는 앞서 Chapter 3에서 언급한 구글 코랩에서 GPU 가속을 하는 방법 위주로 설명하겠습니다.
파이토치와 텐서플로는 넘파이(NumPy) 배열과 유사한 텐서(tensor)라는 자료형을 기본으로 연산을 진행합니다. 기본적으로 텐서는 다차원 배열로, 1차원 텐서인 벡터와 2차원 텐서인 행렬의 형태로 이미 접해보았습니다. 이러한 텐서 간의 연산을 수행하는 것을 도와주는 것이 딥러닝 프레임워크의 기본입니다.
앞서 짧게 설명한 것과 같이 엔비디아 사의 그래픽 카드를 보유한 분들만 GPU 가속이 가능하기 때문에, 이번에는 구글 코랩에서 GPU 가속 설정을 한 후에 진행하겠습니다. 먼저 새 노트를 열어줍니다.
상단의 툴바에서 런타임 메뉴로 들어가 런타임 유형 변경을 클릭해줍니다.
하드웨어 가속기 설정이 None으로 되어 있는데 이걸 GPU로 바꿔주면 설정이 완료됩니다. 그 밑에 GPU 유형은 T4로 설정되어 있는데 어차피 유료 구매 아니면 변경 못하니까 없는 셈 치고... 그대로 저장을 눌러주시면 GPU 가속 설정이 끝난 겁니다!
GPU 사용 여부 체크하기
텐서 간의 연산을 수행할 때, 기본적으로 두 텐서가 같은 장치에 있어야 합니다. 따라서 가능하면, 연산을 수행하는 텐서들을 모두 GPU에 올린 뒤에 연산을 수행할 필요가 있습니다. 예를 한 번 들어보죠. 다음과 같은 2차원 텐서가 있다고 하고, 이를 CPU, GPU로 옮겨가며 올리는 방식을 수행해 보겠습니다.
import torch
data = [[1, 2], [3, 4]]
x = torch.tensor(data)
print(x.is_cuda)
x = x.cuda() # GPU로 옮기기
print(x.is_cuda)
x = x.cpu() # CPU로 옮기기
print(x.is_cuda)
data
라는 배열을 텐서로 만들기 위해 torch.tensor()
메서드를 실행해줬습니다. 이 데이터가 현재 GPU에 올려져 있는지를 알기 위해 is_cuda
라는 메서드를 호출하면, 그 여부에 따라 True
또는 False
의 형태로 답을 줍니다. 기본적으로 텐서는 CPU에 올려져 있는 것으로 출발합니다.
여기서 이 텐서를 GPU로 옮기려면 cuda()
라는 메서드를 사용하고, 다시 CPU로 옮길 때는 cpu()
메서드를 사용합니다.
만약 서로 다른 장치에 있는 텐서끼리 연산을 수행하면 오류가 발생하니 이 점을 꼭 확인해주세요.
* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.