맥에서 AI 모델을 다루는 개발자라면, 이번 Transformers 소식을 봐두세요

미색 바탕에 노란 'Transformers × GGUF' 글자와 ggml 커널 목록 띠가 놓인 허깅페이스 블로그 썸네일.

로컬에서 AI 모델을 돌리는 대표적인 길은 두 갈래였어요. llama.cpp 계열(Ollama·LM Studio·Jan의 엔진)로 GGUF 파일을 돌리거나, Hugging Face Transformers로 원본 체크포인트를 PyTorch에서 다루거나요. 전자는 가볍고 빠른데 모델 내부를 만지기 어렵고, 후자는 실험에 좋지만 큰 모델을 노트북에 올리기엔 무거웠어요.

허깅페이스가 9월 22일 이 둘을 잇는 기능을 내놨어요. Transformers에서 GGUF 모델을 효율적으로 실행할 수 있게 된 거예요. from_pretrained에 gguf_file을 넘기는 것만으로 동작해요.

기술적으로 무엇을 했나

핵심은 Transformers를 llama.cpp로 갈아끼운 게 아니라, llama.cpp의 밑바닥 ggml 커널을 kernels 라이브러리를 통해 PyTorch 안에서 재사용했다는 거예요. 발표에 실린 커널 구성은 이래요.

커널 역할
ggml-quantization 패킹된 양자화 가중치를 그대로 읽어 행렬 연산(MoE의 선택된 expert 포함). 매 토큰마다 가중치를 풀지 않아 메모리를 아껴요
ggml-norm Qwen3.5·Qwen3.8의 zero-centered RMSNorm 같은 정규화를 한 번에 처리
ggml-attn Metal 플래시 어텐션 — 프롬프트 처리와 토큰 디코딩
ggml-gated-delta-net Qwen3.5·Qwen3.8 하이브리드 구조의 linear-attention 층 가속
topk MoE 모델에서 토큰별 expert 선택(softmax + top-k 라우팅) — 허깅페이스 자체 Metal 구현

generate 쪽 최적화도 같이 들어갔어요 — 패딩이 없는 입력의 attention mask를 초반에 버리고(#48814), 중단 조건 확인을 비동기로 미뤄서 GPU가 쉬는 시간을 줄였어요(#47975). 이 두 변경은 GGUF가 아닌 모든 Transformers 모델에도 적용돼요.

측정은 MacBook Pro M2 Max(32GB)에서 진행했고, 세 체크포인트(작은 dense·큰 dense·MoE)에서 “llama.cpp에 근접”이라는 게 회사 설명이에요. 주의: Transformers 측정은 prefill을 포함하고 llama-bench는 디코딩만 잰 거라 완전히 동일 조건은 아니라고 본문에 명시돼 있어요.

GGUF 파일 형식, 간단히

GGUF는 가중치·토크나이저 정보·채팅 템플릿을 한 파일에 담는 형식이에요. 양자화 수준별로 크기가 달라져요 — Unsloth의 Qwen3.5-4B 기준으로 BF16은 8.42GB인데 Q4_K_M은 2.74GB예요. 실전 시작점으로 Q4_K_M을 권하고, 메모리 여유가 있으면 Q5_K_M·Q6_K로 정밀도를 올리라고 해요. 품질 손실은 모델과 작업에 따라 다르니 직접 평가가 필요해요.

파일·도구·컴퓨터의 관계를 보면 쉬워요
구성 요소의 관계를 단순화했어요. 실제 속도나 메모리 사용량을 측정한 결과는 아니에요. Hugging Face 발표 · AIMAG 재구성

조건과 한계

확인할 것 발표 당시 안내
하드웨어 Apple Silicon 맥 우선 지원
모델 Qwen3.5 구조부터 시작
설치 Transformers 최신 개발 버전 + 호환 kernels 버전 (pip install -U "git+https://github.com/huggingface/transformers.git" kernels)
PyTorch ggml 커널 빌드가 지원하는 버전(보통 최신 2개 릴리스)

커널을 못 받으면 모델을 dequantize(양자화를 풀어 큰 형태로 로드)해서 메모리가 늘어나요 — sdpa 폴백으로 경고와 함께 동작해요. 그리고 회사가 직접 밝히듯 “효율적인 로컬 실행이 목적이면 llama.cpp가 여전히 권장 엔진”이에요. 이번 기능의 용도는 다르거든요:

  • Python/PyTorch에서 GGUF 모델의 중간 활성값을 훅으로 들여다보거나 forward를 바꾸는 실험
  • 기존 Transformers 평가 워크플로로 양자화 체크포인트 품질 재기
  • 원본↔GGUF 변환 검증
  • GgufConfig(dequantize=True)로 양자화를 풀어 파인튜닝 진입
  • transformers serve로 OpenAI 호환 API 엔드포인트 띄우기(Jan·Pi 같은 클라이언트 연결)

장기적인 함의도 있어요. 커널은 텐서 연산이라 GGUF가 아닌 모델에도 붙을 수 있어서, llama.cpp 전용 구현이 없는 새 아키텍처·비전·오디오 모델까지 ggml 성능을 가져올 길이 열렸다는 게 회사의 설명이에요.

출처

대표 이미지: 허깅페이스

구글 검색에서 AIMAG 소식을 먼저 보려면

AI 보조 초안 · 편집부 검수