2023년에는 많은 고급 오픈 소스 LLM이 출시되었지만 이러한 AI 모델을 프로덕션에 배포하는 것은 여전히 기술적으로 어려운 과제입니다. 이 글에서는 AWS EC2에 몇 가지 최고의 LLM을 배포하는 방법을 보여드리겠습니다: LLaMA 3 70B, Mistral 7B, Mixtral 8x7B입니다. 처리량을 최대화하기 위해 일괄 추론을 지원하는 고급 추론 엔진인 vLLM을 사용할 것입니다.
Meta는 사전 학습 및 미세 조정을 거친 다양한 생성 텍스트 모델을 포함하는 대규모 언어 모델(LLM)인 LLaMA 3 시리즈를 개발하여 출시했습니다. 이 모델들은 70억 개에서 700억 개에 이르는 매개변수로 크기가 다양합니다.
구글의 딥마인드와 메타에서 경력을 쌓은 사람들이 공동 창업한 스타트업인 미스트랄 AI는 미스트랄 7B에 이어 믹스트랄 8x7B를 통해 LLM의 세계로 진출했습니다.
미스트랄 7B가 특히 인상적인 이유는 성능입니다. 다양한 테스트에서 Llama2-13B를 능가하는 성능을 보였으며, 심지어 많은 지표에서 Llama1-34B를 능가했습니다. 이는 미스트랄 7B가 훨씬 낮은 계산 오버헤드로 비슷하거나 더 나은 기능을 제공한다는 것을 의미합니다. 코딩 작업의 경우, Mistral 7B는 CodeLlama 7B와 경쟁하며 13.4GB의 컴팩트한 크기로 표준 머신에서 실행할 수 있습니다.
Mixtral 8x7B는 다양한 애플리케이션에 적합한 적응력이 뛰어나고 신속한 모델입니다. 6배 빠른 속도로 작동하며 모든 테스트 지표에서 LLaMA 3 70B의 성능을 충족하거나 능가합니다. 이 모델은 여러 언어를 지원하며 고유한 코딩 기능을 갖추고 있습니다. 최대 32,000개의 토큰 길이의 시퀀스를 관리할 수 있습니다.
이러한 모든 모델은 오픈 소스이며 적절한 하드웨어에 액세스할 수 있는 경우 자체 서버에 배포할 수 있습니다. vLLM을 사용하여 AWS EC2에 배포하는 방법을 살펴보겠습니다.
vLLM은 효율적인 LLM 추론 및 배포를 위해 맞춤화된 신속하고 사용자 친화적인 라이브러리입니다. vLLM의 성능은 효과적인 주의 키 및 값 메모리 관리를 위한 페이징 주의, 들어오는 쿼리의 실시간 일괄 처리, 맞춤형 CUDA 커널과 같은 여러 고급 기술에서 비롯됩니다.
또한 vLLM은 텐서 병렬화를 통한 분산 추론, 출력 스트리밍, NVIDIA 및 AMD GPU 아키텍처 모두에 대한 수용을 통해 뛰어난 유연성을 제공합니다.
특히 vLLM을 사용하면 하나의 대형 GPU(예: NVIDIA A100 또는 H100) 대신 여러 개의 소형 GPU(예: NVIDIA A10)를 포함하는 AWS EC2 인스턴스에 모델을 배포할 수 있으므로 LLaMA 3, Mistral 및 Mixtral을 배포하는 데 매우 유용할 것입니다. 또한 vLLM을 사용하면 배치 추론 덕분에 모델의 처리량을 획기적으로 늘릴 수 있습니다.
LLM을 배포하는 것은 여러 가지 이유로 어려운 일입니다: VRAM(GPU 메모리) 사용량, 추론 속도, 처리량, 디스크 공간 사용량 등... 여기서는 모델을 실행하기에 충분한 VRAM이 있는 AWS EC2에서 GPU 인스턴스를 프로비저닝해야 합니다.
G5 인스턴스는 최신 NVIDIA A10 GPU에 액세스할 수 있고 최대 192GB의 VRAM까지 확장할 수 있으며(g5.48xlarge 인스턴스 참조) 비용 효율성이 매우 높기 때문에 좋은 선택입니다.
미스트랄 7B는 약 14GB의 VRAM이 필요하므로 가장 쉽게 배포할 수 있는 모델입니다. 그 다음으로는 110GB의 Mixtral 8x7B와 140GB의 LLaMA 3 70B가 있습니다. 여기서는 fp32가 아닌 fp16만 고려하며 양자화를 적용하지 않습니다.
따라서 미스트랄 7B는 g5.xlarge 인스턴스에서 실행할 수 있지만, 믹스트랄 8x7B와 LLaMA 3 70B는 g5.48xlarge 인스턴스가 필요하므로 이 자습서에서는 g5.48xlarge 인스턴스를 프로비저닝할 것입니다.
이러한 인스턴스를 프로비저닝하려면 AWS EC2 콘솔에 로그인하고 새 인스턴스를 시작하세요. g5.48xlarge 인스턴스에서 NVIDIA 딥 러닝 AMI를 선택하세요. 최소 300GB의 디스크 공간이 필요합니다.
vLLM 설치는 매우 간단합니다. 새로 생성한 AWS 인스턴스에 대한 SSH 연결을 열고 pip를 사용하여 vLLM을 설치해 보겠습니다:
pip install vllm
8개의 A10 GPU에서 분산 추론에 vLLM을 사용할 것이므로 Ray도 설치해야 합니다:
pip install ray
설치 과정에서 호환성 문제가 발생하는 경우 소스에서 vLLM을 빌드하거나 Docker 이미지를 사용하는 것이 더 쉬울 수 있습니다: 자세한 내용은 설치 설명서를 참조하세요.
이제 첫 번째 추론 스크립트를 만들 수 있습니다. 다음을 포함하는 Python 파일을 만듭니다:
from vllm import LLM
# Replace the model name with the one you want to use:
# Mixtral simple: mistralai/Mixtral-8x7B-v0.1
# Mixtral instruct: mistralai/Mixtral-8x7B-Instruct-v0.1
# Mistral 7B simple: mistralai/Mistral-7B-v0.1
# Mistral 7B instruct: mistralai/Mistral-7B-Instruct-v0.1
# LLaMA 3 70B: meta-llama/Llama-2-70b-hf
llm = LLM("mistralai/Mixtral-8x7B-Instruct-v0.1", tensor_parallel_size=8)
print(llm.generate("What is batch inference?"))
이제 Python으로 스크립트를 실행하면 다음과 같은 내용이 반환됩니다:
Batch inference is the process of applying machine learning models to a batch of data inputs all at once, rather than processing each input individually in real-time. In batch inference, a large set of inputs is collected and then processed together as a group, or "batch," by the machine learning model.
Batch inference is often used in scenarios where real-time predictions are not required, and where there is a large volume of data that needs to be processed. It can be more efficient and cost-effective than real-time inference, as it allows for the efficient use of computing resources and can reduce the latency associated with processing individual inputs.
Batch inference is commonly used in applications such as image recognition, natural language processing, and predictive analytics. For example, a company might use batch inference to analyze customer data and generate insights about purchasing patterns, or to analyze sensor data from industrial equipment to identify potential maintenance issues.
In summary, batch inference is the process of applying machine learning models to a batch of data inputs all at once, as an alternative to real-time inference. It is commonly used in scenarios where real-time predictions are not required and where there is a large volume of data that needs to be processed efficiently.
보시다시피 이것은 식은 죽 먹기입니다. 보유하고 있는 기본 GPU의 수에 따라 tensor_parallel_size를 조정해야 합니다.
위는 단발성 시나리오였습니다. 이제 여러 요청을 처리하고 즉시 일괄 추론을 수행할 수 있는 적절한 추론 서버를 시작하려고 합니다. 먼저 서버를 시작합니다:
python -m vllm.entrypoints.openai.api_server \
--model mistralai/Mixtral-8x7B-Instruct-v0.1
--tensor-parallel-size 8
잠시 후 모델이 VRAM에 올바르게 로드되면 두 번째 셸 창을 열고 몇 가지 요청을 할 수 있습니다:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "mistralai/Mixtral-8x7B-Instruct-v0.1",
"prompt": "What is batch inference?"
}'
이전과 동일한 결과가 반환되지만 이번에는 여러 요청을 동시에 수행할 수 있습니다.
GPU 활용도를 극대화하고 여러 GPU에 모델을 병렬로 쉽게 배포하려면 vLLM과 같은 고급 추론 서버를 활용하면 유용합니다.
보시다시피, 이 기술 덕분에 LLaMA 3, Mistral, Mixtral과 같은 최신 오픈 소스 AI 모델을 자체 서버에 매우 쉽게 배포할 수 있습니다.
이 튜토리얼에서는 AWS EC2를 사용했지만 물론 다른 공급업체를 사용할 수도 있습니다. 가장 큰 문제는 GPU의 비용과 가용성입니다.
이러한 LLM을 직접 배포하고 싶지 않으시다면, 대신 저희의 NLP 클라우드 API를 사용하실 것을 권장합니다. 시간을 많이 절약할 수 있고 자체 LLM을 배포하는 것보다 더 저렴할 수도 있습니다. 아직 하지 않으셨다면 지금 바로 시도해 보세요!
Vincent
NLP 클라우드의 개발자 옹호자