NVIDIA Nemotron 3 Nano를 vLLM으로 배포하고 벤치마크하기

NVIDIA Nemotron 3 Nano를 vLLM으로 배포하고 벤치마크하기

NVIDIA Nemotron 3 Nano는 트랜스포머 Mixture-of-Experts(MoE) 백본 위에 Mamba state layer를 얹은 모델이에요. 이 구조 덕분에 Nemotron Nano 2 대비 에너지당 출력 토큰이 최대 4배까지 올라가면서도, SWE-Bench, GPQA Diamond, IFBench에서 현재 오픈 프런티어 모델과 동급 이상 점수를 내요.

이런 효율성의 핵심은 사용자가 직접 주는 생각 예산(thinking budget) 파라미터예요. 요청별 추론 길이를 제한해서, 코어 모델을 건드리지 않고도 지연시간과 정확도 곡선을 조절할 수 있어요. 이 문서는 Nemotron 3 Nano를 개괄한 뒤, Lambda Cloud에서 배포하고 벤치마크하는 방법까지 안내해요.

출처: Deploying NVIDIA Nemotron 3 Nano using vLLM - Lambda Docs

모델 정보

개요

  • 이름: NVIDIA-Nemotron-3-Nano-30B-A3B-BF16
  • 저자: NVIDIA
  • 아키텍처: MoE
  • 핵심 역량: 빠른 추론, 긴 문맥 이해, 탄탄한 코딩 성능, 탄탄한 도구 사용 성능
  • 라이선스: NVIDIA Open Model License Agreement

사양

  • 컨텍스트 윈도우: 1,000,000 토큰
  • 디스크상 가중치: 58GB
  • 유휴 VRAM 사용량: 120GB

권장 Lambda VRAM 구성

  • 인스턴스: 1x B200 (180 GB SXM6) 또는 1x H100 (80 GB SXM5) (최소 권장 시퀀스 길이 4096)
  • 1-Click 클러스터: 16x B200 (180 GB) (FP8 KV 캐시로 최대 시퀀스 길이)

배포와 벤치마킹

단일 GPU 인스턴스에 배포하기

Nemotron 3 Nano는 VRAM이 충분히 받쳐주는 어떤 인스턴스에서든 실행할 수 있어요. 예를 들어 Lambda Stack 22.04 이미지가 깔린 1x B200 (180 GB SXM6) 인스턴스에 배포하는 경우를 볼게요.

  1. Lambda Cloud 콘솔에서 Instances 페이지로 가서 Launch instance를 클릭해요. 모달이 열려요.
  2. 인스턴스 시작 마법사를 따라 아래 옵션을 선택해요.
    • Instance type: 1x B200 (180 GB SXM6) 선택
    • Base image: Lambda Stack 22.04 선택
    • Security: nemotron-3-nano라는 이름의 새 방화벽 규칙셋을 만들고 TCP/8000 포트로 들어오는 트래픽을 허용하는 규칙을 추가해요.
  3. 인스턴스가 시작되면 그 행을 찾아 Cloud IDE 열의 Launch를 클릭해요. JupyterLab이 새 창에서 열려요.
  4. JupyterLab의 Launcher 탭에서 Other 아래 Terminal을 클릭해 새 터미널을 열어요.
  5. 터미널에서 uv를 설치하고 가상환경을 만든 뒤, vLLM으로 Nemotron 3 Nano 서빙을 시작해요.
curl -LsSf https://astral.sh/uv/install.sh | sh
uv venv --python 3.12 --seed
source .venv/bin/activate
uv pip install vllm --torch-backend=auto
VLLM_SERVER_DEV_MODE=1 vllm serve nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16 \
  --port 8000 \
  --served-model-name nemotron-3-nano \
  --trust-remote-code \
  --enable-sleep-mode

이제 Lambda 인스턴스에 OpenAI 호환 REST API를 갖춘 vLLM 서버가 돌아가요. API가 동작하는지 확인해볼게요.

  • Instances 페이지에서 인스턴스 행을 찾아 IP Address 열의 IP를 클릭해 클립보드에 복사해요.
  • 터미널에서 인스턴스의 /v1/models 엔드포인트를 질의해요. <IP-ADDRESS>는 인스턴스 IP로 바꿔주세요.
curl http://<IP-ADDRESS>:8000/v1/models

Nemotron 3 Nano가 목록의 유일한 항목으로 나타나면 성공이에요.

멀티 GPU 인스턴스에 배포하기

더 큰 컨텍스트 윈도우를 쓰거나 사용자를 더 많이 받아야 하는 등 리소스가 더 필요하다면, 멀티 GPU 인스턴스에 배포할 수 있어요. 단일 GPU 노드 배포 절차를 그대로 따르되 아래 사항만 바꿔요.

  • 8x H100 (80 GB SXM5) 같은 적절한 멀티 GPU 인스턴스 타입을 선택해요.
  • vLLM 명령에 --tensor-parallel-size 플래그를 추가해요.
curl -LsSf https://astral.sh/uv/install.sh | sh
uv venv --python 3.12 --seed
source .venv/bin/activate
uv pip install vllm --torch-backend=auto
VLLM_SERVER_DEV_MODE=1 vllm serve nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16 \
    --port 8000 \
    --served-model-name nemotron-3-nano \
    --trust-remote-code \
    --enable-sleep-mode \
  --tensor-parallel-size 8

Nemotron 3 Nano 벤치마크

vllm bench serve 명령으로 Nemotron 3 Nano를 벤치마크할 수 있어요. 아래 벤치마크는 캐싱을 피하려고 완전한 스핀다운 5회를 거치고, GPU가 워밍업된 뒤 측정했어요. JupyterLab 터미널이나 인스턴스에 SSH로 연결한 터미널에서 실행해요.

wget https://huggingface.co/datasets/anon8231489123/ShareGPT_Vicuna_unfiltered/resolve/main/ShareGPT_V3_unfiltered_cleaned_split.json
vllm bench serve \
    --model nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16 \
    --served-model-name nemotron-3-nano  \
    --dataset-name sharegpt   \
    --dataset-path ./ShareGPT_V3_unfiltered_cleaned_split.json \
    --num-prompts 10 \
    --trust-remote-code \
    --backend openai-chat \
    --endpoint /v1/chat/completions

매번 상태를 초기화하기 위해 벤치마크는 슬립 모드를 활성화해요. 이 기능이 서버에 POST /sleep?level=1POST /wake_up?tags=weights REST 엔드포인트를 열어줘요. 예를 들어 슬립 모드 레벨 1을 켜려면 이렇게 해요.

curl -X POST 'http://localhost:8000/sleep?level=1'

슬립 레벨 1을 쓰면 가중치가 CPU RAM으로 오프로드되고 KV 캐시가 버려져요.

1x B200 (180 GB SXM6) 인스턴스에서의 토큰 처리량:

지표 초당 토큰
출력 생성 610.84 ± 45.38
전체 (입력·출력 합계) 918.01 ± 68.20

세부 수치:

지표 평균 (ms) P99 (ms)
첫 토큰까지 시간 351.40 ± 98.25 254.80 ± 65.98
출력 토큰당 시간 6.37 ± 0.32 8.86 ± 2.62
토큰 간 지연시간 5.63 ± 0.15 7.6 ± 0.17

더 알아보기