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

LLaMA 3를 프로덕션에 설치 및 배포하는 방법은?

메타에서 며칠 전 출시한 LLaMA 3 제너레이티브 AI 모델은 이미 인상적인 기능을 선보이고 있습니다.

이 단계별 가이드를 통해 LLaMA 3를 프로덕션 환경에 설치 및 배포하는 방법을 알아보세요. 하드웨어 요구 사항부터 배포 및 확장에 이르기까지 원활한 구현을 위해 알아야 할 모든 것을 다룹니다.

LLaMA 3

LLaMA 3 소개

메타는 텍스트 작성, 프로그래밍 또는 챗봇에 활용할 수 있는 오픈 소스 AI 모델인 라마 3의 초기 버전을 출시했습니다. 또한 메타는 주요 소셜 미디어 애플리케이션에 라마 3를 통합할 계획을 발표했습니다. 이러한 움직임은 OpenAI의 ChatGPT, 마이크로소프트의 코파일럿, 구글의 제미니와 같은 다른 AI 비서들과 경쟁하기 위한 것입니다.

라마 2와 마찬가지로 라마 3는 선도적인 AI 회사에서 제공하는 개방형 가중치를 갖춘 대규모 언어 모델로서 자유롭게 액세스할 수 있는 것이 특징입니다(일반적인 의미에서 '오픈 소스'라고 할 수는 없지만).

현재 라마 3는 Meta 웹사이트에서 두 가지 파라미터 크기로 무료로 다운로드할 수 있습니다: 80억(8B)과 700억(70B)입니다. 사용자는 등록을 통해 이 버전에 액세스할 수 있습니다. Llama 3는 다음 토큰 예측을 위한 기본 모델인 사전 학습과 사용자 명령에 맞게 미세 조정된 명령어 조정의 두 가지 버전으로 제공됩니다. 두 버전 모두 8,192개의 토큰으로 컨텍스트 제한이 있습니다.

메타의 CEO인 마크 저커버그는 드와케시 파텔과의 인터뷰에서 24,000-GPU 클러스터를 사용하여 두 개의 맞춤형 모델을 학습시켰다고 언급했습니다. 70B 모델은 약 15조 개의 토큰으로 훈련되었으며, 포화 지점이나 기능의 한계에 도달하지 않았습니다. 그 후 메타는 다른 모델을 훈련하는 데 집중하기로 결정했습니다. 또한 메타는 현재 라마 3의 400B 파라미터 버전을 개발 중이라고 밝혔는데, 엔비디아의 짐 팬과 같은 전문가들은 MMLU, GPQA, HumanEval, MATH와 같은 벤치마크에서 GPT-4 터보, 클로드 3 오퍼스, 제미니 울트라와 비슷한 성능을 낼 수 있을 것으로 보고 있습니다.

Meta에 따르면, 라마 3는 MMLU(학부 수준의 지식), GSM-8K(초등학교 수학), HumanEval(코딩), GPQA(대학원 수준의 문제), MATH(수학 단어 문제) 등 다양한 벤치마크를 사용하여 평가되었습니다. 이 벤치마크는 8B 모델이 Google의 Gemma 7B 및 Mistral 7B Instruct와 같은 오픈 웨이트 모델보다 성능이 뛰어나며, 70B 모델은 Gemini Pro 1.5 및 Claude 3 Sonnet에 비해 경쟁력이 있음을 입증합니다.

메타에 따르면 라마 3 모델은 라마 2와 마찬가지로 코딩을 이해하는 능력이 향상되었으며, 처음으로 이미지와 텍스트를 모두 사용하여 학습되었습니다. 하지만 현재 출력은 텍스트로 제한되어 있습니다.

LLaMA 3 벤치마크 LLaMA 3 벤치마크

LLaMA 3 하드웨어 요구 사항 및 AWS EC2에서 적합한 인스턴스 선택하기

많은 조직에서 프로덕션 워크로드에 AWS를 사용하는 만큼, AWS EC2에 LLaMA 3를 배포하는 방법을 살펴보겠습니다.

LLM을 구현하는 데는 VRAM(GPU 메모리) 소비, 추론 속도, 처리량, 디스크 공간 활용도 등 여러 가지 장애물이 있습니다. 이 시나리오에서는 모델 실행을 지원할 수 있는 충분한 VRAM 용량을 갖춘 GPU 인스턴스를 AWS EC2에 할당해야 합니다.

LLaMA 3 8B는 FP16에서 약 16GB의 디스크 공간과 20GB의 VRAM(GPU 메모리)이 필요합니다. 물론 CPU에 LLaMA 3를 배포할 수도 있지만 실제 프로덕션 사용 사례에는 지연 시간이 너무 길어집니다. LLaMA 3 70B의 경우, FP16에서 약 140GB의 디스크 공간과 160GB의 VRAM이 필요합니다.

LLaMA 3 8B용 20GB VRAM을 확보하는 것은 매우 쉽습니다. NVIDIA A10 GPU를 프로비저닝하는 것을 권장합니다. 이 GPU는 24GB의 VRAM과 함께 제공되며 Ampere 플랫폼 기반의 빠른 GPU입니다. AWS EC2에서 A10 GPU를 프로비저닝하려면 G5 인스턴스를 선택해야 합니다. g5.xlarge면 충분합니다.

하지만 LLaMA 3 70B 모델을 배포하는 것은 훨씬 더 어렵습니다. 이 모델에 충분한 VRAM을 제공하는 GPU가 없으므로 멀티 GPU 인스턴스를 프로비저닝해야 합니다. AWS에서 g5.48xlarge 인스턴스를 프로비저닝하면 192GB의 VRAM(A10 GPU 8개)이 제공되며, 이는 LLaMA 3 70B에 충분합니다.

이러한 구성에서는 다음과 같은 지연 시간(응답 시간)을 예상할 수 있습니다: LLaMA 3 8B의 경우 1초당 50개의 토큰 생성, LLaMA 3 70B의 경우 5초당 50개의 토큰 생성.

이러한 모델의 운영 비용을 줄이고 지연 시간을 늘리기 위해 정량화 기법을 조사할 수 있지만 이러한 최적화는 모델의 정확도를 떨어뜨릴 수 있다는 점에 유의하세요. 정량화는 이 문서의 범위를 벗어납니다.

이러한 인스턴스를 프로비저닝하려면 AWS EC2 콘솔에 로그인하고 새 인스턴스를 시작하세요. g5.xlarge 또는 g5.48xlarge 인스턴스에서 NVIDIA 딥 러닝 AMI를 선택하면 됩니다. 디스크 공간도 충분히 프로비저닝하는 것을 잊지 마세요.

AWS의 G5 인스턴스 기반 딥 러닝 AMI

vLLM을 사용한 생산 추론

vLLM은 빠르고 쉬운 LLM 추론 및 배포를 위해 설계된 라이브러리입니다. 주의 키 및 값 메모리를 최적으로 관리하기 위한 페이징 주의, 들어오는 쿼리의 실시간 일괄 처리, 개인화된 CUDA 커널 등 다양하고 정교한 방법을 통해 효율성을 높입니다.

또한 vLLM은 분산 연산(텐서 병렬 처리 사용), 실시간 스트리밍, NVIDIA 및 AMD 그래픽 카드와의 호환성을 통해 높은 수준의 적응성을 제공합니다.

특히 vLLM은 여러 개의 소형 NVIDIA A10 GPU가 장착된 AWS EC2 인스턴스를 활용할 수 있도록 지원하여 LLaMA 3 배포에 큰 도움이 될 것입니다. 이는 NVIDIA A100 또는 H100과 같은 단일 대형 GPU를 사용하는 것보다 유리합니다. 또한 vLLM은 지속적인 배치 추론을 통해 모델의 효율성을 크게 향상시킵니다.

vLLM 설정은 매우 간단합니다. 최근에 생성한 AWS 인스턴스에 SSH 연결을 설정하고 pip를 사용하여 vLLM을 설치해 보겠습니다:

pip install vllm

8개의 A10 GPU에서 vLLM을 사용하여 분산 추론을 수행할 계획이므로 Ray도 설치해야 합니다:

pip install ray

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

추론 서버 시작

이제 Python 추론 스크립트를 만들어 보겠습니다:

from vllm import LLM

# Use LLaMA 3 8B on 1 GPU
llm = LLM("meta-llama/Meta-Llama-3-8B-Instruct")

# Use LLaMA 3 70B on 8 GPUs
# llm = LLM("meta-llama/Meta-Llama-3-70B-Instruct", tensor_parallel_size=8)

print(llm.generate("What are the most popular quantization techniques for LLMs?"))

위의 스크립트를 실행할 수 있습니다. 이 스크립트를 처음 실행하는 경우 모델이 다운로드되어 GPU에 로드될 때까지 기다려야 하며 다음과 같은 메시지가 표시됩니다:

The most popular quantization techniques for Large Language Models (LLMs) are:
1. Integer Quantization
2. Floating-Point Quantization
3. Mixed-Precision Training
4. Knowledge Distillation

이해는 아주 간단합니다. 보유하고 있는 GPU 수에 따라 tensor_parallel_size를 조정하기만 하면 됩니다.

이제 수많은 요청을 관리하고 동시에 추론을 실행할 수 있는 적절한 추론 서버를 시작하려고 합니다. 시작하려면 서버를 시작합니다:

LLaMA 3 8B의 경우:

python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Meta-Llama-3-8B-Instruct

LLaMA 3 70B의 경우:

python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Meta-Llama-3-70B-Instruct
--tensor-parallel-size 8

모델이 GPU에 로드되는 데 최대 1분 정도 걸립니다. 그런 다음 두 번째 터미널을 시작하고 몇 가지 요청을 시작할 수 있습니다:

curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
    "model": "meta-llama/Meta-Llama-3-8B-Instruct",
    "prompt": "What are the most popular quantization techniques for LLMs?"
}'

이제 지속적인 일괄 처리 덕분에 많은 병렬 요청을 처리할 수 있는 적절한 프로덕션 준비 상태의 추론 서버를 갖추게 되었습니다. 하지만 어느 시점에서 요청 수가 너무 많으면 GPU에 과부하가 걸릴 수 있습니다. 이 경우 여러 GPU 인스턴스에서 모델을 복제하고 요청의 부하를 분산시켜야 합니다(하지만 이 글의 범위를 벗어남).

결론

보시다시피, vLLM과 같은 추론 서버 덕분에 LLaMA 3를 프로덕션에 배포하는 데 복잡한 코드가 필요하지 않습니다.

하지만 올바른 하드웨어를 프로비저닝하는 것은 쉽지 않습니다. 우선 이러한 GPU가 매우 비싸기 때문이기도 하지만, 현재 전 세계적으로 GPU가 부족하기 때문입니다. AWS에서 GPU 서버 프로비저닝을 처음 시도하는 경우 GPU 서버를 생성할 수 있는 권한이 없을 수 있습니다. 이 경우 지원팀에 문의하여 사용 사례를 설명해야 합니다. 이 글에서는 AWS EC2를 사용했지만 다른 공급업체(Azure, GCP, OVH, Scaleway...)도 물론 사용할 수 있습니다.

LLaMA 3를 직접 배포하는 데 관심이 없는 경우, 저희의 NLP 클라우드 API를 활용하는 것이 좋습니다. 이 옵션은 자체 LLaMA 3 인프라를 관리하는 것보다 더 효율적이고 잠재적으로 훨씬 더 비용 효율적일 수 있습니다. 지금 NLP 클라우드에서 LLaMA 3를 사용해 보세요!

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

Julien
NLP 클라우드의 CTO