AI Sparkup

최신 AI 쉽게 깊게 따라잡기⚡

LLM 모델 크기 22% 줄인 Cloudflare, 품질은 그대로인 무손실 압축 원리

H100 GPU의 연산 능력은 메모리 전송 속도보다 600배 빠릅니다. 가장 비싼 AI 칩이 정작 데이터를 기다리며 놀고 있는 셈이죠.

사진 출처: Cloudflare Blog

Cloudflare가 Unweight라는 LLM 추론 전용 무손실 압축 시스템을 개발하고, 기술 논문과 GPU 커널 코드를 오픈소스로 공개했습니다. Llama 3.1 8B 기준 모델 크기를 최대 22% 줄이면서도 출력 결과를 비트 단위까지 동일하게 유지하는 것이 핵심입니다.

출처: Unweight: how we compressed an LLM 22% without sacrificing quality – Cloudflare Blog

압축이 어려운 이유

LLM 모델을 작게 만드는 방법은 이미 여럿 있습니다. 가장 흔한 양자화(quantization)는 16비트나 32비트 부동소수점 수를 4비트나 8비트 정수로 변환하는 방식인데, 이 과정에서 필연적으로 정보가 손실됩니다. 응답 품질이 예측할 수 없는 방식으로 저하될 수 있어 다양한 사용 사례를 처리하는 프로덕션 환경에는 적합하지 않습니다.

무손실 압축도 연구된 바 있지만, 대부분은 저장이나 배포 목적으로 CPU에서 압축을 해제하는 방식이거나 소비자용 GPU에 최적화된 것들이었습니다. Cloudflare가 운영하는 데이터센터의 H100 GPU에서 추론 시간에 실시간으로 동작하는 시스템은 없었습니다.

숨겨진 패턴: 지수 바이트의 편향

Unweight의 핵심 통찰은 모델 가중치 내부에 있습니다. LLM의 모든 숫자는 BF16(brain float 16) 형식으로 저장되는데, 각 값은 세 부분으로 나뉩니다: 부호(1비트), 지수(8비트), 가수(7비트).

부호와 가수는 예측 불가능하게 변하지만, 지수 바이트는 극단적으로 편향되어 있습니다. 256가지 가능한 지수 값 중 상위 16개가 일반적인 레이어 전체 가중치의 99% 이상을 차지합니다. 정보 이론적으로 이 분포를 표현하는 데 필요한 평균 비트 수는 약 2.6비트로, 실제로 할당된 8비트의 3분의 1 수준입니다.

Unweight는 이 편향을 활용해 지수 바이트에만 선택적으로 Huffman 코딩을 적용합니다. 자주 등장하는 값에는 짧은 코드를, 드문 값에는 긴 코드를 할당하는 고전적인 압축 기법입니다. 상위 16개에 들지 않는 희귀 지수를 가진 가중치는 해당 행 전체를 원본 그대로 저장하는 방식으로 처리합니다. 부호와 가수는 손대지 않아 출력이 비트 단위까지 동일하게 유지됩니다.

이 압축은 모델에서 메모리 트래픽을 가장 많이 유발하는 MLP(다층 퍼셉트론) 가중치에만 선택적으로 적용됩니다. MLP는 모델 파라미터의 약 3분의 2를 차지하고 토큰 생성 시 메모리 대역폭을 가장 많이 사용하는 부분이기 때문입니다.

온칩 복원: 느린 메모리를 우회하는 법

압축된 가중치는 GPU 메모리(HBM)에 저장됩니다. 문제는 행렬 연산을 위해 압축을 해제해야 한다는 점인데, 기존 방식은 해제된 데이터를 다시 HBM에 쓴 뒤 읽어오는 과정을 반복합니다. 메모리 버스를 두 번 거치는 셈입니다.

Unweight는 이 단계를 생략합니다. 압축된 데이터를 HBM에서 GPU의 고속 온칩 메모리(공유 메모리, SMEM)로 읽어온 뒤, 그 자리에서 BF16으로 복원하고 즉시 텐서 코어에 공급합니다. 복원된 가중치가 메인 메모리에 존재하는 순간 없이 바로 연산에 투입되는 구조입니다.

다만 하나의 실행 전략이 모든 상황에 최적은 아닙니다. 배치 크기가 작을 때는 커스텀 커널의 고정 비용이 상대적으로 커지기 때문에 단순한 전체 복원 후 표준 행렬 연산 방식이 더 나을 수 있습니다. 반대로 배치가 클수록 커스텀 커널의 복원 작업을 행렬 연산과 겹쳐 실행하는 이점이 커집니다. Unweight는 이를 위해 네 가지 실행 파이프라인을 두고, 오토튜너가 각 가중치 행렬과 배치 크기 조합마다 실제 처리량을 측정해 최적 전략을 선택합니다.

결과와 한계

Llama 3.1 8B에서의 결과는 다음과 같습니다.

  • 추론용 번들: 모델 메모리 약 13% 감소, VRAM 약 3GB 절감
  • 배포용 번들: 모델 크기 약 22% 감소 (다운 프로젝션 포함 시)
  • 현재 처리량 오버헤드: 배치 크기 1에서 약 41%, 배치 1024에서 약 30%

Cloudflare는 이 결과가 “공짜 점심”이 아님을 명시합니다. 온칩 복원 작업 자체가 압축하지 않을 때는 없던 연산 부담입니다. 아직 MLP의 다운 프로젝션(압축 가능한 가중치의 약 3분의 1)은 적용되지 않았고, 어텐션 가중치나 임베딩도 압축 대상이 아닙니다. 이 부분들이 추가로 최적화되면 압축률과 처리량 오버헤드 모두 개선될 것으로 보입니다.

Cloudflare는 GPU 커널 코드를 오픈소스로 공개하고 기술 논문도 함께 발표했습니다. 논문에는 세 가지 처리량 오버헤드 원인과 각각의 해결 방향, ablation 분석이 포함되어 있습니다.

참고자료:


AI Sparkup 구독하기

최신 게시물 요약과 더 심층적인 정보를 이메일로 받아 보세요! (무료)

Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다