LLM 추론을 위한 최적의 GPU 선택 방법: 벤치마킹 인사이트

LLM 추론을 위한 최적의 GPU 선택 방법: 벤치마킹 인사이트

주요 내용

  • 높은 추론 비용: 대규모 모델 추론 비용은 전반적으로 감소하고 있지만 여전히 높아서 확장성을 제한합니다.
  • GPU 선택의 어려움: 다양한 GPU의 존재로 인해 선택 과정이 복잡해지며, 종종 피상적인 지표에 기반한 최적이 아닌 선택으로 이어집니다.
  • 객관적인 평가 프레임워크: 표준화된 평가 방법은 특정 비즈니스 요구에 맞는 비용 효율적인 GPU 솔루션을 식별하는 데 도움을 줍니다.
  • 성능 지표: 사용자 경험 최적화를 위해 지연 시간(첫 토큰까지의 시간, TTFT)과 처리량(초당 토큰 수, TPS)에 집중하세요.
  • 비용 효율성 분석: 백만 토큰당 비용을 성능 지표와 함께 평가하면 솔루션을 효과적인 사분면으로 명확히 분류할 수 있습니다.
  • 실제 테스트: 주요 GPU(H100, A100, RTX 4090)에서 인기 모델(Llama 3.1 시리즈)을 테스트하여 실행 가능한 인사이트를 도출했습니다.
  • 모범 사례: 추론 하드웨어 선택 및 엔진 최적화에 대한 권장 사항으로 효율성을 높이고 비용을 절감할 수 있습니다.
  • Novita AI 살펴보기: 대규모 모델 추론 서비스에 대해 더 알아보려면 Novita AI를 방문하세요.

소개

대규모 모델 추론 비용은 지속적으로 감소하고 있지만 여전히 상당히 높으며, 추론 속도와 사용 비용이 운영의 확장성을 심각하게 제한합니다. 대규모 모델 추론 서비스를 제공하는 입장에서 우리는 추론 속도 향상과 추론 비용 절감에 지속적으로 투자하고 있습니다.

우리는 추론 하드웨어 선택과 추론 엔진 최적화를 깊이 탐구하여 고객에게 가장 비용 효율적인 추론 솔루션을 제공합니다. 이 글에서는 추론 하드웨어를 선택하기 위한 이론적 방법과 모범 사례를 소개하고, 우리의 예비 결론을 제시합니다.

대규모 모델 추론에 사용 가능한 GPU는 매우 다양하여 특정 비즈니스 요구에 맞는 GPU를 찾기가 어렵습니다. 운영을 배포할 때, 다양한 GPU로 인해 혼란스러워지기 쉬우며, GPU 컴퓨팅 성능, 메모리 용량, 대역폭, 가격과 같은 지표를 단순히 정적으로 비교하게 됩니다. 이렇게 GPU가 매력적으로 보인다는 주관적인 인식에 기반하여 GPU를 선택하는 접근 방식은 크게 잘못된 방향으로 이끌 수 있으며 비즈니스 결과에 부정적인 영향을 미칠 수 있습니다.

우리도 초기 단계에서 이 문제를 겪었습니다. 그러나 비즈니스의 성장과 확장에 따라 점차 객관적이고 공정한 GPU 평가 기준과 그에 상응하는 평가 방법을 개발하게 되었습니다. 이 표준화된 접근 방식을 수많은 평가를 통해 사용함으로써, 다양한 비즈니스 요구에 맞는 가장 비용 효율적인 솔루션을 다양한 GPU 중에서 식별할 수 있습니다. 여기에 최적화된 추론 엔진을 결합하여 궁극적으로 고객에게 빠르면서도 비용 효율적인 대규모 모델 추론 서비스를 제공합니다.

평가 접근 방식

간단히 말해, "최고의 비용 효율적인 GPU"는 두 가지 기준을 충족해야 합니다: 가장 낮은 가격과 가장 높은 성능. 평가를 시작하기 전에 이러한 기준을 정확히 정의합니다.

가장 낮은 가격 정의

가장 낮은 가격은 GPU 하드웨어 비용이나 데이터 센터의 클라우드 서버 임대 비용이 아니라 추론 서비스 비용입니다. 이는 Model API 사용 시 공식 웹사이트에 표시되는 가격으로, 소비된 백만 토큰당 비용(백만 토큰당 달러)으로 정의됩니다. 값이 낮을수록 가격이 낮음을 의미합니다.

최고 성능 이해

최고 성능은 대규모 모델 추론의 속도를 의미하며, 높을수록 좋습니다. 이는 일반적으로 지연 시간과 처리량이라는 두 가지 하위 지표를 포함하는 모델 성능과 구별하는 것이 중요합니다.

지연 시간 및 처리량 지표

  • 지연 시간: 첫 토큰까지의 시간(TTFT)을 측정하며, 사용자가 요청을 시작한 후 첫 번째 토큰을 받을 때까지 기다리는 시간입니다.
  • 처리량: 첫 번째 토큰 이후 초당 평균 수신 토큰 수(TPS)를 나타냅니다.

평가 방법론

평가를 비즈니스 요구에 맞추기 위해 평가 중에는 추론 시스템을 블랙박스로 간주하고, 시스템의 입력과 출력을 기반으로 지연 시간과 처리량을 계산합니다. 아래 다이어그램은 지연 시간과 처리량이 어떻게 계산되는지 보여줍니다.

핵심 고려 사항

  • 지연 시간이 낮고 처리량이 높을수록 추론 성능이 좋음을 나타냅니다.
  • 실제 시나리오에서는 처리량이 지연 시간보다 훨씬 더 중요합니다.

key considerations

요청 관리

일반적으로 지연 시간이 낮고 처리량이 높을수록 추론 성능이 좋습니다. 그러나 실제 시나리오에서는 처리량이 지연 시간보다 훨씬 더 중요합니다.

지연 시간이 2초 미만으로 유지되는 한 사용자는 이에 크게 민감하지 않습니다. 첫 번째 토큰을 보기 위해 몇 밀리초를 더 기다리더라도 경험에 눈에 띄는 영향을 미치지 않습니다.

반면, 처리량의 변화는 사용자 경험에 큰 영향을 미치므로 사용자는 처리량이 더 높은 시스템을 선호합니다. 따라서 추론 솔루션의 성능 지표를 평가할 때는 지연 시간을 허용 가능한 범위 내로 유지하면서 처리량 차이를 비교하는 데 중점을 둡니다.

실제 운영에서 추론 시스템은 여러 사용자 요청을 동시에 처리하여 전체 시스템 부하를 높입니다. 그러나 동시성 수준이 과도해서는 안 됩니다. 동시성이 너무 높으면 오히려 추론 성능이 저하될 수 있습니다. 또한 사용자 요청의 길이와 반환되는 토큰 수 역시 성능 지표에 영향을 미칩니다.

간소화된 평가 패턴

복잡한 비즈니스 시나리오에서 패턴을 추출하기 위해, 우리의 평가 방법은 비즈니스 설정과 밀접하게 일치시키면서 적절히 간소화합니다.

고정 비율 및 길이

요청 입력 및 출력에 대해 (1000,100), (3000,300), (5000,500)과 같은 고정 비율과 길이를 설정하고, 요청을 보낼 때 입력 및 출력 길이를 정확히 제어합니다.

테스트 라운드 및 지표 계산

수만 개의 요청을 준비한 후, 고정된 배치 크기로 추론 서버에 요청을 보내 테스트 라운드를 진행합니다. 이는 수많은 사용자가 지속적으로 요청을 보내고 추론 시스템에서 안정적인 동시성 수준을 유지하는 것을 시뮬레이션합니다.

성능 지표

각 테스트 라운드의 데이터를 기반으로 모든 요청의 지연 시간 및 처리량 지표를 계산하고, P50, P90, P99와 같은 다양한 백분위수 지표에 대한 통계를 수집하여 보다 현실적인 성능을 반영합니다.

또한, 테스트 라운드에서 모든 입력 및 출력 토큰의 총 처리량을 계산하고, 이를 하드웨어 비용과 결합하여 추론 시스템의 백만 토큰당 가격을 도출합니다.

비용 효율성 분석

이 평가 접근 방식에 따라, 다양한 입력-출력 길이 및 배치 크기에 따라 여러 세트의 테스트 데이터를 생성하고, 이를 추론 서비스에 보내 백만 토큰당 가격과 요청당 초당 출력 토큰 속도(TPS)라는 두 가지 주요 지표를 계산합니다.

그런 다음 이 지표들을 가격을 x축, TPS를 y축으로 하는 그래프에 표시합니다. 동일한 방법으로 더 많은 하드웨어 사양을 평가하고 결과를 그래프에 표시하여 비용 효율성 개요를 만듭니다.

다양한 솔루션 간의 비교를 용이하게 하기 위해 그래프를 네 개의 사분면으로 나눕니다:

왼쪽 위: 리더 사분면, 가장 높은 성능과 가장 낮은 가격.

왼쪽 아래: 팔로워 사분면, 매력적인 가격이지만 성능 개선 필요.

오른쪽 위: 챌린저 사분면, 성능은 선도적이지만 가격이 높으며, 최첨단 고가 하드웨어 솔루션에서 비롯될 수 있으며 가격이 하락하면 리더에게 도전할 수 있음.

오른쪽 아래: 가격과 성능 모두에서 장점이 없는 구식 솔루션.

Cost-Effectiveness Analysis

구현 방법

우리의 평가 목표는 가장 비용 효율적인 GPU 하드웨어를 식별하는 것입니다. 의미 있는 비교를 위해 모델, 추론 엔진 및 요청 데이터를 고정하고, 동일한 테스트 조건에서 GPU 하드웨어만 변경합니다. 평가 중에는 주로 NVIDIA 시리즈 GPU 하드웨어를 사용하여 주류 오픈소스 모델, 데이터셋 및 추론 엔진을 선택합니다.

모델 선택

Llama 3.1 시리즈 모델, 특히 Llama 3.1–70B 모델(Hugging Face 링크)을 사용합니다. 이 모델 크기는 일반적으로 다중 GPU 추론이 필요하므로 GPU 간 통신 성능을 평가하는 데 적합합니다.

추론 엔진

추론 엔진은 vLLM v0.6.3을 사용합니다. 데이터셋의 경우 QA 쌍에 초점을 맞추어 ShareGPT-v3-unfiltered를 가장 적절한 옵션으로 선택합니다. 요청 데이터를 구성할 때 ShareGPT 데이터셋을 반복하면서 입력 길이를 기준으로 QA 쌍을 필터링하여 지정된 값 이상인 것만 유지하고, 질문만 남깁니다(너무 길면 적절히 자름)을 요청 프롬프트로 사용합니다.

GPU 사양 선택

GPU 사양 선택 시, 저가, 중가, 고가 범주에 걸쳐 주류 GPU인 H100, A100, RTX 4090을 평가합니다. 일반적인 방법은 클라우드 플랫폼에서 8개 카드 구성의 GPU 서버를 임대하는 것입니다(예: Novita AI 웹사이트에서 종량제 옵션 제공). 또한 평가 범위를 넓히기 위해 더 많은 GPU 사양을 포함시켜 궁극적으로 다양한 GPU와 추론 전략으로 네 사분면을 채우는 것을 목표로 합니다.

평가 시작

준비가 완료되면 다음 단계에 따라 평가를 시작할 수 있습니다:

1단계: 추론 엔진 시작

대상 GPU 서버에서 vLLM 추론 엔진을 시작하려면 Docker 컨테이너 인스턴스를 빠르게 생성할 수 있습니다. 8개 카드 4090 GPU 서버의 경우 다음 명령을 사용합니다:

docker run -d --gpus all --net=host vllm/vllm-openai:v0.6.3 --port 8080 --model meta-llama/Llama-3.1-70B-Instruct --tensor-parallel-size 8 --swap-space 16 --gpu-memory-utilization 0.9 --dtype auto --served-model-name llama31-70b --max-num-seqs 32 --max-model-len 32768 --enable-prefix-caching --enable-chunked-prefill --disable-log-requests

2단계: 요청 구성 및 전송

클라이언트 측에서 입력/출력 길이와 배치 크기에 따라 요청을 구성하고 서버에 대량으로 전송합니다. 또한 vLLM에 내장된 테스트 케이스를 참조하여 평가 요구 사항에 맞는 테스트 스크립트를 작성할 수 있습니다.

요청 구성 시 고려할 핵심 사항은 다음과 같습니다:

  • ShareGPT에서 데이터 필터링

ShareGPT 데이터셋에서 모든 대화 항목을 반복할 때, 각 대화의 첫 번째 요소는 질문이고 두 번째 요소는 해당 답변입니다. 요청 프롬프트로 질문만 필요합니다.

질문의 토큰 수가 입력 길이 요구 사항을 충족하도록 하려면 질문을 적절히 자를 필요가 있습니다. 또한 각 요청의 매개변수 목록에서 max_tokens를 지정된 출력 길이로 설정하고 ignore_eostrue로 설정하여 추론 엔진이 지정된 수의 토큰을 출력하도록 강제합니다.

  • 일관된 배치 크기

각 테스트 라운드에서 항상 동일한 배치 크기를 유지합니다. 이를 위해 클라이언트는 고정된 수의 요청을 병렬로 전송하고, 요청 하나가 완료되는 즉시 다시 요청을 보내야 합니다. 이렇게 하면 테스트 조건이 일관되게 유지되고 정확한 성능 측정이 가능합니다.

각 요청의 매개변수는 다음과 같이 구성할 수 있습니다:

{
  "model": "llama31-70b",
  "prompt": prompt_content,
  "temperature": 0.8,
  "top_p": 1.0,
  "best_of": 1,
  "max_tokens": output_len,
  "ignore_eos": true
}

3단계: 지표 데이터 수집

모든 요청이 완료된 후 다음 주요 지표를 수집해야 합니다:

  • 각 요청에 대해: 첫 번째 토큰 지연 시간(TTFT) = 첫 번째_토큰_시간 — 요청_전송_시간
  • 각 요청에 대해: 초당 토큰 수(TPS) = 총_출력_토큰 / (완료_시간 — 첫 번째_토큰_시간)
  • 테스트 라운드에 대해: 시스템 총 처리량 = 합계(입력_토큰_요청당 + 출력_토큰_요청당) / 총_초

여기서 TTFT와 TPS는 각 요청을 의미하며, 계산의 편의를 위해 테스트 라운드의 모든 요청에 대한 P90 백분위수를 사용할 수 있습니다.

시스템 총 처리량은 추론 서비스가 초당 처리할 수 있는 총 토큰 수(입력 및 출력 토큰 모두 포함)를 나타냅니다. 해당 GPU 서버의 가격을 총 처리량으로 나누면 백만 토큰당 비용을 도출할 수 있습니다.

실제 시나리오에서는 서버 활용률과 요청 변동이 처리량에 영향을 미칠 수 있으며, 이러한 영향을 고려하기 위해 계수를 적용할 수 있지만 일반적으로 평가 결론에는 영향을 미치지 않습니다.

GPU 성능 및 비용 효율성에 대한 주요 발견

앞서 설명한 테스트 방법을 사용하여 주요 GPU(H100, A100, RTX 4090)에 대한 심층 평가를 수행했습니다. 각 GPU에 대해 다양한 입력/출력 길이와 배치 크기에서 성능 지표(TTFT, TPS)를 계산하고 P50, P90, P99 백분위수를 도출했습니다. 또한 주요 GPU 클라우드 플랫폼의 임대 가격(Novita AI에서 확인 가능)을 참조하여 백만 토큰당 비용을 계산했습니다. 이 데이터는 추가 비용-성능 평가의 기초가 되며 최종 평가 결론을 도출하는 데 사용됩니다.

단일 추론 성능 비교

주요 초점은 지연 시간(첫 번째 토큰 지연 시간)과 처리량(초당 토큰 수)입니다. 지연 시간은 낮을수록 좋고, TPS는 높을수록 좋습니다. 세 GPU에서 Llama-3.1–8B 및 Llama-3.1–70B 모델의 BF16 및 FP8 버전을 평가했습니다. 각 요청의 입력/출력 길이를 5000/500으로 설정하고 다양한 배치 크기를 테스트했습니다. 아래는 Llama-3.1–8B 모델의 성능 비교 결과로, P50 데이터를 사용하여 분석했습니다.

  1. 첫 번째 토큰 지연 시간:

속도 순위는 빠른 순서대로 H100, A100, RTX 4090입니다. 배치 크기가 1일 때 A100의 속도는 RTX 4090의 1.25배이고, H100은 1.66배 더 빠릅니다.

배치 크기가 증가함에 따라 RTX 4090과 다른 두 GPU 간의 격차가 크게 벌어집니다. 배치 크기가 10에 도달하면 RTX 4090의 지연 시간이 3.5초(P90 백분위수)를 초과하여 많은 비즈니스 애플리케이션에서 허용되지 않습니다. 반면, A100과 H100은 0.5초 미만의 지연 시간을 유지하며 안정적인 성능을 보여줍니다.

2. 초당 토큰 수(TPS):

이 지표는 엔진의 생성 속도를 반영하며, 속도 순위는 H100, A100, RTX 4090으로 동일합니다. 배치 크기가 1일 때 A100의 TPS는 RTX 4090의 약 1.48배이고, H100의 TPS는 RTX 4090의 2.44배로 H100이 가장 높은 생성 효율을 보여줍니다.

배치 크기가 증가함에 따라 시스템 부하 증가와 요청당 리소스 감소로 인해 개별 요청의 TPS가 점차 감소합니다. 배치 크기가 10일 때 TPS는 배치 크기 1일 때 TPS의 약 70%로 떨어집니다.

3. FP8 모델 양자화:

BF16에 비해 가중치 파일이 절반으로 줄어든 FP8 버전은 시스템 리소스 오버헤드를 크게 낮추어 지연 시간과 처리량이 개선됩니다. 두 번째 막대 그래프 세트는 이 결론을 명확히 보여주며, 특히 TPS 지표에서 동일한 GPU에 대해 FP8 버전의 성능이 BF16 버전의 약 1.4배입니다.

4. RTX 4090의 배치 크기 민감도:

메모리 및 통신 제한으로 인해 RTX 4090은 배치 크기에 매우 민감합니다. 과도하게 큰 배치 크기는 내부 대기열을 유발하여 지연 시간이 높아지고 처리량이 낮아질 수 있습니다. RTX 4090에 워크로드를 배포할 때는 배치 크기 설정에 특별히 주의해야 합니다.

Sensitivity of RTX 4090 to Batch Size

Sensitivity of RTX 4090 to Batch Size(2)

동일한 평가 방법을 Llama-3.1–70B 모델에 적용했으며, 성능 비교는 다음 그림에 나와 있습니다.

70B 모델의 크기가 크기 때문에 BF16 버전에는 8개의 RTX 4090 GPU를, FP8 버전에는 4개의 RTX 4090 GPU를 사용했습니다. 반면, 80GB 메모리를 갖춘 A100과 H100 GPU는 각각 2대만 있으면 효과적으로 실행할 수 있었습니다.

그림에서 Llama-3.1–8B 모델과 유사한 결론을 도출할 수 있습니다. H100은 여전히 가장 높은 성능의 GPU이며, FP8 양자화 버전은 BF16 버전보다 약 1.4배 빠릅니다.

Sensitivity of RTX 4090 to Batch Size(3)

Sensitivity of RTX 4090 to Batch Size(4)

종합적인 비용-성능 평가

실제 배포에서는 성능 지표뿐만 아니라 솔루션의 전체 비용도 고려하여 최상의 비용-성능 비율을 식별해야 합니다.

예를 들어, RTX 4090은 성능 면에서 느릴 수 있지만 매우 낮은 가격으로 인해 전체적인 비용 효율성이 경쟁력 있을 수 있습니다. 이를 위해서는 어떤 GPU와 추론 솔루션이 최상의 가치를 제공하는지 정확히 결정하기 위해 보다 과학적이고 전문적인 평가 방법이 필요합니다.

"평가 접근 방식"에서 우리는 다양한 추론 솔루션의 비용과 성능 지표를 2차원 좌표계에 표시하고, 이를 리더, 팔로워, 챌린저, 탈락자라는 네 사분면으로 나눌 것을 제안했습니다. 이 접근 방식에 따라 Llama-3.1–70B, Llama-3.1–8B 모델 및 해당 FP8 양자화 버전을 테스트하는 데 중점을 두었습니다.

RTX 4090, A100, H100, H200의 네 가지 GPU를 선택하고, 입력/출력 길이를 5000/500으로 설정하고 배치 크기를 1~10까지 설정했습니다. 다양한 조합을 테스트하여 성능 및 가격 데이터를 얻었으며, 최종적으로 아래 두 그림에 표시했습니다.

Llama-3.1–70B 모델의 경우 각 솔루션의 비용-성능 비율이 그림에 나와 있습니다. 네 가지 솔루션이 우리가 정의한 리더 사분면에 속합니다:

  • Llama3.1–70B-FP8@2xH100
  • Llama3.1–70B-FP8@4xH200
  • Llama3.1–70B@4xH200
  • Llama3.1–70B@2xH100

그림에서 각 솔루션의 좌표점과 원점을 연결하는 선의 기울기는 성능 대 가격 비율을 나타냅니다. 기울기가 가파를수록 비용-성능 비율이 높습니다.

따라서 Llama3.1–70B-FP8@4xH200 솔루션은 평가된 모든 추론 솔루션 중에서 가장 비용 효율적인 옵션으로 두드러집니다.

tps vs price

Llama3.1–8B 모델의 경우 크기가 작기 때문에 모든 모델을 단일 GPU 구성으로 배포했습니다. 다양한 솔루션의 비용-성능 비율은 아래 그림에 나와 있습니다. H200을 사용한 두 구성 모두 우리가 정의한 리더 사분면에 속합니다.

이는 주로 H200의 우수한 성능(특히 선도적인 메모리 용량 및 대역폭)과 경쟁력 있는 가격 때문입니다. 두 RTX 4090 구성은 가장 비용 효율적이지만 성능이 낮아 팔로워 사분면에 속합니다.

tps vs price(2)

결론

GPU 비용은 대규모 모델 추론 서비스의 상당 부분을 차지하며, 시장에 다양한 GPU 하드웨어 옵션이 있기 때문에 가장 적합한 것을 선택하는 것은 어려울 수 있습니다. 특정 비즈니스 요구에 맞는 최상의 비용-성능 GPU 및 추론 솔루션을 식별하는 것은 비즈니스의 성패를 결정할 수 있으므로 매우 중요합니다.

대규모 모델 추론 서비스를 제공한 경험을 통해 상당한 배포 지식을 축적했으며, 비즈니스 개발을 지속적으로 안내하고 고객에게 최상의 비용-성능 추론 서비스를 제공하는 효과적인 GPU 평가 프레임워크를 개발했습니다.

이 글은 실제 적용 사례에서 모범 사례를 추출하고, 주류 대규모 모델 및 GPU 사양에 대한 실제 테스트를 수행하여 성능 비교를 제공함으로써 최상의 비용-성능 추론 솔루션을 식별합니다.

우리의 평가 접근 방식은 복잡한 하드웨어 지표를 넘어 실제 비즈니스 애플리케이션에 초점을 맞추므로 매우 일반화 가능하고 실행 가능하며, 특히 다양한 GPU 모델이나 추론 엔진 간의 비교 테스트에 적합합니다.

최고 수준의 대규모 모델 추론 서비스 및 솔루션에 대한 자세한 내용은 Novita AI를 확인하세요!

Novita AI 는 개발자가 간단한 API를 사용하여 AI 모델을 쉽게 배포할 수 있도록 지원하는 AI 클라우드 플랫폼이며, 구축 및 확장을 위한 저렴하고 안정적인 GPU 클라우드도 제공합니다.

추천 리딩

1.KV Sparsity가 vLLM에서 1.5배 가속을 달성하는 방법

2.Kubernetes 워크로드를 위한 GPU 리소스 동적 할당

3.실행 중인 Docker 컨테이너에 포트 매핑 동적 추가