PSA: llama-swap 신규 그룹화 기능 'matrix' 출시, 모델 동시 실행 정밀 제어 가능
PSA: llama-swap released a new grouping feature, matrix, allowing you to fine tune which models can run together
핵심 요약
llama-swap이 VRAM 한계를 극복하기 위해 모델 간 동시 실행 조합을 최적화하는 matrix 기능을 도입했습니다.
- matrix 기능 — 모델 간 동시 실행 가능한 조합을 정의하고 최적의 스왑 로직을 제공함
- 비용 기반 언로드 — 모델 로딩 시간과 크기를 고려한 'evict_costs' 설정으로 효율적 자원 관리 가능
- 유연한 그룹화 — RAG, STT 등 용도별로 모델 그룹을 자유롭게 구성하고 자동 교체 지원
- DSL 지원 — AND(&), OR(|) 연산자를 사용해 복잡한 모델 실행 조건을 직관적으로 설정함
이전에는 모델이 단일 그룹에만 속할 수 있었습니다. 이제는 원하는 대로 그룹을 만들 수 있습니다: 단독으로 실행해야 하는 대형 모델용 그룹, STT + 대형 모델 그룹, RAG용 그룹 등입니다. 모델 교체 시 '비용'을 지능적으로 계산하여 모델을 언로드합니다.
설정 예시를 확인해 보세요: llama-swap/config.example.yaml at main · mostlygeek/llama-swap
# =============================================================================
# matrix: solver 기반 swap DSL을 사용하여 모델 동시 실행
# =============================================================================
#
# 참고:
# 설정은 matrix 또는 기존 groups 중 하나만 사용해야 합니다. 둘 다 정의하면 설정 오류가
# 발생합니다. 기존 Groups 설정 예시는 다음에서 확인할 수 있습니다:
# https://github.com/mostlygeek/llama-swap/blob/40e39f7/config.example.yaml#L334-L396
#
# matrix는 동시에 실행할 수 있는 유효한 모델 조합을 선언합니다.
# 모델 요청이 들어오면, solver는 실행 중인 모델을 최소한으로(그리고 가장 비용이 적게)
# 제거하여 해당 모델을 사용할 수 있는 가장 저렴한 방법을 찾습니다.
#
# Solver 동작:
# 1. 모델 X에 대한 요청 도착
# 2. X가 이미 실행 중이면 즉시 전달. 완료.
# 3. X를 포함하는 모든 세트 찾기
# 4. 각 후보 세트에 대해 비용 계산: 해당 세트에 포함되지 않은
# 모든 실행 중인 모델의 evict_costs 합계
# 5. 가장 낮은 비용의 후보 선택. 동점일 경우 정의된 순서대로 결정.
# 6. 중단해야 할 모델 제거. X 시작. 요청 전달.
#
# 하위 집합 의미론: [a, b, c] 세트는 모든 하위 조합이 유효함을 의미합니다.
# 요청된 모델만 시작되며, 다른 모델은 미리 로드되지 않습니다.
#
# 어떤 세트에도 나타나지 않는 모델은 단독으로만 실행될 수 있습니다.
#
matrix:
# vars: 모델의 짧은 이름 (영숫자, 1-8자)
# - 세트 및 evict_costs 설정에 필요함
# - 각 항목은 실제 모델 ID에 대한 짧은 이름임. 별칭(alias)을 사용하지 마세요.
# - 세트 DSL 로직을 짧고 읽기 쉽게 유지하기 위해 사용됨
# - 세트와 evict_costs는 vars에 정의된 식별자만 사용함
vars:
g: gemma-model
q: qwen-model
m: mistral-model
v: voxtral-model
e: reranker-model
L: llama-70B
sd: stable-diffusion
# evict_costs: 실행 중인 모델을 제거할 때의 상대적 비용 (기본값: 1)
evict_costs:
v: 50 # vllm 백엔드, 콜드 스타트가 느림
L: 30 # 70B 가중치, 로드하는 데 시간이 걸림
# sets: 동시 실행 모델 조합의 명명된 세트
# 값은 연산자가 포함된 DSL 문자열입니다:
# & AND (모델이 함께 실행됨)
# | OR (대안)
# () 그룹화
# +ref 다른 세트의 표현식을 인라인으로 참조
#
# 확장 예시:
# "L" → [L]
# "a & b" → [a, b]
# "a | b" → [a], [b]
# "(a | b) & c" → [a, c], [b, c]
# "(a | b) & (c | d)" → [a,c], [a,d], [b,c], [b,d]
# "+llms & v" → llms를 인라인으로 확장한 후 & v 적용
sets:
# LLM + TTS: g/q/m 사이를 전환해도 v가 제거되지 않음
# 확장 결과: [g,v], [q,v], [m,v]
standard: "(g | q | m) & v"
# LLM + TTS + 리랭커
# 확장 결과: [g,v,e], [q,v,e]
with_rerank: "(g | q) & v & e"
# LLM + 이미지 생성, TTS 없음
# 확장 결과: [g,sd], [q,sd]
creative: "(g | q) & sd"
# 70B 모델은 모든 GPU를 사용하므로 단독으로만 실행 가능
# 확장 결과: [L]
full: "L"


