AI&GameDev

AI와 게임개발에 관련된 이야기

NVIDIA NIM 무료 API 사용법 [2026] – 가입부터 챗봇·n8n 연동·모델 비교까지

NVIDIA NIM 무료 API 가이드 썸네일 - GPU 칩에서 챗봇과 n8n 워크플로로 이어지는 그림

NVIDIA NIM 무료 API를 쓰면 build.nvidia.com에서 전화번호 인증만 하고 API 키를 받아 nemotron, GLM, Kimi 같은 LLM을 무료로 호출할 수 있습니다. OpenAI 호환 방식이라 OpenAI SDK에서 base_url만 바꾸면 됩니다.

이 글은 2026년 10월에 가입부터 API 키 발급, Python 첫 호출, 터미널 챗봇, n8n 연동, 무료 모델 비교까지 직접 해 보고 그 화면과 측정 결과를 그대로 정리했습니다.

핵심 요약

  • 비용: 프로토타입 용도로 무료이고 토큰 단위 과금이 없습니다. 가입부터 키 발급, API 호출까지 결제 정보를 입력한 적이 없습니다.
  • 필수 조건: 전화번호(SMS) 인증을 해야 API 키를 만들 수 있습니다.
  • 한도: 대부분 모델이 분당 최대 40회로 안내됩니다. 모델과 전체 트래픽에 따라서는 더 일찍 막힐 수 있습니다.
  • 사용 범위: 체험과 내부 평가용입니다. 다른 사람이 쓰는 서비스에 쓰거나 개인정보를 넣으면 안 됩니다. 입력한 내용은 기록됩니다.
  • 모델 선택: GLM-5.3, Kimi K3 같은 인기 모델은 요청이 몰려 몇 분씩 멈추거나 404가 난 적이 있습니다. 실습은 nemotron 계열(lightning, super)로 시작하길 권합니다.

이 글의 대상 독자와 기준일

  • 터미널과 Python 기초는 알지만 NVIDIA NIM은 처음인 개발자
  • 무료 LLM API를 n8n 같은 자동화 도구에 붙여 보고 싶은 분

2026-10-04~07에 실제로 진행한 화면과 실행 결과가 기준입니다. 1~7장은 10-04, 8장의 비교와 5-5의 404 사례는 10-06~07에 확인했습니다. 무료 모델 목록과 한도는 자주 바뀝니다. 실습할 때도 홈 화면에 나온 DeepSeek V4 Pro는 이미 무료 제공이 끝나 있었습니다. 쓰기 전에 모델 페이지의 Free Endpoint 표시를 다시 확인하세요.

목차

NVIDIA NIM이란?

NVIDIA NIM은 NVIDIA가 제공하는 AI 모델 추론용 마이크로서비스(NVIDIA NIM Microservices for AI Inference)입니다. build.nvidia.com의 API 카탈로그에서 모델을 골라 OpenAI 호환 엔드포인트(https://integrate.api.nvidia.com/v1)로 바로 호출할 수 있습니다. 2026-10-04 기준으로 카탈로그의 97개 모델 중 38개에 무료 엔드포인트가 있었습니다.

NVIDIA NIM 무료 API 사용 순서

  1. build.nvidia.com에 가입하고 전화번호 인증하기
  2. API 키를 발급받아 .env 파일에 저장하기
  3. 무료 엔드포인트가 있는 모델과 모델 ID 확인하기
  4. OpenAI SDK로 첫 API 호출하기
  5. 대화를 기억하는 터미널 챗봇 만들기
  6. n8n 워크플로에서 같은 키로 NIM 모델 쓰기

무료로 쓸 수 있는 범위는 무료 조건 정리에서, 어떤 모델이 빠르고 정확했는지는 무료 모델 비교 결과에서 볼 수 있습니다.

시작 전 준비물

  • 이메일 계정 (NVIDIA 계정 가입·로그인용)
  • 문자(SMS)를 받을 수 있는 휴대폰 (API 키 발급 전 본인 인증에 필요)
  • 터미널 (이 글은 macOS 기준)
  • uv (4장부터 Python 환경을 만들 때 사용. Python 3.12는 uv가 알아서 준비합니다)
  • (7장만) n8n 계정이나 자체 설치한 n8n

1. build.nvidia.com 가입과 전화번호 인증

1-1. 사이트 접속

브라우저에서 https://build.nvidia.com을 엽니다.

  • 처음 접속하면 쿠키 안내 팝업이 뜰 수 있습니다. 내용을 읽고 Done으로 닫으면 됩니다.

1-2. 로그인 또는 가입

  1. 오른쪽 위 Login을 누릅니다.
  2. 이메일을 입력합니다. NVIDIA 계정이 있으면 로그인하고 없으면 안내에 따라 새로 가입합니다.

1-3. 전화번호 인증 (OTP)

로그인하면 바로 "We’ll need to verify your phone number" 팝업이 뜹니다. 화면 위에도 "Please verify your account to get API access." 배너가 나옵니다.

  1. Location을 고릅니다. 기본값은 United States이니 한국 번호라면 목록에서 South Korea를 선택합니다. 목록은 알파벳순입니다.
  2. Phone Number에 휴대폰 번호를 입력하고 Send Code to Phone을 누릅니다.
  3. 문자로 받은 인증 코드를 입력합니다.

Skip을 누르면 지금은 넘어갈 수 있지만 인증하기 전에는 API 키를 만들 수 없습니다.

확인 포인트

인증이 끝나면 위쪽 경고 배너가 사라집니다. 오른쪽 위 ? 버튼을 누르면 Help Center가 열리는데, Set up your account에 초록색 체크가 표시되어 있으면 됩니다.

무료 사용량 (Help Center FAQ 기준, 내 한도는 프로필 메뉴에 표시): build.nvidia.com의 모델은 프로토타이핑 용도로 무료입니다. 무료 티어에는 사용량 제한(rate limit)이 있는데, 대부분 모델이 분당 최대 40회(40 RPM)이고 토큰 단위 과금은 없습니다. 무료로 쓸 수 있는 범위(운영 환경 사용 금지 등)는 6장에 정리했습니다.

2. NVIDIA NIM API 키 발급받기

API 키를 만드는 경로는 두 가지입니다.

경로이름·만료 기간 지정언제 쓰나
프로필 메뉴 → API Keys → Generate API Key가능 (기본 12개월)기본 경로. 키를 만들고, 목록을 보고, 지울 수 있는 관리 페이지입니다
Help Center(?) → Get API Key불가 (이름 자동, 6개월)처음 로그인했을 때 Getting Started 안내를 따라가는 지름길입니다

이 글에서 실제로 키를 만든 것은 Help Center 경로입니다. API Keys 페이지의 팝업은 열어서 입력 항목만 살펴보고 Cancel로 닫았습니다.

2-1. API Keys 페이지 열기

오른쪽 위의 프로필 아이콘(이니셜이 들어간 동그라미)을 누르면 계정 메뉴가 열립니다. 메뉴에서 API Keys를 누릅니다.

API Keys 페이지(https://build.nvidia.com/settings/api-keys)가 열립니다.

2-2. Generate API Key

오른쪽 위 Generate API Key를 누르면 팝업이 뜹니다.

  • Key Name: 키 이름입니다. 비워 두면 입력란에 흐리게 보이는 NVIDIA Build API Key가 쓰일 것으로 짐작되지만 실제로 비워 두고 만들어 보지는 않았습니다. 어디에 쓰는 키인지 알아볼 수 있게 이름을 붙이는 것이 좋습니다(예: nim-guide-practice).
  • Expiration(필수): 기본값은 12 months입니다. 선택지는 12 months, 6 months, 3 months, 30 days, 14 days, 7 days, 24 hours, 12 hours, 1 hour, Never Expire, Custom Time입니다. 실습용이라면 짧게 잡아 두는 편이 안전합니다.

값을 정한 뒤 Generate Key를 누릅니다.

Help Center 경로에서는 Get API Key를 누르면 아래 팝업이 뜹니다. 입력란 없이 Generate Key만 누르면 됩니다. 이름은 자동으로 붙고 유효기간은 6개월입니다.

2-3. 키 복사

Generate Key를 누르면 "API Key Granted" 팝업에 키가 나옵니다.

키는 이 팝업에서 한 번만 보여 줍니다 ("This is the only time your key will be displayed."). 팝업을 닫기 전에 꼭 Copy Key로 복사하세요.

2-4. .env 파일에 저장

키를 코드나 문서에 직접 쓰지 말고 프로젝트 폴더의 .env 파일에 환경 변수로 저장합니다.

Copy Key로 복사했다면 macOS에서는 아래 명령으로 클립보드의 키를 화면에 표시하지 않고 저장할 수 있습니다.

if [ -e .env ]; then
  echo ".env가 이미 있습니다. 텍스트 편집기로 한 줄을 추가하세요."
else
  key="$(pbpaste | tr -d ' \r\n\t')"
  case "$key" in
    nvapi-*) (umask 077; printf 'NVIDIA_API_KEY=%s\n' "$key" > .env) && echo "저장했습니다" ;;
    *) echo "클립보드에 nvapi-로 시작하는 키가 없습니다. Copy Key를 다시 누르세요." ;;
  esac
  unset key
fi
  • 이미 .env가 있으면 아무것도 쓰지 않습니다. 기존 내용을 지우지 않게 하려는 것입니다.
  • 클립보드를 한 번만 읽고 그 값이 nvapi-로 시작할 때만 저장합니다.
  • umask 077은 파일을 처음 만들 때부터 내 계정만 읽고 쓸 수 있게 합니다(권한 600).

텍스트 편집기로 .env를 직접 만들어도 됩니다. 형식은 다음 한 줄입니다.

NVIDIA_API_KEY=nvapi-...
  • git을 쓴다면 .env를 .gitignore에 추가해서 커밋되지 않게 하세요.
  • 저장한 뒤에는 클립보드에 남아 있는 키를 다른 텍스트로 덮어써 두는 것이 좋습니다.

확인 포인트

키 값을 출력하지 않고 형식만 검사합니다. 1이 나오면 정상입니다.

grep -c '^NVIDIA_API_KEY=nvapi-' .env

프로필 메뉴 → API Keys 페이지 표에 새 키가 ACTIVE로 나오면 발급된 것입니다.

Help Center를 다시 열어 보면 Generate API Key에도 체크가 표시되고 다음 단계 Make your first API call이 열려 있습니다.

키 관리

  • 키 목록은 프로필 메뉴 → API Keys에서 봅니다.
  • 행 오른쪽 ⋮ 메뉴에는 Delete API Key가 있습니다. 키가 유출됐거나 더 쓰지 않으면 여기서 지웁니다.
  • 키 값은 발급할 때 한 번만 볼 수 있습니다. 잃어버렸으면 새로 만들고 예전 키는 지우세요.

3. 무료로 쓸 수 있는 NIM 모델 고르기

API를 호출하기 전에 어떤 모델을 무료로 쓸 수 있는지, 코드에 넣을 모델 ID는 무엇인지 알아봅니다.

2026-10-04 기준입니다. 모델은 자주 추가되고 종료되니, 실제로 쓰기 전에 사이트에서 다시 확인하세요.

3-1. Models 페이지에서 무료 모델 찾기

위쪽 메뉴에서 Models를 누릅니다(https://build.nvidia.com/models).

카드 배지는 이런 뜻입니다.

배지의미
Free EndpointNVIDIA가 제공하는 무료 API로 바로 호출할 수 있음
Downloadable모델을 내려받아 내 GPU 서버에서 돌릴 수 있음 (이 글에서는 다루지 않음)
Deprecation in NdN일 뒤 종료 예정

3-2. 모델 상세 페이지 보기

카드를 누르면 모델 상세 페이지가 열립니다.

볼 곳:

  • Prototype: "Start building with a free API endpoint."라는 문구와 Python / Node / Shell 예시 코드가 있습니다. Python 예시는 openai 패키지를 쓰고 base_url은 https://integrate.api.nvidia.com/v1입니다.
  • 코드의 model= 값이 API에서 쓰는 모델 ID입니다. 페이지 주소의 이름과 다를 수 있으니 반드시 코드에서 복사하세요.
    • 예: 주소는 .../z-ai/glm-5-3인데, 모델 ID는 z-ai/glm-5.3
  • Specifications: 컨텍스트 길이(Context Length), 파라미터 수, 입력·출력 형식(Input/Output Modalities)
  • Model Availability: Free Endpoint가 Available이어야 무료로 호출할 수 있습니다.

3-3. 주의 – 홈 화면에 나온다고 모두 무료는 아니다

홈 화면의 "Use Inference Endpoints — Free inference with leading models"에 나온 모델 중에도 무료 엔드포인트가 끝난 모델이 있었습니다.

모델을 고를 때는 홈 화면이 아니라 상세 페이지의 Model Availability를 기준으로 보세요.

3-4. 터미널에서 모델 ID 목록 보기

모델 목록 API는 키 없이도 호출할 수 있습니다.

curl -s https://integrate.api.nvidia.com/v1/models | jq -r '.data[].id'
  • 2026-10-04 기준으로 81개가 나옵니다(jq '.data | length'로 개수 확인).
  • 이 목록에는 사이트에서 Free Endpoint로 표시되지 않는 모델도 들어 있습니다. 오래된 모델(예: meta/llama2-70b)이 그렇습니다. 반대로 음성·영상 모델처럼 Free Endpoint인데 이 목록에 없는 모델도 있습니다. 무료 여부는 사이트에서, 정확한 ID는 이 목록이나 상세 페이지 코드에서 확인하세요.
  • jq가 없으면 brew install jq로 설치하거나, | python3 -m json.tool로 결과를 보기 좋게 출력할 수 있습니다.

3-5. 추천 모델

무료 모델 38개 중에는 음성·영상·자율주행처럼 채팅 API로 쓰지 않는 모델도 많습니다. 이 글에서는 아래 기준으로 텍스트 LLM 후보 10개의 상세 페이지를 직접 열어 보고 그중 6개를 골랐습니다.

  • Free Endpoint가 Available
  • 채팅 API(/v1/chat/completions)로 호출할 수 있음
  • 최근 6개월 안에 갱신됨 (Last Modified 기준)
  • 용도가 겹치지 않게: 빠른 실습용, 범용, 최신 대형, 이미지 입력, 코딩
용도모델 ID크기컨텍스트입력갱신최근 30일 호출
첫 실습용 (가볍고 빠름)nvidia/nemotron-3.5-lightning-30b-a3b30B (활성 3B)1M텍스트1개월 전—
범용 (호출 수 많음)nvidia/nemotron-3-super-120b-a12b124B1M텍스트6개월 전65M
최신 대형 · 추론z-ai/glm-5.3753B1M텍스트18일 전—
최신 · 이미지 입력deepseek-ai/deepseek-v4.1-flash552B (활성 8B)1M텍스트, 이미지15일 전—
코딩 · 에이전트moonshotai/kimi-k32.8T1M텍스트, 이미지1개월 전—
중형 · 영상까지 입력google/gemma-4-31b-it33B262K텍스트, 이미지, 영상6개월 전6M
  • 크기, 컨텍스트, 입력 형식, 갱신 시점, 호출 수는 각 모델 상세 페이지의 Specifications 값입니다. "—"는 페이지에 호출 수가 표시되지 않은 모델입니다. "가볍고 빠름"은 카드 설명("Fastest 30B A3B MoE")과 활성 파라미터 수를 보고 붙였습니다. 직접 호출해 보니 추론을 끈 짧은 답은 약 2초 걸렸습니다(4-4). GLM-5.3과 비교한 결과는 8장에 있습니다.
  • DeepSeek V4.1 Flash의 "활성 8B"는 상세 페이지 설명("552B MoE, 8B active params")을 따른 값입니다. 외부 지표 사이트(Artificial Analysis)는 활성 16B로 적고 있어 자료마다 다릅니다.
  • 처음에는 nvidia/nemotron-3.5-lightning-30b-a3b로 시작하는 것을 권합니다. 텍스트 전용이고 이 표에서 활성 파라미터가 3B로 가장 작으며 카드에서도 속도를 내세우는 모델이라 첫 호출을 확인하기에 알맞습니다. 무료 한도는 FAQ와 계정 화면에 분당 요청 수(대부분 최대 40 RPM)로 안내됩니다. 다만 NVIDIA 공지에 따르면 실제 한도는 모델, 사용 방식, 전체 트래픽에 따라 달라집니다. 인기 모델은 더 일찍 막히거나 응답이 늦을 수 있습니다.
  • 일부 모델은 예시 코드에 추론(thinking) 옵션이 들어 있습니다. 이 옵션을 켜면 답변 전에 생각하는 과정이 추가되어 응답이 길어질 수 있습니다.
    • nemotron-3.5-lightning: extra_body={"chat_template_kwargs":{"enable_thinking":True},"reasoning_budget":16384}. 이 옵션을 빼도 추론은 기본으로 켜져 있습니다(4-4).
    • kimi-k3: "reasoning_effort": "max"
  • Kimi K3는 외부 벤치마크 점수는 높지만 무료 엔드포인트에서는 불안정했습니다. 2026-10-04~06에 6번 호출해 정상적인 답은 2번만 받았습니다. 나머지는 본문이 빈 답 2번, 5분 시간 초과 1번, 504 에러 1번이었습니다. 답이 온 경우에도 2분씩 걸렸습니다. 그래서 8장의 비교에는 GLM-5.3을 썼습니다.
  • 인기 모델은 무료 엔드포인트가 붐빌 수 있습니다. 2026-10-07에는 GLM-5.3, DeepSeek V4.1 Flash, Kimi K3 앞에 요청이 수십~수천 건 밀려 있었습니다. 그중 GLM-5.3은 404만 돌려줬습니다. 같은 시각 nemotron 모델들은 대기열이 비어 있었고 몇 초 안에 답했습니다(5-5의 404 항목, 8-3). 실습이나 데모는 nemotron 계열로 시작하고 인기 모델은 시간을 두고 시도하세요.
  • 함께 살펴봤지만 위 표에서 뺀 모델: nvidia/nemotron-3-ultra-550b-a55b(super와 같은 계열의 대형 모델, 최근 30일 52M 호출), z-ai/glm-5.3-flash, poolside/laguna-xs-2.1(코딩), openai/gpt-oss-20b(갱신이 1년 전이라 제외, 최근 30일 19M 호출)

3-6. "Before You Use AI Models" 팝업

모델 상세 페이지를 열면 아래 팝업이 뜰 수 있습니다. 무료 체험 서비스의 데이터 처리와 이용약관에 동의하는 창입니다.

팝업의 세 항목을 우리말로 요약했습니다.

  • Model Outputs: 모델의 답변은 부정확하거나, 유해하거나, 편향될 수 있습니다. NVIDIA는 다른 회사 모델의 출력을 보증하지 않습니다. 출력 때문에 생기는 문제는 사용자 책임입니다.
  • Privacy: 입력과 출력은 기록되고, 체험 서비스 제공과 NVIDIA 제품·AI 모델 개선에 쓰입니다. 사용 기록은 보안·악용 감시를 위해 외부 서비스 업체와 공유됩니다.
  • 동의: Acknowledge & Continue를 누르면 이 데이터 처리에 동의하고 NVIDIA API Trial Terms of Service를 받아들이는 것입니다.

무료 체험에서는 입력한 내용이 기록됩니다. 회사 코드, 고객 데이터, 개인정보, API 키 같은 내용은 프롬프트에 넣지 마세요.

확인 포인트

  • 쓸 모델을 정하고 상세 페이지에서 Free Endpoint: Available인지 다시 확인했다.
  • 무료 API에 보내는 입력과 출력이 기록된다는 점을 알고 민감한 정보는 넣지 않기로 했다.
  • 상세 페이지 코드의 model= 값(API 모델 ID)을 복사해 두었다.

4. Python으로 NVIDIA NIM API 첫 호출하기

NIM의 채팅 API는 OpenAI API와 형식이 같습니다. 그래서 openai Python SDK에서 주소(base_url)와 키만 바꾸면 그대로 호출할 수 있습니다. 가상 환경과 패키지 관리는 uv로 합니다.

4-1. uv 프로젝트 만들기

uv가 없으면 먼저 설치합니다(brew install uv 또는 curl -LsSf https://astral.sh/uv/install.sh | sh). uv --version으로 설치를 확인합니다.

실습용 폴더를 만들고 그 안에서 프로젝트를 만든 뒤, 패키지 두 개를 설치합니다.

mkdir nim-chatbot && cd nim-chatbot
uv init --bare --python 3.12 --name nim-chatbot
uv add openai python-dotenv
  • uv init --bare는 pyproject.toml만 만듭니다. 예제 main.py나 README는 만들지 않습니다.
  • uv add를 처음 실행하면 .venv 가상 환경이 만들어지고 패키지가 설치되고 uv.lock이 생깁니다. source .venv/bin/activate로 가상 환경을 직접 켤 필요는 없습니다. 실행할 때 uv run을 쓰면 됩니다.
  • openai: API 호출용 SDK, python-dotenv: .env 파일의 키를 환경 변수로 읽어 오는 패키지입니다.

설치가 잘 됐는지 버전을 찍어 봅니다.

uv run python -c 'import openai, dotenv; print(openai.__version__)'

그다음 2-4에서 만든 .env 파일을 이 폴더(nim-chatbot/)로 옮기거나 복사합니다. 이 글의 코드는 실행하는 파일이 있는 폴더부터 상위 폴더로 올라가며 .env를 찾으므로, 상위 폴더에 있어도 됩니다.

4-2. 첫 호출 코드

first_call.py 파일을 만들고 아래 내용을 붙여 넣습니다.

"""NVIDIA NIM 무료 엔드포인트에 질문을 한 번 보내고 답을 출력한다."""

import os

from dotenv import find_dotenv, load_dotenv
from openai import OpenAI

load_dotenv(find_dotenv())  # 이 파일 위치부터 상위 폴더로 올라가며 .env를 찾는다

client = OpenAI(
    base_url="https://integrate.api.nvidia.com/v1",
    api_key=os.environ["NVIDIA_API_KEY"],
)

response = client.chat.completions.create(
    model="nvidia/nemotron-3.5-lightning-30b-a3b",
    messages=[{"role": "user", "content": "NVIDIA NIM이 뭔지 한 문장으로 설명해 줘."}],
    max_tokens=1024,
)

print(response.choices[0].message.content)
print("---")
print("usage:", response.usage)
  • base_url: NIM 무료 API 주소입니다. 모델 상세 페이지의 예시 코드에 나오는 값과 같습니다.
  • api_key: .env에서 읽은 NVIDIA_API_KEY를 씁니다. 코드에 키를 직접 쓰지 않습니다.
  • model: 3-5에서 고른 모델 ID입니다. 다른 모델을 쓰려면 이 값만 바꿉니다.

4-3. 실행

uv run first_call.py

4-4. 추론(thinking)은 기본으로 켜져 있다

위 결과를 보면 한 문장짜리 답인데 completion_tokens가 500개가 넘습니다. nvidia/nemotron-3.5-lightning-30b-a3b는 아무 옵션을 주지 않아도 추론이 켜진 상태로 동작하기 때문입니다. 추론 내용은 content가 아니라 응답의 reasoning_content 필드로 따로 옵니다. 그래서 위 코드에서는 보이지 않지만 토큰과 시간은 그만큼 씁니다.

같은 질문으로 추론을 켰을 때와 껐을 때를 한 번씩 비교했습니다(2026-10-04, 각 1회 측정이라 참고용입니다).

기본값(추론 켜짐)추론 끔
응답 시간7.7초2.0초
출력 토큰54340
reasoning_content영어로 된 추론 과정 약 1,500자없음

추론을 끄려면 first_call.py의 요청에 extra_body 한 줄을 추가합니다.

response = client.chat.completions.create(
    model="nvidia/nemotron-3.5-lightning-30b-a3b",
    messages=[{"role": "user", "content": "NVIDIA NIM이 뭔지 한 문장으로 설명해 줘."}],
    max_tokens=1024,
    extra_body={"chat_template_kwargs": {"enable_thinking": False}},
)
  • extra_body는 OpenAI API에 없는 옵션을 요청 본문에 그대로 넣어 보낼 때 씁니다.
  • 2026-10-07에 추론을 끈 이 코드를 다시 실행했을 때, 한 번은 질문과 상관없는 영어 문장이 나왔습니다. 바로 다시 실행하니 정상으로 답했습니다. 답이 이상하면 한 번 더 실행해 보세요.
  • 추론 내용을 보고 싶으면 response.choices[0].message.reasoning_content를 출력합니다.
  • 간단한 대화에는 추론을 끄는 편이 훨씬 빠릅니다. 여러 단계를 따져야 하는 질문이라면 켠 상태와 비교해 볼 만합니다. 추론을 켰을 때 답이 더 정확해지는지는 이 실습에서 따져 보지 않았습니다. 8장의 계산 질문은 추론을 끈 상태로도 맞혔습니다.

확인 포인트

  • uv run python -c 'import openai, dotenv; ...'에서 버전이 출력됐다.
  • uv run first_call.py를 실행해 모델의 답이 나왔다. 401 에러가 나면 5-5 문제 해결을 보세요.
  • 추론이 기본으로 켜져 있고 enable_thinking: False로 끌 수 있다는 점을 알았다.

5. NIM API로 터미널 챗봇 만들기

4장의 코드를 키워서 터미널에서 계속 대화할 수 있는 챗봇을 만듭니다. 이 챗봇은 이렇게 동작합니다.

  • 앞의 대화를 기억하고 이어서 답합니다.
  • 답을 한꺼번에 기다리지 않고 만들어지는 대로 글자를 출력합니다(스트리밍).
  • /think로 추론을 켜고 끕니다. 켜면 추론 과정을 흐린 글씨로 보여 줍니다.
  • /clear로 대화를 지우고 /exit(또는 Ctrl+D)로 끝냅니다.
  • 키가 틀렸거나 요청이 너무 많을 때, 답이 비어 있을 때 알아보기 쉬운 메시지를 보여 줍니다. 실패한 질문은 대화 기록에 남기지 않습니다.

5-1. 코드

같은 폴더에 chatbot.py를 만들고 아래 내용을 붙여 넣습니다.

"""NVIDIA NIM 무료 모델로 만든 터미널 챗봇.

실행: uv run chatbot.py [--model 모델ID] [--think]
명령: /think 추론 켜기·끄기, /clear 대화 지우기, /exit 끝내기
"""

import argparse
import os
import sys

import openai
from dotenv import find_dotenv, load_dotenv
from openai import OpenAI

DEFAULT_MODEL = "nvidia/nemotron-3.5-lightning-30b-a3b"
SYSTEM_PROMPT = "You are a helpful assistant. Answer in the user's language, briefly."

DIM = "\033[2m"
RESET = "\033[0m"


def stream_reply(client, model, messages, think):
    """답을 받는 대로 출력하고, 다 받은 답 전체를 돌려준다."""
    stream = client.chat.completions.create(
        model=model,
        messages=messages,
        max_tokens=4096,
        stream=True,
        extra_body={"chat_template_kwargs": {"enable_thinking": think}},
    )
    answer = []
    for chunk in stream:
        if not chunk.choices:
            continue
        delta = chunk.choices[0].delta
        # 추론 내용은 content가 아니라 reasoning_content로 따로 온다
        reasoning = getattr(delta, "reasoning_content", None)
        if reasoning:
            print(f"{DIM}{reasoning}{RESET}", end="", flush=True)
        if delta.content:
            if not answer and think:
                print("\n")  # 추론과 답 사이를 띄운다
            answer.append(delta.content)
            print(delta.content, end="", flush=True)
    print()
    return "".join(answer)


def main():
    parser = argparse.ArgumentParser(description="NVIDIA NIM CLI chatbot")
    parser.add_argument("--model", default=DEFAULT_MODEL)
    parser.add_argument("--think", action="store_true", help="추론을 켠 상태로 시작")
    args = parser.parse_args()

    load_dotenv(find_dotenv())
    api_key = os.environ.get("NVIDIA_API_KEY")
    if not api_key:
        sys.exit("NVIDIA_API_KEY가 없습니다. .env 파일을 확인하세요.")

    client = OpenAI(base_url="https://integrate.api.nvidia.com/v1", api_key=api_key)
    messages = [{"role": "system", "content": SYSTEM_PROMPT}]
    think = args.think

    print(f"model: {args.model} | thinking: {'on' if think else 'off'}")
    print("/think 추론 켜기·끄기, /clear 대화 지우기, /exit 끝내기\n")

    while True:
        try:
            user_input = input("you> ").strip()
        except (EOFError, KeyboardInterrupt):
            print()
            break

        if not user_input:
            continue
        if user_input == "/exit":
            break
        if user_input == "/clear":
            messages = messages[:1]
            print("(대화를 지웠습니다)\n")
            continue
        if user_input == "/think":
            think = not think
            print(f"(thinking: {'on' if think else 'off'})\n")
            continue

        messages.append({"role": "user", "content": user_input})
        print("bot> ", end="", flush=True)
        try:
            answer = stream_reply(client, args.model, messages, think)
        except KeyboardInterrupt:
            print("\n(응답을 멈췄습니다)\n")
            messages.pop()
            continue
        except openai.AuthenticationError:
            sys.exit("\n인증 실패(401): API 키가 맞는지 확인하세요.")
        except openai.RateLimitError:
            print("\n요청이 너무 많습니다(429). 잠시 뒤 다시 시도하세요.\n")
            messages.pop()
            continue
        except openai.APIConnectionError:
            print("\n서버에 연결할 수 없습니다. 네트워크를 확인하세요.\n")
            messages.pop()
            continue
        except openai.APIStatusError as e:
            print(f"\nAPI 에러({e.status_code}): {e.message}\n")
            messages.pop()
            continue

        if not answer:
            # 서버가 본문 없이 응답을 끝낸 경우. 빈 답을 대화 기록에 남기지 않는다
            print("(답이 비어 있습니다. 다시 질문하거나 다른 모델을 써 보세요.)\n")
            messages.pop()
            continue

        messages.append({"role": "assistant", "content": answer})
        print()


if __name__ == "__main__":
    main()

코드의 주요 부분 네 가지를 하나씩 봅니다.

  • 대화 기억: API는 이전 대화를 기억하지 않습니다. 그래서 messages 리스트에 질문(user)과 답(assistant)을 계속 쌓고 매번 리스트 전체를 보냅니다. 대화가 길어질수록 입력 토큰도 늘어납니다.
  • 스트리밍: stream=True로 요청하면 답이 조각(chunk)으로 나뉘어 옵니다. 각 조각의 delta.content를 바로 출력합니다.
  • 추론 표시: 추론을 켜면 추론 내용이 delta.reasoning_content로 먼저 오고 그다음 답이 delta.content로 옵니다. 대화 기록에는 답만 저장합니다.
  • 에러 처리: 요청이 실패하면 방금 넣은 질문을 messages에서 빼서, 다시 물어봐도 같은 질문이 두 번 쌓이지 않게 합니다.

5-2. 실행과 대화

uv run chatbot.py

첫 줄에 쓰는 모델과 추론 상태가 나옵니다. 그다음 you> 뒤에 질문을 입력합니다.

5-3. 추론 켜 보기

/think를 입력하면 추론이 켜집니다. 처음부터 켜고 시작하려면 uv run chatbot.py --think로 실행합니다.

5-4. 다른 모델로 바꾸기

--model 옵션으로 3-5의 다른 모델 ID를 넣을 수 있습니다.

uv run chatbot.py --model nvidia/nemotron-3-super-120b-a12b

위 명령을 코드 수정 없이 그대로 실행해 봤습니다(2026-10-07).

  • nemotron-3-super에서는 추론 켜기·끄기(chat_template_kwargs.enable_thinking)가 lightning과 똑같이 동작했습니다.
  • 추론 옵션 이름은 모델마다 다를 수 있습니다(예: kimi-k3는 reasoning_effort). 다른 모델에서 에러가 나면 그 모델 상세 페이지의 예시 코드를 보고 extra_body를 고치세요.
  • 같은 날 z-ai/glm-5.3으로도 실행했지만 404 에러가 났습니다. 원인은 챗봇 코드가 아니라 모델 쪽이었습니다(5-5의 404 항목). 그래서 GLM-5.3에서 이 추론 옵션이 통하는지는 아직 모릅니다.

5-5. 문제 해결

인증 실패(401)

서버가 키를 거부하면 아래처럼 나오고 챗봇이 끝납니다. 키가 틀렸거나 지워졌을 때, 셸에 예전 키가 남아 있을 때 이렇게 됩니다.

  • grep -c '^NVIDIA_API_KEY=nvapi-' .env로 키 형식을 점검합니다(2-4 확인 포인트 참고).
  • 셸에 예전 키가 export되어 있으면 그 값이 .env보다 우선합니다. 새 터미널을 열거나 unset NVIDIA_API_KEY 후 다시 실행합니다.
  • API Keys 페이지에서 키가 ACTIVE 상태인지 봅니다.

NVIDIA_API_KEY가 없습니다

키를 읽지 못해 API를 부르기 전에 끝난 것입니다. 다음을 확인합니다.

  • chatbot.py가 있는 폴더나 그 상위 폴더에 .env가 있는지
  • 변수 이름이 NVIDIA_API_KEY인지
  • = 뒤의 값이 비어 있지 않은지

요청이 너무 많음(429)

무료 한도(대부분 분당 40회)를 넘으면 나옵니다. 챗봇은 끝나지 않으니 잠시 기다렸다가 다시 질문하면 됩니다. openai SDK는 429가 나면 기본으로 2번까지 자동으로 다시 시도합니다.

429 에러는 이 실습에서 실제로 겪어 보지는 않았습니다. 자동 재시도는 설치된 openai 3.24.0 코드(DEFAULT_MAX_RETRIES = 2, 429면 재시도)를 보고 확인했습니다.

모델을 찾을 수 없음(404)

모델 쪽 서버에 문제가 있으면 나옵니다. 모델 ID를 잘못 썼을 때도 404가 날 것 같지만 일부러 틀린 ID를 넣어 시험해 보지는 않았습니다. 챗봇은 끝나지 않으니 /exit로 나가서 다른 모델로 다시 실행하면 됩니다.

  • 먼저 모델 ID 철자부터 봅니다. 모델 상세 페이지의 예시 코드에 있는 model 값을 그대로 복사하는 게 가장 안전합니다.
  • ID가 맞는데도 404면 모델 쪽 문제일 수 있습니다. 이때 응답 헤더에는 nvcf-status: errored가 붙습니다. 위 화면의 경우 추론 옵션을 빼고 max_tokens를 줄여 curl로 다시 보내도 1초 안에 같은 404가 났습니다. 모델 목록(/v1/models)에는 그대로 있었습니다.
  • 같은 시각 build.nvidia.com의 GLM-5.3 Playground에서 질문을 보내도 답이 나오지 않았습니다. Playground가 대기열을 조회한 결과를 보면 모델은 꺼져 있지 않았지만(ACTIVE) 대기열에 요청이 수백 건 쌓여 있었습니다. 대기열이 몇 건까지 허용되는지는 공개돼 있지 않습니다.
모델대기 중인 요청 수 (2026-10-07 11시경)
nemotron-3.5-lightning, nemotron-3-super0
glm-5.3174 → 237 (몇 분 사이 계속 늘어남)
glm-5.3-flash약 350
kimi-k35,389

무료 엔드포인트는 사용자가 몰리는 인기 모델에서 이렇게 밀릴 수 있습니다. NVIDIA는 포럼 고정 공지에서 무료 한도가 "model, use-case and the amount of current overall traffic"에 따라 달라지고 올려 줄 수 없다고 밝혔습니다. 포럼에는 2026년 6월부터 DeepSeek V4, Kimi K3, GLM 5.x 같은 인기 모델이 멈추거나 429·404·504를 낸다는 글이 계속 올라옵니다(예시). 404와 대기열 증가가 함께 관찰됐을 뿐입니다. 대기열이 길면 404가 난다는 동작은 문서에서 찾지 못했습니다. 혼잡이 원인일 가능성이 높다는 정도로 보면 됩니다.

이럴 때는 시간을 두고 다시 시도하거나, 대기열이 비어 있는 모델(예: nemotron 계열)을 씁니다. 꼭 그 모델이어야 하면 모델 페이지의 Deploy에 있는 유료 Partner Endpoint를 검토합니다(GLM-5.3은 GMI Cloud가 있었습니다).

확인 포인트

  • 두 번째 질문에서 앞의 대화를 이어받아 답했다.
  • 답이 한꺼번에가 아니라 조금씩 출력됐다.
  • /think로 추론을 켜면 흐린 글씨의 추론 과정이 먼저 나오고 그 뒤에 답이 나왔다.
  • /exit로 챗봇을 끝냈다.

6. NVIDIA NIM 무료 조건 정리 – 결제 정보, 한도, 사용 범위

여기까지 따라왔다면 NIM의 무료 API로 모델을 호출하고 챗봇까지 만든 것입니다. 이 섹션은 "무료"에 어떤 조건이 붙는지 정리합니다. 2026-10-04 기준으로 아래 두 가지 공식 자료를 읽고 정리했습니다.

  • Help Center FAQ: 사이트 오른쪽 위 ? 버튼 → FAQs
  • NVIDIA API Trial Terms of Service (PDF, 문서 버전 v. September 19, 2025): 3-6의 팝업에서 동의하는 약관입니다.

아래는 약관을 이해하기 쉽게 요약한 것이고 법률 해석이 아닙니다. 실제로 판단할 때는 원문을 확인하세요.

6-1. 결제 정보가 필요한가

이 실습에서는 결제 정보를 한 번도 입력하지 않았습니다. 로그인 → 전화번호 인증 → 키 발급 → API 호출까지 카드나 결제 수단을 묻는 단계가 없었습니다.

  • 프로필 메뉴에도 결제(Billing) 항목이 없습니다. 메뉴에는 rate limit 표시, API Keys, Integrations, Sign Out만 있습니다.
  • FAQ에도 무료 티어는 "no per-token billing"(토큰 단위 과금 없음)이라고 적혀 있습니다.
  • 대신 키를 발급하려면 전화번호 인증(OTP)이 꼭 필요합니다(1-3).

계정 가입 단계는 캡처하지 않았습니다. 제가 가입할 때 결제 정보를 묻지 않았고 공개 자료도 같은 내용입니다(2026-10-07 확인).

  • 공식 General FAQ(2026-08-06 수정): 가입하는 프로그램을 "free NVIDIA Developer Program"이라고 부릅니다. 회원은 "free access to NIM API endpoints for prototyping"을 받는다고 적혀 있습니다. 카드 이야기는 없습니다.
  • Trial 약관에는 요금·결제 조항이 없습니다. 3.5항은 "your payment method (if any)"라고 써서 결제 수단이 없는 계정을 전제로 합니다.
  • 사용기와 정리 글도 "No credit card required"라고 씁니다(예시). NVIDIA 포럼에 올라온 가입 문의는 전화번호 인증 문제(지원하지 않는 국가, "exceeded limits" 에러)뿐이고 결제 이야기는 찾지 못했습니다.

공식 문서가 "카드가 필요 없다"고 직접 쓴 문장은 찾지 못했습니다. 위 내용은 공식 자료의 "free" 표현과 약관, 사용기를 함께 보고 내린 판단입니다.

6-2. 무료로 할 수 있는 것과 없는 것

FAQ 원문부터 봅니다.

All models on build.nvidia.com are free to prototype with. Once you hit rate limits, see the Deploy section to use partner endpoints or deploy a NIM locally.

즉, 프로토타입(시험 개발)용으로 무료입니다. 관련된 약관 조항은 아래 표에 모았습니다.

약관 조항내용
1.2 Trial Access Rights체험(trial) 목적으로만 제공. API와 생성 결과를 운영 환경(production)에서 쓰면 안 됨
1.4 Trial Terms and Credits따로 구독(Subscription)을 사지 않으면 내부 테스트와 평가 목적으로만 쓸 수 있음. 운영 환경에서 쓰려면 NVIDIA나 파트너 업체의 구독이 필요
4.2API나 생성 결과를 다른 사람에게 판매·배포·제공하면 안 됨
4.3개인 정보, 금융·건강·정부 정보처럼 개인정보 보호 법규의 대상이 되는 데이터를 올리면 안 됨
4.12API와 생성 결과로 이 API 서비스와 경쟁하는 제품을 만들거나 개선하면 안 됨

실제 사용에 대입하면 아래처럼 나뉩니다.

  • 해도 되는 것: 이 글처럼 혼자 또는 팀 안에서 모델을 시험해 보기, 프로토타입 만들어 보기, 모델 비교·평가
  • 하면 안 되는 것: 무료 키로 만든 챗봇을 다른 사람이 쓰는 서비스로 공개하기, 생성 결과를 팔거나 배포하기, 개인정보나 회사 기밀 넣기

운영 환경에서 쓰려면 모델 상세 페이지에 나오는 파트너 업체(OpenRouter, Together AI 등)의 유료 API, 즉 Partner Endpoint를 쓰면 됩니다. 3-3에서 본 가격표가 이것입니다.

6-3. 언제까지, 얼마나 무료인가

2026-10-04 기준 공식 자료에는 무료가 끝나는 날짜나 총사용량 상한이 나와 있지 않습니다. 숫자로 공개된 제한은 분당 요청 수뿐입니다. 이 한도도 모델과 전체 트래픽에 따라 달라질 수 있습니다(5-5의 404 항목).

  • 분당 요청 수: FAQ 기준 대부분의 모델이 분당 최대 40회(40 RPM)입니다. 내 한도는 프로필 메뉴에서 볼 수 있습니다(2-1).
  • 하루 한도: 전화번호 인증 팝업에서 인증의 혜택으로 "Unlimited API requests without daily limits"를 내세웁니다(1-3).

하지만 약관은 조건이 바뀔 수 있다고 분명히 적고 있습니다.

  • 1.4: "limited use for a limited time". 사용 횟수나 기간으로 제한할 수 있고 크레딧(Credits)을 주고 쓴 만큼 차감할 수도 있다고 되어 있습니다.
  • 1.3: 시험판(pre-release) 서비스는 언제든 중단될 수 있습니다.
  • 11.2: NVIDIA는 언제든 API 제공이나 사용자의 이용을 끝낼 수 있습니다.

실제로 3-3에서 본 것처럼 무료 엔드포인트가 끝난 모델도 있습니다. 모델 목록 카드에는 "Deprecation in 2d"처럼 종료 예정 표시가 붙기도 합니다.

인터넷에는 "가입하면 크레딧 1,000개" 같은 예전 글이 많습니다. 2024년 무렵의 크레딧 방식 설명으로 보입니다. 2026-10-04 기준 사이트 FAQ는 분당 요청 수(rate limit) 방식으로 설명합니다. 약관에는 크레딧 조항이 아직 남아 있으니, 방식은 언제든 바뀔 수 있다고 생각하는 편이 안전합니다.

확인 포인트

  • 무료 API는 프로토타입과 내부 평가용이고 다른 사람이 쓰는 서비스에는 쓸 수 없다는 점을 알았다.
  • 프롬프트에 개인정보나 회사 기밀을 넣지 않는다.
  • 무료 조건(한도, 무료 모델 목록)은 바뀔 수 있으니, 쓰기 전에 모델 페이지의 Free Endpoint: Available과 FAQ를 다시 확인한다.
  • 운영 환경으로 옮길 때는 유료 Partner Endpoint를 검토한다.

7. n8n에서 NVIDIA NIM 무료 모델 쓰기

NIM API는 OpenAI와 형식이 같습니다. 그래서 워크플로 자동화 도구 n8n의 OpenAI 자격 증명에서 주소만 바꾸면 그대로 쓸 수 있습니다. 이 섹션은 자체 호스팅한 n8n 2.40.6에서 직접 해 본 결과입니다. 버전이 다르면 화면이나 기본값이 다를 수 있습니다.

6장에서 본 것처럼 무료 API는 프로토타입과 내부 평가용입니다. n8n으로 다른 사람이 쓰는 봇이나 실제 업무 자동화를 만들면 운영 환경 사용에 해당할 수 있습니다. 혼자 시험해 보는 워크플로에만 쓰세요.

7-1. 자격 증명 만들기

  1. n8n 왼쪽 메뉴 Overview(또는 Personal) → Credentials 탭 → Create credential을 누릅니다.
  2. 검색창에 OpenAI를 입력하고 OpenAI를 고른 뒤 Continue를 누릅니다.
  3. 아래처럼 입력합니다.
항목값
API Key발급한 nvapi-… 키
Organization ID (optional)비워 둠
Base URLhttps://integrate.api.nvidia.com/v1 (기본값 https://api.openai.com/v1을 지우고 입력)
  1. 왼쪽 위의 이름(기본값 OpenAI account)을 클릭하고 알아보기 쉬운 이름(예: NVIDIA NIM)을 입력한 뒤 Enter를 누릅니다.
  2. Save를 누릅니다.

주의: "Connection tested successfully"는 키가 맞다는 뜻이 아닙니다. n8n은 저장할 때 {Base URL}/models를 불러서 연결을 시험합니다. 그런데 NIM의 모델 목록 API는 키 없이도, 틀린 키로도 응답합니다. 터미널에서 직접 보내 보면 차이가 드러납니다.

# 틀린 키로 모델 목록 → 200 (성공)
curl -s -o /dev/null -w '%{http_code}\n' -H 'Authorization: Bearer wrong-key' \
  https://integrate.api.nvidia.com/v1/models
# 틀린 키로 채팅 → 401 (인증 실패)
curl -s -o /dev/null -w '%{http_code}\n' -H 'Authorization: Bearer wrong-key' \
  -H 'Content-Type: application/json' \
  -d '{"model":"nvidia/nemotron-3.5-lightning-30b-a3b","messages":[{"role":"user","content":"hi"}],"max_tokens":5}' \
  https://integrate.api.nvidia.com/v1/chat/completions

키가 맞는지는 7-4에서 실제로 실행해 봐야 알 수 있습니다.

이름을 바꿀 때는 이름 글자를 클릭해 편집 상태로 만든 뒤 입력해야 합니다. 이 실습에서는 이름이 반영되지 않은 채 OpenAI account로 저장된 적이 있습니다. 저장한 뒤에는 Credentials 목록을 새로 고쳐서 원하는 이름으로 들어갔는지 확인하세요.

7-2. 워크플로 만들기

가장 단순한 구성으로 질문 하나를 보내 봅니다.

  • Manual Trigger: 버튼을 눌러 실행
  • Basic LLM Chain: 정해 둔 질문(프롬프트)을 모델에 보냄
  • OpenAI Chat Model: Basic LLM Chain의 Model 연결에 붙이는 하위 노드. 7-1의 자격 증명을 씀

노드를 하나씩 추가해도 되고 아래 워크플로 JSON을 복사해 n8n 새 워크플로 화면에 붙여 넣어도(Cmd+V / Ctrl+V) 됩니다. 붙여 넣은 뒤에는 Chat Model 노드를 열어 Credential에서 7-1의 자격 증명을 골라야 합니다. JSON에는 자격 증명 정보가 들어 있지 않습니다.

n8n 워크플로 JSON (펼쳐서 복사)
{
  "nodes": [
    {
      "parameters": {},
      "name": "Manual Trigger",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [0, 0]
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "NVIDIA NIM이 뭔지 한 문장으로 설명해 줘."
      },
      "name": "Basic LLM Chain",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "typeVersion": 1.9,
      "position": [260, 0]
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "id",
          "value": "nvidia/nemotron-3.5-lightning-30b-a3b"
        },
        "responsesApiEnabled": false,
        "options": {
          "extraBody": "{\"chat_template_kwargs\": {\"enable_thinking\": false}}"
        }
      },
      "name": "NVIDIA NIM Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.3,
      "position": [260, 220]
    }
  ],
  "connections": {
    "Manual Trigger": {
      "main": [[{ "node": "Basic LLM Chain", "type": "main", "index": 0 }]]
    },
    "NVIDIA NIM Chat Model": {
      "ai_languageModel": [[{ "node": "Basic LLM Chain", "type": "ai_languageModel", "index": 0 }]]
    }
  }
}

7-3. Chat Model 노드 설정

Chat Model 노드를 열고 아래처럼 설정합니다.

항목값이유
CredentialNVIDIA NIM7-1에서 만든 자격 증명
ModelBy ID → nvidia/nemotron-3.5-lightning-30b-a3b3-5의 모델 ID
Use Responses API끔이 노드(버전 1.3)는 기본으로 OpenAI의 Responses API(/v1/responses)를 씁니다. NIM은 채팅 API(/v1/chat/completions) 형식이므로 꺼야 합니다
Options → Extra Body{"chat_template_kwargs": {"enable_thinking": false}}lightning은 추론이 기본으로 켜져 있어 느립니다(4-4). 요청 본문에 이 값을 더해 추론을 끕니다
  • Extra Body는 Options → Add Option → Extra Body로 추가합니다. "OpenAI 호환 API에 요청 본문을 더 넣는" 옵션입니다.
  • Model 왼쪽의 모드를 From list로 바꾸면 NIM 모델 목록에서 고를 수도 있습니다(2026-10-07 확인). 모델 ID를 외우지 않아도 되고 검색창에 일부만 입력해도 걸러집니다.
  • 이 목록에는 채팅용이 아닌 모델(nvidia/embed-qa-4 같은 임베딩 모델)과 오래된 모델(meta/llama2-70b 등)도 80개 가까이 함께 나옵니다. Chat Model 노드에서 바로 쓸 수 있는지는 모델마다 다르니 3-5의 모델부터 고르세요.

7-4. 실행

캔버스 아래 Execute workflow를 누릅니다. 성공하면 "Workflow executed successfully" 알림이 뜨고 Basic LLM Chain 노드를 열면 답이 보입니다.

  • 이 실습에서는 클릭부터 완료 알림까지 약 2.4초 걸렸습니다(1회 측정).
  • Chat Model 노드의 Output에서 토큰 사용량을 볼 수 있습니다. 출력 토큰이 32개였습니다. 추론이 켜진 기본 상태에서는 같은 질문에 500개가 넘었으니(4-4), Extra Body로 추론이 꺼졌다는 것을 알 수 있습니다.

7-5. 모델을 Kimi K3로 바꿔 보기

같은 워크플로에서 Chat Model 노드의 설정만 바꿔 Kimi K3로 실행해 봤습니다.

항목lightningKimi K3
Model (By ID)nvidia/nemotron-3.5-lightning-30b-a3bmoonshotai/kimi-k3
Extra Body{"chat_template_kwargs": {"enable_thinking": false}}{} (Kimi K3는 추론이 항상 켜져 있고 옵션 이름도 달라서 비움)
Use Responses API끔끔
  • 이 한 번의 답은 lightning보다 구체적이었습니다. 출력은 141토큰이었습니다. Kimi K3는 이후 다시 호출했을 때는 실패가 많았습니다(3-5).
  • 응답에는 2분이 걸렸습니다. 출력이 짧은데 오래 걸린 것으로 보아, 모델 속도보다 무료 엔드포인트의 대기열 영향이 클 것으로 보입니다(원인은 확인하지 못함).
  • n8n의 각 실행 시간은 워크플로의 Executions 탭에서 볼 수 있습니다. 모델을 바꿔 가며 비교할 때 편합니다.

7-6. 주의할 점

  • 입력이 기록됩니다. Gmail, Slack, 고객 데이터처럼 다른 서비스에서 가져온 내용을 그대로 모델에 넘기는 워크플로는 만들지 마세요(3-6, 6-2).
  • 분당 요청 수 제한이 있습니다. 대부분 최대 40회이고 트래픽에 따라 더 낮을 수 있습니다. 여러 항목을 반복 처리하는 워크플로는 금방 한도에 걸립니다. 항목을 나눠 보내거나 중간에 대기(Wait)를 두세요. 이 실습에서는 한도를 넘겨 보지 않았습니다.
  • 다른 모델로 바꿀 때는 Model ID만 바꾸면 되지만 Extra Body의 추론 옵션 이름은 모델마다 다를 수 있습니다. 에러가 나면 그 모델 상세 페이지의 예시 코드를 참고하세요(5-4).

확인 포인트

  • Credentials 목록을 새로 고쳤을 때 NVIDIA NIM 자격 증명이 보인다.
  • Chat Model 노드에서 Use Responses API를 껐다.
  • Execute workflow로 실행해 Basic LLM Chain의 Output에 답이 나왔다. 연결 테스트 성공 표시만 보고 끝내지 않았다.

8. 무료 모델 직접 비교 – nemotron과 GLM-5.3

3-5의 추천 모델 중 가장 가벼운 lightning과 GLM-5.3을 같은 질문으로 비교했습니다. 2026-10 기준 공개 자료를 조사해 보니 GLM-5.3은 조사한 무료 모델 중 외부 벤치마크 종합 점수(Artificial Analysis Intelligence Index v4.3.2)가 가장 높았습니다. 이 점수는 AA가 GLM-5.3 (Max) 설정으로 잰 값이라, NIM 무료 엔드포인트의 기본 설정과 같은 조건인지는 확인하지 않았습니다.

처음에는 Kimi K3로 비교하려 했지만 무료 엔드포인트에서 응답이 불안정해서(3-5) GLM-5.3으로 바꿨습니다.

8-1. 비교 방법

아래 compare_models.py는 질문 3개를 여러 모델에 차례로 보내고 응답 시간·토큰 수·답을 JSON 파일로 저장합니다. 4장에서 만든 nim-chatbot/ 폴더에 compare_models.py로 저장한 뒤 그 폴더에서 실행합니다. 결과 파일 이름이 같으면 덮어쓰므로 실행할 때마다 이름을 바꾸세요.

compare_models.py 전체 코드 (펼쳐서 복사)
"""같은 질문을 두 모델에 보내고 응답 시간·토큰·답변을 비교한다.

실행: uv run compare_models.py [결과 JSON 경로] [--models lightning,glm-5.3] [--prompts 1,3]
nemotron 계열 비교: --models lightning,super,ultra,nano-omni
"""

import argparse
import json
import os
import time

import openai
from dotenv import find_dotenv, load_dotenv
from openai import OpenAI

MODELS = [
    # (이름, 모델 ID, 추가 옵션) — n8n 노드 설정과 같게 맞춘다
    ("lightning", "nvidia/nemotron-3.5-lightning-30b-a3b",
     {"chat_template_kwargs": {"enable_thinking": False}}),
    ("super", "nvidia/nemotron-3-super-120b-a12b",
     {"chat_template_kwargs": {"enable_thinking": False}}),
    ("ultra", "nvidia/nemotron-3-ultra-550b-a55b",
     {"chat_template_kwargs": {"enable_thinking": False}}),
    ("nano-omni", "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning",
     {"chat_template_kwargs": {"enable_thinking": False}}),
    ("glm-5.3", "z-ai/glm-5.3", None),        # 기본값(추론 켜짐) 그대로
    ("kimi-k3", "moonshotai/kimi-k3", None),  # 추론이 항상 켜져 있는 모델. --models로 골라야 실행
]
DEFAULT_MODELS = ["lightning", "glm-5.3"]

PROMPTS = [
    "NVIDIA NIM이 뭔지 한 문장으로 설명해 줘.",
    "사과 3개에 1,200원이고 배 2개에 1,500원이야. 사과 5개와 배 4개를 사면 모두 얼마야? 계산 과정을 짧게 보여 줘.",
    "파이썬으로 리스트에서 중복을 제거하되 원래 순서를 유지하는 함수를 짧게 작성해 줘.",
]

parser = argparse.ArgumentParser()
parser.add_argument("out", nargs="?", default="compare_results.json")
parser.add_argument("--models", help="쉼표로 구분한 모델 이름 (기본: lightning,glm-5.3)")
parser.add_argument("--prompts", help="쉼표로 구분한 질문 번호 (예: 1,3)")
args = parser.parse_args()
model_names = args.models.split(",") if args.models else DEFAULT_MODELS
prompt_nos = [int(n) for n in args.prompts.split(",")] if args.prompts else range(1, len(PROMPTS) + 1)

load_dotenv(find_dotenv())
client = OpenAI(
    base_url="https://integrate.api.nvidia.com/v1",
    api_key=os.environ["NVIDIA_API_KEY"],
    timeout=300,     # SDK 타임아웃 300초. 전체 실행이 5분 안에 끝나는 것은 보장되지 않음(715초 뒤 504 사례)
    max_retries=0,   # 재시도하면 시간이 섞이므로 끈다
)

results = []
for name, model, extra in MODELS:
    if name not in model_names:
        continue
    for i in prompt_nos:
        prompt = PROMPTS[i - 1]
        start = time.time()
        row = {"model": name, "prompt_no": i}
        try:
            r = client.chat.completions.create(
                model=model,
                messages=[{"role": "user", "content": prompt}],
                max_tokens=4096,
                extra_body=extra,
            )
            msg = r.choices[0].message
            reasoning = (msg.model_extra or {}).get("reasoning_content") or ""
            row.update(
                seconds=round(time.time() - start, 1),
                prompt_tokens=r.usage.prompt_tokens,
                completion_tokens=r.usage.completion_tokens,
                reasoning_chars=len(reasoning),
                finish_reason=r.choices[0].finish_reason,
                answer=msg.content,
                reasoning=reasoning,         # 답이 비었을 때 원인을 보려고 함께 저장
                raw_message=msg.model_dump(),  # 응답 메시지의 모든 필드
            )
        except openai.APIError as e:
            row.update(seconds=round(time.time() - start, 1), error=f"{type(e).__name__}: {e}")
        results.append(row)
        status = "ERROR" if "error" in row else ("EMPTY" if not row.get("answer") else "ok")
        print(f"[{name}] Q{i} {row['seconds']}s {status}", flush=True)

with open(args.out, "w", encoding="utf-8") as f:
    json.dump(results, f, ensure_ascii=False, indent=2)
print("saved:", args.out)
# lightning과 GLM-5.3에 질문 3개씩 (호출 6번)
uv run compare_models.py results-glm.json
# 일부만 다시 돌리기 (예: GLM-5.3의 1번과 3번 질문)
uv run compare_models.py rerun.json --models glm-5.3 --prompts 1,3
  • lightning은 추론을 끄고(enable_thinking: False) 호출합니다. 7장의 n8n 노드 설정과 같습니다.
  • GLM-5.3은 기본값으로 호출합니다. 기본값에서는 추론이 켜져 있고 추론 내용이 reasoning_content로 따로 옵니다. 이 모델의 추론 끄기 옵션은 시험해 보지 않았습니다.
  • 시간을 정확히 재려고 재시도는 끄고(max_retries=0), SDK 타임아웃을 300초로 잡았습니다. 그런데 Kimi K3 재실행에서는 715초 뒤에 504로 끝난 적이 있습니다. 5분 안에 반드시 끝난다고 보장되지는 않습니다(원인은 알아내지 못함).
  • 결과 파일에는 답(answer)과 함께 추론 내용(reasoning)과 응답 메시지 전체(raw_message)가 저장됩니다.

질문은 다음 세 가지입니다.

  1. 사실 설명: "NVIDIA NIM이 뭔지 한 문장으로 설명해 줘."
  2. 계산: "사과 3개에 1,200원이고 배 2개에 1,500원이야. 사과 5개와 배 4개를 사면 모두 얼마야? 계산 과정을 짧게 보여 줘." (정답 5,000원)
  3. 코딩: "파이썬으로 리스트에서 중복을 제거하되 원래 순서를 유지하는 함수를 짧게 작성해 줘."

8-2. 결과

2026-10-06 09:22~09:32에 질문마다 1번씩 실행했습니다. 6번 모두 답이 왔습니다.

질문lightning (추론 끔)GLM-5.3 (추론 켜짐)
① 사실 설명2.7초. "복잡한 AI 모델을 쉽게 사용할 수 있게 만든 엔비디아의 경량 전용 컨테이너" — 핵심(추론용 마이크로서비스, 표준 API)이 빠지고 뭉뚱그려짐163.8초. 추론 엔진(TensorRT-LLM 등), OpenAI 호환 API, 컨테이너형 마이크로서비스, 클라우드·온프레미스 배포까지 정확하게 설명
② 계산8.5초. 정답(5,000원), 단계별 풀이126.8초. 정답(5,000원), 더 간결
③ 코딩3.8초. 정답(list(dict.fromkeys(lst))), 동작 설명·예시, Python 3.6 이하 주의267.1초. 정답(같은 방법), 예시, 해시할 수 없는 값이 섞인 경우의 대안 함수까지
합계15.0초, 출력 432토큰557.7초(약 9분 18초), 출력 1,551토큰
  • 차이는 사실 설명(①)에서 났습니다. 계산(②)과 코딩(③)처럼 답이 분명한 질문은 둘 다 맞혔습니다. lightning은 10-04 실행에서도 ①을 "연구원들이 만든 소프트웨어 패키지"처럼 부정확하게 답했습니다.
  • GLM-5.3이 느린 이유: 출력 토큰에 추론이 포함돼 세 질문 합계가 lightning의 약 3.6배였습니다(추론 715~1,654자). 혼잡으로 기다린 시간도 있었을 수 있지만 생성 시간과 대기 시간을 따로 재지는 않았습니다.

8-3. nemotron 계열끼리 비교

다음 날(2026-10-07)에는 GLM-5.3이 404만 돌려줬습니다. 같은 시각 대기열이 크게 늘어 있어 혼잡이 원인일 가능성이 높습니다(5-5의 404 항목). 그래서 NVIDIA의 nemotron 모델 4개를 같은 질문 3개로 비교했습니다. 이 모델들은 그때 대기열이 비어 있었습니다. 네 모델 모두 lightning과 같이 추론을 끄고(enable_thinking: False) 호출했습니다.

uv run compare_models.py results-nemotron.json --models lightning,super,ultra,nano-omni
이름모델 ID특징 (상세 페이지 기준)
lightningnvidia/nemotron-3.5-lightning-30b-a3b30B (활성 3B), 텍스트
supernvidia/nemotron-3-super-120b-a12b124B, 텍스트
ultranvidia/nemotron-3-ultra-550b-a55b561B, 텍스트
nano-omninvidia/nemotron-3-nano-omni-30b-a3b-reasoning33B, 텍스트·이미지·영상·음성 입력, 컨텍스트 262K
질문lightningsuperultranano-omni
① 사실 설명2.0초, "AI 모델 미들웨어"라고 해서 다소 부정확0.8초, 정확2.0초, 정확1.5초(다시 실행), 정확
② 계산43.4초, 정답1.0초, 정답7.9초(다시 실행), 정답3.2초, 정답
③ 코딩5.2초, 정답6.7초, 정답10.8초, 정답12.6초, 정답
성공 응답 시간 합계50.6초, 445토큰8.5초, 583토큰20.7초, 539토큰17.3초, 521토큰
  • 질문마다 1번씩 보냈고 실패한 2개만 몇 분 뒤 1번 더 보냈습니다. 합계에는 실패한 요청의 시간(0.3초, 0.2초)을 넣지 않았습니다.
  • "정확"은 추론용 컨테이너형 마이크로서비스라는 핵심을 짚었다는 뜻입니다.
  • super가 가장 빠르고 세 질문을 모두 정확하게 답했습니다. lightning이 약했던 사실 설명(①)도 super, ultra, nano-omni는 정확했습니다.
  • lightning의 ②는 하루 전에는 8.5초였는데 이번에는 43.4초가 걸렸습니다. 같은 모델도 때에 따라 이만큼 차이가 납니다.
  • 실패한 2번은 몇 분 뒤 같은 질문을 다시 보내니 둘 다 정상으로 답했습니다. 실패할 때 받은 에러 메시지는 아래 두 줄입니다.
    • ultra ②: 503 Service temporarily overloaded
    • nano-omni ①: 503 ResourceExhausted: Worker local total request limit reached (16/16)
  • nemotron도 순간적으로 과부하가 걸립니다. 이번 두 번은 몇 분씩 멈추지 않고 바로 실패했다가 다시 보내니 성공했습니다. 다른 시간대에도 그렇다는 보장은 없습니다. 포럼에는 nemotron에서 90초 시간 초과가 났다는 보고도 있습니다.
  • nano-omni는 예시 코드에 reasoning_budget만 있지만 enable_thinking: False로 추론이 꺼졌습니다(추론 0자).

8-4. 어떻게 고를까

상황추천이유
챗봇, n8n 자동화, 이 글의 실습처럼 바로 답이 필요한 경우super 또는 lightning (추론 끔)대부분 몇 초 안에 답이 왔습니다. 10-07 비교에서는 super가 더 빠르고 사실 설명도 정확했습니다
사실 설명처럼 정확도가 중요하고 몇 분 기다려도 되는 경우GLM-5.3 (붐비지 않을 때)사실 설명이 가장 꼼꼼했습니다. 다만 대기열이 길었던 10-07에는 답을 받지 못했습니다
  • lightning을 쓸 때는 사실을 묻는 답을 그대로 믿지 말고 한 번 더 따져 보세요.
  • GLM-5.3은 질문 하나에 2~4분이 걸렸습니다. 10-07에는 대기열이 크게 늘어난 상태에서 404가 났습니다. n8n에서 쓴다면 노드의 Timeout을 넉넉히 잡고 실패하면 nemotron 모델로 바꾸세요.
  • 모든 결과는 질문마다 성공한 응답 1번을 잰 값입니다(8-3의 실패 2건만 다시 실행). 무료 엔드포인트 상태는 시간대에 따라 크게 달라질 수 있으니 직접 몇 번 돌려 보고 판단하세요.

자주 묻는 질문

NVIDIA NIM API는 정말 무료인가요?

네, 프로토타입 용도로는 무료입니다. Help Center FAQ에 따르면 build.nvidia.com의 모델은 프로토타이핑에 무료이고 토큰 단위 과금이 없습니다. 약관상으로는 체험과 내부 평가 목적으로만 쓸 수 있습니다. 조건도 바뀔 수 있습니다. 자세한 내용은 무료 조건 정리에 있습니다.

가입할 때 신용카드나 결제 정보가 필요한가요?

이번 실습에서는 가입부터 키 발급, API 호출까지 결제 정보를 입력한 적이 없습니다. 프로필 메뉴에도 결제(Billing) 항목이 없습니다. 대신 전화번호 인증은 꼭 해야 합니다. 공식 문서에 "카드가 필요 없다"고 직접 쓴 문장은 찾지 못했다는 점도 함께 적어 둡니다.

무료 한도는 얼마나 되나요?

FAQ와 계정 화면에는 대부분 모델이 분당 최대 40회(40 RPM)로 안내됩니다. 무료가 끝나는 날짜나 총사용량 상한은 공개돼 있지 않습니다. NVIDIA는 포럼 고정 공지에서 무료 한도가 모델, 사용 방식, 전체 트래픽에 따라 달라지고 올려 줄 수 없다고 밝혔습니다.

어떤 무료 모델부터 써 보면 좋을까요?

nvidia/nemotron-3.5-lightning-30b-a3b나 nvidia/nemotron-3-super-120b-a12b를 권합니다. 이 글의 예제는 lightning 기준입니다. 2026-10-07 비교에서는 super가 가장 빨랐을 뿐 아니라 세 질문에 모두 정확하게 답했습니다. GLM-5.3은 사실 설명이 가장 꼼꼼했지만 붐비는 날에는 답을 받지 못했습니다.

API를 호출했는데 404가 나거나 응답이 없어요

먼저 모델 ID 철자를 확인하세요. ID가 맞는데도 404가 나거나 응답이 없다면 그 모델에 요청이 몰렸을 가능성이 있습니다. 시간을 두고 다시 시도하거나 대기열이 비어 있는 nemotron 계열로 바꿔 보세요. 실제 사례와 확인 방법은 문제 해결에 정리했습니다.

무료 API로 만든 챗봇을 서비스로 공개해도 되나요?

안 됩니다. 약관은 체험 목적으로만 제공하고 운영 환경에서 쓰거나 생성 결과를 다른 사람에게 제공하는 것을 금지합니다(1.2, 1.4, 4.2항). 서비스로 공개하려면 모델 페이지의 유료 Partner Endpoint를 검토하세요.

마무리

이 글에서 직접 해 본 일을 순서대로 다시 적습니다.

  1. build.nvidia.com에 가입하고 전화번호 인증 후 API 키를 받았습니다. 결제 정보는 입력하지 않았습니다.
  2. 무료로 호출할 수 있는 모델을 찾고 상세 페이지에서 모델 ID를 확인했습니다.
  3. uv로 Python 환경을 만들고 OpenAI SDK의 주소만 바꿔 NIM API를 호출했습니다. lightning은 추론이 기본으로 켜져 있어서 끄면 훨씬 빨라졌습니다.
  4. 대화를 기억하는 터미널 챗봇을 만들었습니다.
  5. 무료 API는 프로토타입·내부 평가용이고 입력이 기록된다는 조건을 확인했습니다.
  6. 같은 키를 n8n에서도 썼습니다. 같은 질문으로 lightning과 GLM-5.3, nemotron 모델 4개를 비교했습니다. 빠른 답이 필요하면 super나 lightning, 정확한 설명이 필요하고 기다릴 수 있으면 GLM-5.3이 맞았습니다. GLM-5.3은 대기열이 길었던 날에는 답을 받지 못했습니다.

다음에는 이런 것을 해 볼 만합니다.

  • 이미지 입력 모델(deepseek-ai/deepseek-v4.1-flash 등)로 이미지 설명 받아 보기
  • 다른 시간대에 8장의 비교를 몇 번 더 돌려 보기. 이 글의 결과는 한 번씩 잰 값이라 참고용입니다
  • 운영 환경이 필요해지면 유료 Partner Endpoint 검토하기

함께 보면 좋은 글

무료 클라우드 API 말고 내 컴퓨터에서 LLM을 돌리는 방법, n8n 자동화 사례는 아래 글에 정리했습니다.

NVIDIA NIM 무료 API 사용법 [2026] – 가입부터 챗봇·n8n 연동·모델 비교까지

답글 남기기

Scroll to top