Mesh LLM: iroh 기반 분산 AI 컴퓨팅
Mesh LLM: distributed AI computing on iroh
TL;DR Highlight
사무실, 집, 클라우드에 흩어진 GPU들을 하나의 OpenAI 호환 API로 묶어주는 분산 LLM 실행 시스템으로, 비싼 API 비용 없이 큰 모델을 직접 운영할 수 있다.
Who Should Read
GPU가 여러 대 있는데 대형 모델을 혼자 돌리기엔 VRAM이 부족한 팀이나, OpenAI API 비용을 줄이고 데이터 프라이버시를 직접 통제하고 싶은 ML 인프라 담당 개발자.
Core Mechanics
- Mesh LLM은 여러 머신의 GPU와 메모리를 묶어 하나의 OpenAI 호환 API(http://localhost:9337/v1)로 노출한다. 기존 OpenAI 클라이언트 코드를 그대로 써도 되고, 실제 추론이 어느 머신에서 일어나는지 신경 쓸 필요가 없다.
- 요청 처리 방식은 세 가지다. 로컬 GPU에서 직접 실행하거나, 이미 해당 모델을 올려둔 피어 노드로 라우팅하거나, 단일 머신에 올리기 너무 큰 모델은 여러 노드에 레이어 단위로 쪼개서 파이프라인으로 실행한다.
- 거대 모델 분산 실행 기능은 내부적으로 'Skippy'라고 부른다. 모델의 레이어를 범위별로 쪼개서 각 노드에 배분하고(예: 0~15레이어는 노드A, 16~31레이어는 노드B), 중간 활성화(activation) 값이 다음 스테이지로 흘러가는 파이프라인 구조다.
- 네트워킹 레이어는 iroh를 사용한다. iroh는 공개키 기반 신원, NAT 통과(hole-punching), QUIC 연결을 제공하는 P2P 네트워킹 라이브러리로, 중앙 서버 없이 어떤 두 노드 사이에서도 인증된 직접 연결을 만든다.
- 프로토콜은 QUIC의 ALPN 협상 위에서 세 채널을 사용한다. mesh-llm/1은 가십(peer 상태 공유), 라우팅, HTTP 터널 등 메인 메시용이고, mesh-llm-control/1은 설정 동기화 제어용, skippy-stage/2는 분산 모델의 레이어 간 활성화 전송용 저지연 채널이다.
- 하나의 QUIC 연결 안에서 스트림 첫 바이트 하나로 트래픽 종류를 구분한다. 0x01은 GOSSIP(피어 공지), 0x04는 TUNNEL_HTTP(추론 요청 프록시), 0x05는 ROUTE_REQUEST(모델 보유 쿼리) 등 8가지 스트림 타입이 한 연결을 공유한다.
- 기본 카탈로그에 40개 이상의 모델이 포함되어 있다. 노트북에서 돌릴 수 있는 5억 파라미터급 소형 모델부터 235B MoE(Mixture of Experts, 전체 파라미터 중 일부만 활성화하는 구조) 거대 모델까지 지원한다.
- 아키텍처는 플러그인 기반이다. 플러그인이 manifest로 제공 기능을 선언하면 런타임이 이를 시작하고 MCP, HTTP, 추론, 메시 이벤트로 노출한다. iroh 릴레이 서버를 두 리전에 운영해 직접 연결이 안 되는 노드도 폴백 경로를 확보했다.
Evidence
- MacBook Pro 사용자가 공식 swarm 페이지의 'join' 버튼을 누르고 'mesh-llm --auto' 명령어 하나로 첫 시도에 바로 작동했다고 공유했다. 모델 선택, 피어에서 다운로드, GPU 작업 확인까지 자동으로 처리됐다며, 이렇게 매끄러운 온보딩 경험은 드물다고 언급했다.
- 분산 모델의 실제 속도에 대한 의문이 제기됐는데, 모델 목록에서 Qwen 235B A22B 모델이 '2개 노드에서 16 tok/s 검증됨'이라고 명시되어 있다는 게 확인됐다. 16 tok/s는 인터랙티브 대화용으로 약간 아쉬운 속도이지만 그나마 쓸 만한 수준이라는 평가가 나왔다.
- 네트워크 대역폭이 로컬 RAM보다 훨씬 느리기 때문에 분산 추론이 실용적이냐는 회의론도 있었다. 10Gbit 이더넷조차 로컬 메모리 대비 너무 느려서 인터랙티브 사용에는 비현실적이라는 의견이 있었고, 이는 실제로 유효한 우려로 받아들여졌다.
- exo 프로젝트와의 차이점을 묻는 댓글이 있었다. exo도 Apple Silicon 기기 등 여러 머신에 모델을 분산해 실행하는 비슷한 도구인데, 두 프로젝트의 차별점에 대한 명확한 답변은 이어지지 않았다.
- 노드 간 페이로드 암호화 여부와 다른 사용자 요청을 읽을 수 있는지에 대한 보안 질문이 올라왔다. iroh가 공개키 기반 인증된 QUIC 연결을 쓰기 때문에 전송 구간은 암호화되지만, 해당 질문에 대한 공식 답변은 댓글에서 확인되지 않았다.
- 오래된 GPU를 가진 사용자는 내장 llama.cpp 빌드가 호환되지 않아 설치에 실패했다고 보고했다. 외부 llama.cpp 서비스를 프록시로 연결하는 방법도 시도했지만 성공하지 못했다며, 아직 거친 부분이 있다고 평가했다.
- AI Horde라는 유사 프로젝트를 언급한 댓글이 있었다. AI Horde는 현존하는 분산 LLM 플랫폼 중 가장 크지만 KoboldCPP 텍스트 컴플리션 API만 지원하고 채팅 컴플리션이 없어 롤플레이 외 용도로 쓰기 어렵다는 한계가 공유됐다.
How to Apply
- 팀 내 여러 개발자 PC나 사무실 서버에 GPU가 흩어져 있는데 큰 모델을 쓰고 싶다면, 각 머신에 mesh-llm을 설치하고 'mesh-llm --auto'로 참여시킨 뒤 기존 OpenAI 클라이언트의 base_url만 http://localhost:9337/v1로 바꾸면 된다. 코드 변경 없이 분산 GPU 풀을 하나의 API로 쓸 수 있다.
- 단일 머신 VRAM으로는 올릴 수 없는 235B급 MoE 모델을 실험해보고 싶다면, Skippy 분산 모드를 활용해 2개 이상의 노드에 레이어를 나눠 올릴 수 있다. Qwen 235B 기준 2노드에서 16 tok/s가 측정된 바 있으니 배치 추론이나 비실시간 태스크에 적합하다.
- 데이터가 외부 API로 나가면 안 되는 규제 환경(의료, 금융 등)에서 LLM을 써야 하는 경우, Mesh LLM으로 사내 GPU를 묶어 완전히 온프레미스 추론 환경을 구성할 수 있다. iroh의 공개키 기반 인증 QUIC 연결로 노드 간 통신도 사내 네트워크 안에서 처리된다.
- Raspberry Pi나 저사양 임베디드 디바이스처럼 단독으로는 추론이 힘든 엣지 디바이스 군집에 소형 SLM(Small Language Model)을 분산 배포하는 실험을 하려면, Mesh LLM의 플러그인 아키텍처와 iroh의 NAT 통과 기능을 활용해 중앙 서버 없이 P2P 추론 네트워크를 구성해볼 수 있다.
Code Example
# 설치 후 자동 모드로 메시 참여 (모델 자동 선택 및 다운로드)
mesh-llm --auto
# 기존 OpenAI 클라이언트에서 Mesh LLM 엔드포인트 사용
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:9337/v1",
api_key="not-needed" # 로컬이므로 불필요
)
response = client.chat.completions.create(
model="qwen-235b", # 카탈로그에 있는 모델명
messages=[{"role": "user", "content": "Hello!"}]
)
print(response.choices[0].message.content)Terminology
관련 논문
Claude Code는 프롬프트 읽기 전에 33k 토큰을 전송한다; OpenCode는 7k
동일한 모델과 작업 환경에서 Claude Code와 OpenCode의 실제 토큰 사용량을 API 레벨에서 측정한 결과, Claude Code가 시스템 프롬프트 오버헤드만으로 OpenCode 대비 4.7배 더 많은 토큰을 소비한다는 것을 확인했다.
Frugon – LLM API 호출 로그를 분석해서 더 싼 모델로 대체 가능한 구간을 찾아주는 로컬 도구
내 LLM API 비용이 어디서 새는지 로컬에서 분석해주는 오픈소스 CLI 도구로, 비싼 모델 대신 저렴한 모델로 전환 가능한 호출을 골라낸다.
로컬에서 SOTA LLM 실행하기 완전 가이드 (하드웨어부터 설정까지)
2천 달러짜리 RTX 3090 한 장부터 4만 달러짜리 RTX PRO 6000 4장 셋업까지, 로컬에서 최신 LLM을 직접 돌리는 방법을 하드웨어 선택·구성·실행 설정까지 통째로 정리한 실전 가이드다.
Manticore Search에서 ONNX 경로를 재설계해 임베딩 속도를 14배 높인 방법
Manticore Search가 기존 SentenceTransformers/Candle 백엔드를 ONNX Runtime으로 교체해 텍스트 임베딩 생성 속도를 평균 14배 향상시켰다. 별도 모델 서비스 없이 DB 내부에서 직접 임베딩을 처리하는 구조에서 INSERT 속도가 곧 임베딩 속도이기 때문에 이 개선은 실질적인 ingest 처리량 향상으로 직결된다.
Asymmetric Quantization: 97% 스토리지 절감으로 Late Interaction 검색 품질 유지하기
멀티벡터 검색 모델의 문서 벡터를 1비트 이진값으로 압축하고 쿼리 벡터만 int8로 유지하는 비대칭 양자화 기법으로, 스토리지를 97% 줄이면서 검색 품질 손실을 0.61점(NDCG@10 기준)에 그치게 만든 실제 프로덕션 적용 사례다.
Bash4LLM+ – 의존성 없는 경량 Bash LLM API 래퍼
Python이나 Node.js 없이 순수 Bash만으로 Groq 등 OpenAI 호환 LLM API를 호출할 수 있는 단일 스크립트 도구로, Termux(Android)를 포함한 모든 Unix 환경에서 동작한다.