OpenClaw 2026 на практике: пакетный инференс Ollama на арендованном удалённом Mac

31 марта 2026 · ~9 мин · Техническая команда MacCompute · Руководство

Этот runbook описывает, как запускать воспроизводимый пакетный инференс через Ollama на арендованном удалённом Mac, оставляя рядом OpenClaw для агентов и автоматизации. Вы поставите оба сервиса с разумными умолчаними, направите API через небольшой обратный прокси вместо «голых» портов, ограничите конкуренцию на уровне очереди и сервера и добавите деградацию с повторами, чтобы ночные джобы переживали кратковременную перегрузку. Точки входа без входа в аккаунт: главная, каталог заметок, справка.

Цель и рекомендуемая схема

Пакеты ломаются, когда параллелизм превышает VRAM, модели постоянно выгружаются, а клиенты сдаются после первого таймаута. На удалённом Mac разумно зафиксировать роли так:

  • Ollama127.0.0.1:11434 (только инференс).
  • OpenClaw Gateway127.0.0.1:18789 (агенты; см. официальные материалы по Docker и CLI).
  • Край — Caddy/Nginx с одним TLS-именем в VPN или SSH -L с ноутбука.
  • Воркер очереди — ограничивает число задач в полёте и задаёт бэкофф.

Так вы отделяете «интерактивных» агентов от тяжёлого пакетного скоринга и можете независимо перезапускать или ограничивать каждый контур.

Установка Ollama на macOS (удалённый Mac)

Установите движок и заранее стяните модель, которую будете гонять пакетом:

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

Сохраняйте привязку к loopback, если специально не задаёте OLLAMA_HOST. Для настроек после перезагрузки положите OLLAMA_NUM_PARALLEL в профиль shell или plist launchd. Дымовой тест: curl -fsS http://127.0.0.1:11434/api/tags. Клиенты в стиле OpenAI могут использовать /v1/chat/completions на том же порту. На Apple Silicon нативная установка обычно быстрее контейнера для Metal.

OpenClaw Gateway: что важно при совместной установке

Два поддерживаемых пути: глобальный CLI (Node 24 или 22.16+) или Docker со скриптом ./docker-setup.sh в клоне openclaw/openclaw. Типичный сценарий на Mac: npm install -g openclaw@latest, затем openclaw onboard --install-daemon и openclaw gateway --port 18789 --verbose; либо Docker с примонтированным конфигом и workspace. Ollama лучше держать нативным ради Metal; инструменты OpenClaw пусть бьют в 127.0.0.1:11434. Проверка шлюза: curl -fsS http://127.0.0.1:18789/healthz. Усиление, Docker и типовые сбои — в связанной заметке OpenClaw: Docker, прокси и удалённый Mac.

Маршрутизация API: одно имя, два upstream

Если клиенты в VPN нуждаются в HTTPS к обоим стекам, завершите TLS один раз и разведите по пути (идея для Caddy):

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

Добавьте ограничение частоты на прокси (limit_req в Nginx или rate-limit в Caddy), чтобы погасить всплески клиентов. Нет публичного hostname — используйте ssh -L для 11434 и 18789 вместо открытия фаервола наружу.

Решения по маршрутизации

Трафик Назначение Почему
Пакет /api/generate или OpenAI-шим 127.0.0.1:11434 Минимальная задержка; держите за loopback или аутентифицированным прокси.
UI шлюза и WS control plane 127.0.0.1:18789 Здоровье OpenClaw — /healthz; при отладке — туннель.
Недоверенный интернет По умолчанию никуда Сначала VPN, SSH или mTLS, затем публикация любого из портов.

Скрипт очереди: потолок параллелизма и безопасный JSON

Храните по одному промпту на строку в prompts.txt. Ниже python3 нужен только для корректной сборки JSON. Параллелизм — через небольшой bash job pool на штатном bash macOS (без GNU xargs -P).

#!/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

MAX_JOBS не поднимайте выше того, что позволяют OLLAMA_NUM_PARALLEL и доступная unified memory. На классе 16 ГБ для 7B–8B начните с 1, затем увеличивайте, наблюдая Memory Pressure в Мониторинге системы или vm_stat.

Лимиты ресурсов: Ollama, macOS и драйвер пакета

Слоите ограничения, чтобы одна «убийственная» задача не вытеснила все модели из RAM:

  • OllamaOLLAMA_NUM_PARALLEL задаёт максимум одновременных запросов на сервере; при частой смене моделей смотрите OLLAMA_MAX_LOADED_MODELS.
  • ОчередьMAX_JOBS (или пул в Python) — клиентский предохранитель; он должен быть не больше серверного параллелизма с учётом cron и других потребителей.
  • macOS — длительные пакеты можно обернуть отдельным пользователем или заданием launchd с SoftResourceLimits / HardResourceLimits по памяти, если нужен жёсткий порог.
  • OpenClaw — помните про песочницы агентов и всплески инструментов; разнесите по времени cron, чтобы автоматизации OpenClaw и пакеты Ollama не пиковали одновременно.

На арендованном Mac заранее заложите запас диска под кеш моделей и логи; при нехватке места Ollama и шлюз ведут себя непредсказуемо.

Деградация и повторы

Пример воркера уже повторяет сетевые сбои с экспоненциальным бэкоффом. Расширьте идею на уровень модели:

  1. Основная модель — полный контекст и качество.
  2. Запасная — меньшая квантовка или прожорливость при OOM-подобных ответах или серии 500.
  3. Усечение — ограничьте длину промпта на последней попытке и залогируйте id задачи.
  4. Dead letter — то, что не прошло после лимита попыток, падает в failed/ для разбора днём.

Всегда ограничивайте суммарное число попыток (в примере — четыре), иначе «ядовитый» промпт заблокирует всю очередь. Джиттер к sleep снижает синхронные штормы при восстановлении сервиса.

FAQ

Слушать ли Ollama на всех интерфейсах? Только если осознанно принимаете риск. Предпочтительнее loopback плюс SSH или VPN и аутентификация перед любым маршрутизируемым адресом.

Где жить лимитам конкуренции? В Ollama (OLLAMA_NUM_PARALLEL), на обратном прокси (rate limit) и в очереди (MAX_JOBS). Вместе они гасят скрытую перегрузку.

Как OpenClaw связан с Ollama? OpenClaw — шлюз и агенты; Ollama — локальный HTTP LLM. Сосуществуют на одном Mac, но не должны делить один процесс-контейнер без необходимости.

Что при таймаутах? curl --max-time, бэкофф, опционально меньшая модель и dead-letter — без бесконечных циклов.

Как проверить оба сервиса? curl на /api/tags и /healthz; снаружи — только туннель SSH, не открывайте порты в интернет по умолчанию.

Итог

Надёжный пакетный инференс Ollama на арендованном удалённом Mac строится из соседнего OpenClaw для оркестрации, loopback для инференса, обратного прокси только там, где нужен HTTPS, и согласованных лимитов параллелизма на сервере, краю и в очереди. Слой повторов и запасных моделей превращает ночной прогон в отчёт с явными неудачами, а не в зависший пайплайн. Для сравнения ёмкости и оформления без входа в кабинет откройте тарифы, заказ и справку.

Пакеты на железе, которое не засыпает. Удалённые Mac mini подходят для длинных SSH-сессий, локального инференса и ассистентской автоматизации без привязки к ноутбуку.

Быстрый заказ