>기술 주변기기 >일체 포함 >NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

WBOY
WBOY앞으로
2024-02-01 17:24:23989검색

1. TensorRT-LLM의 제품 포지셔닝

TensorRT-LLM은 대규모 언어 모델(LLM)을 위해 NVIDIA에서 개발한 확장 가능한 추론 솔루션입니다. TensorRT 딥 러닝 컴파일 프레임워크를 기반으로 계산 그래프를 구축, 컴파일 및 실행하고 FastTransformer의 효율적인 커널 구현을 활용합니다. 또한 장치 간 통신을 위해 NCCL을 활용합니다. 개발자는 커틀라스를 기반으로 한 맞춤형 GEMM을 개발하는 등 기술 개발 및 수요 차이를 기반으로 특정 요구 사항을 충족하도록 운영자를 맞춤화할 수 있습니다. TensorRT-LLM은 고성능을 제공하고 실용성을 지속적으로 개선하기 위해 노력하는 NVIDIA의 공식 추론 솔루션입니다.

NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

TensorRT-LLM은 GitHub의 오픈 소스이며 릴리스 분기와 개발 분기의 두 가지 분기로 나뉩니다. 릴리스 분기는 한 달에 한 번 업데이트되는 반면, Dev 분기는 개발자가 최신 기능을 경험하고 평가할 수 있도록 공식 또는 커뮤니티 소스의 기능을 더 자주 업데이트합니다. 아래 그림은 TensorRT-LLM의 프레임워크 구조를 보여줍니다. 녹색 TensorRT 컴파일 부분과 하드웨어 정보가 포함된 커널을 제외한 다른 부분은 오픈 소스입니다.

NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

TensorRT-LLM은 또한 개발자의 학습 비용을 줄이기 위해 Pytorch와 유사한 API를 제공하고 사용자가 사용할 수 있도록 사전 정의된 다양한 모델을 제공합니다.

NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

대규모 언어 모델의 규모가 크기 때문에 단일 그래픽 카드에서는 추론이 완료되지 않을 수 있으므로 TensorRT-LLM은 여러 카드 또는 여러 기계 추론을 지원하기 위해 Tensor Parallelism과 Pipeline Parallelism이라는 두 가지 병렬 메커니즘을 제공합니다. . 이러한 메커니즘을 통해 모델을 여러 부분으로 분할하고 병렬 계산을 위해 여러 그래픽 카드 또는 컴퓨터에 분산하여 추론 성능을 향상시킬 수 있습니다. Tensor Parallelism은 모델 매개변수를 여러 장치에 배포하고 동시에 여러 부품의 출력을 계산하여 병렬 컴퓨팅을 달성합니다. 파이프라인 병렬 처리는 모델을 여러 단계로 나누어 각 단계를 서로 다른 장치에서 병렬로 계산하고 출력을 다음 단계로 전달하여 전체

NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

2. TensorRT- 중요 기능 of LLM

TensorRT-LLM은 풍부한 모델 지원과 정밀도가 낮은 추론 기능을 갖춘 강력한 도구입니다. 우선 TensorRT-LLM은 Qwen(Qianwen)과 같은 개발자가 완료한 모델 적응을 포함하여 주류 대형 언어 모델을 지원하며 공식 지원에 포함되었습니다. 즉, 사용자는 사전 정의된 모델을 쉽게 확장하거나 사용자 정의하고 자신의 프로젝트에 빠르고 쉽게 적용할 수 있습니다. 둘째, TensorRT-LLM은 기본적으로 FP16/BF16 정밀 추론 방법을 사용합니다. 이러한 낮은 정밀도의 추론은 추론 성능을 향상시킬 뿐만 아니라 업계의 양자화 방법을 사용하여 하드웨어 처리량을 더욱 최적화할 수 있습니다. 모델의 정확도를 줄임으로써 TensorRT-LLM은 정확도를 너무 많이 희생하지 않고도 추론 속도와 효율성을 크게 향상시킬 수 있습니다. 요약하자면, TensorRT-LLM은 풍부한 모델 지원과 낮은 정밀도의 추론 기능을 통해 매우 실용적인 도구가 됩니다. 개발자든 연구원이든 TensorRT-LLM은 딥 러닝 애플리케이션에서 더 나은 성능을 달성하는 데 도움이 되는 효율적인 추론 솔루션을 제공할 수 있습니다.

NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

또 다른 기능은 FMHA(fused multi-head attention) 커널 구현입니다. Transformer에서 가장 시간이 많이 걸리는 부분은 self-attention 계산이므로 공식에서는 self-attention 계산을 최적화하기 위해 FMHA를 설계하고 fp16 및 fp32 누산기를 사용하여 다양한 버전을 제공했습니다. 또한 속도 향상과 더불어 메모리 사용량도 대폭 감소합니다. 또한 시퀀스 길이를 임의의 길이로 확장할 수 있는 플래시 주의 기반 구현을 제공합니다.

NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

다음은 FMHA의 상세 정보입니다. 여기서 MQA는 Multi Query Attention이고 GQA는 Group Query Attention입니다.

NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

또 다른 커널은 MMHA(Masked Multi-Head Attention)입니다. FMHA는 주로 컨텍스트 단계의 계산에 사용되는 반면, MMHA는 주로 생성 단계에서 주의 가속화를 제공하고 Volta 및 후속 아키텍처에 대한 지원을 제공합니다. FastTransformer 구현과 비교하여 TensorRT-LLM은 더욱 최적화되었으며 성능은 최대 2배 향상되었습니다.

NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

또 다른 중요한 기능은 낮은 정밀도로 추론 가속을 달성하는 양자화 기술입니다. 일반적으로 사용되는 양자화 방법은 크게 PTQ(Post Training Quantization)와 QAT(Quantization-aware Training)로 구분됩니다. TensorRT-LLM의 경우 이 두 양자화 방법의 추론 논리는 동일합니다. LLM 정량화 기술의 중요한 특징은 알고리즘 설계와 엔지니어링 구현의 공동 설계입니다. 즉, 해당 정량화 방법 설계 초기에 하드웨어의 특성을 고려해야 합니다. 그렇지 않으면 예상되는 추론 속도 향상이 달성되지 않을 수 있습니다.

NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

TensorRT의 PTQ 정량화 단계는 일반적으로 다음 단계로 나뉩니다. 먼저 모델을 정량화한 다음 가중치와 모델을 TensorRT-LLM 표현으로 변환합니다. 일부 사용자 정의 작업의 경우 사용자는 자체 커널을 작성해야 합니다. 일반적으로 사용되는 PTQ 정량화 방법에는 대표적인 공동 설계 방법인 INT8 Weight-only, SmoothQuant, GPTQ 및 AWQ가 있습니다.

NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

INT8 가중치 전용은 가중치를 INT8로 직접 양자화하지만 활성화 값은 FP16으로 유지됩니다. 이 방법의 장점은 모델 저장 공간이 2배로 줄어들고 가중치를 로딩하기 위한 저장 대역폭이 절반으로 줄어들어 추론 성능 향상이라는 목적을 달성한다는 것입니다. 업계에서는 이 방법을 W8A16이라고 합니다. 즉, 가중치는 INT8이고 활성화 값은 FP16/BF16입니다. - INT8 정밀도로 저장되고 FP16/BF16 형식으로 계산됩니다. 이 방법은 직관적이고 가중치를 변경하지 않으며 구현이 쉽고 일반화 성능이 좋습니다.

NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

두 번째 정량화 방법은 NVIDIA와 커뮤니티가 공동으로 설계한 SmoothQuant입니다. 가중치는 일반적으로 가우스 분포를 따르고 양자화하기 쉽지만 활성화 값에는 이상값이 있고 양자화 비트의 활용도는 높지 않은 것으로 관찰됩니다.

NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

SmoothQuant는 먼저 활성화 값을 평활화, 즉 스케일로 나누어 해당 분포를 압축합니다. 동시에 동등성을 보장하려면 가중치에 동일한 스케일을 곱해야 합니다. 그런 다음 가중치와 활성화를 모두 정량화할 수 있습니다. 해당 저장 및 계산 정밀도는 INT8 또는 FP8일 수 있으며 계산에는 INT8 또는 FP8 TensorCore를 사용할 수 있습니다. 구현 세부 사항 측면에서 가중치는 텐서별 및 채널별 정량화를 지원하고 활성화 값은 텐서별 및 토큰별 정량화를 지원합니다.

NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

세 번째 양자화 방식은 재구성 손실을 최소화하여 구현한 레이어별 양자화 방식인 GPTQ입니다. GPTQ는 가중치 전용 방법이며 계산에는 FP16 데이터 형식이 사용됩니다. 이 방법은 대규모 모델을 양자화할 때 사용됩니다. 양자화 자체는 상대적으로 비용이 많이 들기 때문에 저자는 지연 일괄 업데이트 및 모든 행의 가중치를 동일한 순서로 양자화하는 등 양자화 자체의 비용을 줄이기 위한 몇 가지 트릭을 설계했습니다. GPTQ는 그룹화 전략과 같은 다른 방법과 함께 사용할 수도 있습니다. 또한 TensorRT-LLM은 다양한 상황에 대해 다양한 구현 최적화 성능을 제공합니다. 구체적으로 배치 크기가 작을 경우에는 cuda 코어를 사용하여 구현하고, 배치 크기가 클 경우에는 텐서 코어를 사용하여 구현합니다.

NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

네 번째 정량화 방법은 AWQ입니다. 이 방법은 모든 가중치가 똑같이 중요하지는 않으며 가중치(현저한 가중치)의 0.1%-1%만이 모델 정확도에 더 많이 기여하고 이러한 가중치는 가중치 분포가 아닌 활성화 값 분포에 따라 달라진다는 점을 고려합니다. 이 방법의 정량화 과정은 SmoothQuant와 유사합니다. 주요 차이점은 활성화 값 분포를 기반으로 규모가 계산된다는 것입니다.

NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

정량화 방법 외에도 TensorRT-LLM의 성능을 향상시키는 또 다른 방법은 다중 기계 및 다중 카드 추론을 사용하는 것입니다. 일부 시나리오에서는 대형 모델이 너무 커서 추론을 위해 단일 GPU에 배치할 수 없거나 모델을 내려놓을 수 있지만 컴퓨팅 효율성에 영향을 미치므로 추론을 위해 여러 카드나 여러 시스템이 필요합니다.

NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

TensorRT-LLM은 현재 Tensor Parallelism과 Pipeline Parallelism이라는 두 가지 병렬 전략을 제공합니다. TP는 모델을 수직으로 분할하고 각 부분을 서로 다른 장치에 배치합니다. 이는 장치 간 데이터 통신이 자주 발생하며 일반적으로 NVLINK와 같이 장치 간 상호 연결이 높은 시나리오에서 사용됩니다. 또 다른 분할 방법은 수평 분할입니다. 이때 수평 전선은 하나만 있으며 해당 통신 방법은 지점 간 통신으로, 이는 장치 통신 대역폭이 약한 시나리오에 적합합니다.

NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

마지막으로 강조할 기능은 기내 일괄 처리입니다. 일괄 처리는 추론 성능을 향상시키는 일반적인 방법이지만 LLM 추론 시나리오에서는 일괄 처리에 포함된 각 샘플/요청의 출력 길이를 예측할 수 없습니다. 정적 일괄 처리 방법을 따르는 경우 일괄 처리 지연은 샘플/요청에서 출력이 가장 긴 일괄 처리에 따라 달라집니다. 따라서, 더 짧은 샘플/요청의 출력이 종료되었음에도 불구하고 컴퓨팅 자원은 해제되지 않았으며, 그 지연은 가장 긴 출력 샘플/요청의 지연과 동일합니다. 기내 일괄 처리 방법은 샘플/요청 끝에 새로운 샘플/요청을 삽입하는 것입니다. 이러한 방식으로 단일 샘플/요청의 지연을 줄이고 리소스 낭비를 방지할 뿐만 아니라 전체 시스템의 처리량을 향상시킵니다.

NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

3. TensorRT-LLM 사용 프로세스

TensorRT-LLM은 TensorRT의 사용과 유사합니다. 먼저 사전 훈련된 모델을 구한 후 사용해야 합니다. TensorRT-LLM 제공된 API는 모델 계산 그래프를 다시 작성하고 재구성한 다음 TensorRT를 사용하여 컴파일 및 최적화하고 추론 배포를 위해 직렬화된 엔진으로 저장합니다.

NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

Llama를 예로 들어 먼저 TensorRT-LLM을 설치한 다음 사전 훈련된 모델을 다운로드한 다음 TensorRT-LLM을 사용하여 모델을 컴파일하고 마지막으로 추론을 수행합니다.

NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

모델 추론 디버깅의 경우 TensorRT-LLM의 디버깅 방법은 TensorRT와 일치합니다. 딥 러닝 컴파일러, 즉 TensorRT 덕분에 제공되는 최적화 중 하나는 레이어 융합입니다. 따라서 특정 레이어의 결과를 출력하려면 해당 레이어를 출력 레이어로 표시하여 컴파일러에 의해 최적화되지 않도록 한 후 기준선과 비교 분석해야 합니다. 동시에 새로운 출력 레이어가 표시될 때마다 TensorRT 엔진을 다시 컴파일해야 합니다.

NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

커스텀 레이어의 경우 TensorRT-LLM은 사용자가 커널을 직접 작성하지 않고도 기능을 구현할 수 있도록 도와주는 Pytorch와 유사한 다양한 연산자를 제공합니다. 예시에서 볼 수 있듯이 TensorRT-LLM에서 제공하는 API는 rms 표준의 논리를 구현하는 데 사용되며 TensorRT는 GPU에서 해당 실행 코드를 자동으로 생성합니다.

NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

사용자가 더 높은 성능 요구 사항을 갖고 있거나 TensorRT-LLM이 해당 기능을 구현하기 위한 빌딩 블록을 제공하지 않는 경우, 사용자는 커널을 사용자 정의하고 이를 TensorRT-LLM이 사용할 수 있는 플러그인으로 패키징해야 합니다. 샘플 코드는 SmoothQuant의 맞춤형 GEMM을 구현하고 이를 TensorRT-LLM이 호출할 수 있는 플러그인으로 캡슐화하는 샘플 코드입니다.

NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

4. TensorRT-LLM의 추론 성능

성능, 구성 등 자세한 내용은 공식 홈페이지에서 확인하실 수 있으며, 여기서는 자세히 소개하지 않습니다. 본 제품은 출시 이후 국내 다수의 주요 제조사와 협력을 이어오고 있습니다. 피드백을 통해 일반적으로 TensorRT-LLM은 성능 측면에서 현재 최고의 솔루션입니다. 기술 반복, 최적화 방법, 시스템 최적화 등 많은 요소가 성능에 영향을 미치고 매우 빠르게 변화하므로 여기서는 TensorRT-LLM의 성능 데이터에 대해 자세히 소개하지 않습니다. 관심이 있으시면 공식 웹사이트를 방문하여 자세한 내용을 확인하실 수 있습니다.

NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

TensorRT-LLM의 성능은 이전 버전에 비해 지속적으로 향상되었다는 점을 언급할 가치가 있습니다. 위 그림과 같이 FP16 기준으로 KVQuant를 사용한 후에는 동일한 속도를 유지하면서 비디오 메모리 사용량이 줄어듭니다. INT8을 사용하면 처리량이 크게 향상되는 동시에 메모리 사용량도 더욱 줄어듭니다. TensorRT-LLM 최적화 기술의 지속적인 발전으로 성능이 계속 향상될 것임을 알 수 있습니다. 이러한 추세는 계속될 것입니다.

5. TensorRT-LLM의 미래 전망

LLM은 추론 비용이 높고 비용에 민감한 시나리오입니다. 우리는 다음 100배 가속 효과를 달성하기 위해서는 알고리즘과 하드웨어의 공동 반복이 필요하며, 이 목표는 소프트웨어와 하드웨어 간의 공동 설계를 통해 달성될 수 있다고 믿습니다. 하드웨어는 정밀도가 낮은 양자화를 제공하는 반면, 소프트웨어 관점에서는 최적화된 양자화 및 네트워크 정리와 같은 알고리즘을 사용하여 성능을 더욱 향상시킵니다.

NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

TensorRT-LLM, NVIDIA는 앞으로도 TensorRT-LLM의 성능을 개선하기 위해 계속 노력할 것입니다. 동시에 오픈소스를 통해 피드백과 의견을 수집하여 사용 편의성을 개선하고 있습니다. 또한 사용 편의성에 중점을 두고 모델 영역이나 정량 도구 등 더 많은 응용 도구를 개발하고 오픈 소스화하여 주류 프레임워크와의 호환성을 향상하고 훈련부터 추론, 배포까지 엔드투엔드 솔루션을 제공할 것입니다. .

NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM

6. Q&A 세션

Q1: 모든 계산 결과를 역양자화해야 합니까? 양자화 중에 정밀도 오버플로가 발생하면 어떻게 해야 합니까?

A1: 현재 TensorRT-LLM은 두 가지 유형의 방법, 즉 방금 언급한 FP8과 INT4/INT8 양자화 방법을 제공합니다. 낮은 정밀도 INT8이 GEMM으로 사용되는 경우 누산기는 오버플로를 방지하기 위해 fp16 또는 fp32와 같은 고정밀 데이터 유형을 사용합니다. 역양자화와 관련하여 fp8 양자화를 예로 들면 TensorRT-LLM이 계산 그래프를 최적화할 때 역양자화 노드를 자동으로 이동하고 이를 다른 작업에 병합하여 최적화 목적을 달성할 수 있습니다. 하지만 앞서 소개한 GPTQ와 QAT는 현재 하드코딩을 통해 커널에 작성되어 있으며, 양자화나 역양자화 노드의 통일된 처리가 없다.

Q2: 현재 특정 모델에 대해 역양자화를 수행하고 있나요?

A2: 현재 수량화는 실제로 이렇습니다. 다양한 모델을 지원합니다. 좀 더 깔끔한 API를 만들거나 구성 항목을 통해 모델 수량화를 일률적으로 지원할 계획입니다.

Q3: 모범 사례를 위해 TensorRT-LLM을 직접 사용해야 합니까, 아니면 Triton Inference Server와 결합해야 합니까? 함께 사용하면 누락된 기능이 있나요?

A3: 일부 기능은 오픈소스가 아니기 때문에 직접 서빙하는 경우에는 적응 작업을 수행해야 합니다. 트리톤이라면 완전한 솔루션이 됩니다.

Q4: 정량 교정에는 여러 가지 정량적 방법이 있는데, 가속 비율은 무엇입니까? 이러한 정량화 방식의 효과에는 몇 개의 포인트가 있습니까? In-flight 분기의 각 예제의 출력 길이를 알 수 없습니다. 동적 일괄 처리를 수행하는 방법은 무엇입니까?

A4: 정량화된 성능에 대해서는 비공개적으로 이야기할 수 있습니다. 효과에 관해서는 구현된 커널이 괜찮은지 확인하기 위한 기본적인 검증만 수행했을 뿐 실제 비즈니스에서 모든 정량화된 알고리즘의 결과를 보장할 수는 없습니다. 정량화에 사용되는 데이터 세트 및 그 영향과 같은 통제할 수 없는 요소. Inflight Batching은 특정 샘플/요청의 출력이 런타임 중에 종료되었는지 여부를 감지하고 판단하는 것을 의미합니다. 그렇다면 도착하는 다른 요청을 삽입하고 TensorRT-LLM은 예측된 출력의 길이를 예측하지 않으며 예측할 수도 없습니다.

Q5: In-flight 분기의 C++ 인터페이스와 Python 인터페이스가 일관성을 유지합니까? TensorRT-LLM 설치 비용이 높네요. 향후 개선 계획이 있나요? TensorRT-LLM은 VLLM과 다른 개발 관점을 가지나요?

A5: 우리는 이미 계획 중인 C++ 런타임과 Python 런타임 간의 일관된 인터페이스를 제공하기 위해 최선을 다할 것입니다. 이전까지 팀에서는 성능 개선과 기능 개선에 중점을 두었으며, 앞으로도 계속해서 사용성 개선을 진행할 예정입니다. 여기서 vllm과 직접 비교하는 것은 쉽지 않지만 NVIDIA는 업계에 최고의 LLM 추론 솔루션을 제공하기 위해 TensorRT-LLM 개발, 커뮤니티 및 고객 지원에 대한 투자를 계속 늘릴 것입니다.

위 내용은 NVIDIA 대규모 모델 추론 프레임워크 살펴보기: TensorRT-LLM의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 51cto.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제