NVIDIA H100으로 Llama 2 70B 가속화하기
가속화된 LLM 추론의 여정

Perplexity의 답변 엔진에 대한 성능 추구는 NVIDIA와 AWS가 제공하는 최신 기술을 도입하도록 이끕니다. 이 블로그에서는 다양한 하드웨어 및 소프트웨어 설정 전반에 걸친 Llama 2 70B 추론 비교라는 최신 실험 결과를 공유하게 되어 기쁩니다.
당사의 LLM 추론 플랫폼인 pplx-api는 오픈 소스 라이브러리로 구동되는 최첨단 스택을 기반으로 구축되었습니다. 10월에 pplx-api의 공개 베타가 시작된 이후, 당사는 확장성 문제를 해결하고 대규모 확장을 달성하기 위해 구성을 최적으로 조정하는 방법을 학습해 왔습니다. 이는 다음의 핵심 질문을 가지고 실험을 수행하게 된 계기가 되었습니다.
다른 모든 설정이 동일한 상태에서 GPU를 NVIDIA A100에서 NVIDIA H100으로 교체할 경우 얻을 수 있는 순수 성능 향상은 어느 정도입니까?
H100에서 기본적으로 지원하는 8비트 부동 소수점(fp8) 양자화의 효율성 향상은 어느 정도입니까? 이러한 양자화로 인한 정확도 손실은 얼마입니까?
텐서 병렬 처리 및 배치 크기가 지연 시간과 토큰 처리량에 어떤 영향을 미칩니까?
위의 내용을 고려할 때, 성능과 비용 효율성 측면에서 가장 확장 가능한 균형을 제공하는 구성은 무엇입니까?
실험 설정
당사는 네트워크 지연을 방지하기 위해 일련의 로컬 벤치마크로서 다음 실험을 수행했습니다.
핵심 지표:
지연 시간: 추론 서버가 전체 응답을 생성하는 데 걸리는 총 시간입니다.
처리량: 추론 서버가 모든 사용자와 요청에 걸쳐 초당, GPU당 생성할 수 있는 출력 토큰의 수입니다.
상수:
다음 요소들은 핵심 지표에 영향을 미치므로 실험의 여러 시행 전반에 걸쳐 일관되게 유지했습니다.
AI 모델
성능은 LLM의 크기에 따라 확장됩니다. 파라미터가 많을수록 더 많은 계산이 필요하여 추론 속도가 느려집니다. 예를 들어, 다른 설정이 동일하다면 Llama 2 13B가 Llama 2 70B보다 빠릅니다. 당사는 가장 유능한 오픈 소스 모델을 서비스하기 위해 최적화하고자 하므로 이 실험에서는 Llama 2 70B를 사용합니다.
입력/출력 토큰 데이터 세트
각 샘플 요청/응답 쌍의 입력 및 출력 토큰 양은 성능 측정에 영향을 줄 수 있습니다. 일반적으로 출력 토큰 생성이 전체 응답 시간을 결정합니다. 데이터 샘플링이 LLM으로부터 "예/아니오" 응답만 유도하는 경우, LLM에게 에세이 작성을 요청하는 샘플보다 응답 속도가 빠릅니다. 당사의 데이터 세트는 1024개의 입력 토큰으로 512개의 출력 토큰을 유도하는 합성 요청으로 구성되어 있습니다. 이 분포는 Llama 2 70B의 공개 배포에서 관찰된 트래픽 분포와 일치하도록 선택되었습니다.
소프트웨어 버전
NVIDIA TensorRT-LLM (릴리스 v0.5.0)은 LLM 추론 최적화를 위한 오픈 소스 라이브러리입니다. 2023년 말에 출시된 이 라이브러리는 NVIDIA의 다양한 추론 최적화 기술을 종합하며, 이 실험의 핵심 파라미터인 배치 크기, 양자화 및 텐서 병렬 처리에 대한 유연한 사용자 지정 계층을 제공합니다.
변수
당사는 텐서 병렬 처리, GPU 아키텍처, 양자화 및 최대 배치 크기라는 4가지 구성 축 전반에 걸쳐 실험했습니다. 이 축들은 각각 GPU 메모리라는 중요한 병목 자원과 관련하여 트레이드오프를 나타내기 때문에 서로 연결되어 있습니다.
GPU 아키텍처
9세대 Hopper(H100-HBM3-80GB / p5.48xlarge) GPU 아키텍처는 이전 세대인 Ampere(A100-SXM4-80GB / p4de.24xlarge)에 비해 2~6배의 계산 속도와 거의 2배에 달하는 GPU 메모리 대역폭을 포함한 수많은 기능을 제공합니다. 추론의 주요 지연 병목 현상은 기가바이트 단위의 모델 데이터를 GPU 메모리에서 계산 레지스터로 로드하는 데서 발생하기 때문에, GPU 메모리 대역폭은 추론에 있어 매우 중요한 지표입니다. 이러한 통계를 바탕으로 당사는 NVIDIA H100과 A100을 동일하게 비교할 경우 지연 시간과 처리량 모두에서 2배의 향상이 나타날 것이라고 가설을 세웠습니다.
NVIDIA H100과 A100의 또 다른 주요 차이점은 H100 텐서 코어가 8비트 부동 소수점(fp8) 명령어를 기본적으로 지원하여 아래에 자세히 설명된 추가 최적화의 가능성을 열어준다는 점입니다. 이것이 바로 H100을 위해 특별히 fp8과 fp16을 사용하는 이유입니다.
이 실험에서 GPU당 메모리를 일관되게 유지하기 위해, NVIDIA A100과 H100 모두 8x80GB GPU 메모리를 갖춘 노드를 사용했습니다. 더 높은 배치 크기를 가능하게 하는 것 외에도, 서버 시작 시 빠른 액세스를 위해 모델의 파라미터가 GPU 메모리에 로드되기 때문에 GPU 메모리는 중요합니다. 예를 들어, 모델의 700억 개 파라미터가 각각 16비트 부동 소수점 숫자라면 모델 크기는 약 140GB이며, 이는 단일 GPU에 들어가지 않습니다. 따라서 아래에서 설명할 텐서 병렬 처리가 필요합니다.
텐서 병렬 처리
텐서 병렬 처리는 추론 서버를 실행하는 데 사용되는 GPU 장치의 수를 의미합니다. 당사가 일정 수의 GPU를 할당하면 TensorRT-LLM은 해당 리소스를 통합하여 Llama 2 70B를 실행하는 데 필요한 최소 메모리 예산을 충족하도록 돕습니다. 당사의 가설은 텐서 병렬 처리가 낮을수록 지연 시간은 길어지지만(각 배치를 충족하기 위해 소비되는 리소스가 적기 때문), 높은 텐서 병렬 처리와 비교했을 때 GPU당 처리량은 더 높아질(더 나은 활용도 때문) 것이라는 점입니다.
양자화
양자화는 신경망에서 사용되는 가중치와 활성화의 정밀도를 줄이는 것입니다. 당사는 fp16에서 fp8로 전환할 때 GPU 메모리 소비를 절반으로 줄이기 위해 이 기술을 사용합니다. 이를 통해 더 낮은 총 GPU 메모리 사용량으로 동일한 모델을 실행할 수 있으며, 더 낮은 텐서 병렬 처리가 가능해져 처리량이 증가합니다.
양자화 구현은 정확도를 저하시킬 가능성이 있습니다. 따라서 당사는 WikiText 말뭉치에서 LLM이 문장의 다음 토큰을 얼마나 잘 예측하는지 측정하는 척도인 퍼플렉서티(perplexity) 통계를 비교하여 다양한 정밀도에 대한 정확도를 평가했습니다. 8비트 부동 소수점 및 8비트 가중치와 8비트 활성화 및 SmoothQuant(w8a8 SQ)의 경우, WikiText에서 fp16과 비교했을 때 퍼플렉서티에 유의미한 변화(< 1%)가 없었으므로 진행해도 좋다고 확신했습니다. 그러나 w4a16은 퍼플렉서티에서 상당한 7% 변화를 보였는데, 이는 훨씬 낮은 정밀도와 int4와 fp16 간의 필수적인 동적 변환 때문일 가능성이 있습니다.
배치 크기
배치 처리를 통한 병렬화는 자원이 제한된 시스템에서 성능을 짜내기 위한 고전적인 전략입니다. 신경망을 통과하는 각 순방향 패스에서 여러 요청을 처리함으로써 배치 처리는 약간의 지연 시간을 대가로 처리량을 증가시키는 것으로 알려져 있습니다. 또한 배치 처리는 어텐션 메커니즘을 관리하는 KV 캐시의 크기가 배치 크기에 비례하여 증가하기 때문에 더 높은 GPU 메모리 소비를 초래합니다.
Llama 2 70B(80개 레이어)의 경우, 4096 컨텍스트 크기에 대해 배치 크기 32를 사용하는 fp16에서는 KV 캐시 크기가 40GB에 달합니다. 이로 인해 가중치만 140GB를 차지하는 Llama 2 70B fp16이 텐서 병렬 처리 2(TP-2)에서 사용 가능한 160GB GPU 메모리에 여유 있게 들어가지 못하게 됩니다.
결과
당사는 실험의 4가지 변수의 호환 가능한 조합을 훑어보고 가장 통찰력 있는 추세를 아래에 제시합니다.
양자화의 지연 시간 개선은 H100 fp16 → fp8과 A100 fp16 → SmoothQuant를 사용한 w8a8을 비교할 때 약 10% 정도입니다. 그러나 혼합 정밀도 w4a16은 fp16에 비해 낮은 배치 크기에서는 실제로 더 나은 성능을 보이지만, 더 높은 배치 크기에서는 더 나쁜 성능을 보입니다. 이는 최적화가 덜 된 계산 커널, int4와 fp16 간의 캐스팅 시간, 그리고 w4a16이 여전히 활성화에 16비트 부동 소수점을 사용하여 KV 캐시 크기에서 절감 효과가 없다는 사실 등 여러 요인 때문일 수 있습니다. w4a16 역시 더 낮은 정확도를 보였기 때문에, 당사는 A100에는 w8a8 SQ를, H100에는 fp8을 고수해야 한다는 결론을 내렸습니다.
처음 두 그림에서는 TP-8 구성만 제시합니다. H100은 둘 다 fp16 / BS-128 / TP-8을 사용할 때 A100 대비 54%의 지연 시간과 184% 의 처리량을 달성하며, H100에서 fp8을 사용하면 49%의 지연 시간과 202%의 처리량으로 향상됩니다. 이러한 성능 향상은 H100과 A100 사이의 계산 능력 및 메모리 대역폭 증가에 기인합니다. 주목할 점은 활용도가 낮을 수 있는 낮은 배치 크기에서는 이러한 차이가 덜 두드러진다는 것입니다.
당사는 플랫폼을 구축하면서 처리량을 극대화하는 동시에 사용자에게 특정 지연 시간 요구 사항을 충족하고자 합니다. 따라서 A100과 H100을 동일한 배치 크기에서 비교하기보다, 지연 시간 요구 사항을 충족하는 구성 하에서만 처리량을 비교하는 것이 더 합리적입니다. 당사는 512개의 출력 토큰 완료에 대해 25600ms 지연 시간으로 제한을 설정했으며, H100 / TP-8 / fp8 / BS-128이 A100 / TP-8 / fp16 / BS-64 대비 251%의 처리량을 제공한다는 것을 발견했습니다. 이는 더 낮은 지연 시간에서 두 배의 배치 크기를 처리할 수 있기 때문입니다. 양자화가 GPU 메모리 절감을 제공한다는 점을 고려할 때, 이제 텐서 병렬 처리가 어떻게 최적화의 다음 단계를 추가할 수 있는지 평가해야 합니다.
양자화와 아키텍처에 관해서는 명확한 승자가 있습니다. H100이 A100을 압도하며 저정밀도 양자화는 메모리 활용도, 지연 시간 및 처리량을 향상시킵니다. 그러나 배치 크기와 텐서 병렬 처리는 당사의 핵심 지표에서 트레이드오프를 보여줍니다. 더 큰 배치 크기는 지연 시간 증가와 메모리 소비를 대가로 처리량을 최적화합니다. 반면에 더 높은 텐서 병렬 처리는 전체 사용 가능한 메모리 풀을 증가시켜 지연 시간을 최적화하지만, 분산 행렬 곱셈의 동기화 비용과 더 많은 GPU 자원을 점유함으로써 처리량과 트레이드오프 관계를 가집니다.
당사 실험의 처리량 극대화 구성은 GPU당 초당 767개의 출력 토큰을 기록한 H100 / fp8 / TP-2 / BS-128입니다. 이는 A100 / fp16 / TP-8 / BS-64 대비 460% 향상된 수치입니다. 그러나 이는 지연 시간 두 배라는 대가를 치러야 하며, 512개의 출력 토큰에 대해 약 42000ms에 가까워져 프로덕션 구성으로는 부적합할 수 있습니다. TP-4 BS-128(26188ms 응답 시간에 626 tok/sec/gpu)과 TP-2 BS-32(18821ms 응답 시간에 435 tok/sec/gpu)의 결과가 핵심 지표에서 더 나은 트레이드오프를 나타낼 수 있습니다.
결론
당사의 결과는 다음을 증명합니다:
동일한 구성에서 A100 대비 H100을 사용하면 54%의 지연 시간과 184%의 처리량에 도달하며, H100이 fp8에 대한 기본 지원을 활용할 때 각각 49% 및 202%로 향상됩니다.
지연 시간 제약 조건 하에서 처리량을 극대화할 때, H100 / fp8 / TP-8 / BS-128은 A100 / fp16 / TP-8 / BS-64 대비 251%의 처리량을 제공하는데, 이는 더 빠른 속도로 두 배의 배치를 처리할 수 있기 때문입니다.
TP-2와 fp8을 사용하는 H100을 활용하면, A100 / fp16 / TP-8 / BS-128 처리량의 373%를 달성할 수 있으며, 지연 시간은 10% 미만으로 증가합니다.
배치 크기와 텐서 병렬 처리는 LLM 추론 시스템 운영자에게 처리량과 지연 시간 사이의 트레이드오프를 제시합니다.
이러한 결과로 당사는 기존에 A100으로 구동되던 하드웨어 스택을 H100 GPU로 완전히 전환하는 것에 대해 자신감을 갖게 되었습니다. NVIDIA가 광고한 성능 향상을 확인할 수 있게 되어 기쁘며, 가속 하드웨어 분야의 다음 혁신을 기대합니다.
다음 단계
최적화를 위한 당사의 다음 개척지는 구조화된 희소성(structured sparsity) 및 int4 정밀도가 Llama 2 70B의 GPU 메모리 풋프린트를 크게 줄이고 최대 2배의 지연 시간 개선을 이끌어낼 수 있는 정확도 및 성능 영향을 조사하는 것입니다. 당사는 매우 빠른 추론의 여정을 계속하게 되어 기쁘며, 사용자들이 당사 플랫폼 위에서 강력한 애플리케이션을 구축할 수 있도록 지원하기를 희망합니다.
단기적으로 pplx-api는 속도 제한을 해제하고, 사실 확인을 위한 인터넷 기반 LLM을 포함하여 더 많은 맞춤형 Perplexity LLM을 제공할 예정입니다.
perplexity.ai/pro에서 Perplexity Pro에 가입하세요. 최첨단 pplx-api에 액세스하고 프로젝트에서 이러한 고급 기능을 활용하세요. 당사 블로그에서 pplx-api에 대해 자세히 알아보세요.
AI의 미래를 형성하는 데 관심이 있으신가요? 채용 중입니다! 대규모 생성형 LLM 인프라를 주도하는 팀의 일원이 되어보세요. Perplexity Careers에서 기회를 살펴보세요.
저자:
Aarash Heydari, Grigorii Alekseev, Kevin Hu, Denis Yarats