Janas: SSD에서 전문가(expert)를 스트리밍하여 RAM보다 큰 LLM 실행
요약
Janas는 SSD에서 전문가(expert)를 스트리밍하는 새로운 LLM 실행 방식을 제시합니다. 이 기술은 RAM 용량보다 훨씬 큰 모델도 일반 노트북 환경에서 구동할 수 있게 하며, 기존의 llama.cpp 대비 읽기 및 쓰기 속도를 크게 향상시켰습니다.
핵심 포인트
- SSD 스토리지에서 전문가(expert) 스트리밍을 통해 대용량 LLM 실행 가능
- Qwen3-Next-80B와 같은 메모리 초과 모델도 구동하여 성능 입증
- llama.cpp 대비 읽기 및 쓰기 속도가 월등히 빠름 (예: 62 tok/s vs 2.8 tok/s)
- Linux 및 Windows 환경에서 사용 가능한 도구 제공
Janas
메모리 32 GB, 드래프트(drafts) 제외 시 24 GB를 가진 노트북에서 Qwen3-Next-80B (48 GB 모델)을 사용하여 37 tok/s 달성. llama.cpp가 2.8을 관리하는 동안 프롬프트를 읽는 속도는 62 tok/s, 16 대비입니다. Janas-LLM은 동일한 노트북(Debian 13 Linux, Intel Core Ultra 9 185H, 통합 Arc GPU, 32 GB, NVMe SSD; 2026년 10월 9일~11일; 전체 시스템 아래)에서 비교된 모든 모델에 대해 llama.cpp보다 빨랐습니다:
| Model | reading 1,024 tokens: Janas-LLM | llama.cpp | writing: Janas-LLM | llama.cpp |
|---|---|---|---|---|
| Qwen3-Next-80B-A3B (48.4 GB, 메모리 초과) | 62 tok/s | 16 tok/s | 24 tok/s | 2.8 tok/s |
| ... |
다른 손에서 가져온 동일한 모델들은 옆의 카탈로그에 있습니다:
| Model | reading 1,024 tokens: Janas-LLM | llama.cpp | writing: Janas-LLM | llama.cpp |
|---|---|---|---|---|
| Qwen3-30B-A3B, bartowski's Q4_K_M (importance matrix) | 131 tok/s | 122 tok/s | 32 tok/s | 16 tok/s |
| ... |
한 예외: 3비트 Qwen3-30B는 그 Q3_K 가중치가 GPU의 빠른 프롬프트로 이동하지 않기 때문에 llama.cpp보다 느리게 프롬프트를 읽습니다. 하지만 작성 속도는 세 배 더 빠릅니다.
측정 방법과 드래프트가 적용된 속도에 대해서는 What works now를 참고하세요. 다른 장비에서는 수치가 다를 것입니다: janas-bench로 측정해 보세요.
사용해 보기: Linux x86-64 (Ubuntu 22.04, Debian 12 이상)에서 시도해 보세요:
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
./janas-chat # 알고 있는 모델: 하나를 선택하면 다운로드 및 확인됩니다
또는 Windows 10 (1903 이상) 및 11의 x86-64 환경에서는 janas-windows-x86_64.zip을 다운로드하여 압축을 풀고, 해당 janas 폴더의 터미널에서 . anas-chat을 실행합니다. 동일한 노트북 환경의 Windows 11(2026년 10월 12일 기준)에서는 Janas-LLM이 Linux 환경과 마찬가지로 빠르게 작동했으며 (Qwen3-4B 25.6 tok/s, Qwen3-30B-A3B 34.2), 혼합 모델(mixture)을 사용했을 때는 프롬프트를 빠르게 읽어 들였고 (Qwen3-30B-A3B 132 tok/s), 밀집 모델(dense model)을 사용했을 때는 193 대비 1.8배 빠른 속도를 보였습니다 (Qwen3-4B 346 tok/s). 이 과정에서 모든 블록은 인텔의 자체 Windows 드라이버를 통해 GPU로 전송되었습니다.
모델들은 이미 Hugging Face로부터 변환되어 제공됩니다. 소스 코드를 직접 빌드하려면: Getting started.
▄███████████▄
▄███████████████▄
███ ▄ █████ ▄ ███ ▄ J A N A S
...
Janas는 C 언어로 작성되었으며, C 라이브러리 외에는 의존성이 없는 인공지능(AI) 도구 모음입니다. 첫 번째 구성 요소인 Janas-LLM은 일반 컴퓨터에서 대규모 전문가 혼합 모델(mixture-of-experts language models)을 GPU 유무와 관계없이 실행합니다. 가중치(weights)는 디스크에 유지되며, 각 토큰에 필요한 전문가는 NVMe SSD로부터 스트리밍되고, 다시 사용되는 전문가는 메모리에 보관됩니다. 이 시스템은 32GB RAM을 가진 노트북에서 800억 개의 파라미터를 가진 모델을 실행하고 답변할 수 있습니다.
**Maurizio
이 저장소의 모든 내용은 다음 환경에서 작성 및 측정되었습니다:
- Linux Debian 13 (trixie), x86-64, 커널 6.12.107; GPU 드라이버 Mesa 26.1.6 (Vulkan); GCC 14.2로 빌드
- Intel Core Ultra 9 185H (성능 코어 6개, 효율 코어 8개, 저전력 코어 2개; AVX2, FMA, F16C, AVX-VNNI; 통합 Arc GPU)
- 32 GB DDR5 RAM
- 1 TB NVMe SSD (읽기 속도 약 5.7 GB/s)
Windows 빌드는 동일한 노트북에서 Windows 11 (빌드 26300) 및 Intel 자체 그래픽 드라이버를 사용하여 실행되었습니다: 테스트는 거기서 통과하며, 얼마나 빨랐는지는 또는 Windows에서 위를 참조하십시오.
엔진이 수행하는 모든 것은 측정된 것들 중에서 선택되므로, 다른 기계에서는 다른 선택을 하게 될 것입니다 — 이 부분은 이동하도록 의도된 것입니다. 아직 시도되지 않은 것은 나머지입니다: 다른 CPU(특히 AVX-VNNI가 없거나 AMD), 외장 GPU, 느린 디스크, 더 많거나 적은 메모리. 만약 다른 곳에서 실행한다면, janas-bench의 보고서가 당신이 보낼 수 있는 가장 유용한 단일 자료입니다 (더 많은 하드웨어에서 실행하는 방법 보기(docs/hardware.md#helping-it-run-on-more-hardware) 참조).
현재 작동하는 기능
Janas-LLM은 오늘날 모델별, 기능별로 다음을 실행합니다: docs/features.md.
위의 기계에서 다른 것이 아무것도 실행되지 않은 상태로 janas-bench는 다음을 보고합니다 (2026년 10월 10일 측정, 해당 날짜부터 엔진이 기본으로 사용하는 빠른 프롬프트 기준):
| Model | 프롬프트 읽기 | 답변 작성 | 초안 포함 채팅 환경에서 |
|---|---|---|---|
| Qwen3.5-2B (dense, 1.3 GB) | 395 tok/s | 50 tok/s | 67 tok/s |
| ... |
모든 수치는 엔진 자체가 각 유형의 패스에 대해 선택한 구성의 세 라운드 평균값이며, 최고 기록이 아닙니다. 이는 채팅에서 실행되는 방식(256 토큰의 프롬프트 입력 후 64 토큰 작성)을 기준으로 합니다. 여기서는 통합 GPU가 모든 프롬프트를 읽으며(아래의 빠른 프롬프트), 엔진이 결정한 스레드는 거의 모든 모델에서 프롬프트와 단일 토큰에 대해 성능 코어 12개였고, 몇 개의 토큰을 한 번에 처리할 때는 사용 가능한 모든 코어(성능 및 효율성 코어, 저전력 코어 제외)를 사용했습니다. 다른 장치에서는 엔진이 다른 스레드를 선택할 수 있습니다. 각 유형의 첫 번째 패스는 모든 코어를 시도하며, 성능 코어당 하나의 스레드와 성능 코어의 스레드를 유지하고 가장 빠른 것을 유지한 후 나중에 다른 것들을 간헐적으로 시도하여, 예열되는 장치는 판결을 바꿀 수 있습니다 (i9-14900HX에서 모든 스레드는 성능 코어 16개 속도의 절반 이하로 응답했습니다). 라운드는 번갈아 가며 실행되어 기계 예열 및 캐시 채우기가 모든 설정에 동일한 영향을 미치도록 합니다. 실행 간에는 어느 쪽이든 몇 퍼센트의 차이가 있을 것으로 예상하며, 캐시가 채워지는 첫 실행에서는 이보다 적을 것입니다. GPU 없이 (JANAS_GPU=0) Qwen3-4B는 동일한 프롬프트를 85 tok/s로 읽고 27 tok/s로 작성합니다.
마지막 열은 다음 토큰을 추측하는 초안(draft)과 모델이 이를 확인하는 과정을 보여주며, 이는 더 높은 비율로 동일한 텍스트를 의미합니다. 전체 내용은 --mtp에서 설명되어 있습니다: Qwen3.5 및 Qwen3.6 모델과 Qwen3-Next의 자체 예측 블록, 그리고 Gemma 4의 어시스턴트(자체적인 작은 초안 작성 모델)가 해당됩니다. 이는 채팅 답변을 기준으로 측정되었는데, 일반적인 영어 질문("집에서 빵 만드는 방법을 설명해 주세요")에 대한 답변인 64개의 토큰이 채팅 샘플로 사용되었습니다. 초안의 가치는 텍스트에 따라 달라지며: Qwen 모델과 Gemma의 두 가지 대형 모델에서는 초안이 7489%의 확률로 살아남았고, Gemma의 E2B와 E4B에서는 6372%였습니다. 이탈리아 산문(Italian prose)의 경우 Qwen3.5-2B는 약 3분의 1 정도를 유지했으며, 그 이상은 거의 얻지 못했습니다. 64개 토큰으로 이루어진 한 라운드는 여기에서 노이즈가 심하며, 실행마다 양쪽으로 1/10씩 차이가 납니다. Qwen3-30B-A3B는 그러한 블록을 가지고 있지 않으며, 밀집(dense)한 Qwen3도 그렇지 않습니다. 밀집한 Qwen3.5는 원래 체크포인트에 해당 블록을 가지고 있으며, 이는 hf2jns_mtp가 변환합니다 (MODELS.md).
이 열은 2026년 9월 26일 이전까지 잘못된 수치였으며, 더 높은 수치를 기록했습니다: 이 수치는 모델이 반복되는 단락을 복사할 때, 그리고 블록이 거의 매번 추측하는 경우를 측정했습니다. Qwen3.5-2B의 경우 초당 107 토큰, Qwen3.5-9B의 경우 초당 26 토큰이었습니다. 당시의 MoE 수치(29와 30)는 오늘날보다 낮았으며, 변경 로그에 자세한 내용이 있습니다.
페이지 상단에 있는 llama.cpp와의 비교는 다음과 같이 측정되었습니다: 동일한 통합 GPU에서 Vulkan 백엔드를 사용한 llama.cpp (2026년 9월 18일 빌드 2b18470)를 사용하여, 모든 것(아래의 가장 큰 모델 제외)에 대해 (llama-bench -p 1024 -n 16 -ngl 99 -t 12 실행); 그리고 동일한 파일에서 같은 날짜(2026년 10월 9일~11일)에 janas-bench --prompt 1024 --gen 16을 사용하여 비교했습니다. (llama.cpp의 최적 구성, Janas-LLM 자체 선택; 10월 11일에는 각각 세 라운드(llama-bench -r 3 및 janas-bench --rounds 3)를 진행했으며, Qwen3-0.6B, Qwen3.5-0.8B, Qwen3.6-35B-A3B 및 다른 모델들도 포함되었습니다; Qwen3-Coder-Next는 아래의 Qwen3-Next-80B로 처리되었습니다).
Qwen3-Next-80B-A3B 파일 크기가 이 노트북의 30GB보다 큰 모델에서, 일반적인 빌드의 llama.cpp는 GPU가 참여하는 순간 메모리가 부족해졌습니다. 심지어 전문가(experts)를 CPU에 남겨두었을 때도 (-ngl 99 -ncmoe 48): 이는 CPU 백엔드가 가중치(weights)를 자체 메모리로 복사하여 재포장하고, Vulkan 백엔드는 CPU로 남기는 것을 시스템이 회수할 수 없는 버퍼에 복사합니다. 재포장하지 않은 빌드(GGML_CPU_REPACK=OFF)와 두 가지 옵션인 --no-host 1 -lm mmap을 사용하여 전문가를 파일에 남겨 페이지 캐시를 통해 읽게 했을 때, GPU로 읽기는 16 tok/s였고 CPU만으로 쓰기는 2.8이었으며 (GPU와 함께는 2.0); 이 수치들이 표의 두 값입니다. Janas-LLM은 동일한 모델을 자체 옵션 없이 실행했으며, 가장 많이 사용하는 전문가를 약 19GB 캐시에 담고 나머지는 디스크에서 읽습니다. Janas-LLM의 수치는 각각 한 바퀴씩이며; 쓰기 열(writing column)은 양쪽 모두 초안(drafts)이 없습니다. 두 도구는 정확히 같은 방식으로 측정하지 않습니다 (llama-bench는 프롬프트 없이 쓰기를 수행하는 반면, janas-bench는 1,024 토큰 후에 수행합니다), 그리고 이 모든 것은 하나의 장치에서 이루어졌습니다. llama.cpp 자체 CPU 백엔드는 읽기(Qwen3-4B의 경우 20 스레드에서 70 tok/s)와 쓰기 모두에서 이 노트북의 Vulkan 백엔드보다 성능이 떨어졌습니다.
먼저 유휴 상태의 장치에서 테스트해 보세요. 전문가 캐시는 모델을 열 때 여유 메모리를 사용하며, 나머지 모델은 답변하는 동안 디스크에서 읽어오므로 다른 모든 실행 중인 프로그램들이 그 몫을 차지합니다. 시스템이 고장나기보다는 점진적으로 성능이 저하됩니다: 브라우저와 에디터를 열고 측정했을 때도 동일한 모델은 속도의 약 3/4를 유지했으며, 디스크에서 읽어올 때는 5배 더 오래 기다렸습니다. 하지만 가장 먼저 확인해야 할 것은 장치 자체의 실제 속도이며, 다른 사람에게 보여주려는 모든 측정값은 해당 장치만을 가지고 측정되어야 합니다.
문서화
⚠️ [IMG:N] 형식 토큰은 이미지 placeholder 입니다. 번역하지 말고 원래 위치에 그대로 유지하세요.
- INSTALL.md — 빌드에 필요한 것, 모델 준비 방법, 그리고 첫 실행
- ChangeLog.md — 변경된 내용, 최신 순서로
- MODELS.md — 변환된 모델의 라이선스 및 재배포 가능 여부
- CONTRIBUTING.md — 기여 방법 및 서명 절차
- src/services — Janas의 서비스들, 각각
janas-chat과 다른 MCP 클라이언트에서 페이지를 가짐 - docs/features.md — 현재 Janas-LLM이 실행하는 기능들, 모델별 및 기능별로
- docs/models.md — 모델 가져오기:
janas-get을 사용하거나 GGUF 파일을 직접 변환하기, 그리고 확인된 파일 목록: docs/models.md - docs/chat.md —
janas-chat사용법, MCP 서버의 서비스 및 도구들 - docs/library.md — 프로그램에서 사용하는 법, C 또는 FreeBASIC 언어로
- docs/serving.md — MCP 클라이언트(
janas-mcp)와 HTTP를 통해 제공되는 모델 (janas-server) - docs/code-completion.md — VSCodium 및 VS Code에서
janas-server를 통한 코드 완성 기능 - docs/tools.md — 변환기, 검사기, 그리고 벤치마크 도구들
- docs/hardware.md — 시스템 측정 및 더 많은 하드웨어에서 실행하도록 도움
- AUTHORS — 작성자 정보 및 다른 사람에게 받은 공로
- LICENSE — GNU GPL, 버전 3 이상
시작하기 (Getting started)
sudo apt install build-essential # Debian/Ubuntu
sudo apt install libvulkan-dev glslang-tools vulkan-tools # 선택 사항, GPU
sudo pacman -S vulkan-headers glslang vulkan-tools # 동일한 패키지, Arch
...
모델 가져오기 (Getting a model)
janas-get으로 이미 변환된 모델을 다운로드하거나 GGUF 파일을 직접 변환하는 방법, 그리고 확인된 파일 목록은 docs/models.md를 참조하세요.
채팅 사용하기 (Using the chat)
<a id="janass-services"></a>
<a id="tools-from-mcp-servers"></a>
<a id="watching-a-long-prompt"></a>
AI 자동 생성 콘텐츠
본 콘텐츠는 HN AI Posts의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기