모델과 서비스

NVIDIA Dory 1.0 4B 공개, 반복 횟수 고르는 추론 모델 llama.cpp 실행

NVIDIA의 40억 매개변수 모델 Dory는 같은 파일로 연산량을 네 단계로 바꿔 쓴다. 3.7GB GGUF는 llama.cpp 미병합 브랜치를 빌드해야 돌아가고, 기본 반복 횟수는 4회다.

루카스 ·

NVIDIA가 중간 레이어 묶음을 토큰마다 반복해서 통과시키는 40억 매개변수 추론 모델 Dory 1.0 4B를 Hugging Face에 공개했다. 모델 카드에는 같은 체크포인트를 반복 1~4회로 골라 돌릴 수 있다고 적혀 있고, 3.7GB짜리 GGUF 파일로 llama.cpp 서버에서 실행하는 방법도 나와 있다.

모델 카드는 상업용과 비상업용 모두 쓸 수 있다고 밝혔고, 라이선스는 OpenMDW-1.1이다. 카드에 적힌 버전 표기는 2026년 10월 16일자 GA이며, 배포 형식은 BF16, MXFP8, NVFP4, Q5_K_M 네 가지다. 입력 언어는 영어이고 최대 256K 토큰 컨텍스트를 지원한다.1

llama.cpp 정식 릴리스는 아직 Dory를 읽지 못한다. 지원이 ggml-org/llama.cpp의 #30306 풀 리퀘스트에 있고 병합 전이라서, 카드가 지정한 브랜치의 특정 커밋을 직접 빌드해야 한다. MarkTechPost는 이 절차를 따라 실행하는 튜토리얼을 냈다.1,2

반복 구조와 비용

Dory는 반복형 언어 모델이다. 카드에 따르면 normalized-GPT 구조에 슬라이딩 윈도 어텐션과 전체 어텐션 레이어를 번갈아 넣었고, 공유 레이어 블록을 되풀이해 적용하면서 토큰당 컴퓨트를 늘린다. 반복할 때마다 매개변수는 늘지 않으므로 재학습 없이 연산 예산만 바뀐다.1,2

MarkTechPost가 GGUF 헤더를 읽어 계산한 값은 다음과 같다. 레이어 항목 72개는 입력 16개, 공유 반복 40개, 출력 16개로 나뉘고, 슬라이딩 윈도 레이어 세 개마다 전체 어텐션 레이어가 하나 있다. 모델 전체 3.98B 매개변수 중 반복 블록이 1.84B를 차지한다.

이 값으로 비용을 추정하면, 토큰 하나가 반복 4회에서 쓰는 매개변수는 1회의 2.51배이고 읽는 가중치 바이트는 2.28배다. 매체는 메모리 대역폭이 병목인 디코딩에서는 후자가 더 맞는 지표라고 설명했다.2

KV 캐시는 두 방식이 있다. per_loop는 반복마다 캐시를 따로 둬서 반복이 늘면 메모리가 늘고, 컨텍스트 4,096 토큰 기준 예측치가 1회 306MiB에서 4회 816MiB로 커진다. last_loop는 반복마다 이전 캐시를 덮어써 마지막 반복의 키와 값만 남기므로 몇 번 반복해도 1회 크기를 유지한다.1,2

카드가 밝힌 학습 과정은 6T 토큰 사전 학습이다. 앞쪽 약 4.5T 토큰은 NVIDIA의 4비트 부동소수점 형식 NVFP4로, 나머지는 BF16으로 학습했다. 이어 300B 토큰으로 컨텍스트를 256K까지 늘렸고, 지도 미세 조정과 강화 학습을 거쳤다. 학습 데이터는 코드·수학·과학·일반 지식의 수집 데이터와 합성 데이터이며 프로그래밍 언어 43종을 포함한다.1

llama.cpp로 실행하기

카드가 안내하는 순서는 Apple Silicon Mac 기준이다. 지정 저장소에서 98a74c97ea09ac72f6ceda1559808fc0a2f447ce 커밋을 받아 Metal 옵션을 켜고 llama-server를 빌드한 뒤, Q5_K_M GGUF를 내려받아 크기 3,673,288,864바이트와 SHA-256 체크섬을 확인하고 서버를 띄운다.

카드의 예시 서버는 컨텍스트 4,096, 샘플링 온도 1.0, Top-p 0.95, 추론 모드 켜짐으로 설정되어 있다. 반복 횟수는 --override-kv 옵션의 dory.num_loops에 1~4를 넣어 정하고, 캐시 방식은 같은 옵션의 recurrent_kv_cache_mode에 per_loop 또는 last_loop를 넣어 정한다. 서버는 127.0.0.1에서 인증 없이 열리며 OpenAI 호환 API를 제공한다.1

MarkTechPost는 CUDA GPU 환경에서도 같은 커밋을 빌드하면서 해당 GPU용 커널만 컴파일하는 방식을 썼다. 카드에는 vLLM 실행법도 있다. 다만 vLLM 지원은 vllm-project/vllm의 #60149에서 검토 중이어서, 정식 릴리스가 나오기 전에는 그 풀 리퀘스트에서 설치해야 한다.1,2

도구 호출을 쓰는 코딩 에이전트는 API 호출에 chat_template_kwargs의 force_nonempty_content를 True로 넣으라고 카드가 안내한다. llama.cpp 명령에는 이미 --jinja가 들어 있다.1

반복 횟수 선택과 주의점

NVIDIA는 2회로 시작하라고 권한다. 토큰당 연산을 줄이려면 1회, 정확도가 더 중요하면 4회를 고르라는 것이다. 특히 Terminal-Bench와 SWE-bench 같은 에이전트 작업에서 4회를 고려하라고 했다. 반복을 늘리면 생성 토큰 수가 줄 수도 있어서 지연 시간과 비용은 실제 작업에서 끝까지 재 보라는 단서도 붙였다.1

MarkTechPost는 이 지점에서 함정을 짚었다. GGUF 헤더에 내장된 반복 횟수는 4인데 카드 권장은 2여서, 오버라이드 없이 서버를 띄우면 가장 비싼 설정으로 돌아간다. 튜토리얼에서 오버라이드 없이 띄운 서버는 4회 구성에 해당하는 KV 레이어 수를 보였다. 이 매체는 반복 횟수를 항상 명시하고 커밋을 고정하라고 권했다.

카드의 명령은 파일 이름을 dory-q5_k_m.gguf로 부르지만 저장소의 실제 파일명은 NVIDIA-Nemotron-Labs-Dory1.0-4B-Q5_K_M.gguf라서 명령을 그대로 복사하면 실패한다. 내려받은 파일의 크기와 SHA-256은 카드에 적힌 값과 일치했다고 MarkTechPost는 전했다.2

카드의 벤치마크 점수는 BF16 기준이며, Q5_K_M은 양자화한 내보내기 파일이라 같은 점수가 보장되지 않는다. MarkTechPost는 카드의 벤치마크 표와 256K 컨텍스트, NVFP4 사전 학습은 이번 실험에서 검증하지 않았고, 정확도 비교도 GSM8K 30문항 표본이라 큰 차이만 가릴 수 있다고 적었다.1,2

저사양 환경에서는 BF16 외에 8비트 가중치의 MXFP8과 4비트 가중치의 NVFP4가 대안이다. NVIDIA는 DGX Spark에서 두 형식이 BF16 기준선보다 얼마나 빠른지 재어 카드 표에 실었고, 표에 적힌 향상 폭은 1.69배에서 2.44배 사이다.1

댓글

기사에 대한 의견이나 틀린 내용 제보를 남겨 주세요.

댓글을 불러오고 있습니다.