LLM 추론(Inference) 모델 성능 평가 및 벤치마킹 테스트

많은 기업들이 비즈니스 요구 사항을 충족시키기 위한 도구로써 생성형 AI, LLM(대규모 언어 모델, Large Language Model) 도입을 시도하고 있는데요, 오늘 기사는 LLM 추론과 관련해서 오픈시프트 AI 기반에서 성능을 평가한 기사입니다.😃 (출처: Red Hat Blog)


<오픈시프트 AI 기반 LLM 추론(Inference) 성능 평가>

  • LLM을 실행하는 데 필요한 컴퓨팅 요구량이 많기 때문에, 기본 하드웨어, 특히 GPU를 비용 효율적으로 사용하려면 성능이 뛰어나고 안정적인 플랫폼에 LLM을 배포하는 것이 중요합니다.

  • 이 기사는 Red Hat 오픈시프트 AI에 포함되어 있는 모델 서비스 스택에 배포된 Llama-2 모델의 성능 테스트 방법론과 결과입니다.

  • 오픈시프트 AI는 AI 기반 App을 구축, 배포 및 관리하는 도구를 갖춘 유연하고 확장 가능한 MLOps 플랫폼입니다. 오픈 소스 기술을 사용하여 구축된 이 제품은 팀이 실험(experiment)하거나 모델을 서빙(serving)하거나 혁신적인 앱 제공이 가능하도록 하는, 신뢰할 수 있고 운영상 일관된 기능을 제공합니다.


모델 서빙 스택

  • 모델 서빙 소프트웨어 스택은 KServe, 오픈시프트 서버리스(Serverless) 및 오픈시프트 서비스 메시(Service Mesh)를 기반으로 합니다. 여기에서는 Llama-2 모델을 실행하기 위해 Caikit 및 TGIS(텍스트 생성 추론 서비스, text-generation-inference-service)도 사용했지만 오픈시프트 AI는 OpenVINO도 지원하고 다른 사용자 정의 런타임을 모듈식으로 사용할 수 있는 기능을 제공합니다. NVIDIA GPU 오퍼레이터(Operator)는 TGIS 컨테이너가 GPU를 사용할 수 있도록 GPU를 관리하고 expose합니다.

  • KServe는 오픈시프트 서버리스 및 오픈시프트 서비스 메시를 활용하여 AI 모델 추론을 위한 다양한 최첨단 서비스 기능을 제공합니다. 이러한 구성 요소는 네트워킹, 서비스 구성, 자동 크기 조정 및 프로덕션 모델 제공을 위한 상태 확인과 관련된 복잡성을 캡슐화합니다.

  • Caikit 툴킷을 사용하면 사용자는 개발자 친화적인 API 세트를 통해 모델을 관리할 수 있습니다. Caikit은 다양한 기반 모델을 쿼리하는 데 사용할 수 있는 표준 gRPC(원격 프로시저 호출) 및 HTTP 인터페이스를 제공합니다. 요청을 추론 서비스인 TGIS로 전달합니다.

  • TGIS는 Hugging Face 텍스트 생성 추론 제공 툴킷의 초기 포크입니다. 연속 일괄 처리, 동적 일괄 처리, Tensor Parallelism(model sharding), PyTorch 2 컴파일 지원 등 LLM 제공 성능을 최적화하기 위한 몇 가지 중요한 기능을 제공합니다.

  • NVIDIA GPU Operator는 OpenShift에서 NVIDIA GPU를 프로비저닝하고 사용하는 데 필요한 다양한 소프트웨어 구성 요소의 관리를 자동화합니다. 여기에는 드라이버 컨테이너, 디바이스 플러그인, DCGM(Data Center GPU Manager) 메트릭 내보내기 등이 포함됩니다. DCGM 메트릭 내보내기를 사용하면 OpenShift 모니터링 Prometheus 인스턴스를 사용하여 메모리 활용도, 스트리밍 멀티프로세서(SM) 활용도 등 GPU 지표를 분석할 수 있습니다.


LLM의 성능 테스트 방법론

  • 대규모 언어 모델의 성능 평가 항목으로 대기시간(latency) 및 처리량 메트릭이 있습니다. 그러나 LLM에 대한 요청의 엔드투엔드(End-to-end) 대기시간은 몇 가지 요인에 따라 크게 달라질 수 있는데요. 가장 중요한 측면은 LLM이 한 번에 하나의 토큰씩 텍스트를 생성하는 방식으로 인한 아웃풋(output) 길이입니다. 따라서 주로 토큰당 대기시간 또는 "아웃풋 토큰당 시간"(TPOT, time per output token) 측면에서 대기시간을 측정합니다.

  • 토큰은 단어 또는 하위 단어 문자열을 나타내는 텍스트 단위입니다. 대규모 언어 모델이 텍스트를 처리할 때 먼저 토큰으로 변환됩니다. 텍스트를 토큰에 매핑하는 데 사용되는 정확한 체계는 모델마다 다릅니다. 토큰에는 숫자 표현이 할당되며 모델에 입력되고 모델에서 출력되는 벡터로 배열됩니다.

  • 총 요청 대기시간에 영향을 미치는 또 다른 요소는 "prefill" 시간입니다. 이는 모델이 첫 번째 신규 토큰을 생성하기 전에 입력 프롬프트 토큰이 처리되는 데 걸리는 시간입니다. 총 요청 대기시간의 세 번째 중요한 요인은 대기시간입니다. 추론 서비스가 GPU 메모리와 같은 하드웨어 제약으로 인해 들어오는 로드를 따라잡을 만큼 빠르게 요청을 처리할 수 없는 경우 일부 요청은 처리되기 전에 대기열에서 기다려야 합니다. 이러한 요인으로 인해 "첫 번째 토큰까지의 시간"(TTFT)은 LLM 성능를 측정하기 위한 일반적인 측정 기준입니다. TTFT는 토큰이 생성될 때 스트리밍되고 표시되는 챗봇과 같은 사용 사례에 특히 적합합니다.

  • 대기 시간과 마찬가지로 처리량은 요청에서 생성되는 토큰 수에 따라 초당 요청을 사용하여 측정할 경우 크게 달라집니다. 따라서 모델을 쿼리하는 모든 사용자에 대해 초당 생성된 총 토큰 측면에서 전체 처리량을 측정합니다.


llm-load-test를 사용한 부하(load) 테스트

  • 오픈시프트 AI 모델 제공 스택에서 실행되는 테스트 모델을 로드하기 위해 llm-load-test라는 오픈 소스 도구를 만들었습니다. Python으로 작성되었으며 내부적으로 ghz라는 gRPC 부하 테스트 도구를 활용합니다. 테스트 출력의 각 요청에 대한 응답 및 작업자 스레드 ID를 저장하는 기능을 추가하기 위해 ghz를 분기했습니다.

  • ghz에서 제공되는 기능 외에도 llm-load-test를 사용하면 각 인스턴스에서 무작위 순서로 입력 데이터 세트와 병렬로 여러 ghz 프로세스를 실행할 수 있습니다. 이를 통해 동시에 다양한 프롬프트로 모델을 쿼리하는 다양한 사용자를 시뮬레이션할 수 있습니다. llm-load-test는 실험 후 결과를 S3 버킷에 직접 업로드하여 실행에 대한 해당 메타데이터로 출력 객체에 태그를 지정할 수도 있습니다.


입력 데이터 세트

  • JSON 파일을 사용하여 부하 테스트를 위해 llm-load-test에서 입력 프롬프트를 구성할 수 있습니다. 실험을 위해 다양한 입력/출력 길이를 가진 OpenOrca 데이터 세트에서 32개의 입력 데이터 세트를 선택했습니다. 테스트 데이터에서 가장 긴 입력은 1688개 토큰이었고, 가장 긴 출력은 377개 토큰이었습니다.

  • 현실적인 시나리오에서 TGIS의 연속 일괄 처리 및 동적 일괄 처리 기능을 테스트하려면 입력 및 출력 크기를 혼합하여 사용하는 것이 중요합니다. 최근 모델은 매우 큰 4k+ 컨텍스트 길이를 지원하기 시작했으며 이는 검색 증강 생성(RAG, etrieval-augmented generation)과 같은 사용 사례에 특히 중요합니다.


AWS 기반 오픈시프트 AI의 llama-2 성능 결과

  • 성능 측정은 AWS에 설치된 self-managed installer-provisioned infrastructure(IPI) 오픈시프트 클러스터를 사용하여 수집되었습니다. 오픈시프트 AI 오퍼레이터를 설치하고 Kserve, Caikit 및 TGIS를 사용하여 모델을 제공할 수 있도록 ServingRuntime 및 InferenceService 오브젝트를 생성했습니다.

  • TGIS 로그를 분석하여 각 요청의 총 대기 시간과 부하 테스트 중에 생성된 총 토큰을 테스트 기간(240초)으로 나누어 계산된 처리량을 얻었습니다.

  • 상세 성능 결과(차트, 그래프 및 분석결과)는 원본 기사를 통해 확인하세요😃


결론

  • 이 결과는 Red Hat PSAP(Performance and Scale for AI Platforms) 팀에서 수행 중인 테스트입니다. Red Hat PSAP팀에서는 AI의 다른 측면에 대한 성능 테스트와 함께 모델 서비스 스택에 대한 성능 및 확장성 분석을 적극적으로 계속하고 있습니다. 앞으로 다른 모델 테스트, 트래픽 기반 모델 복제본 자동 크기 조정 등의 더 많은 결과를 공유할 수 있기를 바랍니다.

  • llm-load-test를 계속 개발할 예정이며 추가될 기능은 다음과 같습니다:

    • 스트리밍 요청에 대한 첫 번째 토큰 도달 시간 및 출력 토큰당 시간을 측정하는 기능.

    • HTTP 및 gRPC 인터페이스를 포함하여 다양한 API 뒤에 있는 쿼리 모델에 대한 플러그형/모듈형 인터페이스

    • 준비 단계 및 모델이 로드되어 오류 없이 응답하는지 검증하는 기능

    • random Poisson arrival rate과 같은 더 복잡한 부하 패턴

  • 오픈시프트 AI에서 Llama-2 모델에 대한 성능 테스트는 여러 구성에서 LLM을 실행하는 데 관련된 대기시간, 처리량 및 비용 균형에 대한 개요를 제공합니다. 예를 들어, 7B 모델의 경우 g5.2xlarge 인스턴스가 가장 저렴했지만 텐서 병렬 처리로 인한 상당한 지연 시간 및 처리량 향상으로 인해 일부 사용 사례에서는 g5.12xlarge로 업그레이드하는 것이 도움이 될 수 있습니다. 더 큰 모델을 실행하면 출력 품질이 높아지지만 더 많은 GPU 메모리가 필요하므로 비용이 더 많이 듭니다.

  • 오픈시프트 AI는 생성형 LLM 배포의 복잡성을 탐색하는 조직을 위해 성능이 뛰어나고 적응 가능한 모델 제공 솔루션을 제공합니다. 모델 품질, 대기시간, 처리량 또는 비용 중 무엇을 우선시하든 플랫폼의 유연성은 다양한 요구 사항을 수용합니다.


원본 기사 링크는 아래와 같습니다. 감사합니다🙏

[Source Link] https://www.redhat.com/en/blog/evaluating-llm-inference-performance-red-hat-openshift-ai

Evaluating LLM inference performance on Red Hat OpenShift AI

www.redhat.com

Evaluating LLM inference performance on Red Hat OpenShift AI

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2024년 2월 3일 오전 4:13

 • 

저장 3조회 1,932

댓글 0