소비자용 GPU에서 모델의 양자화(Quantization), 서빙(Serving), 학습(Training)을 위한 Rust/CUDA 기반 오픈
요약
Rust와 CUDA를 기반으로 모델을 1.58비트(ternary)로 양자화, 서빙, 학습할 수 있는 오픈소스 프로젝트 Tritium을 소개합니다. VRAM 사용량을 획기적으로 줄이고 추론 속도를 최적화하여 소비자용 GPU 및 MCU 환경에서의 효율적인 모델 실행을 지원합니다.
핵심 포인트
- 1.58비트(ternary) 양자화를 통해 VRAM 사용량 대폭 절감
- llama.cpp 대비 대역폭 정규화 기준 더 빠른 추론 성능 제공
- SALT 알고리즘을 통한 민감도 할당 계층적 삼진법화 구현
- RTX 4090 기준 BitNet 2B4T 모델에서 높은 토큰 생성 속도 달성
이 게시물은 클랭커(clanker)가 작성하지 않았습니다. 안녕하세요 여러분, 저는 모델을 가능한 최소한의 손실로 ternary (1.58 bit)로 양자화(quantizing)하기 위해 제가 만든 멋진 프로젝트를 소개하고 싶은 컴퓨터 과학 전공생입니다. 이 과정은 VRAM 사용량을 10배 이상 줄일 수 있고, 훨씬 빠른 추론(inference) 속도, 디스크 공간 절약 등을 제공할 수 있습니다. 다만 주의사항이 있는데, 현재 단계에서 실제 VRAM 감소량은 일반적으로 10배보다 훨씬 적습니다. (ADHD 증상으로 인한 사과를 드립니다) 현재 우리가 할 수 있는 것을 참고로 말씀드리자면, BitNet 2B4T는 fp16보다 7.5배 작은 1.71 GiB에 들어가며, 훨씬 빠른 추론과 선택적인 KV 캐시 압축(KV cache compression)을 제공합니다. 저는 Qwen 3.6의 ternary 가중치를 포함한 Tritium Stable v1.1을 출시할 계획입니다. 코드를 자유롭게 탐색하고, 여러분의 ternary 모델을 위한 tritium 추론 엔진(inference engine)으로 직접 애플리케이션을 설계해 보세요.
Tritium 히스토리
Tritium은 ternary bit의 'Trit'에서 따왔으며, tritium이라는 이름은 멋지게 들리고 제 다른 모든 프로젝트들로부터의 일종의 융합(fusion)을 암시하기 때문에 붙였습니다. 이 프로젝트는 몇 달 동안 작업해 왔지만, 바로 오늘인 7월 30일에 llama.cpp가 마침내 Q2_0 CUDA 지원을 병합(merge)했기에 지금 게시합니다. 저는 이것을 제가 개인적으로 사용하고 유지 관리할 지속적인 인프라 프로젝트로 만들 의도입니다. 또한 제 코드가 빛을 발할 기회를 주기 위해 코드를 공개할 계획입니다. 오늘 아침 벤치마크 기준으로, 우리는 여전히 llama.cpp와 비교했을 때 대역폭 정규화(bandwidth-normalized) 기준 더 빠릅니다 (유효 474 vs 352 GiB/s). 제가 이것을 개발하고 싶었던 원래 이유는 제 개인 회사를 설립했고, 신호 압축(signal compression)을 위해 MCU 하드웨어에서 ternary 모델을 실행하고 있기 때문입니다. 그래서 ternary 모델을 학습하고 양자화하여 펌웨어(firmware)에 임베딩할 더 나은 방법을 원했습니다. 2개월 전이었다면 훨씬 더 흥미로웠을 텐데, 더 일찍 공개하지 못한 것이 아쉽습니다. 만약 누구라도 확신이 서지 않는다면, 저를 거짓말쟁이라고 부르고 증거를 제시해 주세요.
위의 모든 수치 옆에는 docs/BENCHMARKS.md에 정확한 명령어가 기재되어 있습니다.
개요
추론 (Inference) - 당연히 추론이 가능하며, 이것이 엔진의 주요 목적입니다. BitNet 2B4T는 최적화된 가중치 스트리밍 (weight streaming), int8 텐서 코어 (IMMA) 커널을 통한 최적화된 프리필 (prefill, 12.3K tok/s) 등의 방법론을 통해 단일 RTX 4090에서 280-300 tok/s의 속도로 디코딩합니다. 이 모든 과정은 스칼라 참조값 (scalar reference)과 비트 단위로 동일하게 작동합니다. CUDA에서 실행되며 제가 직접 테스트를 마쳤으나, 현재 대여한 클라우드 하드웨어를 통해 Metal, ROCm, Vulkan/wgpu, 그리고 wasm에서도 테스트를 진행 중입니다.
양자화 (Quantization) - 저는 SALT라고 불리는 양자화 알고리즘을 개발했습니다. 이는 QAT (Quantization-Aware Training)가 오류를 FP16과 동일한 수준으로 낮추는 데 실패할 경우, 단순히 삼진법 (ternary) 가중치를 추가한다는 단순한 아이디어에서 시작되었습니다. 약 2개월간의 연구, 테스트 및 개발을 거쳐, 저는 '민감도 할당 계층적 삼진법화 (Sensitivity Allocated, Layered Ternarization)'라고 부르는 방법론을 개발했습니다. 기술적으로는 거의 모든 모델을 점점 더 낮은 정밀도의 가중치로 양자화하는 데 작동합니다. 기본적인 개요 이상의 내용을 원하신다면 제 백서 (whitepaper)를 읽어주시기 바랍니다.
학습 (Training) - 제가 SALT-aware training이라고 부르는 새로운 QAT 방법론입니다. 삼진법 모델을 학습하는 데 사용되는 일반적인 STE (Straight-Through Estimator)나 fp32 마스크 대신, 가중치를 삼진법화하고 해당 삼진법 가중치의 출력을 Tritium에서 직접 실행합니다. 기본적으로 학습 루프가 엔진이 추론을 수행하는 것과 동일한 SALT 평면 (planes)을 통해 양자화를 수행하므로, 학습과 배포 단계가 동일한 가중치를 보게 됩니다. PyTorch와 완벽하게 호환됩니다. 저장소에는 모든 증빙 자료와 함께 증류 (distilled)된 삼진법 모델이 포함되어 있습니다. 참조 구현이 포함된 백서가 곧 공개될 예정입니다.
Tritium 1.1.0 Stable의 출시 차단 요소 (release blocker)는 Qwen 3.6 27B를 bf16 대비 상대적 홀드아웃 퍼플렉시티 (held-out perplexity) 증가율 1.0% 미만, 평균 6개 작업 정확도 감소 ≤0.5pp, 단일 작업의 bf16 대비 감소폭 >1.0pp가 없는 수준의 삼진법 모델로 변환하는 능력을 확보하는 것입니다. 필요한 GPU 연산량이 전체 학습 실행보다 현저히 저렴하므로, 하드웨어를 갖춘 분이라면 누구든 저를 도울 수 있습니다.
서빙(Serving) - BASTION (arXiv:2605.29727) spec-decode 프레임워크를 기반으로 구축된 continuous batching, paged KV, 그리고 손실 없는 speculative decoding (lossless speculative decoding)을 지원하는 OpenAI 호환 서버입니다. 저는 이를 위한 서빙 레이어(serving layer)도 개발 중이지만, 기본적으로 다른 모든 소프트웨어와의 상호 운용성(interop), ternary 가중치 형식(ternary weight format), 그리고 완전한 내보내기(full export)를 보장합니다. 사용 방법은 여기에 저장소(repo) 링크를 제공할 예정이며 댓글에도 남겨두겠습니다. Crates.io 출시도 곧 진행될 예정입니다. 시간이 너무 늦었네요, 아침까지 답변 드리겠습니다. -Blam
LLM 사용 공개: 저는 API 표면(API surfaces)을 설계했고, PTQ (Post-Training Quantization) 방법론의 최신 SOTA (State-of-the-Art)를 연구했으며, 저만의 PTQ (SALT)를 설계했고, 학술적 정직성과 적절한 인용을 바탕으로 모든 결과를 큐레이션했습니다. LLM의 도움을 받아 작성된 모든 코드는 엄격하게 테스트되었으며, 지원되는 하드웨어와 함께 arch 기반 Linux에서 검증되었습니다. 코드 작성에 LLM을 광범위하게 사용하였으며, 거의 전체 최적화 설정(optimization setup)부터 제가 읽을 연구를 찾아내는 스크래핑(scraping) 과정까지 포함됩니다.
submitted by /u/Wide_Big_6969 [link] [comments]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/LocalLLaMA의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기