Janas: RAM보다 큰 LLM을 SSD에서 expert를 스트리밍해 돌리는 C 엔진
Janas: Run LLMs larger than RAM by streaming experts from SSD
TL;DR Highlight
32GB 노트북에서 48GB 80B MoE 모델이 24 tok/s, 드래프트 쓰면 37 tok/s 나왔다
Who Should Read
GPU 없이 32GB 램 노트북에서 큰 MoE 모델을 로컬로 돌려보고 싶은 개발자
Core Mechanics
- RAM보다 큰 모델을 SSD에서 읽어 돌린다
- Janas-LLM은 가중치를 디스크에 두고 토큰마다 필요한 expert만 NVMe SSD에서 스트리밍한다.
- 자주 쓰이는 expert는 메모리 캐시에 남긴다.
- MoE(Mixture-of-Experts, 토큰마다 일부 전문가 블록만 쓰는 모델) 구조라서 가능한 방식이다.
- Qwen3-Next-80B가 llama.cpp보다 빨랐다
- 같은 노트북(32GB, Core Ultra 9 185H, 내장 Arc GPU)에서 48.4GB 모델의 쓰기 속도가 24 tok/s 대 llama.cpp 2.8 tok/s였다.
- 프롬프트 읽기(1,024 토큰)는 62 대 16 tok/s였다.
- 드래프트(작은 추측기로 다음 토큰을 미리 맞히고 검증하는 방식)를 쓰면 쓰기 37 tok/s였다.
- 비교한 13개 모델 대부분에서 앞섰다
- README는 Q4_K_M 기준 13개 모델 모두에서 llama.cpp보다 빠르다고 적었다.
- 예: Qwen3-30B-A3B 쓰기 32 대 15 tok/s, 읽기 135 대 122 tok/s였다.
- 예외로 3비트 Qwen3-30B는 프롬프트 읽기가 llama.cpp보다 느렸다(100 대 112 tok/s).
- llama.cpp는 큰 모델에서 메모리 부족이 났다
- 48GB 모델은 일반 빌드로 GPU를 함께 쓰면 메모리 부족이 났다.
- repack을 끈 빌드(GGML_CPU_REPACK=OFF)에 --no-host 1 -lm mmap을 줘야 돌아갔다.
Community Reactions
- 다른 구현이 이미 많다는 의견
- llama.cpp가 오래전부터 하던 걸 또 구현한다는 비판이 있었다.
- SSD에서 expert를 스트리밍하는 프로젝트가 많으니 정리 가이드나 통합 프로젝트가 필요하다는 의견도 있었다.
- 로컬 속도에 기대를 표한 경험
- Qwen 35B A3B를 32GB 램에서 약 8 tok/s까지 냈다는 사용자가 이게 판을 바꿀 수 있다고 했다.
- 62 tok/s면 일반 사용자에게 충분하다는 의견도 있었다.
- GPU 드라이버·OOM 사고를 겪었다는 경험
- LLM으로 개발하다 OOM이 나서 화면이 꺼진 일이 여러 번 있었다는 경험이 올라왔다.
- 디스플레이용 공간을 따로 남기고 할당 전에 확인하는 로직이 필요했다고 한다.
- SSD 마모와 모델 선택에 대한 우려
- 읽기 부하 때문에 SSD 수명이 걱정된다는 의견이 있었다.
- 왜 Qwen 3.8 같은 최신 모델이 아니라 오래된 모델로 시험했냐는 질문도 있었다.
How to Apply
- janas-bench로 내 머신 속도 재보기
- 유휴 상태의 리눅스 x86-64 머신에서 릴리스 tar를 받아 janas-chat을 실행한다.
- 작은 모델부터 받아서 janas-bench로 읽기·쓰기 tok/s를 llama-bench 결과와 비교한다.
- 위험하니 --cache <GiB>로 메모리 상한을 걸고 시작한다.
- GPU·메모리 안전장치 먼저 걸기
- 테스트 머신에 JANAS_GPU=0과 --cache 상한을 넣어 스왑과 드라이버 리셋 위험을 줄인다.
- 다른 앱을 끈 상태에서 먼저 측정하고 브라우저를 켠 상태와 비교한다.
- 큰 MoE 모델의 로컬 후보를 SSD 속도로 가늠하기
- 모델 파일이 RAM보다 큰 경우 NVMe 읽기 속도(저자 머신은 약 5.7 GB/s)를 먼저 확인한다.
- 목표 모델의 활성 expert 크기와 비교해 로컬 배포가 현실적인지 판단한다.
- 로컬 코드 자동완성 서버로 연결해 보기
- janas-server를 띄우고 VS Code의 Continue나 llama.vscode를 OpenAI 호환 엔드포인트로 연결한다.
- Qwen3-Coder-30B-A3B 같은 코드 모델로 한 번 완성에 걸리는 시간을 재 본다.
Try It
# 터미널(리눅스 x86-64)에 붙여넣기. 원문 README의 실행 방법 그대로
curl -LO https://github.com/prabanta-dev/janas/releases/latest/download/janas-linux-x86_64.tar.gz
tar xf janas-linux-x86_64.tar.gz && cd janas
# 메모리 상한을 걸고 실행해 모델을 고른다 (GPU 끄려면 JANAS_GPU=0 을 앞에 붙인다)
./janas-chat --cache 16
# 이어서 해 볼 것: janas-bench로 내 머신의 읽기·쓰기 속도를 재서 llama-bench와 비교한다Terminology
관련 논문
Mercury 3: 규모를 키운 diffusion LLM, 초당 1,000토큰 이상
Diffusion LLM을 40배 키웠더니 속도 4~8배, 품질은 속도 특화 모델 수준
Timestral: Mistral의 시계열 파운데이션 모델
209M 파라미터 시계열 모델이 3대 벤치마크 1위, CPU에서도 돌아간다
DeepSeek V4.1 Flash 1017 (Max) 성능·속도·가격 분석
DeepSeek V4.1 Flash 1017 Max는 지능 지수 45에 211 tok/s, 입력 $0.30
LLM 프록시를 직접 안 돌리면 무슨 일이 벌어지는지 어떻게 아나
자체 LLM 프록시를 세웠더니 키·모델·캐시 미스를 직접 볼 수 있다
DeepSeek V4.1 Flash 1017: 싼 가격에 1M 컨텍스트를 주는 에이전트용 모델
DeepSeek V4.1 Flash 1017은 입력 $0.05/M, 1M 컨텍스트의 에이전트용 모델
DeepSeek-V4.1-Flash-1017 공개: 더 짧게 생각하고 더 빠르게 일하는 에이전트용 모델
DeepSeek V4.1 Flash 마이너 업데이트로 코딩·에이전트 벤치 점수↑, 실행 시간·출력 길이↓
Llmspeed: 로컬 LLM 속도를 하드웨어 구매 전에 체감해 보는 시뮬레이터
GPU·모델을 고르면 로컬 LLM 속도를 미리 체감하게 해 주는 시뮬레이터