2026 OpenClaw en pratique : file d’inférence Ollama par lots sur Mac distant loué

31 mars 2026 · ~8 min · Équipe technique MacCompute · Guide

Les équipes qui louent un Mac distant pour scorer des milliers de prompts veulent une file d’inférence fiable sans saturer la mémoire unifiée ni laisser Ollama nu sur le réseau. Ce guide montre comment cohabiter OpenClaw (passerelle d’agents) et Ollama sur la même machine, router l’API derrière loopback ou TLS interne, borner la concurrence à trois niveaux (serveur, proxy, script) et appliquer des retries avec dégradation pour des batches nocturnes auditables. Vous y trouverez une matrice de décision, des commandes reproductibles et une FAQ ; les renvois finaux pointent uniquement vers des pages publiques MacCompute (accueil, blog, tarifs, achat, aide).

Objectif et schéma cible

Sur un Mac loué, l’architecture qui limite les surprises combine quatre blocs : Ollama sur 127.0.0.1:11434 pour l’inférence HTTP ; la passerelle OpenClaw sur 127.0.0.1:18789 pour les agents et l’UI de contrôle (voir la documentation officielle Docker et le dépôt openclaw/openclaw) ; une couche bordure — Caddy, Nginx ou simple ssh -L — qui évite d’ouvrir des ports bruts ; enfin un pilote de file qui impose un plafond de jobs et des temporisations de relance. Ce découplage permet de traiter des lots longs pendant que des automatisations OpenClaw restent disponibles, sans mélanger les namespaces de processus ni partager par erreur un même listener public.

Trois frictions fréquentes sur Mac distant

  1. Parallélisme excessif. Lorsque le nombre de requêtes simultanées dépasse ce que la VRAM unifiée peut charger, les modèles se déchargent et se rechargent : la latence explose et les jobs semblent « aléatoires ».
  2. Exposition réseau mal comprise. Publier 11434 ou 18789 sans TLS ni contrôle d’accès transforme le Mac en cible ; la location cloud n’absout pas la surface d’attaque.
  3. Absence de politique de repli. Un timeout unique sans backoff ni modèle secondaire laisse des batches incomplets ; sans fichier de lettres mortes, le diagnostic nocturne devient un jeu de devinettes.

Matrice de routage : où envoyer le trafic

Le tableau suivant résume les choix usuels lorsque des clients internes doivent joindre à la fois l’API type OpenAI d’Ollama et l’UI OpenClaw derrière un seul nom d’hôte VPN :

Type de trafic Cible Justification
Batch /api/generate ou façade OpenAI 127.0.0.1:11434 Latence minimale ; rester derrière loopback ou proxy authentifié.
UI passerelle et WebSocket 127.0.0.1:18789 Sondes /healthz ; tunnel SSH pour le debug.
Internet non fiable Aucune par défaut VPN, SSH ou mTLS avant toute exposition publique.

Installer et ancrer Ollama sur le Mac distant

Installez via le script officiel, tirez le modèle cible, puis validez la présence des tags :

curl -fsSL https://ollama.com/install.sh | sh
ollama pull llama3.2

Conservez l’écoute sur la boucle locale sauf décision explicite avec OLLAMA_HOST. Pour des réglages persistants après reboot, placez OLLAMA_NUM_PARALLEL dans un profil shell ou un plist launchd. Contrôle rapide : curl -fsS http://127.0.0.1:11434/api/tags. Les clients style OpenAI peuvent utiliser /v1/chat/completions sur le même port.

OpenClaw : ce qui compte en co-installation

Deux voies dominent : CLI globale (Node 24 ou 22.16+) ou Docker avec ./scripts/docker/setup.sh à la racine du clone. Sur Mac, on retrouve souvent npm install -g openclaw@latest, openclaw onboard --install-daemon, puis openclaw gateway --port 18789 --verbose ; la variante conteneur monte config et workspace. Gardez Ollama natif pour Metal ; les outils OpenClaw peuvent appeler http://127.0.0.1:11434. Vérification : curl -fsS http://127.0.0.1:18789/healthz. Pour durcissement, proxy et dépannage, reportez-vous au guide voisin OpenClaw Docker, sécurité et workflow Mac distant.

Routage API : un nom d’hôte, deux amonts

Pour les clients VPN qui exigent HTTPS, terminez TLS une fois et séparez par chemin (exemple conceptuel Caddy) :

inference.internal.example.com {
  route /v1/* {
    reverse_proxy 127.0.0.1:11434
  }
  route /openclaw/* {
    reverse_proxy 127.0.0.1:18789
  }
}

Ajoutez des limiteurs de débit côté proxy pour absorber les rafales. Sans nom public, ssh -L 11434:127.0.0.1:11434 et ssh -L 18789:127.0.0.1:18789 évitent d’ouvrir le pare-feu hôte.

Script de file : plafond de jobs et JSON sûr

Placez une invite par ligne dans prompts.txt. L’extrait ci-dessous utilise python3 uniquement pour sérialiser le JSON ; la concurrence repose sur un petit pool de jobs bash (bash livré avec macOS), ce qui évite de dépendre de GNU xargs -P. Les relances utilisent un backoff multiplicatif jusqu’à quatre tentatives.

#!/usr/bin/env bash
set -euo pipefail
OLLAMA_URL="${OLLAMA_URL:-http://127.0.0.1:11434}"
MODEL="${MODEL:-llama3.2}"
MAX_JOBS="${MAX_JOBS:-2}"
PROMPTS="${1:?path to prompts.txt}"
mkdir -p out failed

run_one() {
  local i="$1" line="$2"
  local body try=0 delay=1
  body="$(python3 -c 'import json,sys; print(json.dumps({"model":sys.argv[1],"prompt":sys.argv[2],"stream":False}))' "$MODEL" "$line")"
  while (( try < 4 )); do
    if curl -fsS --max-time 600 -H 'Content-Type: application/json' \
      -d "$body" "$OLLAMA_URL/api/generate" -o "out/resp-$i.json"; then
      return 0
    fi
    sleep "$delay"
    delay=$(( delay * 2 ))
    try=$(( try + 1 ))
  done
  printf '%s\n' "$line" >> "failed/prompts-$i.txt"
  return 1
}
export -f run_one
export OLLAMA_URL MODEL

i=0
while IFS= read -r line || [ -n "${line-}" ]; do
  i=$((i+1))
  while (( $(jobs -rp | wc -l | tr -d ' ') >= MAX_JOBS )); do
    sleep 0.2
  done
  ( run_one "$i" "$line" ) || true
done < "$PROMPTS"
wait

Maintenez MAX_JOBS inférieur ou égal à OLLAMA_NUM_PARALLEL après avoir réservé de la marge pour les tâches cron et les pics agents ; sur 16 Go, commencez à 1 pour des modèles 7B–8B avant d’augmenter sous surveillance de la pression mémoire.

Plafonds ressources : faits opérationnels

  • Ollama — variable OLLAMA_NUM_PARALLEL ; option OLLAMA_MAX_LOADED_MODELS si vous alternez souvent les noms de modèles.
  • FileMAX_JOBS doit rester cohérent avec le parallélisme serveur et la RAM disponible pour OpenClaw et le système.
  • macOS — possibilité de limites SoftResourceLimits / HardResourceLimits dans un plist launchd pour le worker batch.
  • OpenClaw — décalez les automatisations lourdes pour qu’elles ne coïncident pas avec les pics Ollama ; documentez les plages horaires dans le runbook d’équipe.

Dégradation et retries

Le script ci-dessus borne déjà les tentatives. En production, enchaînez une chaîne de repli explicite : modèle principal → modèle compact → invite tronquée → écriture dans failed/ avec horodatage pour rejeu manuel. Combinez curl --max-time avec un plafond d’essais afin qu’une ligne corrompue ne bloque jamais la file entière ; ajoutez du jitter sur le sleep pour éviter l’effet « thundering herd » après une panne réseau transitoire.

FAQ

Ollama doit-il écouter sur 0.0.0.0 ? Seulement si vous maîtrisez exposition, TLS et contrôle d’accès ; sinon boucle locale plus tunnel ou VPN.

Où placer les limites de concurrence ? Côté Ollama, côté proxy (débit / connexions) et côté script MAX_JOBS — la superposition des trois couches évite la surcharge silencieuse.

OpenClaw remplace-t-il Ollama ? Non : la passerelle orchestre agents et canaux ; Ollama reste le moteur d’inférence locale HTTP sur un port distinct.

Que faire après un timeout répété ? Journaliser, réduire le parallélisme, passer à un modèle plus léger, puis rejouer le sous-ensemble failed/.

Comment valider depuis mon poste ? Utilisez ssh -L vers les deux ports locaux du Mac loué plutôt que d’ouvrir des règles WAN.

Synthèse

En résumé, co-hébergez OpenClaw et Ollama sur des adresses loopback, ajoutez un proxy uniquement pour le TLS interne ou restez sur tunnel SSH, et alignez les plafonds côté serveur, bordure et file. Les retries bornés et la dégradation par modèle plus petit transforment les batches nocturnes en résultats traçables. Pour une capacité Mac accessible sans gérer vous-même le matériel, les pages publiques Tarifs et Achat décrivent les offres ; le centre d’aide couvre l’accès et la facturation. L’accueil et l’index du blog restent les points d’entrée les plus stables pour naviguer la documentation MacCompute.

Inférence par lots sur une machine qui reste sous tension. Les offres Mac mini distantes conviennent aux sessions SSH longues, au Metal local et aux charges de type assistant — sans laisser votre portable ventiler toute la nuit.

Achat rapide