概要
- MacBook Air にデスクトップ向け GPU を外付けで接続する試みの解説
- Thunderbolt eGPU の仕組みと現状のmacOS/Linux対応状況
- PCIパススルー やDMAの技術的課題と解決策
- AIやゲーム用途 での制限やパフォーマンスの現実
- Apple Siliconでの IOMMU(DART)制約 や独自ハックの紹介
MacBook AirにデスクトップGPUを接続する挑戦
- Thunderbolt eGPU を使い、NVIDIA RTX 5090を M4 MacBook Air に接続する試み
- Thunderboltドックで PCIe→Thunderbolt 変換、USB-Cポート接続
- Thunderboltは PCIe信号をトンネル して伝送、理論上はPC同様にGPU認識
- Thunderbolt 4 で4レーン、最大 40Gbps 帯域
- USB4でも一部で同様のPCIeトンネル対応
- Thunderbolt経由で GPU→モニター(DisplayPort) 接続
- 一般的にLinuxやWindowsでは eGPUドライバが標準対応
- Raspberry PiでもOculink経由で利用例あり
macOSとeGPUの現状
- Apple Silicon(Mシリーズ) ではmacOSが NVIDIA/AMD GPUドライバ未搭載
- tinygrad が独自のmacOS用eGPUドライバをリリース
- AI推論やゲームには パフォーマンス・対応モデルの制限 が大きい
- tinygradスタック専用、他ソフトでは利用不可
- Metal推論の方が 10倍高速 な場合も
Linux VMでの挑戦
- Apple Silicon Macで Linux VM を動作
- macOSがThunderboltデバイスを認識→Linux VMに GPUパススルー
- arm64アーキテクチャ なのでパフォーマンスも近い
- Windows ARM64には NVIDIAドライバ未提供、Linuxのみ対応
PCIパススルー技術の課題
- PCIデバイス はBAR(Base Address Registers)経由で通信
- QEMUでVM起動時に BARメモリ領域 をゲストにマッピング
- 実際にBARにアクセスすると ホストカーネルクラッシュ 発生
- QEMUのメモリマッピングフラグ (HV_MEMORY_EXEC有無)が原因
- ARMデバイスメモリの取り扱いに起因する制限
- 直接マッピング不可のため、 QEMU経由でアクセスをトラップ する方式に変更(パフォーマンス低下)
DMAとIOMMU(DART)の課題
- DMA(Direct Memory Access)で デバイスが直接ホストメモリ操作
- VM環境では IOMMU でゲスト→ホストアドレス変換
- Apple Siliconの DART はIOMMU相当の役割
- ThunderboltデバイスへのPCIDriverKit経由では 1.5GBマッピング制限 や アドレス指定不可 等の制約
- apple-dma-pci というQEMU用の仮想PCIデバイスを自作
- ゲスト側のカーネルドライバでNVIDIAドライバのDMA呼び出しをフック
- DMAバッファをオンデマンドでマッピング し、1.5GB制限内でやりくり
まとめ
- MacBook AirでデスクトップGPUを外付け利用 は技術的に可能だが、現状は 制約やハックが多い
- macOSでは公式サポートや高性能利用は困難
- Linux VM+QEMU+独自ドライバ でパススルーは可能だが、パフォーマンスや安定性に課題
- Apple Siliconの DART/IOMMU制約 やThunderboltの制限克服には 追加開発や工夫が必須
- AIやゲーム用途での実用性は 現時点では限定的