AI 에이전트는 단순한 질의응답 시스템에서 벗어나, 파일을 읽고 API를 호출하며 다단계 워크플로를 직접 수행하는 장시간 가동형 자율 어시스턴트로 빠르게 진화하고 있습니다. 그러나 적절한 격리 장치 없이 에이전트에게 코드 실행과 도구 사용을 맡기는 일은 적지 않은 위험을 동반하는데요, 특히 제3자 클라우드 인프라를 사용하는 경우 데이터 프라이버시와 제어권 측면에서 우려가 더 커질 수밖에 없습니다.
NVIDIA NemoClaw는 이런 고민을 해소해 주는 오픈소스 레퍼런스 스택입니다. NVIDIA OpenShell을 오케스트레이션해 OpenClaw를 구동하는 구조죠. OpenClaw는 메시징 플랫폼을 NVIDIA Nemotron 같은 오픈 모델 기반 AI 코딩 에이전트와 연결해 주는 자체 호스팅 게이트웨이입니다. NemoClaw는 여기에 가이드형 온보딩, 라이프사이클 관리, 이미지 강화, 그리고 버전 관리되는 블루프린트까지 더해, 모델 추론부터 더 안전하고 인터랙티브한 에이전트 배포에 이르는 완결된 파이프라인을 제공합니다.
이번 튜토리얼에서는 NVIDIA DGX Spark에서 NemoClaw를 배포하는 전 과정을 단계별로 안내합니다. 런타임 환경 구성과 모델 로컬 서빙부터 NemoClaw 스택 설치, 그리고 원격 접속을 위한 Telegram 연동까지 차례로 살펴보면서, 사용자의 하드웨어 위에서만 동작하면서도 Telegram 클라이언트만 있으면 어디서든 접근할 수 있는 로컬 샌드박스형 AI 어시스턴트를 직접 만들어 봅니다.
모델·코드 바로가기
본격적으로 시작하기 전에, 튜토리얼 진행에 필요한 자료를 미리 확인해 두면 좋습니다.
🧠 소프트웨어 및 모델
- NemoClaw with NVIDIA Nemotron 3 Super and Telegram on DGX Spark: 로컬 추론 환경에서 NemoClaw를 처음부터 끝까지 설정하는 종합 가이드입니다.
- NVIDIA Nemotron 3 Super 120B on NVIDIA Build: 이번 튜토리얼에서 사용할 모델 페이지입니다.
🛠️ 코드와 문서
- NVIDIA NemoClaw 문서: 구성·정책·고급 배포까지 다루는 종합 레퍼런스입니다.
- NVIDIA NemoClaw GitHub: 소스 코드와 커뮤니티 기여 자료가 모여 있습니다.
- NVIDIA DGX Spark: 하드웨어 사양과 개발자 리소스를 확인할 수 있습니다.
사전 준비 사항
전체 설치 절차는 DGX Spark Playbook for NemoClaw에서 확인할 수 있고, 별도의 하드웨어 없이도 바로 시작해 볼 수 있습니다.
DGX Spark 이외의 디바이스를 사용한다면 NemoClaw는 문서의 대체 배포 항목에 안내된 기기에서 검증된 상태이며, API/vLLM 호환성을 함께 확인해 주세요.
본격적인 설치에 앞서 다음 요건을 충족하고 있는지 점검합니다.
- 하드웨어: 최신 NVIDIA 드라이버가 설치된 Ubuntu 24.04 LTS 기반 DGX Spark(GB10) 시스템.
- Docker: 28.x 이상 버전, NVIDIA Container Runtime 구성(다음 절에서 안내).
- Ollama: 로컬 모델 서빙 엔진으로 설치.
- Telegram 봇 토큰: Telegram의 @BotFather를 통해 발급(Telegram 연동 절에서 상세 안내).
소요 시간: 능동적인 설치 작업에 약 20~30분, 그리고 초기 모델 다운로드(약 87GB)에 네트워크 환경에 따라 15~30분 정도가 추가로 필요합니다.
다음 명령으로 시스템 준비 상태를 확인할 수 있습니다.
head -n 2 /etc/os-release # Expected: Ubuntu 24.04
nvidia-smi # Expected: NVIDIA GB10 GPU
docker info --format '{{.ServerVersion}}' # Expected: 28.x+
NemoClaw 구성 요소
샌드박스형 어시스턴트를 만들기 전에, 이 환경에서 사용되는 소프트웨어 구성 요소를 먼저 짚고 넘어가는 것이 좋습니다.
| 구성 요소 | 정의 | 역할 | 적합한 사용 시점 |
|---|---|---|---|
| NVIDIA NemoClaw | 오케스트레이션 계층과 인스톨러를 포함한 레퍼런스 스택 | OpenClaw와 OpenShell을 정책 및 추론과 함께 설치합니다. | 더 안전한 샌드박스 위에서 상시 가동형 어시스턴트를 가장 빠르게 만들고자 할 때. |
| NVIDIA OpenShell | 보안 런타임 겸 게이트웨이 | 안전 경계(샌드박싱)를 강제하고 자격 증명을 관리하며, 네트워크/API 호출을 프록시합니다. | 민감 정보를 노출하지 않거나 자유로운 웹 접근을 차단해야 하는 “차단형 정원” 환경이 필요할 때. |
| OpenClaw | 멀티 채널 에이전트 프레임워크 | 샌드박스 안에서 동작하면서 Slack/Discord 같은 채팅 플랫폼·메모리·도구 연동을 관리합니다. | 메시징 앱과 영구 메모리에 연결된 장시간 가동형 에이전트가 필요할 때. |
| NVIDIA Nemotron 3 Super 120B | 에이전트 최적화 LLM(파라미터 120B) | 높은 지시 추종 능력과 다단계 추론 역량을 갖춘 “두뇌” 역할을 합니다. | 복잡한 워크플로를 따라가며 도구를 다뤄야 하는 프로덕션급 어시스턴트가 필요할 때. |
| NVIDIA NIM / Ollama | 추론 배포 엔진 | Nemotron 모델을 로컬에서 구동합니다. | GPU를 보유한 상태에서 LLM을 로컬로 직접 실행하고자 할 때. |
표 1. NVIDIA NemoClaw 스택의 아키텍처 구성 요소.
보안 안내: OpenShell이 견고한 격리 기능을 제공하지만, 어떤 샌드박스도 고도화된 프롬프트 인젝션 공격을 완전히 막아 주지는 못합니다. 새로운 도구를 시험할 때는 가급적 격리된 시스템에 배포하는 편이 안전합니다.
이제 본격적으로 시작해 보겠습니다.
런타임 환경 구성
DGX Spark에서 GPU 가속 컨테이너를 적절한 격리 설정과 함께 실행하려면 몇 가지 Docker 구성 단계가 필요합니다. 가장 먼저 Docker에 NVIDIA Container Runtime을 등록합니다.
sudo nvidia-ctk runtime configure --runtime=docker
다음으로 cgroup 네임스페이스 모드를 host로 설정합니다. DGX Spark에서 컨테이너 워크로드가 정상 동작하기 위해 반드시 필요한 설정이죠.
sudo python3 -c "
import json, os
path = '/etc/docker/daemon.json'
d = json.load(open(path)) if os.path.exists(path) else {}
d['default-cgroupns-mode'] = 'host'
json.dump(d, open(path, 'w'), indent=2)
"
변경 사항을 적용하기 위해 Docker를 재시작하고, NVIDIA 런타임이 정상 작동하는지 확인합니다.
sudo systemctl restart docker
docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
출력 결과에 GB10 GPU가 표시되어야 합니다. 이후 Docker 명령에서 매번 sudo를 입력하지 않아도 되도록, 현재 사용자를 Docker 그룹에 추가합니다.
sudo usermod -aG docker $USER
newgrp docker
Ollama 설치
Ollama는 대규모 언어 모델을 로컬에서 손쉽게 구동할 수 있게 해 주는 경량 모델 서빙 엔진입니다. 공식 설치 스크립트로 빠르게 설치할 수 있습니다.
curl -fsSL https://ollama.com/install.sh | sh
Ollama는 기본적으로 localhost에서만 수신 대기합니다. 그러나 NemoClaw 에이전트는 자체 네트워크 네임스페이스를 가진 샌드박스 안에서 동작하므로, 네트워크 경계를 넘어 Ollama에 도달해야 하는데요. 모든 인터페이스에서 수신하도록 다음과 같이 설정해 줍니다.
sudo mkdir -p /etc/systemd/system/ollama.service.d
printf '[Service]\nEnvironment="OLLAMA_HOST=0.0.0.0"\n' | \
sudo tee /etc/systemd/system/ollama.service.d/override.conf
sudo systemctl daemon-reload
sudo systemctl restart ollama
Ollama가 모든 인터페이스에서 정상 동작하는지 확인합니다.
curl http://0.0.0.0:11434
중요: Ollama는 반드시 systemd를 통해 시작해야 합니다. 수동으로 시작된 Ollama 프로세스는 위에서 설정한 OLLAMA_HOST=0.0.0.0 오버라이드를 반영하지 못해, NemoClaw 샌드박스가 추론 서버에 도달하지 못합니다.
sudo systemctl restart ollama
이제 Nemotron 3 Super 120B 모델을 내려받습니다. 다운로드 용량은 약 87GB에 달하므로, 충분한 디스크 여유와 네트워크 시간을 미리 확보해 두는 것이 좋습니다.
ollama pull nemotron-3-super:120b
다운로드가 끝나면 첫 에이전트 응답 시 발생하는 콜드 스타트 지연을 피하기 위해 모델 가중치를 GPU 메모리에 미리 로딩해 둡니다.
ollama run nemotron-3-super:120b
모델 로딩이 완료되어 프롬프트가 표시되면 /bye로 세션을 종료합니다. 가중치는 메모리에 캐시된 상태로 유지되죠. 모델이 정상 등록되었는지 확인합니다.
ollama list
# You should see something like
NAME ID SIZE MODIFIED
nemotron-3-super:120b 95acc78b3ffd 86 GB 2 weeks ago
NemoClaw 설치
토대가 모두 마련됐다면, 이제 단 한 줄의 명령으로 NemoClaw를 설치할 수 있습니다.
curl -fsSL https://www.nvidia.com/nemoclaw.sh | bash
설치 스크립트는 Node.js 의존성, OpenShell 런타임, NemoClaw CLI를 차례로 구성한 뒤 온보딩 마법사를 띄워 줍니다. 마법사에서는 다음 항목을 차례로 물어봅니다.
- 샌드박스 이름: 하이픈을 포함한 영문 소문자·숫자 조합으로 지정합니다(예:
my-assistant). 이 이름은 이후 모든 명령에서 사용됩니다. - 추론 제공자: 로컬 Ollama로 추론을 라우팅하려면 Local Ollama(옵션 7)를 선택합니다.
- 모델: nemotron-3-super:120b(옵션 1)를 선택합니다.
- 정책 프리셋: 기본 정책을 그대로 적용하려면 Y를 입력합니다. 이 프리셋은 샌드박스의 파일 시스템·네트워크 제한을 자동으로 구성해 줍니다.
- Telegram 연동: 온보딩 마법사 5단계에서 Telegram 봇을 함께 구성할 수도 있습니다.
온보딩이 마무리되면 인스톨러가 토큰화된 Web UI URL을 http://127.0.0.1:18789/#token=<long-token-here> 형태로 출력해 줍니다. 이 URL은 추후 웹 대시보드 접속에 반드시 필요하며 한 번 지나가면 다시 표시되지 않으므로, 잊지 말고 별도로 기록해 둡니다.
설치 직후 nemoclaw 명령이 인식되지 않는다면, 다음 명령으로 셸 환경을 다시 로드해 주세요.
source ~/.bashrc
설치 후 동작 확인
먼저 샌드박스에 접속해, 에이전트가 추론 백엔드에 정상적으로 닿는지 확인합니다.
nemoclaw my-assistant connect
이 명령은 모델 정보를 반환해, 샌드박스 환경이 Ollama와 통신할 수 있음을 알려 줍니다. 다음으로 에이전트로 테스트 메시지를 한 번 보내 봅니다.
openclaw agent --agent main --local -m "hello" --session-id test
구성이 정상이라면 NVIDIA Nemotron 3 Super가 응답을 생성합니다. 다만 120B 모델 추론은 한 번 응답하는 데 통상 30~90초 정도가 걸리는데요, 이는 이 정도 규모의 모델을 로컬에서 추론할 때 자연스럽게 나타나는 시간입니다.
대화형 테스트가 더 편한 분들을 위해 인터랙티브 터미널 UI도 함께 제공됩니다.
openclaw tui
사용을 마치고 터미널 UI를 빠져나갈 때는 Ctrl+C를 누르면 됩니다.
Web UI 접속
로컬에서 웹 대시보드에 접속하려면, 샌드박스를 빠져나간 뒤 온보딩 단계에서 기록해 둔 토큰화 URL을 브라우저로 엽니다.
exit
이후 http://127.0.0.1:18789/#token=<long-token-here>를 브라우저에 입력합니다.
다른 머신에서 원격 접속하는 경우. DGX Spark에 직접 접속하지 않고 네트워크를 통해 접근한다면 추가 설정이 조금 필요합니다. 먼저 Spark의 IP 주소를 확인합니다.
hostname -I | awk '{print $1}'
Spark 터미널 세션에서 포트 포워딩을 시작합니다.
openshell forward start 18789 my-assistant --background
원격 머신에서 Spark로 SSH 터널을 엽니다.
ssh -L 18789:127.0.0.1:18789 <your-user>@<your-spark-ip>
터널이 활성화된 상태에서 원격 머신 브라우저에 http://127.0.0.1:18789/#token=<long-token-here>를 열어 보세요.
참고: 반드시 127.0.0.1로 접속해야 합니다. localhost로 접속하면 “origin not allowed” 오류가 발생할 수 있습니다.
Telegram 연동
Telegram 연동을 마치면, 로컬 터미널을 벗어나서도 Telegram 클라이언트가 설치된 모든 기기에서 어시스턴트에 접근할 수 있게 됩니다.
Telegram 봇 만들기
Telegram을 열고 @BotFather를 검색해 대화를 시작한 뒤, /newbot 명령을 실행합니다. @BotFather가 봇 이름 정하는 과정을 안내해 주고 마지막에 API 토큰을 발급해 줍니다. 이 토큰은 이후 구성 단계에서 사용해야 하므로 잘 보관해 두시기 바랍니다.
참고: 앞서 NemoClaw 온보딩 마법사에서 Telegram을 함께 설정했다면, 이미 Telegram이 샌드박스 안에서 동작하고 있는 상태죠.
온보딩 단계에서 Telegram을 구성하지 않았다면, 다음과 같이 토큰을 설정해 둔 상태에서 온보딩을 다시 실행합니다. Telegram이 포함된 샌드박스가 새로 빌드되며, 봇 토큰은 OpenShell 게이트웨이에 등록되어 샌드박스 내부로 직접 들어가지는 않습니다.
export TELEGRAM_BOT_TOKEN=<your-bot-token>
nemoclaw onboard
연동 동작 확인
Telegram을 열어 봇을 찾고 메시지를 보내 보세요. 첫 접촉 시 OpenClaw가 페어링을 요구하므로, 봇이 페어링 코드를 함께 응답으로 보내 줍니다.
OpenClaw: access not configured.
Your Telegram user id: <your-id>
Pairing code: <CODE>
샌드박스 내부에서 다음 명령으로 페어링을 승인합니다.
nemoclaw my-assistant connect
openclaw pairing approve telegram <CODE>
exit
이후 Telegram에서 다시 메시지를 보내면, 추론 지연 시간이 지난 뒤 NVIDIA Nemotron 3 Super가 생성한 응답이 돌아오는 것을 확인할 수 있습니다.
여기까지 진행했다면 배포가 마무리된 셈입니다. AI 어시스턴트가 전적으로 NVIDIA DGX Spark 위에서 동작하고, OpenShell이 격리해 주며, 120B 오픈 모델이 두뇌 역할을 담당하고, Telegram을 통해 원격에서도 사용할 수 있는 환경이 만들어졌습니다. 모든 추론은 디바이스 안에서만 이루어지므로 외부로 데이터가 빠져나가지 않고, 런타임 중 외부 서비스 의존성도 없습니다.
배포에 자주 쓰이는 명령어
| 명령어 | 설명 |
|---|---|
nemoclaw my-assistant connect |
샌드박스 내부의 셸 세션을 엽니다. |
nemoclaw my-assistant status |
샌드박스 상태를 표시합니다. |
nemoclaw my-assistant logs --follow |
실시간 샌드박스 로그를 스트리밍합니다. |
nemoclaw list |
구성된 모든 샌드박스를 나열합니다. |
nemoclaw start / nemoclaw stop |
Telegram 브리지 등 보조 서비스를 시작·중지합니다. |
openshell forward start 18789 my-assistant --background |
원격 Web UI 접근을 위한 포트 포워딩을 활성화합니다. |
표 2. NemoClaw 에이전트 환경을 오케스트레이션·모니터링·접근하는 데 사용하는 명령어 모음.
깔끔한 제거를 위한 명령어
NemoClaw는 정리·제거를 위한 인스톨러를 ~/.nemoclaw/source/uninstall.sh 위치에 함께 제공합니다. 제거 시 사용 가능한 플래그와 흔히 발생하는 문제 해결 방법은 설치 안내 페이지를 참고해 주세요.
정책 승인으로 에이전트 접근 범위 확장하기
기본 설정에서 샌드박스는 에이전트의 외부 네트워크 접근을 제한된 엔드포인트로만 허용합니다. 따라서 웹페이지를 가져오거나 외부 API를 호출하는 등 외부 서비스가 필요한 작업을 에이전트에 요청하면, OpenShell이 요청을 차단하고 에이전트는 네트워크 접근이 불가능하다는 답변을 돌려주죠.
이 동작을 직접 확인하고 싶다면, 호스트 터미널 하나에서 OpenShell TUI를 열어 보세요.
openshell term
두 번째 터미널에서는 샌드박스에 접속해 대화를 시작합니다.
openclaw tui
에이전트에게 “use curl to fetch https://httpbin.org/get” 같은 작업을 요청해 봅니다.
에이전트가 요청을 시도하면 OpenShell이 이를 차단하고, TUI에는 차단된 연결의 대상 호스트·포트, 그리고 요청을 시도한 바이너리까지 함께 표시됩니다.
TUI에서는 해당 요청을 현재 세션에 한해 승인할 수도 있고, 거부하여 엔드포인트를 계속 차단된 상태로 유지할 수도 있습니다.
특정 엔드포인트를 영구적으로 허용하려면 호스트에서 정책 프리셋을 추가합니다.
nemoclaw my-assistant policy-add
이 승인 흐름 덕분에 기본 정책을 직접 수정하거나 샌드박스를 재시작하지 않아도, 에이전트의 접근 범위를 실시간으로 들여다보고 통제할 수 있습니다.
지금 시작해 보세요
오늘부터 NVIDIA NemoClaw로 자신만의 상시 가동형 로컬 AI 에이전트를 직접 만들어 보실 수 있습니다.
NVIDIA NemoClaw의 최신 소식을 받아 보려면 NVIDIA news를 구독하고, LinkedIn, X, Discord, YouTube에서 NVIDIA AI를 팔로우해 보세요.
시작에 필요한 자료는 NemoClaw 페이지에서 확인할 수 있습니다. GitHub에서 NemoClaw를 탐색하고, build.nvidia.com에서 제공되는 Playbook도 살펴보세요.
Nemotron 라이브 스트림, 튜토리얼, 그리고 NVIDIA 포럼과 Discord의 개발자 커뮤니티와 함께해 보세요.