
아디티야 카마스(Aditya Kamath)와 사이먼 피터(Simon Peter)는 대형 언어 모델(LLM)의 정확도를 유지하면서 데이터 이동량을 줄이는 무손실 압축 연구를 소개한다. 기존 방식은 추론에서 평균 1.4배 데이터량을 줄였으며, 일부 기법은 추론 속도도 높였다. 다만 압축 해제 위치와 동적으로 바뀌는 데이터의 재압축은 여전히 해결해야 할 문제다.
LLM을 실행하려면 모델 가중치와 생성된 KV 캐시, 중간 표현 등 기가바이트 단위의 데이터를 옮겨야 한다. 배포 환경에 따라 네트워크, PCIe, 가속기 간 연결(NVLink 등), 메모리 연결망을 거치며, 데이터 이동이 실행 속도의 병목이 될 수 있다.
양자화는 텐서를 더 작은 데이터 형식으로 바꿔 저장 공간과 추론 중 연결망 트래픽을 줄이는 방법이다. 가중치, 활성값, 어텐션, KV 캐시 등 다양한 구성 요소에 적용하는 연구가 이뤄졌다. 그러나 정보 손실로 정확도가 낮아질 수 있어 모델과 사용 사례에 맞춰 조정해야 한다. 정확도 변화가 겉으로 드러나지 않더라도 양자화된 모델의 장황한 답변처럼 예측하기 어려운 부작용이 나타날 수 있으며, 모델 구조와 작업에 따라 영향이 달라 배포 뒤 일관성을 보장하기 어렵다.
무손실 압축은 정보를 보존해 모델 정확도를 유지하면서 데이터량을 줄인다. 양자화만큼 많이 압축하지는 못하지만, 소개된 연구에서는 평균 데이터량을 1.4배 줄였다. 압축 데이터를 복원하는 과정이 중요한 실행 경로에 추가되면 전송량 감소의 이점을 상쇄할 수 있고, 텐서의 부동소수점 값은 압축하기 어렵다. 특히 이상값을 보존하려면 추가 메타데이터가 필요하다.
이 연구 흐름은 LLM 텐서에 있는 중복 비트를 활용한다. 모델에 흔히 쓰이는 BF16은 부호 비트 1개, 지수 비트 8개, 가수 비트 7개로 구성된다. 가수 비트 값은 비교적 무작위로 분포하지만 지수 비트에는 구조가 있다. 지수 비트 8개 가운데 보통 유용한 정보를 담는 것은 약 3개뿐이며, 나머지 5개는 엔트로피가 낮다. DFloat11 논문에 실린 그림은 BF16 LLM의 지수 비트가 높은 압축성을 보인다고 설명한다.
GPU용 무손실 압축 기법은 압축 데이터를 독립된 단위로 나눠 수천 개의 GPU 스레드가 병렬로 압축을 풀도록 설계한다. 메타데이터를 작게 유지해 GPU 캐시에 들어가도록 하고, 압축 해제 중 메타데이터 접근에 따른 추가 부담도 줄이려 한다.
DFloat11은 모델 가중치가 GPU 메모리 용량을 넘는 경우를 다룬다. 초과 가중치를 CPU 메모리에 두고 필요할 때 PCIe를 통해 옮기는 오프로딩 환경에서, BF16 가중치의 지수 비트를 허프만 부호화해 압축한다. 8비트를 더 적은 수의 비트로 바꾸고, GPU의 공유 메모리에 들어가는 작은 조회 테이블을 사용한다. 논문은 이 방식으로 모델 크기를 약 30% 줄여 48GB 모델을 40GB GPU에 올릴 수 있다고 보고했다. 데이터가 PCIe를 건너지 않게 되면서 HuggingFace Transformers보다 추론이 2~40배 빨라졌다고 설명한다.
ZipServ는 GPU 메모리에서 텐서 코어로 가중치를 옮기는 GPU 내부 데이터 이동을 다룬다. DFloat11처럼 BF16 가중치의 지수 비트 8개를 3비트로 바꾸되, 오프라인에서 가장 자주 나타나는 지수 값 7개를 압축한다. 나머지 지수는 별도 위치에 전체 형태로 저장됐음을 알리는 특수 값으로 표시한다. 융합 행렬 곱셈 커널이 텐서 코어로 데이터를 가져오면서 직접 압축을 풀어, 일반적으로 압축 해제에 필요한 메모리 왕복을 피한다. 연구진은 vLLM보다 처리량이 평균 22% 높았다고 보고했다.
저자들이 소개한 Invariant Bit Packing(IBP)은 특정 데이터 형식에 한정되지 않으며, 실행 중 압축과 압축 해제를 모두 지원한다. 이에 따라 실행 중 생성되는 KV 캐시에도 적용할 수 있다. IBP는 텐서 전반에 반복되는 저엔트로피 비트인 불변 비트를 찾아 GPU에 메타데이터로 저장한다. 텐서 일부에서 불변 비트를 확인해 전체 텐서 집합으로 일반화하며, 압축할 때 해당 비트를 제거하고 압축을 풀 때 간단한 비트 시프트 연산으로 복원한다. 연구진은 CPU에서 데이터를 옮기는 동안 텐서 압축을 풀어 FlexGen 및 InfiniGen보다 LLM 추론 속도를 평균 24% 높였다고 보고했다. 이 결과는 가중치와 KV 캐시 전송을 모두 개선하는 방식으로 무손실 압축을 적용할 수 있음을 보여준다.
실제 적용 사례도 등장하고 있다. Cloudflare는 앞서 소개한 아이디어를 바탕으로 NVIDIA H100에서 무손실 압축 해제를 지원하는 Unweight를 공개했다. IBM Research는 저장 및 네트워크 전송을 겨냥해 LLM의 무손실 압축을 지원하는 ZipNN을 소개했다. Doubleword.ai는 같은 지수 비트 중복성 때문에 최신 FP8 모델도 압축할 수 있다고 밝혔다.
GPU 내부뿐 아니라 다중 GPU·다중 서버 배포에서도 데이터 이동을 압축할 여지가 있다. 모델과 계산을 데이터·텐서·시퀀스·파이프라인·전문가 축으로 나누는 5차원 병렬화에서는 각 축마다 트래픽이 추가될 수 있다. 텐서 병렬화는 GPU 여러 대 사이에 부분 활성값을 이동시켜 NVLink 전송에 20%의 오버헤드를 더할 수 있다. 전문가 병렬화는 중간 토큰을 옮기기 위해 전체 GPU 간 통신을 수행하며, 이때 오버헤드는 40%에 이른다. 여러 기계를 연결하면 대역폭이 더 낮은 네트워크에 의존하므로 문제가 커질 수 있다.
압축을 어디서 풀지도 배포 환경에 따라 달라진다. GPU에서 압축을 풀면 동시에 실행되는 다른 계산에 쓸 GPU 사이클을 차지할 수 있다. 반대로 네트워크 스마트 스위치나 SmartNIC에서 미리 풀면 데이터가 PCIe나 NVLink를 건널 때 이미 커져, 그 뒤 구간의 이점을 잃는다. NVIDIA B200 GPU는 전송 경로에서 압축 데이터를 PCIe로 옮긴 뒤 GPU 멀티프로세서를 사용하지 않고 압축을 푸는 하드웨어 엔진을 갖췄다. 현재 지원 알고리즘은 LZ4, Snappy, Deflate로 제한돼 있으며, 지원 범위를 넓히고 엔진을 유연하게 만드는 방법은 열린 과제로 남아 있다.
메모리 안이나 근처에서 처리하는 방식도 가능성으로 제시된다. 메모리에 압축된 상태로 데이터를 저장하고 메모리에서 나올 때 압축을 풀면, GPU 코어를 압축 해제에 쓰지 않으면서 실효 GPU 메모리 용량을 늘릴 수 있다. 더 많은 데이터를 GPU 메모리에 보관하면 PCIe 같은 저대역폭 연결을 건너는 데이터량도 줄어든다.
현재 소개된 기법은 정적 데이터에 초점을 둔다. 추론에서는 가중치나 KV 캐시 항목을 여러 반복에서 재사용하므로 압축 비용을 나눠 부담할 수 있다. 반면 학습에서는 전체 작업 데이터가 매 반복마다 바뀌어 압축과 압축 해제를 되풀이해야 한다. 이를 줄이려면 데이터를 빠르게 다시 압축하는 무손실 기법이 필요하다. 더 나아가 압축 데이터를 직접 갱신하는 방식이 가능하다면 재압축을 피할 수 있다. 저자들은 LLM 무손실 압축이 아직 초기 단계지만, 텐서를 약 30% 압축한 연구와 다중 GPU 배포에서 20~40%에 이르는 통신 오버헤드가 향후 연구의 가능성을 보여준다고 설명한다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요