후속: Mac에서 NVIDIA GPU를 플러그 앤 플레이로 만들기. 애플이 숨긴 RDMA 심볼 발견 — 제로 카피 GPU 메모리 공유가 이미 가능할지도.
Follow-up: Trying to make NVIDIA GPUs plug-and-play on Macs. Found hidden RDMA symbols Apple doesn't want you to see — zero-copy GPU memory sharing might already work.
핵심 요약
Mac에서 NVIDIA GPU를 구동하려는 시도 중, 애플이 숨겨둔 RDMA 관련 심볼을 발견하여 제로 카피 메모리 공유 가능성을 확인함.
- NVIDIA GPU 구동 — Mac에서 Blackwell 카드가 인식되나 GSP 펌웨어 부팅 실패함
- RDMA 제로 카피 — Metal 버퍼와 RDMA 메모리 영역이 동일한 물리 페이지를 공유함을 증명함
- 숨겨진 RDMA 심볼 — libibverbs에 GPUDirect RDMA용 함수가 포함되어 있으나 SDK에서 제외됨
- 기술적 협업 필요 — tinygrad 팀과 함께 NVIDIA GSP 펌웨어 초기화 문제를 해결하고자 함
TL;DR: TinyGPU 테스트에 관한 지난 게시물이 꽤 관심을 끌었습니다. 이번에는 그 후속 내용입니다. Blackwell 카드가 감지되고 드라이버는 로드되지만, NVIDIA의 GSP 펌웨어가 TB5를 통해 부팅되지 않는 문제가 있습니다(알려진 문제이며, tinygrad 팀과 협력 중입니다). 디버깅 중에 우연히 애플의 RDMA 서브시스템이 제로 카피 네트워크 전송을 위해 Metal GPU 버퍼를 허용한다는 사실을 발견했습니다. 이는 아무도 문서화하지 않은 내용입니다. 또한 애플의 libibverbs에 숨겨진 ibv_reg_dmabuf_mr 심볼을 발견했는데, 이는 커널 수정 없이도 macOS에서 GPUDirect RDMA가 가능할 수 있음을 시사합니다. 제가 발견한 모든 내용과 도움이 필요한 부분을 공유합니다.
설정 (지난 게시물을 놓치신 분들을 위해)
저는 분산 추론을 위해 JACCL RDMA로 연결된 4노드 Mac 클러스터(3x M3 Ultra + M5 Max MacBook Pro, 약 1.5TB 통합 메모리)를 운영 중입니다. TinyGPU를 테스트하기 위해 Razer Core X V2에 RTX PRO 5000 Blackwell 72GB를 장착했습니다.
Blackwell 카드에서 발생한 일
카드는 감지됩니다. macOS는 PCIe에서 이를 인식합니다(링크 연결됨, x4 @ 16 GT/s, 80 Gb/s TB5). TinyGPU의 DriverKit 확장 프로그램이 로드되고 매칭됩니다. BAR0 MMIO가 매핑되어 GPU 레지스터를 읽고 쓸 수 있습니다. 하지만 NVIDIA의 GSP 펌웨어가 초기화 중에 실패합니다:
RuntimeError: RPC call 4097 failed with result 101
NOCAT 오류 기록을 디코딩한 결과 FBFLCN UNRECOGNIZED_CLIENT를 발견했습니다. GPU의 메모리 패브릭이 TB5 터널을 통해 요청하는 PCIe 피어를 인식하지 못하는 것입니다. 이는 모든 NVIDIA GPU가 TB5 인클로저에서 겪는 알려진 문제입니다(tinygrad#15843). AMD GPU는 동일한 인클로저에서 잘 작동합니다. 해당 이슈에 NOCAT 디코딩 결과를 게시했으니, tinygrad 팀이나 NVIDIA GSP 펌웨어 초기화 작업을 해보신 분들의 협력을 기다립니다.
디버깅 중 발견한 사실
NVIDIA eGPU VRAM이 RDMA 전송에 참여할 수 있는지 연구하던 중, macOS에서 ibv_reg_mr()이 실제로 어떤 메모리 유형을 허용하는지 테스트했습니다. 결과는 놀라웠습니다.
메모리 유형 검증 결과
|메모리 소스|ibv_reg_mr|예상 결과|
|:-|:-|:-|
|malloc()|FAIL|예상 외 — 리눅스에서는 작동함|
|posix_memalign()|FAIL|예상 외 — 페이지 정렬되었으나 여전히 실패|
|mmap(MAP_ANON)|PASS|예상대로|
|IOSurfaceGetBaseAddress()|PASS|어디에도 문서화되지 않음|
|MTLBuffer.contents (Metal shared)|PASS|어디에도 문서화되지 않음|
애플의 RDMA 구현은 물리적 백업이 아닌 VM 매핑 유형을 검증합니다. 힙 할당(malloc/posix_memalign)은 실패하고, VM 매핑 메모리(mmap, IOSurface, Metal 버퍼)는 통과합니다. 이는 ibv_reg_mr이 핀 가능한 모든 메모리를 허용하는 리눅스와는 다릅니다.

