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
Claude Code sends 33k tokens before reading the prompt; OpenCode sends 7k
동일한 모델과 작업 환경에서 Claude Code와 OpenCode의 실제 토큰 사용량을 API 레벨에서 측정한 결과, Claude Code가 시스템 프롬프트 오버헤드만으로 OpenCode 대비 4.7배 더 많은 토큰을 소비한다는 것을 확인했다.
Mesh LLM: distributed AI computing on iroh
사무실, 집, 클라우드에 흩어진 GPU들을 하나의 OpenAI 호환 API로 묶어주는 분산 LLM 실행 시스템으로, 비싼 API 비용 없이 큰 모델을 직접 운영할 수 있다.
Show HN: Frugon – Find which LLM calls a cheaper model could handle (local, MIT)
내 LLM API 비용이 어디서 새는지 로컬에서 분석해주는 오픈소스 CLI 도구로, 비싼 모델 대신 저렴한 모델로 전환 가능한 호출을 골라낸다.
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 기준)에 그치게 만든 실제 프로덕션 적용 사례다.