피드로 돌아가기
Easily Build and Share ROCm Kernels with Hugging Face
Hugging Face BlogHugging Face Blog
Backend

Hugging Face가 kernel-builder 도구와 kernels 라이브러리로 ROCm 커스텀 커널의 빌드·배포·통합 프로세스를 표준화하여 개발자가 CMake/컴파일러 에러 처리 없이 AMD GPU용 고성능 커널을 작성·공유 가능하게 함

Easily Build and Share ROCm Kernels with Hugging Face

2025년 11월 17일12intermediate

Context

GPU 커스텀 커널은 딥러닝 성능의 핵심이지만, 아키텍처별 컴파일, CMake/Nix 설정, 컴파일러 에러, ABI 호환성 문제로 인한 복잡한 빌드 프로세스가 개발자의 생산성을 저해하고 있다. ROCm, CUDA, Metal, XPU 등 다양한 백엔드를 지원하면서도 각 환경에 최적화된 커널을 작성·배포하는 통일된 워크플로우가 부재했다.

Technical Solution

  • 프로젝트 표준 구조 정의: build.toml(빌드 설정), gemm/(HIP 소스 코드), torch-ext/(PyTorch 바인딩), flake.nix(재현 가능한 개발 환경)로 파일 조직화
  • Nix 기반 재현 가능한 빌드 환경: flake.nix를 통해 동일한 컴파일러, 의존성, 플래그로 모든 개발자 환경에서 동일한 빌드 결과 보장
  • kernel-builder 도구로 자동화된 컴파일: CMake 설정 없이 build.toml만으로 ROCm 백엔드에 대한 커널 컴파일 자동 실행
  • Hugging Face Hub 연동: git xet를 통해 .so 바이너리를 Hub에 푸시하여 kernels-community 저장소에서 공개·관리
  • kernels 라이브러리로 런타임 로딩: get_kernel("kernels-community/gemm")으로 Hub에서 직접 커널을 동적 로드하여 PyTorch와 자동 통합
  • 사례: RadeonFlow GEMM 커널: FP8 블록 단위 행렬 곱셈을 e4m3fnuz 포맷으로 구현하여 AMD Instinct MI300X에 최적화

Key Takeaway

AMD GPU용 고성능 커널 개발은 표준화된 프로젝트 구조, Nix 기반 재현 가능한 환경, 자동화된 빌드 도구 조합으로 CMake 복잡성 제거와 즉시 공유·배포를 동시에 달성할 수 있다.


ROCm 커널을 개발하는 팀에서 build.toml에 타겟 아키텍처(MI300X 등)와 컴파일 플래그를 명시하고, flake.nix로 의존성을 고정한 뒤, kernel-builder로 자동 컴파일하면 각 멤버가 로컬 CMake 설정 없이도 동일한 바이너리를 생성할 수 있으며, git xet로 Hub에 푸시한 후 단 3줄의 Python 코드로 다른 프로젝트에서 즉시 재사용할 수 있다.

원문 읽기