Run Hermes Agent with a self-hosted LLM on a Massed Compute RTX PRO 6000 Blackwell.

Run Hermes Agent with a Self-Hosted LLM on NVIDIA GPUs (2026 Guide)

Hermes Agent is a local orchestrator: profiles, Kanban, and a gateway that dispatches worker tasks. The GPU is not for that control plane. The GPU is for the self-hosted model Hermes calls over OpenAI-compatible /v1. This guide launches a Massed Compute GPU VM, binds Ollama to loopback, points Hermes at http://127.0.0.1:11434/v1, and runs a real multi-step Kanban swarm against a private 70B Llama.

GPUNVIDIALLMInference

Search intent is self-host Hermes Agent with a local LLM — not a hosted API key. This was retested on an NVIDIA RTX PRO 6000 Blackwell (96 GB) on August 26, 2026.

OpenClaw is the sibling agent pillar. That walkthrough uses Ollama’s native /api/chat (no /v1) so tool calling stays intact. Hermes uses Ollama’s OpenAI-compat path: http://127.0.0.1:11434/v1. Do not copy OpenClaw onboard commands into this stack.

vLLM and SGLang also speak /v1. This walkthrough uses Ollama. Do not copy the SGLang, vLLM, TensorRT-LLM, or Unsloth install steps here.

Technology Stack
Component Version Purpose
Ubuntu Server 24.04 LTS Image 184: NVIDIA driver 580.126.16
Hermes Agent v0.20.5 (2026.8.19, b3a2065f) CLI + Kanban + hermes-gateway systemd unit
Python (Hermes venv) 3.11.16 Runtime the installer provisioned
Ollama 0.33.0 Local inference, OpenAI-compat /v1
Model (validated) llama3.1:70b 70.6B, Q4_K_M, tools capability
UFW active SSH (22/tcp) only
System Requirements
Resource This walkthrough Notes
GPU RTX PRO 6000 Blackwell 96 GB (gpu_1x_pro_6000_blackwell) Validated. 70B Q4 + full ctx used ~82 GB. The card is for Ollama, not Hermes
System RAM 144 GB SKU ships 144 GiB
vCPU 16 SKU ships 16 vCPU (recipe minimum). L40 is 14 vCPU — skip it for this stack
Storage 725 GB llama3.1:70b pull was 42.5 GB
Network 1 Gbps First ollama pull plus the Hermes git install

Massed Compute VM Pricing

Lead with the Blackwell this guide was tested on. 48 GB cards are listed for the 8B fallback we did not run here.

Pricing fetched from the Massed Compute inventory API on August 25, 2026.

SKU Description vCPU RAM Storage Price Capacity
gpu_1x_l40 1x L40 (48GB) 14 72 GiB 625 GB $0.86/hr 21
gpu_1x_A100_SXM4 1x A100 SXM4 (80GB) 14 100 GiB 625 GB $1.38/hr 10
gpu_1x_pro_6000_blackwell 1x RTX PRO 6000 Blackwell (96GB) 16 144 GiB 725 GB $2.19/hr 29
gpu_1x_h100 1x H100 (80GB) 20 128 GiB 1250 GB $2.73/hr 5
gpu_1x_h200_nvl 1x H200 NVL (141GB) 16 180 GiB 750 GB $3.62/hr 0
Spot pricing available: Spot instances can be interrupted. This walkthrough used on-demand gpu_1x_pro_6000_blackwell. Use on-demand if the swarm cannot restart. H200 NVL was out of stock on this date; Blackwell was the in-stock 96 GB+ card that also meets the 16 vCPU floor. See Why the RTX PRO 6000 Blackwell Is Built for Modern AI and Rendering. For 80 GB local 70B see NVIDIA A100 GPU Best Use Cases. Inference card sizing: The Best GPU for LLM Inference Without Overpaying. Serving the same weights through SGLang or vLLM is a different post.

Step-by-Step Deployment

Image 184 logs in as Ubuntu (capital U). If SSH offers extra keys and then fails, add -o IdentitiesOnly=yes.

1

Launch GPU VM

# Launch via Massed Compute dashboard or API
# Product: gpu_1x_pro_6000_blackwell
# Image: 184 (Ubuntu Server 24.04 w/ Drivers)
# SSH Key: attach your public key
# Instance name: hermes-agent-local-llm

Wait until the instance is running and has an IP.

2

Verify the GPU

ssh -o IdentitiesOnly=yes Ubuntu@YOUR_VM_IP \
  'nvidia-smi --query-gpu=name,memory.total,driver_version --format=csv,noheader'

This run printed NVIDIA RTX PRO 6000 Blackwell Server Edition, 97887 MiB, 580.126.16.

3

Install Ollama on loopback and pull Llama 3.1 70B

The GPU workload is Ollama. Bind it to 127.0.0.1 so the model API is not on the public interface. Hermes talks to OpenAI-compat /v1 on that same host.

ssh -o IdentitiesOnly=yes Ubuntu@YOUR_VM_IP 'bash -s' <<'EOF'
set -euo pipefail
curl -fsSL https://ollama.com/install.sh | sh
sudo mkdir -p /etc/systemd/system/ollama.service.d
sudo tee /etc/systemd/system/ollama.service.d/override.conf >/dev/null <<'CONF'
[Service]
Environment="OLLAMA_HOST=127.0.0.1:11434"
Environment="OLLAMA_MAX_LOADED_MODELS=1"
Environment="OLLAMA_NUM_CTX=65536"
CONF
sudo systemctl daemon-reload
sudo systemctl enable --now ollama
sudo systemctl restart ollama
ss -ltn | grep 11434
curl -sS http://127.0.0.1:11434/api/tags
ollama --version
EOF

You should see 127.0.0.1:11434 and ollama version is 0.33.0 (or the version you actually installed that day).

Pull a tool-capable 70B. Fallback if the pull OOMs: llama3.1:8b (not run on this VM).

ssh -o IdentitiesOnly=yes Ubuntu@YOUR_VM_IP 'bash -s' <<'EOF'
set -euo pipefail
ollama pull llama3.1:70b
ollama show llama3.1:70b
EOF

This pull was 42.5 GB. ollama show reported architecture llama, 70.6B, Q4_K_M, context length 131072, capabilities completion and tools. Ollama-only setup, without Hermes, is already covered in Deploy LLMs with Ollama on GPU Cloud.

The systemd drop-in set OLLAMA_NUM_CTX=65536. This load still reported 131072 in ollama ps (the model max). Size VRAM for the context you actually get, not only the weights.

4

Install Hermes Agent

ssh -o IdentitiesOnly=yes Ubuntu@YOUR_VM_IP 'bash -s' <<'EOF'
set -euo pipefail
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
# shellcheck disable=SC1091
source ~/.bashrc
export PATH="$HOME/.local/bin:$PATH"
hermes --version
EOF

This VM installed Hermes Agent v0.20.5 (2026.8.19) from git b3a2065f, Python 3.11.16, OpenAI SDK 2.24.0. Binary: ~/.local/bin/hermes (symlink to the installer venv). Pin the version you print from hermes --version. The official installer’s Node/browser step can fail and still leave a working CLI.

5. Point Hermes at local Ollama /v1

Hermes model.provider is custom. Base URL includes /v1. That is the opposite of the OpenClaw Ollama provider, which must omit /v1.

ssh -o IdentitiesOnly=yes Ubuntu@YOUR_VM_IP 'bash -s' <<'EOF'
set -euo pipefail
export PATH="$HOME/.local/bin:$PATH"
mkdir -p ~/.hermes
printf '%s\n' 'OPENAI_BASE_URL=http://127.0.0.1:11434/v1' 'OPENAI_API_KEY=ollama' > ~/.hermes/.env
hermes config set model.provider custom
hermes config set model.base_url "http://127.0.0.1:11434/v1"
hermes config set model.name llama3.1:70b
hermes config set kanban.dispatch_in_gateway true
hermes config set kanban.orchestrator_profile orchestrator
hermes config set agent.max_turns 30
EOF

The dummy OPENAI_API_KEY=ollama is required by the OpenAI SDK. It is not a hosted key.

6

Create Kanban team profiles and start the gateway

Four profiles: orchestrator, researcher, writer, reviewer. Each gets the same local /v1 endpoint. Persistence is ~/.hermes (kanban.db, profiles/, config.yaml).

ssh -o IdentitiesOnly=yes Ubuntu@YOUR_VM_IP 'bash -s' <<'EOF'
set -euo pipefail
export PATH="$HOME/.local/bin:$PATH"
OLLAMA_ENV=$'OPENAI_BASE_URL=http://127.0.0.1:11434/v1\nOPENAI_API_KEY=ollama'
for profile in orchestrator researcher writer reviewer; do
  hermes profile create "$profile" 2>/dev/null || true
  mkdir -p "$HOME/.hermes/profiles/${profile}"
  printf '%s\n' "$OLLAMA_ENV" >"$HOME/.hermes/profiles/${profile}/.env"
  hermes -p "$profile" config set model.provider custom
  hermes -p "$profile" config set model.base_url "http://127.0.0.1:11434/v1"
  hermes -p "$profile" config set model.name llama3.1:70b
done
hermes profile describe orchestrator --text "Orchestrator: decomposes goals into Kanban tasks and routes work to researcher, writer, and reviewer."
hermes profile describe researcher --text "Researcher: gathers facts and posts findings to Kanban tasks."
hermes profile describe writer --text "Writer: drafts prose from research cards."
hermes profile describe reviewer --text "Reviewer: checks outputs for completeness."
hermes profile use orchestrator
hermes kanban init
EOF

Enable the gateway as a systemd unit so the Kanban dispatcher survives logout. This run had no messaging platforms (Telegram/Discord) enabled. hermes gateway status showed PID 5417. There was no extra public HTTP Control UI — only SSH on the public interface.

ssh -o IdentitiesOnly=yes Ubuntu@YOUR_VM_IP 'bash -s' <<'EOF'
set -euo pipefail
sudo tee /etc/systemd/system/hermes-gateway.service >/dev/null <<'UNIT'
[Unit]
Description=Hermes Agent gateway (Kanban dispatcher)
After=network.target ollama.service

[Service]
Type=simple
User=Ubuntu
Environment=PATH=/home/Ubuntu/.local/bin:/usr/local/bin:/usr/bin:/bin
Environment=HOME=/home/Ubuntu
WorkingDirectory=/home/Ubuntu
ExecStart=/home/Ubuntu/.local/bin/hermes gateway run
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target
UNIT
sudo systemctl daemon-reload
sudo systemctl enable --now hermes-gateway
systemctl is-active hermes-gateway
EOF
7

Firewall

Default incoming deny. Only SSH is public. Ollama 11434 stays on loopback.

ssh -o IdentitiesOnly=yes Ubuntu@YOUR_VM_IP 'bash -s' <<'EOF'
set -euo pipefail
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
echo y | sudo ufw enable
sudo ufw status
EOF

If you later expose a Hermes UI or a messaging webhook, put HTTP basic auth in front (and TLS before it faces the internet). The OpenClaw post already shows that loopback nginx gate — do not bind Ollama or the gateway to 0.0.0.0.

8

Run a real Kanban swarm

Not “hello”. Smoke-chat the orchestrator, then dispatch researcher / writer / reviewer against one goal.

ssh -o IdentitiesOnly=yes Ubuntu@YOUR_VM_IP 'bash -s' <<'EOF'
set -euo pipefail
export PATH="$HOME/.local/bin:$PATH"
hermes -p orchestrator chat --quiet -q "Reply with exactly: smoke ok"
hermes kanban swarm "Smoke: summarize why local Llama workers help Hermes" \
  --worker researcher:"Gather three facts about local Llama inference" \
  --worker writer:"Draft a two-sentence summary from research" \
  --verifier reviewer \
  --synthesizer orchestrator \
  --json
hermes kanban list
EOF

This Blackwell produced:

  • Orchestrator smoke reply matched smoke.
  • Swarm JSON created task IDs (t_672724cb root, plus researcher / writer / reviewer / synthesizer).
  • ~/.hermes/kanban.db persisted five tasks, comments, and run summaries.
  • Researcher t_4a8c7e74 done.
  • Writer t_cfa402c6 blocked (plain-text reply is not a terminal Kanban state — the worker called kanban_block).
  • Reviewer and synthesizer stayed todo, waiting on the writer.

Transcript snippet from the researcher run summary:

Local Llama inference is a decentralized, peer-to-peer network...
I have gathered three facts: (1) Local Llama is designed to be efficient...

That summary is what 70B Q4 actually wrote on this smoke prompt — not a polished wiki. The point of the demo is the board + tools + persistence, not the prose quality. Orchestrator blackboard comment stored the topology JSON (root_id, worker_ids, verifier_id).

Persistence: ~/.hermes/kanban.db, ~/.hermes/profiles/{orchestrator,researcher,writer,reviewer}/, ~/.hermes/config.yaml. Gateway: systemd hermes-gateway.service.

9

Confirm GPU utilization

ssh -o IdentitiesOnly=yes Ubuntu@YOUR_VM_IP \
  'nvidia-smi --query-gpu=name,memory.used,utilization.gpu --format=csv,noheader; ollama ps; nvidia-smi'

During the swarm this Blackwell showed 81911 MiB used of 97887 (model load). After verify: 81943 MiB, 0% util. The compute process was ollama llama-server (~81902 MiB). ollama ps: llama3.1:70b, 85 GB, 100% GPU, context 131072. The Hermes gateway is a Python process on CPU. That is the split: GPU = model, CPU = agent orchestration.

Hermes + local /v1 vs OpenClaw vs hosted APIs

Path Model location GPU for Use this post?
Hermes + local Ollama /v1 Same VM Weights + KV cache Yes — this guide
OpenClaw + local Ollama native Same VM Weights + KV cache OpenClaw pillarno /v1
Hermes + hosted API Anthropic / OpenAI / cloud None required Set model.provider to that vendor instead of custom
Hermes + vLLM / SGLang Local OpenAI-compat /v1 Same as a serve post Wire model.base_url to the vLLM or SGLang loopback URL

Hosted inference is simpler. Local inference keeps prompts, tools, and Kanban files on the VM. This article is the local Hermes path.

VRAM / GPU tier

The Hermes gateway does not need a GPU. Size the SKU for the model and context, not for Python.

Local model This article SKU
8B Q4 Not this run. Fits 48 GB 48 GB VRAM works; this recipe still wants 16 vCPU (skip L40’s 14)
70B Q4, short ctx Not isolated 80 GB A100 / H100 can work with a smaller num_ctx
70B Q4, 131K ctx Measured: 81911 MiB used on Blackwell gpu_1x_pro_6000_blackwell (96 GB)
70B + headroom / H200 Not run (H200 NVL out of stock) gpu_1x_h200_nvl (141 GB) when in stock

CTA matches the demonstrated 70B-on-Blackwell: launch gpu_1x_pro_6000_blackwell. An 8B fallback is llama3.1:8b if the 70B pull or KV cache does not fit.

Measured result

Same Blackwell, Hermes Agent v0.20.5, Ollama 0.33.0, llama3.1:70b Q4_K_M, August 26, 2026.

Metric Value
Idle nvidia-smi used (before load) 0 MiB
During swarm (model resident) 81911 MiB / 97887 MiB
After swarm 81943 MiB / 97887 MiB · 0%
Process ollama llama-server ~81902 MiB
ollama ps context 131072 (systemd OLLAMA_NUM_CTX=65536 did not cap this load)
Orchestrator smoke + swarm JSON 66 s wall (HERMES_LLAMA_TEAM_VERIFY_OK)
Researcher worker status done (t_4a8c7e74)
Writer worker status blocked (t_cfa402c6, protocol)
Listeners 127.0.0.1:11434; SSH 22 public
UFW 22/tcp only
Persistence ~/.hermes/kanban.db (5 tasks), four profiles

No hosted-API bake-off. No OpenClaw install. No invented tok/s vs vLLM.

Troubleshooting

SSH fails or keeps asking for a password. Image 184’s user is Ubuntu, not ubuntu. Use -o IdentitiesOnly=yes. Refresh host keys with ssh-keygen -R YOUR_VM_IP if the instance was relaunched on a reused IP.

hermes: command not found after a failed installer npm step. The CLI still lands in ~/.hermes/hermes-agent/venv/bin/hermes. Symlink it: ln -sfn ~/.hermes/hermes-agent/venv/bin/hermes ~/.local/bin/hermes. Node/browser extras are optional for this Kanban walkthrough.

hermes: command not found. The installer put the binary in ~/.local/bin. source ~/.bashrc or export that PATH.

Hermes ignores the local model / calls Anthropic. config.yaml may still list model.default: anthropic/claude-opus-4.6. Set model.provider custom, model.base_url http://127.0.0.1:11434/v1, model.name llama3.1:70b, and write ~/.hermes/.env as above. Confirm with hermes config get model.provider.

You pointed Hermes at Ollama without /v1. Hermes custom provider expects the OpenAI-compat base URL with /v1. OpenClaw’s Ollama provider is the reverse — native API, no /v1. See the OpenClaw pillar.

Ollama on 0.0.0.0. Check /etc/systemd/system/ollama.service.d/override.conf for OLLAMA_HOST=127.0.0.1:11434. Do not expose an unauthenticated model API.

Out of memory on 70B. This run used ~82 GB of 96 GB with context 131072. Lower OLLAMA_NUM_CTX, use llama3.1:8b, or a larger SKU. L40 (48 GB, 14 vCPU) is the wrong card for this recipe.

Kanban writer blocked / swarm incomplete. Workers must finish with kanban_complete or kanban_block, not a plain-text reply. Re-run hermes kanban init if the board is stale. The gateway ticks dispatch; systemctl is-active hermes-gateway should be active.

H200 launch fails. Inventory capacity was 0 on this date. Use Blackwell (this post) or wait for H200 NVL stock.

Deploy Hermes Agent with a Self-Hosted LLM

Launch NVIDIA RTX PRO 6000 Blackwell instances sized for a local Hermes Agent model. Get 96GB VRAM, NVMe storage, and per-second billing.

Think it. Build it. Scale it.

Quick Setup Reference

# 1. Launch gpu_1x_pro_6000_blackwell, image 184
# 2. Verify GPU
ssh -o IdentitiesOnly=yes Ubuntu@YOUR_VM_IP 'nvidia-smi'

# 3. Ollama on 127.0.0.1 + pull
ssh -o IdentitiesOnly=yes Ubuntu@YOUR_VM_IP 'curl -fsSL https://ollama.com/install.sh | sh'
# set OLLAMA_HOST=127.0.0.1:11434 via systemd drop-in, then:
ssh -o IdentitiesOnly=yes Ubuntu@YOUR_VM_IP 'ollama pull llama3.1:70b'

# 4. Hermes
ssh -o IdentitiesOnly=yes Ubuntu@YOUR_VM_IP \
  'curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash'
# config: model.provider custom, base_url http://127.0.0.1:11434/v1
# profiles + kanban init + systemd hermes-gateway

# 5. Swarm
ssh -o IdentitiesOnly=yes Ubuntu@YOUR_VM_IP \
  'PATH=$HOME/.local/bin:$PATH hermes kanban swarm "…" --json'

Frequently Asked Questions

01What did this guide actually run?

gpu_1x_pro_6000_blackwell, image 184, Hermes Agent v0.20.5, Ollama 0.33.0, llama3.1:70b Q4_K_M. Ollama on 127.0.0.1:11434 /v1. Kanban swarm created five tasks; researcher completed with tools; writer blocked on protocol. Peak used 81911 MiB.

02Why is the GPU for the model, not Hermes?

Hermes’s gateway is Python. nvidia-smi showed llama-server holding the VRAM. Size the VM for the weights and context you load into Ollama (or vLLM / SGLang).

03Should I use vLLM or SGLang instead of Ollama?

Use Ollama for this single-user agent path. Use vLLM or SGLang when you want a production OpenAI /v1 server, then set Hermes model.base_url to that loopback URL. This VM did not measure a throughput bake-off.

04How is this different from OpenClaw?

OpenClaw is a session gateway with a Control UI and native Ollama /api/chat. Hermes here is Kanban multi-agent dispatch over OpenAI-compat /v1. Different recipes. Link, don’t mix the install commands.

05Can I run 8B on a cheaper GPU?

llama3.1:8b is the documented fallback if 70B will not pull or fit. We did not run 8B. This recipe also wants 16 vCPU, so do not pick L40 (14 vCPU) for the live bootstrap.

06Do I need a Hugging Face token?

Not for llama3.1:70b from Ollama.

07What’s the difference between spot and on-demand?

Spot is cheaper and can be interrupted. This run used on-demand gpu_1x_pro_6000_blackwell. Use on-demand if a long swarm cannot restart.

Recipe tested on August 26, 2026.