부본 대규모 언어 모델 추론 가속화: 효율적인 배포를 위한 기술 - Unite.AI
Rescale 미팅 예약

신속한 엔지니어링

대규모 언어 모델 추론 가속화: 효율적인 배포를 위한 기술

mm

게재

 on

LLM 추론 속도 향상

GPT-4와 같은 대규모 언어 모델(LLM), 야마, PaLM은 자연어 처리로 가능한 것의 경계를 넓히고 있습니다. 그러나 이러한 대규모 모델을 프로덕션 환경에 배포하면 계산 요구 사항, 메모리 사용량, 대기 시간 및 비용 측면에서 심각한 문제가 발생합니다. LLM의 규모가 계속 커지고 성능이 향상됨에 따라 추론 성능을 최적화하는 것이 실제 애플리케이션에 매우 중요합니다.

이 기술 심층 분석에서는 LLM 추론을 가속화하여 더 빠른 응답 시간, 더 높은 처리량 및 하드웨어 리소스의 더 효율적인 활용을 가능하게 하는 최첨단 기술을 살펴보겠습니다. 수치 정밀도 기술과 새로운 주의 메커니즘부터 효율적인 텍스트 생성을 위해 명시적으로 맞춤화된 아키텍처 혁신에 이르기까지 다양한 방법을 다룰 것입니다.

LLM 추론이 기존 NLP 모델에 비해 왜 그렇게 어려운지 이해하는 것부터 시작해 보겠습니다.

대규모 언어 모델을 사용한 추론 과제

LLM이 출현하기 전에 자연어 처리는 텍스트 분류, 명명된 엔터티 인식, 감정 분석과 같은 특정 작업에 초점을 맞춘 소규모 모델에 의존했습니다. 여전히 계산 집약적이지만 이러한 모델은 적당한 하드웨어에 배포할 수 있으며 상대적으로 간단한 추론 프로세스를 따를 수 있습니다.

반면에 LLM은 패러다임 전환을 나타냅니다. 이러한 모델은 수십억 개의 매개변수를 사용하여 방대한 데이터 세트에 대해 훈련되어 탁월한 능력으로 광범위한 언어 작업을 수행할 수 있습니다. 그러나 이 기능에는 비용이 발생합니다. 즉, 훈련과 추론 모두에서 컴퓨팅 요구가 극적으로 증가합니다.

한 가지 주요 과제는 LLM을 사용한 텍스트 생성의 자동 회귀 특성입니다. 인간과 유사한 텍스트를 생성하기 위해 이러한 모델은 이전에 생성된 출력에 따라 각각의 새 토큰을 사용하여 한 번에 하나의 토큰(단어 또는 하위 단어)을 예측합니다. 이러한 순차적 종속성은 효율적인 병렬화를 방해하고 시퀀스 길이에 따라 다항식으로 확장되는 계산 요구 사항을 초래합니다.

또한 LLM에서는 고품질 텍스트 생성에 필요한 컨텍스트를 설정하기 위해 긴 입력 시퀀스(프롬프트)가 필요한 경우가 많습니다. 입력 길이가 길수록 중간 상태 및 주의 매트릭스를 저장하기 위해 더 많은 메모리가 필요하므로 하드웨어 리소스가 더욱 부담됩니다.

이러한 고유한 문제로 인해 양자화 및 정적 계산 그래프와 같은 기존 최적화 기술은 부족하여 LLM 성능을 유지하면서 의미 있는 속도 향상을 제공하는 데 어려움을 겪을 수 있습니다. LLM 추론을 가속화하기 위해 명시적으로 맞춤화된 몇 가지 주요 전략을 살펴보겠습니다.

수치 정밀 기술

32비트에서 16비트 정밀도까지

32비트에서 16비트 정밀도까지

가속화를 위한 하나의 길 LLM 추론은 모델 가중치 및 활성화에 대해 감소된 수치 정밀도를 활용하는 것입니다. PyTorch 및 TensorFlow와 같은 최신 딥 러닝 프레임워크는 일반적으로 기본적으로 32비트 부동 소수점(FP32) 정밀도를 사용합니다. 그러나 연구에 따르면 LLM은 16비트(FP16), 8비트 정수(INT8) 또는 4비트 정수(INT4)와 같이 낮은 정밀도로 작동할 때도 높은 정확도를 유지할 수 있는 경우가 많습니다.

수치 정밀도를 줄이면 다음과 같은 여러 가지 이점이 있습니다.

  • 메모리 공간 감소: 정밀도가 낮은 표현에는 더 적은 메모리가 필요하므로 더 큰 모델이나 배치 크기를 동일한 하드웨어 제약 조건에 맞출 수 있습니다.
  • 더 빠른 계산: 많은 최신 CPU와 GPU는 낮은 정밀도의 연산을 위한 특수 명령과 하드웨어 가속을 제공하여 상당한 속도 향상을 가능하게 합니다.
  • 향상된 에너지 효율: 더 적은 메모리 요구 사항과 더 빠른 계산을 통해 낮은 정밀도의 추론은 에너지 소비 감소로 이어질 수 있습니다. 이는 엣지 및 모바일 배포에 중요한 이점입니다.

강력한 수치 정밀도 기술은 FP32 작동에 비해 약간의 정확도 손실을 초래합니다. 핵심은 특정 사용 사례에 대한 계산상의 이점과 잠재적인 성능 저하 간의 균형을 신중하게 평가하는 것입니다.

LLM을 사용한 양자화에는 두 가지 주요 접근 방식이 있습니다.

훈련 후 양자화(PTQ): 이 방법에서는 LLM이 먼저 표준 FP32 정밀도를 사용하여 훈련됩니다. 훈련 후 모델 가중치는 INT8 또는 INT4와 같이 정밀도가 낮은 형식으로 양자화(변환)됩니다. PTQ는 구현이 간단하지만 정확도가 더 떨어질 수 있습니다.

QAT(양자화 인식 훈련): QAT를 사용하면 훈련 단계 자체에서 양자화 프로세스가 시뮬레이션됩니다. 이를 통해 모델은 양자화 오류를 보상하는 방법을 학습하여 최종 양자화 모델이 배포될 때 정확도 저하를 최소화할 수 있습니다. QAT는 더 복잡하지만 PTQ에 비해 더 나은 결과를 산출하는 경우가 많습니다.

실제 적용을 위해 다음과 같은 플랫폼에서 사용 가능한 사전 양자화된 모델을 활용할 수 있습니다. 포옹하는 얼굴, 다양한 양자화 방법을 통해 최적화된 다양한 모델을 호스팅합니다. 예를 들어 Auto-GPTQ를 사용하여 양자화된 모델이 필요한 경우 사용자는 Hugging Face의 변환기 라이브러리를 사용하여 해당 모델을 쉽게 로드할 수 있습니다. 또한 모델을 양자화하기 위해 기존 라이브러리와 원활하게 통합되어 모델을 효율적으로 압축하는 AutoGPTQ와 같은 도구를 활용할 수 있습니다.

다음은 Hugging Face 변환기 라이브러리를 사용하여 사전 양자화된 Llama-2-7b 모델을 로드하는 예입니다.

from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "TheBloke/Llama-2-7b-Chat-GPTQ"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id)
And for custom quantization, one might follow these steps using the AutoGPTQ toolkit:
from transformers import AutoModelForCausalLM, AutoTokenizer, GPTQConfig
model_id = "llama-2-7b-original"
tokenizer = AutoTokenizer.from_pretrained(model_id)
quantization_config = GPTQConfig(bits=4, dataset="your-dataset", tokenizer=tokenizer)
model = AutoModelForCausalLM.from_pretrained(model_id, quantization_config=quantization_config)

양자화에는 모델 품질을 유지하기 위해 양자화 후 미세 조정이나 즉각적인 엔지니어링이 필요할 수 있다는 점을 기억하십시오. 새로운 양자화를 위해 양자화된 모델을 Hugging Face와 같은 플랫폼에 푸시하여 커뮤니티에 다시 기여할 수 있습니다.

특정 사용 사례에 대한 양자화 전략을 선택할 때 항상 모델 크기, 계산 요구 사항 및 성능 간의 균형을 유지하십시오.

 

플래시 어텐션 알고리즘

다중 헤드 주의 메커니즘은 변환기 기반 LLM의 핵심 구성 요소로, 모델이 장거리 종속성과 상황에 맞는 표현을 캡처할 수 있도록 해줍니다. 그러나 이 주의 작업은 새 토큰마다 동일한 값을 많이 다시 계산해야 하기 때문에 자동 회귀 텍스트 생성에 계산적으로 비효율적입니다.

XNUMXD덴탈의 플래시 어텐션 알고리즘FlashAttention 문서에 소개된 는 주의 작업에 대해 보다 메모리 효율적이고 병렬화 친화적인 접근 방식을 제공합니다. Flash Attention은 각 토큰의 어텐션 값을 다시 계산하는 대신 중간 키/값 행렬을 캐시하고 재사용하여 중복 계산을 방지합니다.

이러한 최적화는 계산 오버헤드를 줄일 뿐만 아니라 메모리 액세스 패턴을 개선하여 GPU 메모리 대역폭과 병렬성을 더 잘 활용하게 합니다.

Flash Attention의 세부 사항은 상당히 복잡하지만 높은 수준의 아이디어는 Attention 작업을 두 단계로 분해하는 것입니다.

  1. 접두사 합계 임베딩: 이 단계에서는 모든 입력 토큰에 대한 키/값 임베딩을 계산하고 캐시하므로 생성 중에 효율적으로 재사용할 수 있습니다.
  2. 인과적 관심: 실제 주의 작업은 이제 첫 번째 단계에서 캐시된 키/값 임베딩을 활용하도록 최적화되었습니다.

이러한 단계를 분리함으로써 Flash Attention은 고도의 병렬 GPU 작업을 활용하여 LLM 추론의 주의 병목 현상을 크게 가속화할 수 있습니다.

다음은 LLM을 사용하여 Flash Attention을 구현하는 간단한 개념적 그림입니다.

from transformers import AutoModelForCausalLM
import torch
from flash_attention import flash_attention
# Load an LLM like OctoCoder
model = AutoModelForCausalLM.from_pretrained("bigcode/octocoder")
# Sample system prompt that guides the model towards being a better coding assistant
system_prompt = """... (system prompt details) ..."""
# Preparing a longer input with the system prompt
long_prompt = system_prompt + "Question: Please write a function in Python that transforms bytes to Gigabytes."
# Converting the model for Flash Attention optimization
model.to_bettertransformer()
# Running the model with Flash Attention
start_time = time.time()
with torch.backends.cuda.sdp_kernel(enable_flash=True):
result = model.generate(long_prompt, max_new_tokens=60)
print(f"Generated in {time.time() - start_time} seconds.")

Flash Attention은 인상적인 성능 향상을 제공하지만 기존 변환기 아키텍처 내에서 작동합니다. 가속화된 LLM 추론의 잠재력을 완전히 활용하려면 이 작업에 특별히 맞춰진 아키텍처 혁신을 탐구해야 합니다.

LLM 가지치기

Pruning LLM은 기능을 유지하면서 모델 크기를 줄이는 기술입니다. 헤세 행렬 근사를 기반으로 가중치 중요성에 대한 데이터 종속 추정기를 사용합니다. 가지치기에서는 덜 중요한 가중치 그룹이 제거된 다음 정확도를 복구하기 위해 모델이 미세 조정됩니다. LLM-Pruner 패키지는 다양한 전략이 지원되는 가지치기용 스크립트를 제공합니다. 가지치기에는 의존성 발견, 그룹 기여도 추정, 간단한 사후 교육이 포함된 회복 단계가 포함됩니다.

다음은 사용법을 보여주는 단순화된 Python 코드 예제입니다. LLM-프루너 LLaMa 모델의 경우:

from transformers import AutoModelForSequenceClassification
from pruning import LLMPruner
# Load pre-trained LLaMa model
model = AutoModelForSequenceClassification.from_pretrained("llama-base")
# Initialize the pruner with desired configuration
pruner = LLMPruner(
model,
pruning_ratio=0.25,
block_mlp_layers=(4, 30),
block_attention_layers=(4, 30),
pruner_type='taylor'
)
# Execute pruning
pruned_model = pruner.prune()
# Fine-tune the pruned model
pruned_model.fine_tune(training_data)

이 코드 스케치는 사전 훈련된 LLaMa 모델 로드, 특정 구성(예: 정리할 레이어 및 정리기 유형)으로 정리기를 설정하고 정리 프로세스를 실행하고 마지막으로 정리된 모델을 미세 조정하는 것을 나타냅니다.

실제 구현을 위해서는 특정 모델 이름, 데이터 경로, 미세 조정 프로세스를 위한 추가 매개변수 등의 세부 정보를 입력해야 합니다. 또한 이 코드는 개념적 표현이므로 실제 구문은 사용되는 라이브러리 및 버전에 따라 다를 수 있습니다.

효율적인 텍스트 생성을 위한 아키텍처 혁신

변환기 아키텍처는 언어 모델링 작업에 매우 효과적이지만 범용 시퀀스-시퀀스 모델로 설계되었습니다. 긴 입력 컨텍스트가 있는 텍스트 생성 작업을 위해 LLM을 배포할 때 연구자들은 보다 전문화된 아키텍처가 품질 저하 없이 추론 효율성을 크게 향상시킬 수 있다는 사실을 발견했습니다.

더 빠른 LLM 추론을 가능하게 하는 몇 가지 주요 아키텍처 혁신은 다음과 같습니다.

알리바이: PAL-Instruction 논문에 소개된 Alibi 아키텍처는 긴 입력 컨텍스트의 모델링을 텍스트 생성 프로세스 자체와 분리합니다. 입력 컨텍스트(“알리바이”)의 압축된 표현을 사용하여 생성 프로세스를 초기화하므로 자동 회귀 생성 중에 전체 입력 시퀀스를 반복적으로 처리할 필요가 없습니다.

로터리 임베딩: 회전식 임베딩 기술은 표준 위치 임베딩을 사용하는 대신 회전 행렬을 사용하여 위치 정보를 보다 효율적으로 인코딩합니다. 이 접근 방식은 성능을 향상시키고 더 긴 입력 시퀀스를 처리할 수 있는 것으로 나타났습니다.

MQA(멀티 쿼리 어텐션): 전통적인 어텐션에서는 각 출력 토큰이 전체 입력 시퀀스에 참여하므로 중복 계산이 발생합니다. MQA 여러 출력 토큰에 걸쳐 계산을 공유하도록 주의 작업을 재구성하여 전반적인 복잡성을 줄입니다.

다중 쿼리 주의

다중 쿼리 주의

그룹화된 쿼리 어텐션(GQA): MQA를 기반으로 GQA는 출력 토큰을 클러스터로 그룹화하고 각 클러스터에 대해 공동으로 주의를 계산합니다. 이 접근 방식은 고품질 텍스트 생성을 유지하면서 계산 요구 사항을 더욱 줄입니다.

여전히 활발한 연구 및 개발이 진행되는 동안 이러한 아키텍처 혁신은 특히 Flash Attention 및 수치 정밀도 최적화와 같은 기술과 결합될 때 LLM 추론 작업의 놀라운 속도 향상을 보여주었습니다.

실제 배포 고려 사항

핵심 알고리즘 및 아키텍처 외에도 LLM을 프로덕션 환경에 배포할 때 탐색해야 할 몇 가지 실제 고려 사항과 장단점이 있습니다.

하드웨어 가속: CPU는 LLM 추론을 처리할 수 있지만 높은 처리량과 짧은 지연 시간을 달성하려면 GPU 및 Google의 TPU와 같은 기타 가속기가 필수적입니다. 올바른 하드웨어를 선택하고 메모리 사용량을 최적화하는 것이 중요합니다.

일괄 처리 및 병렬성: 하드웨어 병렬성을 최대한 활용하기 위해 일괄 추론(여러 입력을 동시에 처리) 및 모델 병렬성(여러 장치에 LLM 분산)과 같은 전략을 사용하면 처리량을 크게 높일 수 있습니다.

양자화와 품질의 균형: 양자화 정도(8비트, 4비트 등)는 추론 속도와 메모리 사용량에 직접적인 영향을 미칠 뿐만 아니라 출력 품질에도 영향을 미칩니다. 이러한 절충안은 각 사용 사례에 대해 신중하게 평가되어야 합니다.

모델 증류: 양자화의 대안인 모델 증류 기술은 큰 LLM을 높은 정확도를 유지하면서 더 작고 효율적인 학생 모델로 압축할 수 있습니다.

캐싱 및 최적화된 런타임: NVIDIA의 TensorRT와 같은 최적화된 딥 러닝 런타임과 LLM 서비스용으로 설계된 프레임워크(예: mosaicML의 Composable Inference Suite)는 연산자 융합, 커널 최적화, 지능형 캐싱 전략과 같은 기술을 통해 상당한 성능 향상을 제공할 수 있습니다.

최적의 LLM 배포 경로에는 응용 프로그램의 특정 요구 사항, 인프라 제약 조건 및 성능 목표를 신중하게 고려하면서 여러 기술을 결합하는 것이 포함되는 경우가 많습니다.

결론

대규모 언어 모델이 급속도로 발전함에 따라 실제 애플리케이션을 활성화하고 이러한 강력한 AI 기능에 대한 액세스를 민주화하기 위해 추론 성능을 가속화하는 것이 점점 더 중요해지고 있습니다.

이 기술 가이드에서는 수치 정밀도 최적화, Flash Attention과 같은 새로운 주의 알고리즘, 효율적인 텍스트 생성을 위해 맞춤화된 아키텍처 혁신을 포괄하는 최첨단 기술을 살펴보았습니다. 각 접근 방식은 고유한 장점을 제공하지만 진정한 힘은 속도, 메모리 사용량 및 출력 품질 간의 복잡한 균형을 탐색하면서 여러 전략을 결합하는 데 있는 경우가 많습니다.

앞으로 우리는 더 유능하고 접근 가능한 LLM에 대한 끊임없는 수요에 힘입어 이 영역에서 지속적인 연구 및 개발을 기대할 수 있습니다. 하드웨어 가속 및 모델 압축부터 완전히 새로운 아키텍처에 이르기까지 효율적인 LLM 추론에 대한 탐구는 자연어 처리 및 인공 지능 세계에서 여전히 흥미로운 분야로 남아 있습니다.

저는 지난 50년 동안 기계 학습과 딥 러닝의 매혹적인 세계에 몰두했습니다. 저의 열정과 전문 ​​지식은 특히 AI/ML에 중점을 둔 XNUMX개 이상의 다양한 소프트웨어 엔지니어링 프로젝트에 기여하도록 이끌었습니다. 나의 계속되는 호기심은 또한 내가 더 탐구하고 싶은 분야인 자연어 처리로 나를 이끌었습니다.