CPU GPU NPU TPU 훑어보기

AID·2024년 3월 31일
4
post-thumbnail

보통 머신러닝과 딥러닝을 할 때 코랩을 사용하지 않는 이상 코드로 아래와 같이 GPU를 사용할지 결정 해줍니다.

import torch

# CUDA 사용여부
USE_CUDA = torch.cuda.is_available()
print(USE_CUDA)

# device 선언
device = torch.device('cuda:0' if USE_CUDA else 'cpu')

+) 코랩은 ‘런타임 유형 변경’ 탭에서 기본 CPU에서 T4 GPU로 바꿀 수 있고 추가 결제를 통해 A100, V100까지 쓸 수 있습니다.

설정 후엔 위의 사진과 같이 torch.cuda.is_available()을 통해서 GPU를 사용하고 있는지 확인이 가능합니다.

하지만 막상 GPU가 왜 딥러닝에서 많이 쓰이는지, CPU와 어떤 차이가 있는 건지 헷갈려 하는 분들이 많아(본인 포함,,,) 포스팅을 하게 되었습니다. 구체적인 구조적 차이 및 구성요소들의 개념보다는 AI를 할 때 필요한 부분을 중점으로 설명 드리겠습니다.



CPU & GPU

CPU와 GPU는 데이터를 읽어들여 연산처리를 통해 답을 도출하는 기능을 수행하지만, 둘의 구조나 역할은 매우 다릅니다. 특히 우리가 중점적으로 봐야 할 부분은 계산을 수행하는 ALU(Arithmetic-Logic unit)입니다. ALU의 개수에 따라 연산 속도가 달라지기 때문이죠.

CPU(Central Processing Unit)

CPU는 컴퓨터 및 운영 체제에 필요한 명령과 처리를 실행하므로 컴퓨터의 두뇌라고 할 수 있습니다. 처리할 작업들의 우선순위를 따지며 실행하고 메모리를 관리하는 등 컴퓨터를 지휘하는 역할을 수행합니다.

GPU(Graphical Processing Unit)

GPU는 비디오, 즉 픽셀로 이루어진 영상을 처리하는 용도로 탄생했습니다. 영상 렌더링을 비롯한 그래픽 작업의 경우 픽셀 하나하나에 대한 연산을 필요로 하기 때문에 연산 능력을 극대화 한 프로세서라고 생각하면 됩니다.

이때 처리해야할 작업에서 연산량이 많아지면 연산 능력이 비교적 떨어지는 CPU가 GPU로 데이터를 보내 재빠르게 처리합니다.

CPU vs GPU

CPU와 GPU의 차이는 그 작업 처리 방식을 비교해보면 쉽게 알 수 있습니다. 하나의 CPU는 직렬 처리에 최적화된 몇 개의 코어로 구성된 반면, GPU는 병렬 처리용으로 설계된 수 천 개의 보다 소형이고 효율적인 코어로 구성되었습니다.

CPU는 GPU보다 더 적은 코어를 갖고 있지만 각각의 코어가 GPU 보다 더 강력한 컴퓨팅 파워를 갖고 있습니다. 따라서 CPU는 순차적인 작업(Sequential task)에 더 강점이 있습니다. 반면 GPU는 CPU 보다 코어 수는 많지만 각각의 코어가 CPU 보다 더 성능이 낮기 때문에 병렬적인 작업(Paralell task)에 더 강점이 있습니다.

물론 CPU에서 병렬작업이 불가능 한 것은 아닙니다. 현재 PC 에서 사용 되는 CPU 의 코어는 보통 4~10개 정도이며 threading 기술을 통해 작업의 병렬화를 진행할 수 있습니다. 예를 들어 8 코어 16 threads CPU 의 경우, 병렬적으로 16개의 task 를 수행할 수 있다는 뜻입니다.
(참고)CPU multithreading, multiprocessing

반면, 예를 들어 NVIDIA 의 Tital XP GPU 의 경우 3840 코어를 갖고 있습니다. threading 을 감안하더라도 CPU와 GPU 의 코어 수의 차이는 200배 이상이 됩니다.

결론적으로, CPU는 컴퓨터의 전반적인 작업을 처리하기에 용이하고, GPU는 연산을 전문적으로 처리하기에 용이합니다. 딥러닝을 수행 할 때는 학습해야 할 파라미터도 수천, 수만 개에 달하므로 계산량이 엄청납니다. 이때 CPU에서는 데이터를 GPU로 보내 연산을 진행하며 효율적으로 작업을 수행할 수 있게 됩니다.



NPU

NPU(Neural Processing Unit)는 Neural Network, 즉 인공 신경망을 통한 인공지능 연산을 좀 더 효율적으로 하기 위한 목적으로 설계된 프로세서입니다.

NPU는 딥러닝 네트워크를 구성하는 각 layer를 실리콘으로 구현한 칩셋입니다. 예컨대 딥러닝 내의 Convolution, Fully Connected 와 같은 인공 신경망을 구성하는 뉴런을 하드웨어적으로 구현 했다는 의미입니다.

따라서 NPU를 이용하는 딥러닝 모델은 GPU를 사용할 때와 같은 100% 자유도를 가지고 네트워크를 구성할 수없습니다. 실리콘으로 구현한 뉴런은 칩 설계 시 정해져 있고 NPU 에서 구현하지 않은 뉴런이 딥러닝 네트워크에 포함되어 있다면, 그 부분은 하드웨어 가속(GPU, NPU와 같은 하드웨어를 통한 연산 속도 가속)을 타지 못하고 CPU 로 연산을 수행해야 하기 때문에 NPU를 사용하는 이점이 약화됩니다.

만약에 어떤 가상의 NPU 가 Convolution 은 구현했지만 Fully Connected 계층은 구현하지 않았다고 한다면, 위의 그림과 같은 네트워크에서는 CPU 성능을 소모해야 하기 때문에 성능이 저하될 것입니다.

NPU를 쓰는 이유

위와 같은 제약 사항이 존재함에도 불구하고 기존의 GPU가 너무 비싸기 때문입니다. GPU 시스템은 너무 비싸고 휴대할 수 없으며, 전력 소모도 매우 큽니다. 휴대폰에 GPU를 넣을 수는 없고 휴대폰에 포함된 CPU만 가지고 추론을 하기에는 AI를 활용하긴 어렵겠죠. 물론 배터리도 문제일 것이고요.

애플의 아이폰처럼 저조도 사진의 품질을 극대화하거나, 테슬라의 전기차로 자율주행을 하고자 할 때, 길거리 CCTV 에서 테러범을 찾아내거나 상점의 방문자 추이를 파악하는 데에도 딥러닝을 통한 추론은 필수적입니다. 이 때문에 말단 장비에 탑재될 수 있는 NPU가 개발된 것입니다.

그리고 이 모든 일들은 말단 장비 자체에서 이루어져야만 합니다. 각 말단 장비마다 초당 수 메가바이트의 영상을 생산하고 있을 텐데, 이를 클라우드나 서버로 업로드 하고 추론을 진행하는 것이 어렵기 때문입니다.

최근 출시되는 스마트폰에는 NPU를 탑재한 제품들이 많이 등장하고 있으며, 아이폰 시리즈에는 ‘Neural Engine’이라는 이름으로 탑재되어 있고, 스마트폰용 SoC인 ‘스냅드래곤(Snapdragon)’에도 NPU를 탑재한 모델이 존재합니다.

NPU + GPU

추론은 장비에 탑재된 NPU에서 진행하면, 학습은 어디서 진행될까요? 따라서 딥러닝 추론은 NPU를 탑재한 말단 장비에서 이루어지고, NPU를 통해 구동하고자 하는 딥러닝 모델은 GPU를 탑재한 대형 서버에서 학습하는 것이 좋습니다. 즉 모델 학습을 빠르게 하려면 GPU도 필요하고, 말단 장비에서 저전력으로 추론 하려면 NPU도 필요합니다.



TPU

TPU(Tensor Processing Unit)는 구글에서 제작한 NPU의 이름입니다. TPU도 NPU와 마찬가지로 인공 신경망 학습 및 추론 속도를 높이는 데에 특화된 칩입니다. NPU와는 구조 상의 차이점이 존재하는데요, TPU는 전통적인 Von Neumann 구조를 따르지 않고 독자적인 아키텍처로 구성되어 있어 NPU보다 빠른 병렬처리가 가능한 점 입니다.

구글은 클라우드 컴퓨팅 서비스 ‘Google Cloud’를 통해 사용자에게 TPU의 처리 능력을 제공하고 있어 사용자는 스스로 하드웨어를 준비하지 않아도 머신러닝 관련 처리를 고효율로 수행할 수 있습니다.



다양한 AI 반도체

AI 기술이 다양화 되고 세분화 되면서, NPU를 중심으로 여러 AI반도체가 등장하고 있습니다. IPU(Intelligence Processing Unit, 프로세서 주변 메모리 탑재로 데이터 처리 속도 높인 반도체)와 LPU(Language Processing Unit, 언어 추론 특화 반도체), DPU(Data Processiing Unit, 데이터센터 처리 속도 높이는 반도체) 등 이미 나온 제품만 해도 여럿입니다. 세부 기술은 다르지만 AI 쓰임새를 극대화하려는 공통 목표를 갖고 있습니다.


이번 포스팅에선 CPU, GPU, NPU, TPU에 대해 알아봤는데요. 격동하는 AI 시대에 각각의 프로세서가 어떤 역할을 하며, 왜 사용하는 지에 대해 알면 좋을 것 같아 정리해봤습니다.



작성자 : 2기 정지윤

profile
부산대학교 인공지능 동아리

0개의 댓글