hellas-ai/thunderbolt-ibverbs
요약
Hellas AI가 개발한 `thunderbolt-ibverbs`는 범용 USB4/Thunderbolt4 DMA 링을 활용하여 InfiniBand RDMA 장치를 에뮬레이션하는 리눅스 커널 모듈 및 사용자 공간 shim입니다. 이 드라이버는 온보드 이더넷보다 낮은 지연 시간을 제공하며, MoE 모델 추론이나 대규모 파인튜닝 등에서 기존 방식 대비 높은 성능 향상을 입증했습니다.
핵심 포인트
- USB4/Thunderbolt4를 이용해 InfiniBand RDMA 장치 에뮬레이션 가능
- MoE 모델 추론 및 12B 모델 파인튜닝 시 이더넷보다 월등한 속도 제공
- 커널 모듈 로드 후, 컨테이너 환경에서 `libibverbs.so`만으로 사용 가능
*** 경고 ***
이것은 연구용 드라이버입니다. 버그가 많고, 보안에 취약하며, 프로덕션 환경을 위한 것이 아닙니다. 배경 정보, 설명, 노트 및 벤치마크는 Hellas 블로그 게시물(https://blog.hellas.ai/blog/thunderbolt-ibverbs/)을 참조하십시오.
범용 usb4/thunderbolt4 DMA 링을 통해 InfiniBand RDMA verb 장치를 에뮬레이션하기 위한 리눅스 커널 모듈 + 사용자 공간 shim입니다.
네! 당연히 실제 하드웨어만큼은 아니지만, 온보드 이더넷보다는 좋고 thunderbolt-net을 통한 RXE보다 낮은 지연 시간을 제공합니다.
제 128GB 장치 두 개로 저는 다음 작업을 수행할 수 있습니다:
- 단일 장치에 들어가지 않는 230B 매개변수 MoE 모델에서 약 20 tok/s의 추론을 수행 (동일한 TP=2 분할을 TCP-over-Thunderbolt(MiniMax-M2.7 TP=2 on 2× Strix Halo)로 실행하는 것보다 약 30% 빠름)
- 배치 크기=1 추론을 단일 노드 대비 TP=2에서 더 빠르게 수행 (Llama-3.1-8B solo vs TP=2 4-HCA RDMA)
- 12b 매개변수 모델 전체 파인튜닝(full finetune)을 이더넷보다 11배 빠르게 수행 (Gemma 3 12B full FSDP train wall time)
좋아요.
제 생각엔요,
당신의 에이전트에게 물어보세요. github.com/hellas-ai/thunderbolt-ibverbs를 확인하고 우리가 어떻게 사용할 수 있는지 알아보라고 하세요.
개괄적으로:
- 호스트에 커널 모듈을 로드합니다 (OS별 설치 지침은 아래 GitHub Releases에서 참조) —
/sys/class/infiniband에 IB 장치를 생성합니다.
보이는 HCA(Host Channel Adapter)당 - 호스트 간에 usb4 케이블을 연결합니다.
- 장치에 대해 워크로드를 실행합니다.
커널 모듈은 호스트에 남아 있습니다. 컨테이너 내부에서는 기본 libibverbs.so가 장치를 열거할 수 있도록 저희 libibverbs provider만 필요합니다. 사용 중인 컨테이너의 ubuntu 코드명에 맞춰 .deb 파일을 드롭하세요:
docker run --rm -it \
--device=/dev/infiniband \
--cap-add=IPC_LOCK --ulimit memlock=-1 \
...
컨테이너 내부의 NCCL / UCX / perftest는 정상적인 IB 장치로 usb4_rdma*를 인식합니다.
만약 vllm / llama.cpp / rdma-core-usb4 / perftest가 이미 포함된 배터리 포함 이미지(더 무거움 — 몇 GB)를 원한다면, github.com/hellas-ai/nix-strix-halo에서 ibverbs가 활성화된 docker 이미지를 사용하세요.
물론입니다. 여기에서 USB 부팅 이미지를 다운로드하여 작성한 후, 이를 장치에 삽입하고 부팅 시 F11 키를 눌러 USB 스틱을 선택하세요.
반복 가능한 두 노드 vLLM 전송 스모크 테스트를 위해 패키징된 벤치 헬퍼를 사용하세요. 이 도구는 Ray를 시작하고, 작은 TP=2 vLLM 워크로드를 실행하며, /sys/kernel/debug/thunderbolt_ibverbs/summary의 이전/이후 값을 캡처합니다. 그리고 TP 실행이 RDMA 카운터를 이동시키지 않으면 실패합니다:
tbv_vllm_smoke.sh \
--hosts 192.168.23.136,192.168.23.192 \
--iface eno1 \
...
-
네이티브 Linux-to-Linux verbs 전송이 주 경로입니다.
-
Apple 호환 전송도 존재하지만, 여전히 실험적입니다.
-
이 모듈은 기본 커널(stock kernels)을 기반으로 빌드되지만, 의존하는 maintainer-tree Thunderbolt/USB4 서브시스템 변경 사항 때문에 Linux 6.14 이상 (또는 이 flake의
linux-thunderbolt커널)이 필요합니다.nhi_interrupt_throttle_ns는tb_ring_throttling()을 내보내는(export) 커널에서만 활성화됩니다. -
Nix flake는 기본 Linux 7.2를 대상으로 하며, 남아있는 로컬 Thunderbolt 수정 사항과 링 진단 기능을 포함한 패치된 Linux 7.2 커널을 제공합니다.
-
CI에서는 Debian, Fedora, Arch, Nix 빌드가 테스트됩니다.
커널 모듈은 GPL-2.0-only로 라이선스가 부여되었으며, 이는 커널 소스에 있는 SPDX 태그 및 `MODULE_LICENSE(
일치하는 커널 헤더와 기본 모듈 빌드 도구를 설치합니다.
Debian 또는 Ubuntu:
sudo apt install build-essential dkms git kmod "linux-headers-$(uname -r)" rdma-core perftest
Fedora:
sudo dnf install dkms gcc git kernel-devel kernel-headers kmod make rdma-core perftest
Arch Linux:
sudo pacman -S --needed base-devel dkms git kmod linux-headers rdma-core perftest
git clone https://github.com/hellas-ai/thunderbolt-ibverbs.git
cd thunderbolt-ibverbs
sudo make dkms-add
...
이 타겟들은 dkms.conf에서 모듈 이름과 버전을 읽습니다.
빌드 및 설치는 기본적으로 실행 중인 커널을 대상으로 합니다. 다른 헤더가 일치하는 설치된 커널을 대상으로 하려면 두 명령어 모두에 KVER=<커널-릴리스>를 사용하십시오.
커널 업그레이드 후에는 DKMS가 새 커널용으로 모듈을 재빌드해야 합니다.
제거하려면:
sudo make dkms-remove
이 명령어는 현재 체크아웃에서 선언된 버전을 모든 커널에서 제거합니다.
CI에서는 Debian, Fedora, Arch에서 이 추가/빌드/설치/제거 시퀀스를 실행하고, 별도로 릴리스 패키지를 검증합니다. 이러한 컨테이너 검사는 디스크에 대한 설치를 확인하며, 드라이버 로딩 및 데이터 전송은 VM 및 하드웨어 테스트가 필요합니다.
실행 중인 커널을 대상으로 하는 일회성 빌드를 위해:
make KVER="$(uname -r)"
sudo make KVER="$(uname -r)" modules_install
sudo depmod -a
모듈 패키지 빌드:
nix build github:hellas-ai/thunderbolt-ibverbs#thunderbolt-ibverbs
다른 flake 출력물:
nix build github:hellas-ai/thunderbolt-ibverbs#rdma-core-usb4 # libibverbs + usb4_rdma provider
nix build github:hellas-ai/thunderbolt-ibverbs#perftest # ib_write_bw/ib_send_bw/... linked against rdma-core-usb4
nix build github:hellas-ai/thunderbolt-ibverbs#bench-tools # u4_pingpong, uc_oneway, rc_write_*, tbv_perftest_runner, etc.
nix develop
이 명령어는 모듈 헤더, rdma-core-usb4, perftest, 그리고 벤치 도구들을 PATH에 포함하는 쉘로 진입시킵니다.
SSH 별칭이나 점프 호스트가 필요한 벤치마크 호스트의 경우, 생성된 러너에 SSH 설정을 전달하십시오.
NixOS에서 flakce 입력을 추가하고 모듈을 가져옵니다:
{inputs.thunderbolt-ibverbs.url = "github:hellas-ai/thunderbolt-ibverbs";
outputs = { nixpkgs, thunderbolt-ibverbs, ... }: {
...
다운스트림 flake는 기본 오버레이(default overlay)를 통해 패키지 세트를 구성할 수 있습니다:
{nixpkgs.overlays = [
thunderbolt-ibverbs.overlays.default
...
이 오버레이는 Linux에서 rdma-core-usb4, thunderbolt-ibverbs, thunderbolt-ibverbs-perftest, 그리고 thunderbolt-ibverbs-bench-tools를 제공합니다.
먼저 Thunderbolt/USB4 호스트들을 연결하십시오. 두 Linux 피어(peer) 모두에서 네이티브 Linux 트랜스포트가 활성화된 상태로 모듈을 로드합니다:
sudo modprobe thunderbolt_ibverbs \
profile=linux_perf \
bind_services=1 \
...
사용자 공간(userspace)에서 GID 메타데이터를 위한 RoCE netdev가 필요한 경우, 이를 명시적으로 전달합니다:
sudo modprobe thunderbolt-ibverbs \
profile=linux_perf \
bind_services=1 allocate_rings=1 start_rings=1 \
...
장치가 등록되었는지 확인합니다:
dmesg | grep thunderbolt_ibverbs
ibv_devices
rdma link
perftest가 설치된 경우, 보고된 RDMA 장치를 명시적으로 선택합니다:
# peer A
ib_write_bw -d usb4_rdma0
# peer B
...
정적 로드 매개변수(static load parameters)를 변경하기 전에 모듈을 언로드합니다:
sudo modprobe -r thunderbolt-ibverbs
알려진 좋은 설정(known-good configuration)을 영구적으로 유지하려면, 옵션을 /etc/modprobe.d/thunderbolt-ibverbs.conf에 넣습니다.
profile=linux_perf|mac_compat|mixed
tbnet=auto|allow|prefer_rdma|block
lanes=auto|N|MIN-MAX
...
전체 매개변수 목록은 make -C kernel help를 실행하여 확인합니다.
기본 Nix 모듈 패키지는 순정 Linux 7.2를 대상으로 합니다. 이 flake는 또한 남아있는 로컬 Thunderbolt 수정 사항 및 링 진단 기능을 포함하는 linux-thunderbolt: nixpkgs의 linuxPackages_7_2.kernel도 노출합니다. 둘 다 nixpkgs의 커널 구성을 사용합니다. 상위(upstream) USB4STREAM/XDomain 변경 사항은 Linux 7.2에 포함되어 있으므로, 이 flake는 더 이상 해당 백포트(backports)나 별도의 유지 관리자 트리 소스 입력(maintainer-tree source input)을 가지고 있지 않습니다.
NixOS에서는 해당 커널 패키지 세트를 사용하고 모듈을 활성화합니다:
{ pkgs, inputs, ... }:
let
system = pkgs.stdenv.hostPlatform.system;
...
Hydra는 hydraJobs.x86_64-linux.linux-thunderbolt와
hydraJobs.x86_64-linux.thunderbolt-ibverbs-linux-thunderbolt 경로를 모두 평가합니다.
VM 스모크 테스트는 기본(stock) 및 패치된 Linux 7.2를 부팅하고, 해당 모듈을 로드하며, 각각 레거시 방식과 소스 인식 네이티브 제어를 검증합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub ML Hardware의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기