VRAM의 2비트 복사본 + 시스템 RAM의 정확한 잔여값(residual)을 검증기로 사용: GPU에 맞지 않는 모델을 위한 추측 디코딩
요약
본 글은 VRAM 용량 제약이 있는 대규모 LLM을 위한 새로운 추측 디코딩(Speculative Decoding) 기법을 제시합니다. 모델 가중치를 2비트 복사본(GPU)과 시스템 RAM의 잔여값(residual, CPU)으로 분할하여 사용하며, 이를 통해 추가 메모리 부담 없이 효율적인 초안 작성이 가능함을 보여줍니다.
핵심 포인트
- 모델을 2비트(GPU)와 잔여값(RAM)으로 분할하여 VRAM 제약을 극복합니다.
- 6~8비트 잔여값을 사용하면 Q8_0 수준의 품질을 유지하며 메모리 절감 효과가 큽니다.
- 제안된 초안 작성기는 기존 Gemma 4 drafter 대비 높은 수용 토큰 수를 보였습니다.
안녕하세요! 최근 연구 개발을 진행했는데, 제가 이 아이디어를 더 발전시킬 시간은 없습니다 (육아, 업무 등). 하지만 누군가에게는 흥미로울 수도 있을 것 같습니다. 큰 것이라고 생각하지 않지만, 특정 경우에 사용될 수 있는 재미있는 접근 방식이라고 생각합니다. 이것이 AI 쓰레기(AI slop)는 아니며, 이 정보를 활용하여 Claude나 Astra를 사용하여 직접 시도해 볼 수 있다고 믿습니다. 이 아이디어는 저의 자체적인 것이었으며, 저는 이를 프로덕션 앱에 사용했고 많은 비용을 절감했습니다 (프로젝트는 LLM과 관련이 없습니다). 이것이 구식인지 아닌지는 모르겠지만, MTP에서도 작동할 수 있습니다. 제발 비난하지 말아주세요. 제가 아이디어를 공유하는 것이니, 누구나 실험해 봐도 환영합니다.
요약하자면(TLDR): 모델의 2비트 버전을 GPU에 유지하고 나머지 가중치(잔여값, residual, 6~8비트)는 시스템 RAM에 유지합니다. 2비트 복사본이 토큰을 초안 작성하면, 전체 모델이 이를 검사합니다: GPU가 2비트 부분을 처리하고, CPU가 잔여값 부분을 처리하며, 활성화(activations)만 PCIe를 통해 전송됩니다. 따라서 초안 작성을 위해 추가 메모리가 들지 않으며, 이는 문자 그대로 검증기(verifier)의 절반에 불과합니다.
제가 측정한 결과(실제 가중치이지만 dequantized하여 PyTorch에서 실행했으므로 아직 tok/s는 아님):
- 2비트 + 8비트 잔여값은 Q8_0보다 bf16에 더 가깝고, KL이 절반 정도입니다.
- 6비트 잔여값을 사용하면 RAM에서 약 28% 적은 바이트를 읽으면서도 Q8_0 수준의 품질을 얻을 수 있습니다.
- 검증기의 KV 캐시를 재사용하는 2비트 초안 작성기는 Google의 공식 Gemma 4 drafter(31B, 16 노드 트리: 5.23 vs 4.20)보다 체크당 25~30% 더 많은 수용된 토큰을 얻습니다.
- 제 CPU 커널은 메모리 바운드(memory bound)이기 때문에 16개의 토큰을 약 1개 토큰과 비슷한 시간에 검사합니다.
가장 유사한 것을 찾은 것은 SubSpec이지만, 이는 모델을 비트별로 분할하는 대신 별도의 4비트 복사본을 사용하고 가중치를 PCIe를 통해 스트리밍한다는 점에서 다릅니다. Q8이 VRAM에 맞지 않을 때만 의미가 있습니다. 만약 Q8이 들어간다면, 그냥 llama.cpp를 사용하세요.
공개 레포지토리 링크를 공유합니다. 이것이 연구하는 누군가에게 도움이 되기를 바랍니다: https://huggingface.co/HappyGuitar123/twobit-residual-spec 또한, 더 많은 통찰력을 얻기 위해 고도의 노력을 들여 일부 최첨단 LLM(frontier llm)을 사용하여 분석할 것을 제안합니다. 이 아이디어가 잠재력이 있다고 믿습니다. 감사합니다. 제출자: /u/Happy_Guitar3521 [링크] [댓글]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/LocalLLaMA의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기