ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Hugging Face Upskill로 Claude CUDA 커널 오픈소스 모델 학습 가이드 (2026년 2월)
    AI 개발 2026. 2. 2. 12:38
    반응형

    Hugging Face Upskill, 소형 오픈소스 모델에 CUDA 커널 작성 능력을 부여하다

    2026년 1월, Hugging Face가 AI 개발 커뮤니티에 획기적인 도구를 공개했습니다. 바로 'Upskill'이라는 이름의 에이전트 스킬 생성 및 평가 도구입니다. 이 도구의 가장 주목할 만한 점은 Claude Opus 4.5와 같은 대형 언어 모델의 전문 지식을 파인튜닝이나 가중치 증류 없이 소형 오픈소스 모델에 전수할 수 있다는 것입니다. 특히 CUDA 커널 작성이라는 고도로 전문화된 영역에서 이 기술이 어떻게 작동하는지 상세히 살펴보겠습니다.

    Upskill의 핵심 원리: 지식 패키징을 통한 전문성 전수

    Upskill의 작동 원리는 기존의 지식 증류(Knowledge Distillation) 방식과 근본적으로 다릅니다. 기존 방식이 대형 모델의 출력을 사용하여 소형 모델의 가중치를 직접 업데이트하는 반면, Upskill은 전문 지식을 '에이전트 스킬(Agent Skill)'이라는 형태로 패키징합니다. 이 스킬은 실제로 SKILL.md 파일과 관련 스크립트, 리소스를 포함하는 자체 완결형 폴더 구조로 구성됩니다.

    Hugging Face Skills는 OpenAI Codex, Anthropic의 Claude Code, Google DeepMind의 Gemini CLI, 그리고 Cursor와 같은 모든 주요 코딩 에이전트 도구와 상호 운용이 가능합니다. 각 스킬 폴더에는 YAML 프론트매터(이름과 설명)와 함께 에이전트가 스킬이 활성화되어 있는 동안 따라야 할 가이드라인이 담긴 SKILL.md 파일이 포함됩니다.

    가장 중요한 점은 이 방식이 모델의 가중치를 전혀 수정하지 않는다는 것입니다. 대신, 런타임에 스킬 파일의 지침과 컨텍스트를 모델에 제공하여 특정 도메인의 전문가처럼 행동하도록 유도합니다. 이는 마치 숙련된 개발자에게 상세한 가이드북을 제공하는 것과 유사합니다.

    Claude Opus 4.5를 활용한 Skill 파일 생성 과정

    Upskill은 기본적으로 Anthropic의 Claude Opus 4.5 모델을 스킬 생성기로 사용합니다. 물론 OpenAI 모델이나 OpenAI 호환 엔드포인트를 통한 로컬 모델도 지원됩니다. 핵심 아이디어는 비용이 높지만 품질이 우수한 대형 모델로 스킬을 생성하고, 더 작고 저렴한 모델이 이를 활용하도록 하는 것입니다. Hugging Face 팀은 이를 "로빈 후드" 접근법이라고 부릅니다.

    스킬 생성은 두 가지 방식으로 진행할 수 있습니다. 첫째, 에이전트 트레이스(agent trace)에서 스킬을 생성하는 방식입니다. 이는 대형 모델이 특정 작업을 수행하는 과정을 기록하고, 그 과정에서 획득한 노하우를 스킬로 추출합니다.

    upskill generate "write kernels" --from <agent-trace>.md

    둘째, 기존 스킬을 기반으로 확장하는 방식입니다. 이미 존재하는 스킬에 추가적인 에러 핸들링이나 엣지 케이스 처리를 더할 수 있습니다.

    upskill generate "add more error handling and edge cases" --from ./skills/kernel-builder-cuda-kernels/

    kernel-builder-cuda-kernels 스킬의 구성 요소

    kernel-builder-cuda-kernels 스킬은 Claude에게 CUDA 개발에 관해 알아야 할 모든 것을 가르칩니다. 이 스킬에는 다음과 같은 핵심 지식이 500토큰 내외로 압축되어 포함되어 있습니다.

    지식 영역 포함 내용
    GPU 아키텍처 타겟팅 어떤 GPU 아키텍처를 대상으로 할지 결정하는 방법
    프로젝트 구조 kernel-builder 프로젝트를 어떻게 구성할지
    메모리 최적화 공유 메모리와 레지스터의 사용 시점 결정
    PyTorch 바인딩 PyTorch와의 통합을 위한 바인딩 작성법

    이 스킬은 단순히 커널 코드 작성만을 다루지 않습니다. kernel-builder의 전체 워크플로우를 이해하는 것이 핵심입니다. 여기에는 프로젝트 구조, build.toml 설정, 아키텍처별 최적화, 그리고 PyTorch 바인딩 작성이 모두 포함됩니다.

    H100 GPU와 컴퓨트 호환성 9.0의 CUDA 개발 노하우

    NVIDIA H100 GPU는 컴퓨트 호환성(Compute Capability) 9.0을 지원하며, 이는 CUDA 커널 개발에 있어 새로운 최적화 기회를 제공합니다. kernel-builder-cuda-kernels 스킬에는 이러한 H100 특화 지식이 포함되어 있습니다.

    H100의 가장 주목할 만한 특징 중 하나는 확장된 공유 메모리입니다. 컴퓨트 호환성 9.0을 가진 H100 GPU는 SM(Streaming Multiprocessor)당 228KB의 공유 메모리 용량을 제공하며, 이는 A100의 164KB 대비 39% 증가한 수치입니다. 단일 스레드 블록당 최대 227KB의 공유 메모리를 주소 지정할 수 있습니다. CUDA가 스레드 블록당 1KB를 예약하기 때문에 이러한 수치가 나옵니다.

    128바이트 정렬(Alignment)은 H100에서 메모리 최적화의 핵심입니다. 현대 GPU는 메모리를 대용량 청크(일반적으로 128바이트)로 로드합니다. 워프 내의 스레드가 인접한 메모리 위치에 접근할 때, 하드웨어는 이러한 접근을 단일 트랜잭션으로 병합(coalesce)할 수 있습니다. 메모리 접근은 가능한 경우 128바이트로 정렬되어야 하며, 정렬되지 않은 접근은 대역폭을 낭비합니다.

    특히 TMA(Tensor Memory Accelerator) 텐서 맵의 경우, 128바이트 하드웨어 디스크립터로 매트릭스 설명을 패킹합니다. TMA 하드웨어가 매우 특수화되어 있기 때문에, 이 128바이트 객체는 메모리에서 128바이트 경계에 정렬되어야 합니다. 그렇지 않으면 하드웨어가 이를 읽을 수 없습니다.

    Tensor Memory Accelerator(TMA)와 워프 그룹 연산

    Hopper 아키텍처는 NVIDIA Ampere GPU 아키텍처에서 도입된 비동기 복사 기능을 기반으로 더욱 정교한 비동기 복사 엔진인 TMA를 제공합니다. TMA를 사용하면 애플리케이션이 1D에서 5D까지의 텐서를 전역 메모리와 공유 메모리 간에 양방향으로 전송할 수 있습니다. 또한 동일 클러스터 내 서로 다른 SM의 공유 메모리 영역 간에도 전송이 가능합니다.

    TMA 유닛을 사용한 비동기 실행은 전역 메모리와 공유 메모리 간에 대용량 데이터 블록을 효율적으로 전송할 수 있습니다. 이제 소수의 CUDA 스레드만으로 TMA를 사용하여 H100의 전체 메모리 대역폭을 관리할 수 있으며, 대부분의 다른 CUDA 스레드는 범용 계산에 집중할 수 있습니다.

    Hopper에서는 텐서 연산이 워프 수준에서 워프 그룹 수준으로 확장됩니다. 128개의 스레드(32*4)가 단일의 훨씬 더 큰 MMA(Matrix Multiply Accumulate)에서 협력합니다. 이러한 명령어는 더 이상 작은 워프 크기의 타일에서 작동하지 않고, 공유 메모리에 이미 존재해야 하는 상당히 더 큰 A와 B 블록에서 작동합니다.

    kernel-builder 프로젝트 구조 및 PyTorch 바인딩 작성법

    Hugging Face의 kernel-builder는 PyTorch C++ 프론트엔드를 사용하여 커널을 빌드하기 위한 Nix 패키지입니다. 이 도구는 커널의 전체 수명 주기를 안내합니다. 처음부터 커스텀 커널을 구축하고, 네이티브 PyTorch 연산자로 등록한 다음, Hugging Face Hub의 커뮤니티와 공유하는 방법을 보여줍니다. 버전 관리, 종속성 관리 및 배포에 대한 모범 사례도 다룹니다.

    kernel-builder를 사용하면 정확한 CUDA 및 PyTorch 버전을 선택할 수 있습니다. 예를 들어, CUDA 12.6이 포함된 PyTorch 2.7용 커널을 빌드하려면 특정 Nix 셸 명령을 사용할 수 있습니다.

    # kernel-builder 프로젝트 구조 예시
    my-kernel/
    ├── build.toml           # 빌드 설정 파일
    ├── src/
    │   ├── kernel.cu        # CUDA 커널 소스
    │   └── bindings.cpp     # PyTorch 바인딩
    └── tests/
        └── test_kernel.py   # 테스트 파일

    PyTorch 바인딩 작성은 커널을 Python에서 사용할 수 있게 만드는 핵심 단계입니다. C++ 확장을 통해 CUDA 커널을 PyTorch 텐서와 연결하고, torch.ops 네임스페이스에 등록하여 일반 PyTorch 연산처럼 사용할 수 있게 됩니다.

    // PyTorch 바인딩 예시 (bindings.cpp)
    #include <torch/extension.h>
    
    torch::Tensor my_kernel_forward(torch::Tensor input) {
        // CUDA 커널 호출
        return output;
    }
    
    PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {
        m.def("forward", &my_kernel_forward, "My kernel forward");
    }

    Hugging Face Kernel Hub의 성능 이점

    Hugging Face Kernel Hub는 최적화된 컴퓨트 커널에 접근하고 활용할 수 있는 강력하면서도 간단한 방법을 제공합니다. RMS Normalization과 같은 연산에 대해 표준 PyTorch 컴포넌트를 최적화된 버전으로 교체함으로써, 커스텀 빌드의 전통적인 복잡성 없이 상당한 성능 향상을 잠재적으로 달성할 수 있습니다.

    kernels 라이브러리는 정확한 Python, PyTorch, CUDA 버전을 감지한 다음 일치하는 사전 컴파일된 바이너리를 다운로드합니다. 이 과정은 일반적으로 몇 초 내에 완료됩니다. 반면, FlashAttention을 직접 컴파일하려면 리포지토리를 복제하고, 빌드 플래그를 구성하고, 약 96GB의 RAM을 예약하고, 10분에서 몇 시간까지 기다려야 합니다.

    벤치마크에서 커널은 컴파일 없이 약 2.5초 만에 사용할 준비가 되었습니다. 이는 소스에서 Flash Attention을 빌드하는 데 몇 분에서 몇 시간이 걸릴 수 있는 것과 극명한 대조를 이룹니다.

    diffusers 모델 벤치마크 결과 분석

    Hugging Face는 upskill을 diffusers 모델용 CUDA 커널 작성 작업에서 벤치마킹했습니다. 이 프로세스는 비용 절감이나 어렵고 도메인 특화된 문제에서 더 작은 모델을 사용하는 데 일반적으로 유용한 것으로 설명되었습니다.

    kernel-builder-cuda-kernels 스킬을 평가한 결과, 성능이 60%에서 95%로 향상되어 35%포인트의 개선을 보였습니다. 이는 소형 모델이 적절한 스킬을 갖추면 CUDA 커널 작성과 같은 전문적인 작업에서도 상당한 수준의 성능을 발휘할 수 있음을 보여줍니다.

    평가 항목 스킬 미적용 스킬 적용 개선율
    CUDA 커널 정확도 60% 95% +35%p
    커널 로딩 시간 수분~수시간(컴파일) ~2.5초 대폭 단축

    upskill을 사용하면 스킬과 모델 세트를 eval 명령에 전달하여, 해당 모델들에서 스킬 유무에 따른 테스트 케이스를 실행하고 성능을 비교할 수 있습니다. 스킬은 일부 오픈 모델에서 정확도를 높이지만 모든 모델에서 그런 것은 아닙니다.

    종종 에이전트는 스킬 유무와 관계없이 주어진 정확도에 도달할 수 있지만, 그곳에 도달하기 위해 더 많은 토큰을 소비해야 합니다. 반복적인 작업의 경우, 목표는 동일한 정확도를 달성하면서 더 적은 토큰을 사용하도록 에이전트를 최적화하는 것입니다.

    다중 백엔드 지원: CUDA, ROCm, Metal, XPU

    Hugging Face의 kernels 라이브러리는 kernel-builder로 커널을 쉽게 빌드하고 kernels-community와 공유할 수 있게 해주며, CUDA, ROCm, Metal, XPU를 포함한 여러 GPU 및 가속기 백엔드를 지원합니다. 이를 통해 커널이 빠르고, 이식 가능하며, PyTorch와 원활하게 통합됩니다.

    이러한 다중 백엔드 지원은 특정 하드웨어 벤더에 종속되지 않으면서도 최적화된 성능을 얻을 수 있다는 점에서 매우 중요합니다. 개발자는 단일 코드베이스로 다양한 하드웨어 플랫폼을 지원할 수 있으며, 각 플랫폼에 맞게 최적화된 커널이 자동으로 선택됩니다.

    소형 모델에서의 GPU 커널 작성 실전 활용법

    소형 오픈소스 모델을 활용하여 GPU 커널을 작성하는 실전적인 방법을 살펴보겠습니다. 먼저 upskill을 설치하고 kernel-builder-cuda-kernels 스킬을 다운로드합니다.

    # upskill 설치
    pip install upskill
    
    # 스킬 다운로드
    upskill download kernel-builder-cuda-kernels
    
    # 소형 모델과 함께 스킬 사용
    upskill run --model qwen-2.5-coder-7b             --skill ./skills/kernel-builder-cuda-kernels/             --task "Write a fused RMSNorm kernel"

    스킬이 적용된 소형 모델은 다음과 같은 작업을 수행할 수 있습니다. 첫째, 특정 GPU 아키텍처(예: H100의 SM90)를 대상으로 하는 커널 코드 생성이 가능합니다. 둘째, build.toml 설정 파일을 올바르게 구성하여 빌드 시스템과 통합할 수 있습니다. 셋째, 공유 메모리와 레지스터 사용을 최적화하여 성능을 극대화할 수 있습니다. 넷째, PyTorch 바인딩을 작성하여 Python에서 커널을 쉽게 사용할 수 있게 합니다.

    이 접근법의 가장 큰 장점은 비용 효율성입니다. Claude Opus 4.5와 같은 대형 모델을 직접 사용하면 토큰당 비용이 상당합니다. Opus 4.5의 경우 입력 100만 토큰당 $5, 출력 100만 토큰당 $25입니다. 반면 스킬을 사용하면 훨씬 저렴한 소형 모델로도 유사한 품질의 결과를 얻을 수 있습니다.

    diffusers와의 통합 및 최적화

    Hugging Face diffusers 라이브러리는 다양한 최적화 기법을 지원합니다. SDPA(Scaled Dot Product Attention)는 FlashAttention, xFormers, 네이티브 C++ 구현을 포함한 여러 어텐션 백엔드를 구현합니다. 하드웨어에 가장 최적인 백엔드를 자동으로 선택하며, PyTorch 2.0 이상을 사용하는 경우 기본적으로 활성화됩니다.

    torch.compile은 PyTorch 코드와 연산을 최적화된 커널로 컴파일하여 추론을 가속화합니다. diffusers는 일반적으로 UNet, transformer, VAE와 같이 계산 집약적인 모델을 컴파일합니다.

    import torch
    from diffusers import StableDiffusionPipeline
    
    # 파이프라인 로드
    pipe = StableDiffusionPipeline.from_pretrained(
        "stabilityai/stable-diffusion-2-1",
        torch_dtype=torch.float16
    )
    pipe = pipe.to("cuda")
    
    # UNet 컴파일로 성능 향상
    pipe.unet = torch.compile(pipe.unet, mode="reduce-overhead")

    결론: 파인튜닝 없는 전문 지식 전수의 새로운 패러다임

    Hugging Face의 Upskill과 kernel-builder는 AI 개발의 새로운 패러다임을 제시합니다. 대형 모델의 전문 지식을 가중치 수정 없이 소형 모델에 전달하는 이 접근법은 비용 효율적이면서도 효과적입니다. CUDA 커널 작성이라는 고도로 전문화된 영역에서 35%포인트의 정확도 향상을 달성한 것은 이 방식의 잠재력을 명확히 보여줍니다.

    H100의 컴퓨트 호환성 9.0, 228KB 공유 메모리, TMA 등의 고급 기능을 활용하는 커널을 작성하려면 상당한 전문 지식이 필요합니다. 그러나 이러한 지식이 스킬 파일로 패키징되면, 노트북에서 실행 가능한 소형 모델도 이러한 복잡한 작업을 수행할 수 있게 됩니다.

    Hugging Face Kernel Hub와 kernels 라이브러리는 이러한 커널을 쉽게 공유하고 사용할 수 있게 해주며, CUDA뿐만 아니라 ROCm, Metal, XPU 등 다양한 하드웨어 백엔드를 지원합니다. 이는 AI 개발의 민주화를 향한 중요한 발걸음이며, 더 많은 개발자가 고성능 GPU 커널의 혜택을 누릴 수 있게 해줍니다.

    카테고리: AI 개발

    반응형
Designed by Tistory.