LLM 추론 최적화를 위한 GPU 아키텍처 이해
게시 됨: 2024-04-02LLM 소개 및 GPU 최적화의 중요성
오늘날 자연어 처리(NLP)가 발전하는 시대에 LLM(대형 언어 모델)은 텍스트 생성부터 질문 답변 및 요약에 이르기까지 수많은 작업을 위한 강력한 도구로 등장했습니다. 이는 차세대 토큰 생성기 그 이상입니다. 그러나 이러한 모델의 복잡성과 크기가 증가함에 따라 계산 효율성과 성능 측면에서 심각한 문제가 발생합니다.
이 블로그에서는 GPU 아키텍처의 복잡성을 조사하고 다양한 구성 요소가 LLM 추론에 어떻게 기여하는지 살펴봅니다. 메모리 대역폭 및 텐서 코어 활용도와 같은 주요 성능 지표에 대해 논의하고 다양한 GPU 카드 간의 차이점을 설명하여 대규모 언어 모델 작업을 위한 하드웨어를 선택할 때 정보에 입각한 결정을 내릴 수 있도록 돕습니다.
NLP 작업에 점점 더 많은 계산 리소스가 요구되는 빠르게 발전하는 환경에서는 LLM 추론 처리량을 최적화하는 것이 무엇보다 중요합니다. GPU 최적화 기술을 통해 LLM의 잠재력을 최대한 활용하고 성능을 효과적으로 향상시킬 수 있는 다양한 도구를 탐구하기 위한 이 여정에 참여하세요.
LLM을 위한 GPU 아키텍처 필수 사항 - GPU 내부를 파악하세요
매우 효율적인 병렬 계산을 수행한다는 특성상 GPU는 모든 딥 러닝 작업을 실행하기 위해 선택되는 장치가 되므로 추론 단계에서 발생하는 기본 병목 현상을 이해하려면 GPU 아키텍처의 높은 수준의 개요를 이해하는 것이 중요합니다. Nvidia 카드는 NVIDIA가 개발한 독점 병렬 컴퓨팅 플랫폼이자 API인 CUDA(Compute Unified Device Architecture)로 인해 선호됩니다. 이를 통해 개발자는 C 프로그래밍 언어로 스레드 수준 병렬 처리를 지정하고 GPU의 가상 명령어 세트 및 병렬 처리에 직접 액세스할 수 있습니다. 계산 요소.
맥락에서 우리는 설명을 위해 NVIDIA 카드를 사용했습니다. 이미 언급한 것처럼 딥 러닝 작업에 널리 선호되고 Tensor 코어와 같은 다른 용어가 여기에 적용 가능하기 때문입니다.
GPU 카드를 살펴보겠습니다. 여기 이미지에서는 GPU 장치의 세 가지 주요 부분과 (하나 이상의 주요 숨겨진 부분)을 볼 수 있습니다.
- SM(스트리밍 멀티프로세서)
- L2 캐시
- 메모리 대역폭
- 글로벌 메모리(DRAM)
CPU-RAM이 함께 작동하는 것처럼 RAM은 데이터 저장(즉, 메모리)을 위한 장소이고 CPU는 작업 처리(즉, 프로세스)를 위한 장소입니다. GPU에서 고대역폭 글로벌 메모리(DRAM)는 메모리에 로드되는 모델(예: LLAMA 7B) 가중치를 보유하고 필요할 경우 이러한 가중치는 계산을 위해 처리 장치(예: SM 프로세서)로 전송됩니다.
스트리밍 멀티프로세서
스트리밍 멀티프로세서 또는 SM은 명령 가져오기, 디코딩, 스케줄링 및 디스패치를 담당하는 추가 기능 단위와 함께 CUDA 코어(NVIDIA의 독점 병렬 컴퓨팅 플랫폼)라고 하는 더 작은 실행 단위의 모음입니다. 각 SM은 독립적으로 작동하며 자체 레지스터 파일, 공유 메모리, L1 캐시 및 텍스처 유닛을 포함합니다. SM은 고도로 병렬화되어 수천 개의 스레드를 동시에 처리할 수 있으며, 이는 GPU 컴퓨팅 작업에서 높은 처리량을 달성하는 데 필수적입니다. 프로세서의 성능은 일반적으로 FLOPS로 측정됩니다. 부동 작업을 매 초마다 수행할 수 있습니다.
딥 러닝 작업은 대부분 텐서 연산, 즉 행렬-행렬 곱셈으로 구성됩니다. NVIDIA는 이러한 텐서 연산을 매우 효율적인 방식으로 수행하도록 특별히 설계된 차세대 GPU에 텐서 코어를 도입했습니다. 앞서 언급했듯이 텐서 코어는 딥 러닝 작업에 유용하며 CUDA 코어 대신 텐서 코어를 확인하여 GPU가 LLM의 훈련/추론을 얼마나 효율적으로 수행할 수 있는지 확인해야 합니다.
L2 캐시
L2 캐시는 시스템 내에서 메모리 액세스 및 데이터 전송 효율성을 최적화하기 위해 SM 간에 공유되는 고대역폭 메모리입니다. 이는 DRAM에 비해 처리 장치(예: 스트리밍 멀티프로세서)에 더 가깝게 위치하는 더 작고 빠른 유형의 메모리입니다. 이는 모든 메모리 요청에 대해 더 느린 DRAM에 액세스해야 하는 필요성을 줄여 전반적인 메모리 액세스 효율성을 향상시키는 데 도움이 됩니다.
메모리 대역폭
따라서 성능은 메모리에서 프로세서로 가중치를 얼마나 빨리 전송할 수 있는지, 그리고 프로세서가 주어진 계산을 얼마나 효율적이고 빠르게 처리할 수 있는지에 따라 달라집니다.
컴퓨팅 용량이 메모리에서 SM으로의 데이터 전송 속도보다 높거나 빠른 경우 SM은 처리할 데이터가 부족하여 컴퓨팅이 제대로 활용되지 않습니다. 메모리 대역폭이 소비 속도보다 낮은 상황을 메모리 바인딩 단계라고 합니다. . 이는 추론 프로세스에서 일반적인 병목 현상이므로 주의해야 합니다.
반대로, 계산이 처리하는 데 더 많은 시간이 걸리고 더 많은 데이터가 계산을 위해 대기하는 경우 이 상태는 계산 바인딩 단계입니다.
GPU를 최대한 활용하려면 계산 바인딩 상태에 있어야 하며 동시에 발생하는 계산을 최대한 효율적으로 수행해야 합니다.
DRAM 메모리
DRAM은 GPU의 기본 메모리 역할을 하며, 계산에 필요한 데이터와 명령을 저장하기 위한 대규모 메모리 풀을 제공합니다. 이는 일반적으로 고속 액세스를 가능하게 하는 여러 메모리 뱅크와 채널을 갖춘 계층 구조로 구성됩니다.
추론 작업의 경우 GPU의 DRAM은 로드할 수 있는 모델의 크기를 결정하고 FLOPS 및 대역폭 계산에 따라 얻을 수 있는 처리량을 결정합니다.
LLM 작업을 위한 GPU 카드 비교
텐서 코어 수, 대역폭 속도에 대한 정보를 얻으려면 GPU 제조업체가 발표한 백서를 통해 확인할 수 있습니다. 여기에 예가 있습니다.
RTX A6000 | RTX 4090 | RTX 3090 | |
메모리 크기 | 48GB | 24GB | 24GB |
메모리 유형 | GDDR6 | GDDR6X | |
대역폭 | 768.0GB/초 | 1008GB/초 | 936.2GB/초 |
CUDA 코어/GPU | 10752 | 16384 | 10496 |
텐서 코어 | 336 | 512 | 328 |
L1 캐시 | 128KB(SM당) | 128KB(SM당) | 128KB(SM당) |
FP16 비텐서 | 38.71 테플롭스(1:1) | 82.6 | 35.58 테플롭스(1:1) |
FP32 비텐서 | 38.71테라플롭스 | 82.6 | 35.58테라플롭스 |
FP64 비텐서 | 1,210GFLOPS(1:32) | 556.0GFLOPS (1:64) | |
FP16 누적을 통한 피크 FP16 텐서 TFLOPS | 154.8/309.6 | 330.3/660.6 | 142/284 |
FP32 누적을 사용한 피크 FP16 텐서 TFLOPS | 154.8/309.6 | 165.2/330.4 | 71/142 |
FP32를 사용한 피크 BF16 텐서 TFLOPS | 154.8/309.6 | 165.2/330.4 | 71/142 |
피크 TF32 텐서 TFLOPS | 77.4/154.8 | 82.6/165.2 | 35.6/71 |
피크 INT8 텐서 TOPS | 309.7/619.4 | 660.6/1321.2 | 284/568 |
피크 INT4 텐서 TOPS | 619.3/1238.6 | 1321.2/2642.4 | 568/1136 |
L2 캐시 | 6MB | 72MB | 6MB |
메모리 버스 | 384비트 | 384비트 | 384비트 |
TMU | 336 | 512 | 328 |
ROP | 112 | 176 | 112 |
SM 수 | 84 | 128 | 82 |
RT 코어 | 84 | 128 | 82 |
여기에서 FLOPS가 Tensor 작업에 대해 특별히 언급된 것을 볼 수 있습니다. 이 데이터는 다양한 GPU 카드를 비교하고 사용 사례에 적합한 카드를 선택하는 데 도움이 됩니다. 표에서 볼 때 A6000은 4090의 두 배 메모리를 가지고 있지만 4090의 텐서 플롭과 메모리 대역폭은 숫자상으로 더 우수하므로 대규모 언어 모델 추론에 더 강력합니다.
추가 자료: 100초 안에 살펴보는 Nvidia CUDA
결론
빠르게 발전하는 NLP 분야에서 추론 작업을 위한 LLM(대형 언어 모델)의 최적화가 중요한 초점 영역이 되었습니다. 우리가 살펴보았듯이 GPU 아키텍처는 이러한 작업에서 높은 성능과 효율성을 달성하는 데 중추적인 역할을 합니다. LLM 추론 프로세스에서 잠재적인 병목 현상을 식별하려면 SM(스트리밍 멀티프로세서), L2 캐시, 메모리 대역폭 및 DRAM과 같은 GPU의 내부 구성 요소를 이해하는 것이 필수적입니다.
다양한 NVIDIA GPU 카드(RTX A6000, RTX 4090 및 RTX 3090)를 비교하면 무엇보다도 메모리 크기, 대역폭, CUDA 및 Tensor 코어 수 측면에서 상당한 차이가 있음을 알 수 있습니다. 이러한 구별은 특정 LLM 작업에 가장 적합한 GPU가 무엇인지에 대한 정보를 바탕으로 결정을 내리는 데 중요합니다. 예를 들어, RTX A6000은 더 큰 메모리 크기를 제공하지만 RTX 4090은 Tensor FLOPS 및 메모리 대역폭 측면에서 탁월하므로 까다로운 LLM 추론 작업에 더욱 강력한 선택이 됩니다.
LLM 추론을 최적화하려면 GPU의 계산 용량과 현재 LLM 작업의 특정 요구 사항을 모두 고려하는 균형 잡힌 접근 방식이 필요합니다. 올바른 GPU를 선택하려면 메모리 용량, 처리 능력 및 대역폭 간의 균형을 이해하여 GPU가 병목 현상 없이 모델의 가중치를 효율적으로 처리하고 계산을 수행할 수 있도록 해야 합니다. NLP 분야가 계속 발전함에 따라 최신 GPU 기술과 그 기능에 대한 정보를 얻는 것은 대규모 언어 모델로 가능한 것의 경계를 넓히려는 사람들에게 가장 중요할 것입니다.
사용된 용어
- 처리량:
추론의 경우 처리량은 특정 기간 동안 처리된 요청/프롬프트 수를 측정한 것입니다. 처리량은 일반적으로 두 가지 방법으로 측정됩니다.
- 초당 요청(RPS) :
- RPS는 모델이 1초 내에 처리할 수 있는 추론 요청 수를 측정합니다. 추론 요청에는 일반적으로 입력 데이터를 기반으로 응답 또는 예측을 생성하는 작업이 포함됩니다.
- LLM 생성의 경우 RPS는 모델이 들어오는 프롬프트나 쿼리에 얼마나 빨리 응답할 수 있는지를 나타냅니다. RPS 값이 높을수록 실시간 또는 거의 실시간 애플리케이션에 대한 응답성과 확장성이 향상됩니다.
- 높은 RPS 값을 달성하려면 여러 요청을 일괄 처리하여 오버헤드를 상각하고 계산 리소스 활용도를 극대화하는 등의 효율적인 배포 전략이 필요한 경우가 많습니다.
- 초당 토큰(TPS) :
- TPS는 모델이 텍스트 생성 중에 토큰(단어 또는 하위 단어)을 처리하고 생성할 수 있는 속도를 측정합니다.
- LLM 생성의 맥락에서 TPS는 텍스트 생성 측면에서 모델의 처리량을 반영합니다. 이는 모델이 일관되고 의미 있는 응답을 얼마나 빨리 생성할 수 있는지를 나타냅니다.
- TPS 값이 높을수록 텍스트 생성 속도가 빨라지므로 모델이 주어진 시간 내에 더 많은 입력 데이터를 처리하고 더 긴 응답을 생성할 수 있습니다.
- 높은 TPS 값을 달성하려면 종종 모델 아키텍처 최적화, 계산 병렬화, GPU와 같은 하드웨어 가속기를 활용하여 토큰 생성을 가속화해야 합니다.
- 지연 시간:
LLM의 지연 시간은 추론 중 입력과 출력 사이의 시간 지연을 나타냅니다. LLM을 활용하는 애플리케이션에서 사용자 경험을 향상하고 실시간 상호 작용을 활성화하려면 대기 시간을 최소화하는 것이 필수적입니다. 제공해야 하는 서비스에 따라 처리량과 대기 시간 간의 균형을 유지하는 것이 중요합니다. 실시간 상호 작용 챗봇/부조종사와 같은 경우에는 짧은 대기 시간이 바람직하지만 내부 데이터 재처리와 같은 대량 데이터 처리 사례에는 필요하지 않습니다.
여기에서 LLM 처리량 향상을 위한 고급 기술에 대해 자세히 알아보세요.