Show HN: Overfitted a 900KB Transformer to Compress a 100MB CSV into 7MB
TL;DR Highlight
단일 파일을 통째로 암기하도록 Transformer를 과적합(overfitting)시킨 뒤 arithmetic coding으로 압축하는 실험으로, 100MB CSV를 7MB(~0.5 bits/byte)까지 줄이는 데 성공했다. 모델이 '범용 이해' 대신 '특정 파일 완전 암기'를 목표로 한다는 점에서 전통적 ML 학습과 정반대 방향이라 흥미롭다.
Who Should Read
압축 알고리즘이나 정보이론에 관심 있는 개발자, 또는 Transformer 모델을 일반화가 아닌 특수 목적(파일 암기 등)으로 활용하는 아이디어를 탐구하고 싶은 ML 엔지니어.
Core Mechanics
- 핵심 아이디어는 모델을 '범용화'하는 게 아니라 단일 파일을 완전히 암기하도록 과적합(overfitting)시키는 것이다. 일반적인 ML 학습이 일반화를 목표로 하는 것과 정반대 방향이다.
- 900KB짜리 Transformer가 파일의 다음 바이트(next byte)를 예측하도록 학습되고, 그 예측 확률 분포를 arithmetic coding(산술 부호화, 예측 확률을 활용해 더 짧은 코드를 만드는 압축 방식)에 입력해 압축 출력을 만든다.
- 100MB NYC 택시 CSV 파일에서 약 7MB(~0.5 bits/byte)로 압축에 성공했다. 이는 원본 대비 약 93% 압축이다.
- 100MB enwik9(Wikipedia 텍스트 데이터셋) 슬라이스에서는 약 21MB(~1.68 bits/byte)로 압축됐다. 900KB 모델 크기를 포함한 수치다.
- 속도가 큰 단점이다. AMD 7800XT GPU 기준으로 학습에 20~30분, 압축과 압축 해제에 각각 45분씩 소요된다. 실용적 활용보다는 실험적 프로젝트 수준이다.
- 압축된 결과물에는 원본 데이터를 복원하는 데 필요한 900KB 모델 가중치도 함께 포함된다. 따라서 파일 크기가 작을수록 모델 오버헤드가 이득을 상쇄할 수 있다.
- Hutter Prize 벤치마크(enwik9 1GB 전체 기준) 최고 기록이 13MB인 반면, 이 실험은 100MB 슬라이스에서 21MB를 달성했다. 아직 격차가 있지만 계속 개선 중이다.
- 구현 코드는 GitHub(samyak112/pym-particles)에 공개되어 있으며, arithmetic coding 구현도 포함되어 있다.
Evidence
- Fabrice Bellard이 7년 전에 동일한 아이디어를 이미 구현했다는 지적이 나왔다. 작성자는 이미 알고 있었다고 밝혔는데, 선행 연구에 대한 언급 없이 마치 새로운 발명인 것처럼 표현했다는 점에서 '약간 부정직하다(disingenuous)'는 비판도 제기됐다.
- 모델 앙상블(여러 과적합 Transformer를 bagging하는 방식)을 시도하면 더 나은 압축이 가능하지 않냐는 질문에, gwern이 앙상블은 파라미터와 연산 효율이 나쁘기 때문에 압축 용도로는 최악의 접근이라고 반박했다. 이는 대형 LLM 하나가 동일 규모의 작은 LLM 100개보다 효율적인 이유와 같다는 설명이다.
- WinZIP과만 비교한 것이 아니라 LZMA2(레벨 9), BZIP2, ZPAQ(최대 설정)과 같은 현대적 압축 알고리즘과의 비교 결과도 있어야 공정한 평가가 된다는 지적이 있었다. 또한 데이터셋이 재현 가능하도록 공개되어 있지 않다는 재현성 문제도 지적됐다.
- 압축의 핵심은 arithmetic coding 같은 'coder'가 아니라 데이터를 얼마나 잘 모델링하느냐에 달려 있다는 전문가 의견이 나왔다. 특정 데이터셋에 특화된 모델(일반 LLM이 아닌 '데이터 모델링' 의미)은 항상 범용 알고리즘보다 압축률이 높을 수밖에 없다는 설명이다.
- 이 방식을 이미지나 비디오 코덱에 응용하자는 아이디어도 나왔다. 레이어 구조를 동적으로 조절 가능하게 만들면 고정 파이프라인보다 품질/크기 트레이드오프를 더 잘 제어할 수 있을 것이라는 제안이었다. Stable Diffusion으로 500KB 이미지를 50바이트로 압축한(물론 손실 압축) 사례도 함께 언급됐다.
How to Apply
- 특정 도메인의 반복적인 대용량 정형 데이터(예: 매일 생성되는 동일 스키마의 로그 CSV)를 장기 보관해야 하는 경우, 이 방식처럼 해당 파일 구조에 과적합된 소형 모델을 학습시켜 arithmetic coding과 결합하면 범용 압축 알고리즘 대비 훨씬 높은 압축률을 얻을 수 있다.
- 압축 효율을 평가할 때 WinZIP 같은 구형 도구가 아니라 LZMA2(7-Zip 최고 레벨), BZIP2, ZPAQ 등 현대적 압축 알고리즘과 비교해야 한다. 이 프로젝트를 포크하거나 유사 실험을 한다면 mattmahoney.net/dc/text.html의 벤치마크 기준을 참고하면 공정한 비교가 가능하다.
- 파일 크기가 작은 경우 900KB 모델 오버헤드가 압축 이득을 상쇄할 수 있으므로, 실제 적용 전에 '모델 크기 + 압축 데이터 크기 vs 원본 크기'의 손익분기점(crossover point)을 먼저 계산해봐야 한다.
- Hutter Prize(prize.hutter1.net) 벤치마크에 관심 있는 개발자라면, 이 프로젝트의 GitHub 코드(samyak112/pym-particles)를 출발점으로 삼아 모델 구조 튜닝이나 diffusion 모델 접목 등의 아이디어를 실험해볼 수 있다.
Terminology
Related Papers
Jamesob's guide to running SOTA LLMs locally
2천 달러짜리 RTX 3090 한 장부터 4만 달러짜리 RTX PRO 6000 4장 셋업까지, 로컬에서 최신 LLM을 직접 돌리는 방법을 하드웨어 선택·구성·실행 설정까지 통째로 정리한 실전 가이드다.
Faster embeddings: how we rebuilt the ONNX path in Manticore
Manticore Search가 기존 SentenceTransformers/Candle 백엔드를 ONNX Runtime으로 교체해 텍스트 임베딩 생성 속도를 평균 14배 향상시켰다. 별도 모델 서비스 없이 DB 내부에서 직접 임베딩을 처리하는 구조에서 INSERT 속도가 곧 임베딩 속도이기 때문에 이 개선은 실질적인 ingest 처리량 향상으로 직결된다.
Asymmetric Quantization: Near-Lossless Retrieval with 97% Storage Reduction
멀티벡터 검색 모델의 문서 벡터를 1비트 이진값으로 압축하고 쿼리 벡터만 int8로 유지하는 비대칭 양자화 기법으로, 스토리지를 97% 줄이면서 검색 품질 손실을 0.61점(NDCG@10 기준)에 그치게 만든 실제 프로덕션 적용 사례다.
Show HN: Bash4LLM+ – A lightweight, dependency-free Bash wrapper for LLM APIs
Python이나 Node.js 없이 순수 Bash만으로 Groq 등 OpenAI 호환 LLM API를 호출할 수 있는 단일 스크립트 도구로, Termux(Android)를 포함한 모든 Unix 환경에서 동작한다.
Wayfinder Router: deterministic routing of queries between local and hosted LLM
프롬프트의 복잡도를 모델 호출 없이 오프라인으로 점수화해서 간단한 쿼리는 로컬 모델로, 어려운 쿼리는 유료 모델로 자동 라우팅하는 CLI 도구다. LLM 비용을 줄이면서도 응답 품질을 유지하고 싶은 개발자에게 유용하다.
Apple Neural Engine: Architecture, Programming, and Performance
Apple 기기에 내장된 AI 전용 칩인 ANE(Apple Neural Engine)를 리버스 엔지니어링으로 분석한 302페이지짜리 기술 문서로, Core ML 아래 숨겨진 내부 구조와 직접 접근 경로를 처음으로 공개한다.