[Sovereign AI] M4 Max Mac Studio + MacBook Pro로 구축한 128GB 초고속 분산 AI 클러스터 결산 및 삽질기
안녕하세요! 최근 Apple이 WWDC에서 공개한 오픈소스 저수준 집합 통신 라이브러리인 JACCL(Jack and Angelos' Collective Communication Library) 백엔드와 macOS의 Thunderbolt RDMA 기술을 활용하여, 제가 보유한 두 대의 M4 Max 기기를 하나의 거대한 128GB AI 연산 머신으로 묶는 프로젝트를 진행했습니다.
NVIDIA의 데이터센터 인프라(NVLink/InfiniBand) 부럽지 않게, 방구석에서 썬더볼트 케이블 하나로 텐서 병렬(Tensor Parallel) 처리를 완수하기까지의 전체 세팅 과정, 성능 측정 결과, 그리고 눈물겨운 시행착오를 아주 디테일하게 기록해 둡니다.
1. 💻 하드웨어 구성 환경 및 물리 인프라
흔히 구성하는 메인보드 분할형 PC 클러스터와 달리, 애플 실리콘의 Unified Memory 구조 덕분에 두 기기를 묶는 순간 메모리 대역폭이 깎이지 않고 그대로 보존되는 대칭형 고성능 클러스터가 완성됩니다.
- 마스터 노드 (홈서버): Mac Studio (M4 Max / 16코어 CPU / 40코어 GPU / 64GB Unified Memory)
- 워커 노드 (물팟스): MacBook Pro 14 (M4 Max / 16코어 CPU / 40코어 GPU / 64GB Unified Memory)
- 연결 인터페이스: 별도의 스위칭 허브 없이 Thunderbolt 케이블을 포트 대 포트로 1:1 직접 연결 (P2P Mesh Topology)
- 클러스터 통합 스펙: 총 128GB 통합 메모리 확보 (실질 GPU 할당 가능 메모리 약 110GB 내외)
2. 🛠️ 실전 구축 프로세스 4단계
[Step 1] macOS 복구 모드에서 RDMA 보안 게이트 해제
macOS 레벨에서 CPU 개입 없이 커널을 우회해 다른 기기의 메모리에 직접 접근하는 RDMA(Remote Direct Memory Access)를 허용해야 합니다. 두 기기를 각각 완전히 종료한 뒤 전원 버튼을 길게 눌러 복구 모드(Recovery Mode)로 진입합니다.
# 상단 메뉴 [유틸리티] -> [터미널]을 선택하고 아래 명령어 입력 후 재부팅 rdma_ctl enable
정상적으로 재부팅되었다면 일반 터미널에서 ibv_devices 명령을 실행해 봅니다. apple_thunderbolt_0와 같은 인터페이스명이 출력되면 하드웨어 준비는 끝난 것입니다.
[Step 2] 1:1 독립 서브넷 및 고정 IP 할당 (가장 중요)
macOS의 가상 네트워크인 'Thunderbolt 브릿지'가 켜져 있으면 JACCL이 개별 물리 포트의 RDMA 주소를 인식하지 못하는 치명적인 문제가 있습니다. 시스템 설정 -> 네트워크에서 Thunderbolt 브릿지를 비활성화(또는 삭제)한 뒤, 연결된 단일 썬더볼트 포트에 각각 수동 IP를 매핑합니다.
- 맥 스튜디오 (홈서버): IP
192.168.10.1/ 서브넷 마스크255.255.255.0 - 맥북 프로 (물팟스): IP
192.168.10.2/ 서브넷 마스크255.255.255.0
설정 후 맥 스튜디오에서 ping 192.168.10.2가 단일 자릿수 ms 이하의 극도로 낮은 지연 시간으로 가는지 테스트합니다.
[Step 3] SSH 무암호 인증 및 파이썬 환경 동기화
다행히 두 기기의 로컬 계정명이 mulpats로 완전히 일치하여 경로 지정이 무척 수월했습니다. 맥 스튜디오에서 SSH 키를 생성하여 맥북 프로로 밀어 넣어줍니다.
ssh-keygen -t rsa -b 4096 ssh-copy-id mulpats@192.168.10.2
이후 두 Mac 모두 가상환경(또는 로컬 환경)에 완벽히 동일한 버전의 라이브러리를 빌드합니다.
pip install mlx mlx-lm
추가로, 구동하려는 모델(예: Llama-3-70B) 파일을 두 기기의 완전히 일치하는 절대 경로(/Users/mulpats/models/...)에 똑같이 저장해 주어야 연산 노드가 꼬이지 않습니다.
[Step 4] 클러스터 설정 파일 (cluster_hosts.json) 작성
MLX 분산 컴파일러가 인식할 수 있도록 홈 디렉토리에 다음과 같이 링/메시 토폴로지용 JSON 파일을 생성했습니다.
{
"version": 1,
"nodes": [
{ "hostname": "192.168.10.1", "user": "mulpats", "port": 22, "rdma_device": "apple_thunderbolt_0" },
{ "hostname": "192.168.10.2", "user": "mulpats", "port": 22, "rdma_device": "apple_thunderbolt_0" }
]
}
3. ⚠️ 눈물 없인 볼 수 없는 시행착오 (Troubleshooting)
해외 포럼과 깃허브 이슈를 샅샅이 뒤져가며 해결한 핵심 에러 3가지를 정리합니다. 이 글을 보시는 분들은 부디 한 번에 성공하시길 바랍니다.
| 발생한 에러 현상 | 원인 분석 | 해결 방법 (Fix) |
|---|---|---|
| JACCL RTR errno 22 (EINVAL) 또는 노드 감지 실패 | macOS 기본 기능인 'Thunderbolt 브릿지' 가상 어댑터가 활성화되어 있어 JACCL이 개별 인터페이스의 물리 고유 RDMA 주소를 찾지 못함. | 시스템 설정 -> 네트워크 메뉴 하단에서 가상 'Thunderbolt 브릿지' 서비스를 과감히 삭제하고 1:1 다이렉트 수동 IP 할당으로 우회. |
| mlx.launch 실행 직후 아무 반응 없이 무한 프리징 | mlx.launch 스크립트가 SSH를 통해 상대 노드에 처음 접근할 때, 호스트 키 확인(Are you sure you want to continue connecting (yes/no)?) 팝업 프롬프트 단계에서 입력 처리를 못 해 멈춤. |
클러스터 가동 전, 맥 스튜디오에서 ssh mulpats@192.168.10.2 명령어로 원격 노드에 수동으로 최초 1회 직접 접속하여 Known_hosts 인증을 마쳐둠. |
| 분산 처리 중 비정상적인 전송 딜레이 및 연산 속도 저하 | NVIDIA의 NCCL 환경과 달리 GPU 연산 컨텍스트와 CPU-RDMA 버퍼 간의 컨텍스트 스위칭 동기화가 밀려 병목 현상 발생. | 런처 실행 시 인라인 환경 변수로 애플 실리콘 최적화 옵션인 MLX_METAL_FAST_SYNCH=1 플래그를 반드시 강제 주입해 줌. |
4. 🚀 대망의 최종 실행 및 성능 측정 결과
모든 트러블슈팅을 마치고 마스터 노드 터미널에서 JACCL 백엔드를 지정해 대형 양자화 모델인 Llama-3-70B-Instruct-4bit를 실행했습니다.
mlx.launch --backend jaccl --hostfile cluster_hosts.json --env MLX_METAL_FAST_SYNCH=1 \ python -m mlx_lm.generate \ --model /Users/mulpats/models/Meta-Llama-3-70B-Instruct-4bit \ --prompt "M4 Max 클러스터 구동을 축하하는 아주 멋진 기술 블로그 아웃트로 문장을 작성해줘." \ --max-tokens 256
📈 벤치마크 스코어 및 체감 성능
- 수치적 결과: 단일 64GB 맥에서는 OOM(메모리 부족) 에러를 뿜으며 터지던 70B 모델이, 클러스터링 후 초당 약 22 ~ 26 토큰(Tokens per Second) 수준의 부드럽고 쾌적한 속도로 추론을 성공했습니다!
- 네트워크 대역폭 확인: 추론 연산이 수행되는 동안 썬더볼트 대역폭은 실측 50 ~ 60 Gbps 수준을 꾸준히 유지했으며, 지연 시간은 마이크로초(μs) 단위를 유지해 병목을 거의 느낄 수 없었습니다.
- 소음 및 발열: 풀 로드 상태에서도 고성능 PC나 GPU 워크스테이션처럼 이륙하는 팬 소음 없이, 아주 고요하고 정숙한 상태(정말 기분 좋은 맥 스튜디오 특유의 미미한 바람 소리 정도)로 작업이 완수되는 점이 대단히 만족스럽습니다.
💡 글을 마치며: 방구석 Sovereign AI의 가능성
수백, 수천만 원을 호가하는 NVIDIA의 H100/A100 클라우드 인프라를 매달 구독하지 않고도, 내가 가진 Apple Silicon 장비들을 정품 케이블 하나로 묶어 로컬에서 나만의 독립된 소형 AI 데이터센터를 소유할 수 있다는 사실이 온몸으로 체감되는 프로젝트였습니다.
M4 Max 칩셋의 강력한 전성비와 메모리 아키텍처, 그리고 Apple 개발진들이 칼을 갈고 만든 JACCL 라이브러리의 파괴력을 제대로 맛보았네요. 다음번에는 추론을 넘어 LoRA 분산 파인튜닝(Fine-Tuning) 학습까지 도전해 보고 그 결과를 공유하겠습니다. 궁금한 점이 있으시다면 댓글로 편하게 남겨주세요!
맥 두대 장비값만 천만원이 넘어간다는 사실... ㅡㅡ;
댓글 없음:
댓글 쓰기