GPU란? 그래픽용 부품이 AI에도 쓰이는 이유

GPU는 많은 계산을 나누어 동시에 처리하는 데 맞춰 설계된 프로세서다. 이름은 그래픽 처리 장치(Graphics Processing Unit)이지만, 용도가 화면을 그리는 일에만 머무르지는 않는다. 인공지능 모델에서 반복되는 행렬 계산도 GPU가 처리하는 대표적인 작업이다.

다만 ‘GPU가 CPU보다 빠르다’는 말에는 조건이 붙는다. 일을 얼마나 잘 나눌 수 있는지, 필요한 데이터가 얼마나 빨리 도착하는지, 어떤 숫자 형식으로 계산하는지에 따라 결과가 달라진다.

이 글의 목차

CPU와 GPU는 무엇을 다르게 처리할까?

CPU는 운영체제와 프로그램의 여러 명령을 처리하는 범용 프로세서다. 순서가 복잡하거나 앞선 결과에 따라 다음 작업이 달라지는 일도 수행한다. GPU는 많은 계산을 병렬로 실행하는 구조에 초점이 있다. 병렬 처리는 작업 여러 개를 동시에 진행한다는 뜻이다.

인텔의 설명에서도 두 장치는 단순한 우열 관계보다 설계 목적의 차이로 구분된다. CPU는 개별 작업의 응답 시간과 다양한 명령 처리에, GPU는 함께 처리할 수 있는 계산의 양에 강점이 있다. GPU를 사용하는 프로그램도 CPU에서 전체 흐름을 관리하고 일부 계산을 GPU로 넘길 수 있다.

따라서 GPU가 장착됐다고 모든 프로그램의 실행 시간이 같은 비율로 줄어드는 것은 아니다. 프로그램이 GPU를 활용하도록 만들어져 있어야 하고, 해당 계산도 병렬 처리에 적합해야 한다.

AI 계산과 그래픽 계산에는 어떤 공통점이 있을까?

신경망은 입력 숫자와 모델 내부의 가중치를 곱하고 더하는 계산을 반복한다. 가중치는 학습을 통해 조정되는 숫자다. 이 숫자들을 행과 열로 배열한 것이 행렬이며, 행렬 곱셈은 신경망의 주요 계산 중 하나다.

화면 처리와 신경망은 목적이 다르지만 많은 숫자에 반복 연산을 적용한다는 공통점이 있다. 그래서 그래픽 처리에서 발달한 병렬 계산 구조가 AI에도 활용된다.

엔비디아의 기술 문서는 GPU 성능을 연산 능력뿐 아니라 메모리 대역폭과 지연 시간으로 나누어 설명한다. 메모리 대역폭은 데이터를 일정 시간 동안 얼마나 많이 옮길 수 있는지를 뜻한다. 연산 장치가 계산할 숫자를 기다리면, 계산기 자체가 빨라도 전체 작업은 늦어진다.

계산 성능이 높은데도 실제 속도가 다른 이유

GPU 사양의 FLOPS는 초당 부동소수점 연산 횟수를 나타낸다. 부동소수점은 아주 작거나 큰 숫자를 표현하는 방식이다. 이 수치는 계산 능력을 설명하지만 프로그램의 실제 완료 시간을 그대로 알려주지는 않는다.

성능을 제한하는 부분실제로 일어나는 일
연산 처리 능력계산할 양이 많아 연산 장치가 계속 일함
메모리 대역폭필요한 숫자를 메모리에서 가져오는 속도가 계산을 제한함
지연 시간·작업 규모작업이 작거나 준비 과정의 비중이 커 장치를 충분히 활용하지 못함

표 근거: NVIDIA, GPU Performance Background

이 때문에 같은 GPU라도 실행하는 모델과 입력 크기에 따라 처리 속도가 달라질 수 있다. 최고 연산량 하나로 서로 다른 프로그램의 성능을 환산할 수 없는 이유다.

메모리 용량과 대역폭은 다른 숫자다

메모리 용량은 데이터를 담을 수 있는 공간의 크기이고, 대역폭은 데이터를 옮기는 속도다. 용량이 충분하다는 것과 연산 장치에 데이터를 빠르게 공급한다는 것은 서로 다른 조건이다.

GPU의 형태에 따라서도 메모리 구성이 달라진다. 인텔은 통합 그래픽을 CPU와 시스템 메모리를 공유하는 구조로, 독립 그래픽을 별도의 그래픽 메모리를 갖춘 구조로 구분한다. 따라서 제품 설명에서 ‘GPU 메모리’라고 할 때는 어떤 구조를 가리키는지도 함께 달라진다.

AI 모델 실행에는 모델 자체의 숫자뿐 아니라 계산 중 생기는 데이터도 필요하다. 모델 파일 크기와 실행에 필요한 전체 메모리가 항상 같은 값은 아니다. 엔비디아의 혼합 정밀도 문서 역시 가중치와 중간 계산값 등 여러 종류의 데이터를 구분한다.

FP16·FP32와 혼합 정밀도는 무슨 뜻일까?

FP16과 FP32는 숫자를 각각 16비트와 32비트 형식으로 표현한다는 뜻이다. 숫자를 표현하는 데 쓰는 정보량이 달라지면 메모리 사용량과 표현 가능한 범위, 계산의 오차 특성도 달라진다.

혼합 정밀도는 한 가지 형식만 고집하지 않고 계산 단계에 맞춰 여러 형식을 함께 쓰는 방법이다. 엔비디아의 학습 문서는 일부 연산에 낮은 정밀도를 사용하면서 필요한 부분은 높은 정밀도로 유지하는 방식을 설명한다.

학습 과정에서는 너무 작은 값이 제대로 표현되지 않는 문제도 생길 수 있다. 이를 완화하는 기법 중 하나가 손실 스케일링이다. 계산에 쓰이는 값을 확대해 처리한 뒤 다시 조정하는 방식이다. 따라서 낮은 정밀도를 사용한다는 말이 곧바로 ‘아무 숫자나 대충 계산한다’는 뜻은 아니다.

반대로 숫자 형식을 바꿨다고 모든 모델에서 같은 정확도와 속도 향상이 보장되는 것도 아니다. 학습 방법과 연산 지원, 평가 결과가 함께 관련된다.

계산은 빨라졌는데 파일을 옮기는 시간이 더 길다면

독립 GPU를 사용하는 계산에서는 CPU 쪽 메모리의 자료를 GPU 메모리로 보내고 결과를 다시 가져오는 과정이 생길 수 있다. GPU 내부에서 숫자를 읽는 속도와 CPU·GPU 사이에서 자료를 옮기는 속도는 다른 경로의 성능이다.

NVIDIA의 CUDA 문서는 두 행렬을 GPU로 옮겨 단순 덧셈을 한 뒤 결과를 다시 가져오는 사례를 든다. 이 경우 옮기는 자료에 비해 계산할 일이 적어 큰 이득이 없을 수 있다. 같은 행렬을 이용해 더 많은 연산을 수행하는 곱셈에서는 계산과 이동의 비중이 달라진다.

중간 결과를 GPU에 남기는 경우와 매번 CPU로 가져오는 경우도 다르다. 문서는 개별 계산의 속도뿐 아니라 왕복 이동을 포함한 전체 시간을 구분한다.

GPU 메모리 대역폭을 컴퓨터 전체의 속도로 읽을 수 없는 이유

제품에 적힌 메모리 대역폭은 어떤 두 지점 사이의 이동량인지가 중요하다. GPU와 연결 메모리 사이의 수치가 곧 저장장치에서 파일을 읽는 속도나 다른 컴퓨터와 통신하는 속도를 뜻하지 않는다.

CUDA 문서는 데이터를 작은 단위로 여러 번 보내는 것과 묶어서 보내는 것도 구분한다. 전송마다 준비 비용이 발생하기 때문이다. 결국 AI 작업의 시간에는 계산 자체뿐 아니라 자료 준비와 이동이 함께 들어간다. 사양표의 최고 연산 성능과 실제 프로그램 완료 시간이 다른 이유를 이 과정에서 확인할 수 있다.

AI 성능 시험은 왜 조건을 나눌까?

MLCommons의 MLPerf 추론 벤치마크는 요청을 보내는 방식과 측정 지표를 구분한다. 처리량은 일정 시간에 처리한 작업의 양이고, 지연 시간은 요청이 결과를 받기까지 걸린 시간이다. 많은 작업을 한꺼번에 처리하는 능력과 개별 요청에 빨리 응답하는 능력은 같은 측정이 아니다.

전력 측정에서도 해당 시험은 장치 한 개의 표시 전력 대신 시험 중 전체 시스템이 소비한 전력을 측정하는 방식을 설명한다. GPU 제품 사양과 실제 시스템의 전력·성능 결과가 다른 범위의 숫자인 셈이다.

GPU가 AI 산업에서 중요한 이유는 모델의 반복 계산을 병렬로 처리할 수 있기 때문이다. 그러나 실제 AI 서비스의 속도는 GPU의 연산 능력만으로 정해지지 않는다. 데이터 이동, 메모리 구성, 숫자 형식, 실행 프로그램과 시험 조건이 함께 결과를 만든다.

참고자료