9.7. 팀 AI와 멀티노드¶
한 대의 머신으로 충분하지 않을 때—팀이 성장했거나, GPU 다양성이 필요하거나, 장애 허용이 필요한 경우—Backend.AI GO의 멀티노드 클러스터링을 사용하면 여러 머신을 하나의 AI 인프라로 묶을 수 있습니다. 팀 구성원은 어떤 노드에든 연결하여 클러스터 전체의 모든 모델에 접근할 수 있으며, 어떤 물리 머신이 호스팅하는지 신경 쓸 필요가 없습니다.
이 가이드에서는 멀티노드 클러스터 설정, 외부 접근 구성, 팀 전체 사용을 위한 클러스터 관리 방법을 안내합니다.
멀티노드를 사용하는 이유¶
| 단일 노드 설정 | 멀티노드 클러스터 |
|---|---|
| GPU 하나, 머신 하나 | 여러 머신에 GPU를 풀링 |
| 한 번에 한 사용자 (또는 대기열) | 팀 전체가 동시 접근 |
| 단일 장애 지점 | 장애 허용 — 다른 노드가 계속 운영 |
| 하나의 하드웨어 유형으로 제한 | 하드웨어 혼합: Apple Silicon + NVIDIA + AMD |
사전 준비¶
시작하기 전에 다음을 확인하세요:
- Backend.AI GO가 설치된 두 대 이상의 머신
- 모든 머신이 같은 로컬 네트워크 (또는 VPN을 통해 접근 가능)에 있을 것
- 각 노드에 최소 하나의 모델이 다운로드되어 있을 것 (노드마다 다른 모델 가능)
- API 포트(기본값:
8080)와 디스커버리 포트(기본값: mDNS용5353)에 대한 네트워크 방화벽 규칙 허용
아키텍처 개요¶
멀티노드 클러스터는 자동으로 서로를 발견하는 피어 노드로 구성됩니다:
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Node A │ │ Node B │ │ Node C │
│ (Mac Studio)│ │ (Linux GPU) │ │ (Windows) │
│ Llama 3 8B │◄──►│ Mistral 7B │◄──►│ Phi-3 │
│ MLX backend │ │ CUDA backend│ │ CUDA backend│
└──────────────┘ └──────────────┘ └──────────────┘
▲ ▲ ▲
└───────────────────┴───────────────────┘
mDNS Discovery
Continuum Router
- 노드 디스커버리: 노드는 로컬 네트워크에서 mDNS(Bonjour/Avahi)를 사용하여 서로를 발견합니다.
- Continuum Router: 각 노드의 라우터가 클러스터 전체의 사용 가능한 모델 목록을 유지하고 요청을 적절한 노드로 라우팅합니다.
- 중앙 서버 없음: 클러스터는 완전한 피어투피어 방식입니다. 다른 노드를 재구성하지 않고 어떤 노드든 추가하거나 제거할 수 있습니다.
멀티노드 클러스터 설정¶
1단계: 각 노드에서 외부 접근 활성화¶
기본적으로 Backend.AI GO는 API 서버를 localhost에만 바인딩합니다. 다른 노드와 팀 구성원이 연결할 수 있도록 외부 접근을 활성화하세요:
-
설정 > 고급을 엽니다.
-
외부 연결 허용을 활성화합니다.
-
API 포트를 설정합니다 (기본값:
8080). 일관성을 위해 모든 노드에서 같은 포트를 사용하세요. -
(선택) 인증을 위한 API 키를 설정합니다. 클러스터의 모든 노드가 같은 키를 사용해야 합니다.
보안
외부 접근을 활성화하면 네트워크에 API 서버가 노출됩니다. 팀 환경에서는 반드시 API 키를 설정하세요. 로컬 네트워크 밖에서의 접근에는 포트를 공용 인터넷에 노출하는 대신 VPN을 사용하세요.
2단계: 노드 디스커버리 활성화¶
노드 디스커버리를 통해 머신이 자동으로 서로를 찾을 수 있습니다.
-
설정 > 노드를 엽니다.
-
노드 디스커버리(mDNS)를 활성화합니다.
-
노드가 자신의 존재를 브로드캐스트하고 다른 노드를 수신하기 시작합니다.
몇 초 내에 발견된 노드가 설정 > 노드 탭에 나타납니다.
3단계: 클러스터 확인¶
두 개 이상의 노드에서 디스커버리가 활성화되면:
-
아무 노드에서나 설정 > 노드를 엽니다.
-
연결된 모든 노드가 다음 정보와 함께 표시됩니다:
- 노드 이름 및 IP 주소
- 각 노드의 사용 가능한 모델
- 하드웨어 정보 (GPU 유형, 메모리)
- 연결 상태 (온라인/오프라인)
-
모델 목록을 엽니다 — 모든 노드의 모델이 호스트 노드 표시와 함께 보입니다.
노드별 다른 모델
모든 노드에 같은 모델이 있을 필요는 없습니다. 일반적인 패턴은 각 머신에 다른 모델을 호스팅하여 팀이 더 다양한 모델에 접근할 수 있게 하는 것입니다 (예: GPU 서버에 대형 코딩 모델, Mac Mini에 빠른 채팅 모델).
4단계: 팀 구성원 연결¶
팀 구성원은 두 가지 방법으로 클러스터에 연결할 수 있습니다:
옵션 A: 자신의 머신에서 Backend.AI GO 실행
- 팀 구성원의 머신에 Backend.AI GO를 설치합니다.
- 노드 디스커버리를 활성화합니다 — 클러스터 노드가 자동으로 나타납니다.
- Continuum Router가 모델 라우팅을 투명하게 처리합니다.
옵션 B: OpenAI 호환 API 직접 사용
팀 구성원은 OpenAI 호환 클라이언트를 아무 노드의 API 엔드포인트에 연결할 수 있습니다:
curl http://<node-ip>:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <api-key>" \
-d '{
"model": "llama-3-8b-instruct",
"messages": [{"role": "user", "content": "Hello"}]
}'
요청은 해당 모델을 호스팅하는 노드로 자동 라우팅됩니다.
클러스터 관리¶
부하 분산¶
같은 모델이 여러 노드에 로드되어 있으면 Continuum Router가 요청을 분산합니다. 이를 통해:
- 높은 처리량: 여러 요청이 병렬로 처리됨
- 장애 허용: 한 노드가 오프라인이 되면 요청이 나머지 노드로 라우팅됨
새 노드 추가¶
- 새 머신에 Backend.AI GO를 설치합니다.
- 원하는 모델을 다운로드합니다.
- 설정에서 외부 접근과 노드 디스커버리를 활성화합니다.
- 노드가 자동으로 클러스터에 참여합니다 — 기존 노드의 재시작이 필요 없습니다.
노드 제거¶
머신에서 Backend.AI GO를 종료하거나 노드 디스커버리를 비활성화하면 됩니다. 다른 노드가 몇 초 내에 이탈을 감지하고 라우팅 테이블을 업데이트합니다.
모니터링¶
각 노드의 대시보드에는 다음이 표시됩니다:
- 클러스터 전체 모델 가용성
- 노드별 리소스 사용량 (CPU, GPU, 메모리)
- 요청 라우팅 통계
- 노드 헬스 상태
네트워크 설정¶
방화벽 규칙¶
클러스터 노드 간에 다음 포트가 열려 있는지 확인하세요:
| 포트 | 프로토콜 | 용도 |
|---|---|---|
8080 (또는 사용자 지정) | TCP | API 서버 (모델 추론) |
5353 | UDP | mDNS 노드 디스커버리 |
VPN 고려사항¶
팀이 다른 네트워크에 분산되어 있는 경우:
- VPN(WireGuard 또는 Tailscale 등)을 사용하여 모든 노드를 가상 LAN에 배치하세요.
- 멀티캐스트를 지원하는 VPN 서브넷에서는 mDNS 디스커버리가 작동합니다.
- 또는 연결 키를 사용하여 노드를 수동으로 추가할 수 있습니다: 호스트 노드의 설정 > 노드에서 연결 키(bago:// URL 또는 QR 코드)를 생성한 후, 연결할 노드에서 등록하세요.
Tailscale
Tailscale은 방화벽 규칙 설정 없이 모든 장치 간에 플랫 네트워크를 생성합니다. mDNS 포워딩을 지원하여 분산 Backend.AI GO 클러스터에 탁월한 선택입니다.
보안 고려사항¶
| 우려 사항 | 권장 사항 |
|---|---|
| 무단 접근 | 모든 노드에 강력한 API 키 설정 |
| 전송 중 데이터 | 노드 간 암호화 통신을 위해 VPN 사용 |
| 노드 사칭 | 신뢰할 수 있는 네트워크에서만 클러스터 유지 |
| 모델 접근 제어 | 현재 모든 모델이 모든 클러스터 구성원에게 공유됩니다. 필요시 네트워크 수준에서 제한하세요. |
공용 인터넷에는 부적합
멀티노드 기능은 신뢰할 수 있는 로컬 네트워크와 VPN용으로 설계되었습니다. 추가 보안 계층(TLS 리버스 프록시, IP 허용 목록 등) 없이 Backend.AI GO 포트를 공용 인터넷에 직접 노출하지 마세요.
예제: 스타트업 팀 설정¶
5명의 개발자가 있는 스타트업이 팀 AI를 설정합니다:
하드웨어:
- Node A — Mac Studio M2 Ultra (192 GB) → Llama 3 70B (MLX, 4-bit) 호스팅
- Node B — RTX 4090이 장착된 Linux 워크스테이션 → CodeLlama 34B (CUDA) 호스팅
- Node C — Mac Mini M4 (32 GB) → Phi-3 Mini (빠른 작업용) 호스팅
설정:
- 세 대의 머신 모두 사무실 네트워크에 연결.
- 각 머신에 Backend.AI GO가 설치되고 외부 접근 및 노드 디스커버리 활성화.
- 모든 노드에 API 키
team-secret-key-2024설정. - 개발자들이 자신의 노트북에서 Backend.AI GO 실행 — 세 노드와 모델이 자동으로 나타남.
활용:
- 개발자들이 복잡한 추론 작업에 Llama 3 70B를 사용.
- CodeLlama 34B가 코드 생성과 리뷰를 처리.
- Phi-3 Mini가 최소 지연으로 빠른 채팅과 요약 요청을 처리.
- Node B가 유지보수로 다운되면 코드 생성 요청이 자동으로 사용 가능한 다음 노드로 장애 조치됨.
팁¶
- 하드웨어별 노드를 특화하세요. 강력한 GPU에서 대형 모델을, 에너지 효율적인 하드웨어에서 빠른 소형 모델을 실행하세요.
- 원활한 인증을 위해 모든 노드에서 같은 API 키를 사용하세요.
- 대시보드에서 리소스 사용량을 모니터링하여 병목 지점을 파악하고 용량을 계획하세요.
- 오프시간에 모델을 다운로드하세요. 대형 모델 다운로드는 클러스터 성능에 영향을 줄 수 있는 대역폭을 소비합니다.
- 호환성을 위해 모든 노드에서 Backend.AI GO를 같은 버전으로 업데이트하세요.
문제 해결¶
| 문제 | 해결 방법 |
|---|---|
| 노드가 서로를 발견하지 못함 | mDNS 포트(5353/UDP)가 열려 있는지 확인하세요. 모든 노드가 같은 서브넷에 있는지 확인하세요. 일부 기업 네트워크는 멀티캐스트를 차단합니다 — 대안으로 연결 키를 사용하여 노드를 수동 등록하세요. |
| 노드에 접근 시 "Connection refused" | 대상 노드에서 외부 접근이 활성화되어 있고 방화벽에서 API 포트가 열려 있는지 확인하세요. |
| 모델 요청이 잘못된 노드로 라우팅됨 | Continuum Router가 모델 가용성을 기반으로 선택합니다. 모델이 여러 노드에 있으면 라우팅은 자동입니다. 모델 이름이 정확히 일치하는지 확인하세요. |
| 많은 사용자로 인한 성능 저하 | 같은 인기 모델을 가진 노드를 추가하여 부하 분산을 활성화하세요. 빈번한 작업에는 더 빠른 모델 사용을 고려하세요. |
| 노드가 간헐적으로 오프라인으로 표시됨 | 네트워크 안정성을 확인하세요. 무선 연결은 디스커버리 플래핑을 유발할 수 있습니다 — 클러스터 노드에는 유선 연결을 선호하세요. |
관련 페이지¶
- 헤드리스 모드 — Backend.AI GO를 전용 서빙을 위한 백그라운드 서비스로 실행
- 클러스터 통합 — Backend.AI Enterprise 클러스터에 연결
- API로 앱 만들기 — OpenAI 호환 API 엔드포인트 활용
- 설정 — 네트워크 및 접근 설정 구성