AI 또는 풀스택 개발에 어려움을 겪고 계신가요? 맞춤형 조언, 기술 통합 등 유니티 전문가가 도와드리겠습니다. 다음 연락처로 문의하세요. [email protected].

GCP 컴퓨트 엔진에서 프로덕션 환경에 LLaMA 3.1 405B 설치 및 배포하기

LLaMA 3.1 405b는 Meta AI에서 개발한 대규모 언어 모델로, 파라미터 크기 면에서 공개적으로 사용 가능한 AI 모델 중 가장 큰 규모인 4,050억 개의 파라미터를 보유하고 있습니다. 다양한 크기(8B, 70B, 405B 파라미터)의 모델을 포함하는 Llama 3.1 제품군에 속합니다.

특히 405B 버전은 다양한 벤치마크에서 GPT-4와 같은 일부 최고급 비공개 소스 모델의 성능과 비슷하거나 능가하는 것을 목표로 하여 언어 이해, 생성 및 기타 작업에서 최첨단 기능을 제공하는 것으로 나타났습니다. Llama 3.1 모델은 다국어 지원이 강화되어 여러 언어로 텍스트를 이해하고 생성할 수 있으므로 다양한 지역과 사용자 기반에 걸쳐 적용 범위를 넓힐 수 있습니다.

이 문서에서는 Google Cloud Platform(GCP) 컴퓨팅 엔진에서 LLaMA 3.1 405B를 프로덕션 환경에 설치하고 배포하는 방법을 설명합니다. 먼저 하드웨어 요구 사항을 살펴본 다음, GCP에서의 인스턴스 프로비저닝, vLLM을 사용한 배포 및 정량화에 대해 설명합니다.

LLaMA 3.1 405B

LLaMA 3.1 405B: 하드웨어 요구 사항

Llama 3.1 405B를 실행하기 위한 하드웨어 요구 사항은 크기와 복잡성 때문에 상당히 광범위합니다. LLM을 배포할 때 항상 그렇듯이 가장 복잡한 부분은 GPU입니다. 이 모델을 배포하려면 많은 VRAM(즉, GPU 메모리)이 필요합니다:

이러한 요구 사항을 고려할 때 일반적으로 다음과 같은 설정을 고려합니다:

평소와 마찬가지로 정량화에 주의해야 하며 모델의 품질이 너무 많이 저하되지 않도록 해야 합니다. 테스트에서 fp8 양자화는 모델의 품질에 해를 끼치지 않는 것으로 보이므로 이 글에서는 이를 사용하겠습니다.

GCP 컴퓨트 엔진에서 LLaMA 3.1 405B용 인스턴스 프로비저닝하기

구글 클라우드 플랫폼(GCP)은 AI 워크로드를 배포하고 확장하는 데 흥미로운 제공업체입니다. 비교적 저렴하고 우수한 GPU를 제공합니다(NVIDIA H100 80GB, NVIDIA A100 80GB, NVIDIA V100, NVIDIA L4, NVIDIA T4...).

또한 인스턴스 선택에 있어서도 매우 유연합니다. 예를 들어 하나 이상의 H100 GPU로 인스턴스를 프로비저닝할 수 있습니다: 1xH100, 2xH100, 4xH100 또는 8xH100.

하지만 신규 계정인 경우 GPU 인스턴스 프로비저닝이 허용되지 않을 수 있으며, 이 경우 지원팀에 문의하여 할당량 증가를 요청해야 합니다.

첫 번째 단계로 GCP에서 새 프로젝트를 생성해야 합니다. 그런 다음 프로젝트에 Compute Engine API를 활성화해야 합니다. GCP 콘솔의 API 라이브러리로 이동하여 "Compute Engine"을 검색하면 됩니다. 이를 클릭한 다음 "사용"을 클릭하여 API를 활성화합니다.

API를 활성화하면 새 인스턴스를 생성할 수 있습니다. GCP 콘솔의 "VM 인스턴스" 섹션으로 이동하여 "인스턴스 만들기"를 클릭하면 됩니다.

그러면 머신 유형을 선택하라는 메시지가 표시됩니다. fp8 모드의 LLaMA 3.1 405B의 경우, 8xH100 GPU가 장착된 a3-highgpu-1g 머신을 선택해야 합니다.

LLaMA 3.1 405B용 GCP 인스턴스 LLaMA 3.1 405B용 GCP 인스턴스

그런 다음 네트워킹, 스토리지 등과 같은 VM에 대한 많은 세부 사항을 설정할 수 있어야 합니다. 이 글에서는 이러한 설정을 모두 검토하지는 않겠지만 이미지 유형과 스토리지에 중점을 두겠습니다.

LLaMA 3.1 405B 모델 가중치를 fp8 포맷으로 다운로드하려면 최소 500GB의 디스크 공간이 필요합니다. 또한 CUDA 12가 이미 설치된 Linux 딥 러닝 이미지를 사용하면 나중에 작업을 절약할 수 있으므로 사용하는 것이 좋습니다. 자세한 내용은 'OS 및 스토리지' 섹션에서 확인할 수 있습니다:

LLaMA 3.1 405B용 GCP 이미지 및 디스크 공간 LLaMA 3.1 405B용 GCP 이미지 및 디스크 공간

vLLM 설치

가상 대규모 언어 모델의 약자인 vLLM은 특히 추론에 대규모 언어 모델(LLM)을 제공하고 활용하는 방식에서 AI 분야의 중요한 발전을 나타냅니다.

vLLM은 처리량이 높고 지연 시간이 짧은 추론을 위해 설계되어 빠르고 효율적인 언어 처리가 중요한 애플리케이션에 이상적입니다. 관심 키와 값 메모리를 보다 효율적으로 관리하여 메모리 사용량을 최적화하는 PagedAttention과 같은 혁신적인 기술을 통해 이를 달성하며, 허깅페이스 트랜스포머와 같은 기존 방식에 비해 최대 24배 높은 처리량을 제공합니다.

vLLM의 효율성의 핵심은 메모리 관리에 있습니다. vLLM은 PagedAttention을 사용하여 키-값(KV) 캐시를 블록으로 분할함으로써 메모리 활용도를 높이고 LLM의 GPU 메모리 사용에서 흔히 발생하는 병목 현상인 조각화를 줄입니다. 이 접근 방식은 처리 속도를 높일 뿐만 아니라 성능 저하 없이 더 많은 요청을 동시에 처리할 수 있습니다.

추론 및 서빙 엔진인 vLLM은 단순히 LLM을 실행하는 것이 아니라 리소스 활용을 극대화하는 방식으로 실행하는 데 중점을 둡니다. 수신 요청의 지속적인 일괄 처리와 같은 기술을 사용하여 GPU를 최대한 활용함으로써 유휴 시간을 줄이고 전반적인 효율성을 높입니다.

vLLM은 모델 가중치의 정밀도를 줄여 메모리 사용량을 줄이고 추론 속도를 높일 수 있는 다양한 양자화 기법(예: GPTQ, AWQ, INT4, INT8, FP8 등)을 지원하며, 이를 통해 잠재적으로 추론 속도를 높일 수 있습니다.

vLLM 설치는 비교적 쉽습니다. GCP VM 인스턴스에 연결하고 pip를 사용하여 vLLM을 설치해 보겠습니다:

pip install vllm

8개의 H100 GPU에서 분산 추론을 수행할 예정이므로 Ray도 설치해야 합니다:

pip install ray

vLLM을 설치하는 동안 호환성 문제가 발생하는 경우 소스에서 vLLM을 컴파일하거나 해당 Docker 이미지를 사용하는 것이 더 간단할 수 있습니다: vLLM 설치 지침을 참조하세요.

LLaMA 3.1 405B용 추론 서버

모델을 테스트하기 위해 기본적인 Python 예제부터 시작해 보겠습니다:

from vllm import LLM

# Load LLaMA 3.1 405B on 8 GPUs
llm = LLM("neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic", tensor_parallel_size=8)

print(llm.generate("What is the difference between fp8 quantization and int8 quantization?"))

Python 스크립트를 실행할 수 있습니다. 처음 실행하는 경우 모델이 다운로드되어 GPU에 로드될 때까지 기다린 다음 다음과 같은 응답을 받게 됩니다:

FP8 (Floating-Point 8) and INT8 (Integer 8) are both quantization techniques used to reduce the precision of numerical values in deep learning models, but they differ in their representation and behavior.

**INT8 Quantization**

INT8 quantization represents numbers as 8-bit integers, which can take on values between -128 and 127 (or 0 and 255 for unsigned integers). This means that the precision of the numbers is limited to 8 bits, and any values outside this range are clipped or saturated.

INT8 quantization is a simple and widely used technique, especially for integer-based architectures like ARM and x86. Most deep learning frameworks, including TensorFlow and PyTorch, support INT8 quantization.

**FP8 Quantization**

FP8 quantization, on the other hand, represents numbers as 8-bit floating-point numbers, with 1 sign bit, 2 exponent bits, and 5 mantissa bits. This allows for a much larger dynamic range than INT8, with values that can be as small as 2^-14 or as large as 2^15.

FP8 quantization is a more recent development, and its main advantage is that it can provide better accuracy than INT8 quantization, especially for models that require a large dynamic range, such as those with batch normalization or depthwise separable convolutions. FP8 is also more suitable for models that are sensitive to quantization noise, like those with recurrent neural networks (RNNs) or long short-term memory (LSTM) networks.

**Key differences**

Here are the key differences between FP8 and INT8 quantization:

1. **Dynamic range**: FP8 has a much larger dynamic range than INT8, which means it can represent a wider range of values.
2. **Precision**: FP8 has a lower precision than INT8, with 5 mantissa bits compared to 8 bits for INT8.
3. **Behavior**: FP8 is more suitable for models that require a large dynamic range, while INT8 is better suited for models with smaller weights and activations.
4. **Hardware support**: INT8 is widely supported by most hardware platforms, while FP8 is still an emerging standard, with limited hardware support.

In summary, FP8 quantization offers better accuracy and a larger dynamic range than INT8 quantization, but it requires more sophisticated hardware support and may not be suitable for all models or applications. 

LLaMA 3.1 405B 모델은 Neural Magic에 의해 이미 vLLM용 fp8로 양자화되었으므로 양자화를 다시 수행할 필요가 없습니다. HuggingFace 허브에서 양자화된 모델을 로드하기만 하면 됩니다.

tensor_parallel_size 매개변수는 머신에서 보유하고 있는 GPU 수에 따라 설정됩니다.

하지만 이 간단한 Python 스크립트는 적절한 프로덕션 서버가 아닙니다. 이제 많은 요청을 병렬로 처리하고 처리량을 최대화하기 위해 추론 서버를 시작하겠습니다:

python -m vllm.entrypoints.openai.api_server \
--model neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic \
--tensor-parallel-size 8

모델이 로드되면 두 번째 터미널을 시작하고 몇 가지 요청을 할 수 있습니다:

curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
    "model": "neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic",
    "prompt": "Who are you?"
}'

I'm an artificial intelligence model known as Llama. Llama stands for "Large Language Model Meta AI."

결론

LLaMA 3.1 405B는 최첨단 제너레이티브 AI 모델이지만 프로덕션에 배포하는 것은 쉽지 않습니다.

가장 큰 문제는 적합한 하드웨어를 찾는 것입니다. GPU는 비용이 매우 비싸고 전 세계적으로 공급이 부족합니다. 하지만 적절한 GPU를 프로비저닝할 수 있다면 vLLM과 같은 추론 서버를 사용하여 모델을 배포하는 것은 매우 쉽습니다.

이러한 대규모 모델의 경우, 저희처럼 양자화를 활용하여 VRAM 사용량을 줄이고 지연 시간을 개선할 수 있습니다. 하지만 양자화가 모델의 정확도를 떨어뜨릴 수 있으므로 항상 만병통치약은 아닙니다.

LLaMA 3.1 405B를 직접 배포할 수 없거나 배포하고 싶지 않은 경우, NLP Cloud에서 쉽게 사용하여 이 훌륭한 모델을 프로덕션 환경에서 대규모로 활용할 수 있습니다. 지금 NLP 클라우드에서 LLaMA 3.1 405B를 사용해 보세요!

LLaMA 3.1 405B 및 AI 전반에 대해 궁금한 점이 있으시면 언제든지 문의해 주세요!

Julien
NLP 클라우드의 CTO