AI VIDEO BRIEFING

허깅페이스 커널 프로젝트 정리: GPU 커널 빌드·배포·사용 표준화와 Nix 재현 빌드의 원리

허깅페이스 커널 프로젝트는 GPU 커널의 빌드·배포·사용 방식을 표준화해, 파이토치 버전과 하드웨어 조합마다 직접 컴파일해야 했던 부담을 덜어준다. GPU MODE 강연에서 설계 원리와 보안·향후 계획을 정리했다.

GPU 커널도 도커처럼 배포한다 — 허깅페이스 '커널' 프로젝트가 푼 문제 영상 대표 이미지

핵심 메시지

  • 허깅페이스 커널 프로젝트는 GPU 커널의 빌드·배포·사용이라는 세 단계를 각각 표준화해, 화물 컨테이너처럼 어디서든 같은 방식으로 주고받을 수 있게 만든 시도다.
  • 사용자는 kernels 라이브러리에서 get_kernel 한 줄로 커널을 내려받아 쓰거나, 모델을 다시 짜지 않고 특정 레이어만 최적화된 구현으로 바꿔 끼울 수 있다.
  • 클라이언트가 파이토치 버전·백엔드·CPU 아키텍처·운영체제를 스스로 감지해 맞는 바이너리를 골라 주기 때문에, 사용자는 자신의 환경 조합을 신경 쓰지 않아도 된다.
  • 빌드는 Nix 샌드박스에서 이뤄져 '내 컴퓨터에서만 되는' 문제를 없애고, 최신 컴파일러를 쓰면서도 오래된 glibc에 맞춰 링크해 구형 리눅스에서도 돌아가게 한다.
  • 바이너리를 배포한다는 위험 때문에 신뢰 조직 옵트인과 코드 서명이 준비되고 있으며, 앞으로는 에이전트가 커널을 자동으로 만들고 튜닝하는 흐름을 겨냥한다.

쉽게 이해하기

머신러닝 추론을 빠르게 만들려면 하드웨어에 특화된 저수준 코드, 즉 커널이 필요하다. 문제는 이 커널을 배포하는 일이 대단히 번거롭다는 점이다. 파이토치 버전, GPU 제조사, 운영체제, CPU 아키텍처의 조합이 곱해지면서 지원해야 할 경우의 수가 폭발하고, 커널마다 빌드 방식도 제각각이라 한 사람이 익힌 노하우를 다른 사람이 이어받기 어렵다.

허깅페이스의 데이비드 홀츠와 다니엘 더 콕은 GPU MODE 강연에서 이 문제를 자사 추론 스택(TGI)과 트랜스포머스·디퓨저스를 운영하며 겪은 실무 고통으로 설명했다. 이들이 내놓은 답은 커널을 '컨테이너처럼' 다루자는 것이다. 커널을 만드는 빌더, 배포하는 허브, 가져다 쓰는 파이썬 라이브러리 세 부분을 각각 표준화하면, 빌드는 드물게 하고 사용은 수없이 많이 하는 비대칭 구조에서 비용이 크게 줄어든다.

빌드 쪽에서는 build.toml이라는 선언적 설정 파일과 정해진 소스 폴더 구조를 쓰고, 결과물은 '배리언트' 단위로 떨어진다. 배리언트는 파이토치 버전·백엔드·아키텍처·운영체제의 조합을 뜻하며, 각 폴더에는 파이썬 바인딩과 메타데이터, 실제 바이너리가 함께 들어간다. 사용하는 쪽에서는 get_kernel을 호출하면 라이브러리가 현재 환경을 탐지하고 호환되는 배리언트만 걸러 우선순위대로 고른다. 정확히 맞는 CUDA 버전이 없으면 조금 낮은 버전으로 물러서는 식의 여유도 갖췄다.

재현성의 핵심은 Nix다. Nix는 부작용이 없는 순수 함수형 언어로 빌드 레시피를 만들고, 거의 비어 있는 샌드박스에 선언된 의존성만 넣어 빌드한다. 시스템 시간까지 고정할 정도로 외부 영향을 차단하기 때문에 같은 코드는 누가 돌려도 같은 결과를 낸다. 특히 최신 툴체인을 쓰면서도 아주 오래된 glibc에 맞춰 컴파일할 수 있어, 낡은 배포판을 쓰는 데이터센터에서도 커널이 로드된다.

남은 과제는 신뢰다. 안전한 텐서 포맷과 달리 여기서는 네이티브 바이너리가 오가기 때문에, 현재는 신뢰 조직만 기본 허용하고 나머지는 명시적 플래그로 opt-in 하도록 바꿨고 코드 서명을 준비 중이다. 앞으로는 파이썬 밖의 언어와 프레임워크 지원, 그리고 에이전트가 커널을 반복 생성·벤치마크하며 다듬는 작업 흐름, 특정 연산 형태에 맞춘 워크로드 전용 커널이 목표로 제시됐다.

주요 인사이트

  • 빌드는 적게 하고 사용은 많이 하는 비대칭 구조라면, 빌드 파이프라인에 공을 들이는 편이 전체 비용을 줄인다. 강연자들이 표준화를 택한 근거가 바로 이 계산이다.
  • 미리 컴파일(AOT)과 즉석 컴파일(JIT)은 우열이 아니라 용도의 문제다. 수많은 모델을 그때그때 띄우는 추론 API에서는 워밍업 지연이 치명적이지만, 며칠씩 도는 작업이라면 초기 컴파일 시간은 문제가 되지 않는다.
  • 파이썬 ABI3와 파이토치의 안정 ABI처럼 '조합의 축'을 하나씩 없애는 변화가 실제 유지보수 부담을 절반 단위로 줄인다. 표준화의 이득은 코드 미학이 아니라 빌드 행렬의 크기에서 나온다.
  • 구형 하드웨어 지원은 자선이 아니라 커뮤니티 전략이다. 중고 시장에서 구할 수 있는 오래된 GPU까지 컴파일 대상에 넣는 선택이 입문자의 진입 장벽을 낮춘다.
  • 커널 작성의 장벽이 낮아지는 흐름에서 병목은 '작성'이 아니라 '빌드와 검증'으로 옮겨간다. 에이전트가 반복 최적화를 하려면 빌드 복잡도를 대신 떠안아 줄 인프라가 먼저 필요하다.

자주 묻는 질문

커널을 쓰려면 모델 코드를 다시 짜야 하나?

그렇지 않다. get_kernel로 특정 연산을 가져다 쓸 수도 있지만, 모델의 레이어 자체를 최적화된 구현으로 교체하는 방식도 지원한다. 강연에서는 모델 전체를 다시 쓰지 않고도 커널을 적용할 수 있게 하는 것이 설계 목표였다고 설명한다.

왜 Nix까지 동원했나?

빌드 결과가 사람과 기계에 따라 달라지는 문제를 없애기 위해서다. Nix는 순수 함수형 언어로 레시피를 평가하고 격리된 샌드박스에서 빌드하기 때문에, 컴파일러와 glibc 버전까지 통째로 고정된다. 도커처럼 단계만 같은 것이 아니라 의존성 전체가 고정된다는 점이 다르다.

바이너리를 내려받아 실행하는 방식은 안전한가?

강연에서도 민감한 부분으로 다뤘다. 현재는 신뢰하는 조직만 기본 허용하고 그 외의 코드는 명시적으로 허용 플래그를 줘야 로드되며, 조직·사용자 이름으로 네임스페이스가 나뉜다. 다음 단계로는 짧은 수명의 서명 키를 이용한 코드 서명을 준비하고 있다고 밝혔다.

실제로 쓰이고 있나?

트랜스포머스와 디퓨저스가 사용하고 있고, 강연에서는 modded-nanoGPT, SGLang, 카르파티의 실험 프로젝트가 사용 사례로 언급됐다. SGLang의 경우 CI에서 플래시 어텐션 3를 직접 빌드하지 않기 위해 도입했다고 소개됐다.

원문과 출처

이 글은 원본 영상의 자막을 바탕으로 한국어 독자를 위해 요약했습니다. 전체 맥락과 최신 정보는 원문에서 확인하세요.

YouTube 원본 영상 보기 ↗

관련 AI 소식