Reddit

Betelgeuse: Running Qwen 3.8 Flash Next at 22 tok/s sustained (spiking to 48 tok/s) on an RTX 3060 12GB + 16GB DDR4 RAM 100% bit-exact!

Betelgeuse, MoE 전문가 가중치를 VRAM과 RAM, NVMe에서 나눠 읽는 llama.cpp 포크

Betelgeuse는 필요한 MoE 전문가 가중치만 VRAM에 올리고, 나머지는 RAM 캐시와 NVMe에서 읽는 실험용 llama.cpp 포크입니다. 저장소가 제시한 22.03토큰/초는 새 배포 묶음의 성능을 인증하는 값이 아니라, 별도 과거 실행에서 나온 결과입니다.

본문

Betelgeuse는 거대 혼합 전문가(MoE) 모델의 전문가 가중치를 VRAM에 모두 올리지 않고, 필요한 가중치만 GPU 메모리에 불러오는 llama.cpp 포크입니다. 밀려난 전문가 가중치는 호스트 RAM의 재사용 캐시에 두고, 그곳에도 없는 가중치는 NVMe에서 읽습니다. 저장소 README는 이 페이징 기능을 실험적이고 일부 문제가 있는 하드웨어 특화 구현으로 설명하며, 정식 배포용 제품이나 모든 대형 MoE를 실행한다는 보장으로 제시하지 않습니다.

README가 대상으로 삼은 48개 레이어·레이어당 전문가 512개인 모델은 레이어마다 전문가 10개를 선택합니다. Betelgeuse는 이 전문가들을 레이어별로 고정 배치하는 대신 VRAM 슬롯 5,000개를 공유하게 합니다. VRAM에서 밀려난 전문가는 호스트 RAM의 피해 캐시(victim cache)에 남아 재사용되고, 캐시에도 없는 가중치만 저장 장치에서 읽습니다. 전문가 가중치는 별도 experts.bin 파일에 4KB 단위로 정렬해 보관합니다.

실행 묶음에는 밀집 가중치와 토크나이저를 담은 GGUF, experts.bin, 필수 PLE 파일, 전문가 캐시를 준비할 프로필이 필요합니다. 프로필은 자주 쓰일 전문가를 지정하는 힌트 파일이고, 가중치는 별도 파일에 저장됩니다. 캐시는 서버 실행 중 요청에 따라 준비됩니다. 전체 묶음은 저장 공간 약 68GB를 차지합니다. 문서에 적힌 시험 환경은 Linux x86-64와 CUDA sm_86, RTX 3060 12GB, 로컬 NVMe이며, 예시 구성은 시스템 RAM 16GB 중 프로세스 메모리를 12GiB로 제한하고 스왑을 끕니다. 기록된 실행 범위도 단일 모델 컨텍스트와 -c 512 설정입니다. 더 긴 컨텍스트나 다른 그래픽카드·운영체제에서는 별도 메모리·정확성 검증이 필요합니다.

저장소가 제시한 16.80토큰/초와 22.03토큰/초는 과거 포크의 서로 다른 실행에서 나온 값입니다. 첫 측정 요청은 자동 예열을 켜고 시작 예열 시간을 따로 지불한 뒤 얻었으며, 기록된 예열에는 약 42초가 들었습니다. 두 수치는 짝을 이룬 비교가 아니고, 이름을 바꾸고 파일을 분리한 현재 배포 묶음의 성능을 보증하지 않습니다.

자료: Betelgeuse GitHub / 정리·해설: Trawling