단일 서버에서 llama-swap을 사용하여 여러 LLM을 로컬로 실행하는 방법


저자의 이미지 | 표의 문자
모델 출력을 비교하거나 실패한 경우 폴백을 설정하거나 동작을 사용자 정의하는 등 여러 대형 언어 모델을 실행하는 것이 유용 할 수 있습니다 (코딩에는 하나의 모델을 사용하고 다른 모델을 사용하는 것과 같은). 이것이 실제로 LLM을 실제로 사용하는 방법입니다. 같은 앱이 있습니다 poe.com 이런 종류의 설정을 제공합니다. 여러 LLM을 실행할 수있는 단일 플랫폼입니다. 그러나 현지에서 모든 작업을 수행하고 API 비용을 절약하고 데이터를 비공개로 유지하려면 어떻게해야합니까?
글쎄, 그것이 실제 문제가 나타나는 곳입니다. 이를 설정한다는 것은 일반적으로 다른 포트를 저글링하고 별도의 프로세스를 실행하며 수동으로 전환하는 것을 의미합니다. 이상적이지 않습니다.
그것이 바로 고통입니다 llama-swap 해결합니다. 매우 경량 (단일 바이너리) 인 오픈 소스 프록시 서버이며 여러 로컬 LLM을 쉽게 전환 할 수 있습니다. 간단히 말해서, OpenAi 스타일 API는 컴퓨터에서 호출을 듣고 요청한 모델을 기반으로 올바른 모델 서버를 자동으로 시작하거나 중지합니다. 작동 방식을 세분화하고 단계별 설정을 통해 로컬 컴퓨터에서 실행할 수 있습니다.
틀 llama-swap의 작동 방식
개념적으로 Llama-Swap은 LLM 서버 앞에 스마트 라우터로 앉아 있습니다. API 요청이 도착하면 (예 : a POST /v1/chat/completions
전화), 그것은 봅니다 "model"
JSON 페이로드의 필드. 그런 다음 해당 모델에 적절한 서버 프로세스를로드하여 필요한 경우 다른 모델을 종료합니다. 예를 들어, 처음 모델을 요청하는 경우 "A"
그런 다음 모델을 요청합니다 "B"
llama-swap은 “a”의 서버를 자동으로 중지하고 “b”의 서버를 시작하여 각 요청이 올바른 모델에 의해 제공되도록합니다. 이러한 동적 교환은 투명하게 발생하므로 클라이언트는 기본 프로세스에 대해 걱정하지 않고 기대 응답을 볼 수 있습니다.
기본적으로 LLAMA-SWAP를 사용하면 한 번에 하나의 모델 만 실행할 수 있습니다 (전환시 다른 모델을 언로드합니다). 그러나 그룹 기능을 사용하면이 동작을 변경할 수 있습니다. 그룹은 여러 모델을 나열하고 스왑 동작을 제어 할 수 있습니다. 예를 들어 설정 swap: false
그룹에서는 모든 그룹 구성원이 언로드하지 않고 함께 실행할 수 있음을 의미합니다. 실제로, 당신은 헤비급 모델에 하나의 그룹을 사용할 수 있으며 (한 번에 하나만 활성화) 동시에 실행하려는 작은 모델의 경우 다른 “병렬”그룹을 사용할 수 있습니다. 이를 통해 단일 서버에서 리소스 사용 및 동시성을 완전히 제어 할 수 있습니다.
틀 전제 조건
시작하기 전에 시스템에 다음과 같은 것이 있는지 확인하십시오.
- 파이썬 3 (> = 3.8) : 기본 스크립팅 및 툴링에 필요합니다.
- 홈브류 (MACOS에서) : LLM Runtimes를 쉽게 설치할 수 있습니다. 예를 들어, 설치할 수 있습니다 flame.cpp 서버와 :
이것은 llama-server
로컬로 모델을 호스팅하기위한 이진.
- flame.cpp (
llama-server
) : : 실제로 LLM 모델을 실행하는 OpenAi 호환 서버 바이너리 (위의 홈 브루를 통해 또는 소스에서 구축 된). - 포옹 얼굴 Cli: 사이트에 로그인하거나 모델 페이지를 수동으로 탐색하지 않고 로컬 컴퓨터에 직접 모델을 다운로드합니다. 다음을 사용하여 설치하십시오.
pip install -U "huggingface_hub[cli]"
- 하드웨어: 모든 현대 CPU가 작동합니다. 더 빠른 추론을 위해 GPU가 유용합니다. (Apple Silicon Mac에서는 CPU에서 실행하거나 시도 할 수 있습니다. Pytorch ‘s 지원되는 모델에 대한 MPS 백엔드. NVIDIA GPU가있는 Linux/Windows에서는 가속을 위해 Docker/Cuda 컨테이너를 사용할 수 있습니다.)
- 도커 (선택 과목): 사전 제작 된 Docker 이미지를 실행합니다. 그러나이 이미지는 주로 X86 (Intel/AMD) 시스템 용으로 설계되었으며 Apple Silicon (M1/M2) Mac에서는 안정적으로 작동하지 않기 때문에이 안내서에는 이것을 사용하지 않기로 결정했습니다. 대신, 컨테이너 오버 헤드없이 MacOS에서 직접 작동하는 베어 메탈 설치 방법을 사용했습니다.
요약하면, Python 환경과 로컬 LLM 서버 (`llama.cpp` 서버)가 필요합니다. 이를 사용하여 하나의 컴퓨터에서 두 가지 예제 모델을 호스팅합니다.
틀 단계별 지침
// 1. llama-swap 설치
OS의 최신 Llama-Swap 릴리스를 다운로드하십시오. Github 릴리스 페이지. 예를 들어, 볼 수있었습니다 v126
최신 릴리스로. 다음 명령을 실행하십시오.
# Step 1: Download the correct file
curl -L -o llama-swap.tar.gz \
Output:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 3445k 100 3445k 0 0 1283k 0 0:00:02 0:00:02 --:--:-- 5417k
이제 파일을 추출하고 실행 가능하게 만들고 버전을 확인하여 테스트하십시오.
# Step 2: Extract it
tar -xzf llama-swap.tar.gz
# Step 3: Make it executable
chmod +x llama-swap
# Step 4: Test it
./llama-swap --version
Output:
version: 126 (591a9cdf4d3314fe4b3906e939a17e76402e1655), built at 2025-06-16T23:53:50Z
// 2. 둘 이상의 LLM을 다운로드하고 준비합니다
실행할 두 가지 예제 모델을 선택하십시오. 우리는 사용할 것입니다 Qwen2.5-0.5b 그리고 smollm2-135m (작은 모델) 포옹 얼굴. 모델 파일이 필요합니다 (in GGUF 컴퓨터에서 또는 유사한 형식). 예를 들어, 포옹 얼굴 CLI :
mkdir -p ~/llm-models
huggingface-cli download bartowski/SmolLM2-135M-Instruct-GGUF \
--include "SmolLM2-135M-Instruct-Q4_K_M.gguf" --local-dir ~/llm-models
huggingface-cli download bartowski/Qwen2.5-0.5B-Instruct-GGUF \
--include "Qwen2.5-0.5B-Instruct-Q4_K_M.gguf" --local-dir ~/llm-models
이것은 :
- 디렉토리를 만듭니다
llm-models
사용자의 홈 폴더에서 - GGUF 모델 파일을 해당 폴더에 안전하게 다운로드하십시오. 다운로드 후에는 확인할 수 있습니다.
산출:
SmolLM2-135M-Instruct-Q4_K_M.gguf
Qwen2.5-0.5B-Instruct-Q4_K_M.gguf
// 3. llama-swap 구성 만들기
llama-swap은 단일 Yaml 파일을 사용하여 모델 및 서버 명령을 정의합니다. a config.yaml
다음과 같은 내용이있는 파일 :
models:
"smollm2":
cmd: |
llama-server
--model /path/to/models/llm-models/SmolLM2-135M-Instruct-Q4_K_M.gguf
--port ${PORT}
"qwen2.5":
cmd: |
llama-server
--model /path/to/models/llm-models/Qwen2.5-0.5B-Instruct-Q4_K_M.gguf
--port ${PORT}
바꾸다 /path/to/models/
실제 지역 경로와 함께. 아래의 각 항목 models:
ID를 제공합니다 "qwen2.5"
)) 그리고 쉘 cmd:
서버를 실행합니다. 우리는 사용합니다 llama-server
(llama.cpp에서) --model
GGUF 파일을 가리키고 있습니다 --port ${PORT}
. 그만큼 ${PORT}
매크로는 Llama-Swap에게 각 모델에 무료 포트를 자동으로 할당하라고 지시합니다. 그만큼 groups
섹션은 선택 사항입니다. 이 예제에 대해 생략 했으므로 기본적으로 Llama-Swap은 한 번에 하나의 모델 만 실행합니다. 이 구성에서 모델 당 많은 옵션 (별칭, 타임 아웃 등)을 사용자 정의 할 수 있습니다. 사용 가능한 옵션에 대한 자세한 내용은 전체 구성 예제 파일을 참조하십시오.
// 4. Llama-swap 실행
이진과 함께 config.yaml
준비, llama-swap을 구성으로 가리키는 시작 :
./llama-swap --config config.yaml --listen 127.0.0.1:8080
이로 인해 프록시 서버가 시작됩니다 localhost:8080
. 읽을 것입니다 config.yaml
그리고 첫 번째 요청이 도착할 때까지 (처음에) 모델을로드하지 않습니다. LLAMA-SWAP는 이제 포트에서 API 요청을 처리합니다 8080
그것들을 적절한 기본으로 전달합니다 llama-server
프로세스를 기반으로합니다 "model"
매개 변수.
// 5. 모델과 상호 작용합니다
이제 각 모델을 테스트하기 위해 OpenAi 스타일 API 호출을 할 수 있습니다. 설치하다 JQ 아래 명령을 실행하기 전에 가지고 있지 않은 경우 :
// qwen2.5 사용
curl -s \
-H "Content-Type: application/json" \
-H "Authorization: Bearer no-key" \
-d '{
"model": "qwen2.5",
"prompt": "User: What is Python?\nAssistant:",
"max_tokens": 100
}' | jq '.choices[0].text'
Output:
"Python is a popular general-purpose programming language. It is easy to learn, has a large standard library, and is compatible with many operating systems. Python is used for web development, data analysis, scientific computing, and machine learning.\nPython is a language that is popular for web development due to its simplicity, versatility and its use of modern features. It is used in a wide range of applications including web development, data analysis, scientific computing, machine learning and more. Python is a popular language in the"
// smollm2 사용
curl -s \
-H "Content-Type: application/json" \
-H "Authorization: Bearer no-key" \
-d '{
"model": "smollm2",
"prompt": "User: What is Python?\nAssistant:",
"max_tokens": 100
}' | jq '.choices[0].text'
Output:
"Python is a high-level programming language designed for simplicity and efficiency. It's known for its readability, syntax, and versatility, making it a popular choice for beginners and developers alike.\n\nWhat is Python?"
각 모델은 교육에 따라 응답합니다. llama-swap의 아름다움은 수동으로 다시 시작할 필요가 없다는 것입니다. "model"
필드, 그리고 그것은 나머지를 처리합니다. 위의 예에서 볼 수 있듯이 다음을 볼 수 있습니다.
qwen2.5
: 더 장점적이고 기술적 인 반응smollm2
: 더 간단하고 간결한 답변
Llama-Swap이 요청을 올바른 모델로 라우팅하고 있음을 확인합니다!
틀 결론
축하해요! 하나의 컴퓨터에서 두 개의 LLM을 실행하도록 LLAMA-SWAP를 설정했으며 이제 API 통화를 통해 즉시 전환 할 수 있습니다. 프록시를 설치하고 두 모델로 YAML 구성을 준비했으며 LLAMA-SWAP 경로가 올바른 백엔드에 대한 요청을 보았습니다.
다음 단계 : 다음을 포함하도록 이것을 확장 할 수 있습니다.
- 더 큰 모델 (같은
TinyLlama
,,,Phi-2
,,,Mistral
)) - 동시 서빙을위한 그룹
- 통합 랭케인,,, Fastapi또는 다른 정면 엔드
다양한 모델과 구성을 즐기십시오!
Kanwal Mehreen 기계 학습 엔지니어이자 데이터 과학에 대한 열정과 AI의 의학 교차점을 가진 기술 작가입니다. 그녀는 eBook “Chatgpt의 생산성을 극대화하는 것”을 공동 저술했습니다. APAC의 Google Generation Scholar 2022로서 그녀는 다양성과 학업 우수성을 챔피언시킵니다. 그녀는 또한 Tech Scholar, Mitacs Globalink Research Scholar 및 Harvard Wecode Scholar의 Teradata 다양성으로 인정 받고 있습니다. Kanwal은 STEM 분야의 여성에게 힘을 실어주기 위해 펨코드를 설립 한 변화에 대한 열렬한 옹호자입니다.
Post Comment