Llama 3 추론 엔드포인트 배포하기
Llama 3 추론 엔드포인트 배포하기
Meta의 Llama 3 시리즈는 텍스트 생성 특화 모델로, 흔히 쓰는 업계 벤치마크에서 최상위권 성능을 내는 모델이에요. 이 가이드에서는 Lambda On-Demand Cloud 인스턴스 위에 vLLM으로 Llama 3 모델 서버를 띄워, 실제로 curl로 질문을 보내 답변을 받아보는 전 과정을 따라 해요.
사용할 모델은 Hugging Face에 호스팅된 meta-llama/Meta-Llama-3-8B예요. 8B와 70B 두 가지 크기로 제공되는데, 모델이 커질수록 필요한 GPU도 달라져요. 이번 도입부를 지나면 어떤 인스턴스를 골라야 하는지부터 시작해서 vLLM 서버 기동, 그리고 추론 응답 확인까지 한 흐름으로 잡을 수 있어요.
모델 크기에 따른 인스턴스 선택
| 모델 크기 | 특징 |
|---|---|
| 8B (80억 파라미터) | 리소스가 부족한 환경에도 적합한 가볍고 접근성 좋은 모델. 1x A100 또는 H100 GPU 노드가 필요해요. |
| 70B (700억 파라미터) | 복잡하거나 고난도 작업에 적합한 우수한 성능. 8x A100 또는 H100 GPU 노드가 필요해요. |
사전 준비
이 튜토리얼을 따라 하려면 몇 가지가 준비돼 있어야 해요.
- 실행하려는 Llama 3 크기에 맞는 Lambda On-Demand Cloud 인스턴스.
- 8B 모델(meta-llama/Meta-Llama-3-8B)은 1x A100 또는 H100 GPU 노드가 필요해요.
- 70B 모델(meta-llama/Meta-Llama-3-70B)은 8x A100 또는 H100 GPU 노드가 필요해요.
- Hugging Face 사용자 계정.
- 사용하려는 meta-llama-3 모델 레포지토리 읽기 권한이 포함된 Hugging Face 사용자 액세스 토큰.
이 튜토리얼의 JSON 출력은 jq로 포맷해 보여줄게요.
인스턴스 준비와 vLLM 설치
적절한 Lambda On-Demand Cloud 인스턴스와 Hugging Face 권한이 준비되면, 먼저 추론 환경을 세팅해요.
- Lambda On-Demand Cloud 인스턴스를 시작해요.
- SSH 키를 추가하거나 생성해 인스턴스에 접근할 수 있게 해요.
- 인스턴스로 SSH 접속해요.
- 전용 파이썬 환경을 만들어요. 8B 모델용이라면 이렇게요.
python3 -m venv Meta-Llama-3-8B
source Meta-Llama-3-8B/bin/activate
python3 -m pip install vllm==0.4.3 huggingface-hub==0.23.2 torch==2.3.0 numpy==1.26.4
70B 모델용이라면 별도의 가상 환경을 만들어요.
python3 -m venv Meta-Llama-3-70B
source Meta-Llama-3-70B/bin/activate
python3 -m pip install vllm==0.4.3 huggingface-hub==0.23.2 torch==2.3.0 numpy==1.26.4
- Hugging Face에 로그인해요.
huggingface-cli login
- 모델 서버를 시작해요. 필요하면 모델을 내려받고 캐시하는 과정이 함께 진행돼요. 8B는 이렇게요.
python3 -m vllm.entrypoints.openai.api_server \
--host=0.0.0.0 \
--port=8000 \
--model=meta-llama/Meta-Llama-3-8B &> api_server.log &
70B는 8개 GPU에 모델을 나눠 올리도록 텐서 병렬 크기를 지정해요.
python3 -m vllm.entrypoints.openai.api_server \
--host=0.0.0.0 \
--port=8000 \
--model=meta-llama/Meta-Llama-3-70B \
--tensor-parallel-size 8 &> api_server.log &
API 서버가 기동을 마치는 데 몇 분이 걸릴 수 있어요. 로그를 확인하면서 서버가 뜰 때까지 기다리면 돼요.
모델과 대화하기
다음 요청이 Llama 3 모델에 언어 프롬프트를 전달해요. 8B 모델에 "프랑스의 수도 이름이 뭔가요?"라고 물어보는 예시예요.
curl -X POST http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"prompt": "What is the name of the capital of France?",
"model": "meta-llama/Meta-Llama-3-8B",
"temperature": 0.0,
"max_tokens": 1 // sets the response length
}'
70B 모델에는 모델명만 바꿔서 보내면 돼요.
curl -X POST http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"prompt": "What is the name of the capital of France?",
"model": "meta-llama/Meta-Llama-3-70B",
"temperature": 0.0,
"max_tokens": 1 // sets the response length
}'
Llama 3는 이런 형식으로 응답해요. usage 필드에 프롬프트 토큰과 생성 토큰 수가 담겨 있으니 이걸로 요청 비용을 가늠해볼 수 있어요.
{
"id": "cmpl-d898e2089b7b4855b48e00684b921c95",
"object": "text_completion",
"created": 1718221710,
"model": "meta-llama/Meta-Llama-3-8B",
"choices": [
{
"index": 0,
"text": " Paris",
"logprobs": null,
"finish_reason": "length",
"stop_reason": null
}
],
"usage": {
"prompt_tokens": 11,
"total_tokens": 12,
"completion_tokens": 1
}
}
max_tokens를 1로 둔 덕분에 응답이 "Paris"라는 단어 하나로 짧게 끝난 걸 볼 수 있어요. 이렇게 모델 크기에 맞는 인스턴스를 골라 vLLM 서버를 띄우면, OpenAI 호환 /v1/completions 엔드포인트로 어떤 앱에서든 Llama 3를 호출할 수 있게 돼요.
더 알아보기
- Meta Llama 3 — 모델 공식 페이지
- Lambda On-Demand Cloud — 온디맨드 GPU 인스턴스 소개
- Hugging Face security tokens — 액세스 토큰 발급 방법
- vLLM — OpenAI 호환 API 서버를 제공하는 LLM 서빙 엔진