Двоен възел: работник + мозък
Преизползваем шаблон: единият възел върти работника (OCR в Docker), другият върти модела; говорят си през частна мрежа. Така всяка площадка става работещ „четец“, без да дублираш скъпия възел с GPU.
01Какво ще научиш
- Защо четенето на документ не иска GPU, а мисленето иска — и как това разделя системата на две роли.
- Как работникът намира мозъка през частна мрежа, без нищо да излиза публично.
- Какво трябва да има на всеки от двата възела — и какво не трябва.
- Защо това е шаблон: смяна на адреса и папката дава нов четец на ново място.
02Преди да започнеш
- Работникът от урока I19 · OCR→LLM — контейнерът, който чете документи.
- Модел-сървър с текстовия модел на машината с GPU (как се пренася модел — в I21).
- Двете машини в една частна mesh мрежа (например Tailscale или собствен WireGuard).
- Docker на машината-работник.
03Стъпки
-
Идеята: раздели работника от мозъка
GPU-то е скъпо и рядко. Но четенето на документ не иска GPU — OCR-ът и оркестрацията вървят на евтин възел с обикновен процесор. Само мисленето (моделът) иска GPU. Затова разделяме: работникът (Docker + OCR) стои там, където са документите; мозъкът (модел-сървърът) стои на машината с GPU. Един мозък обслужва много работници.
схема[ работник: Docker + OCR ] --частна мрежа--> [ мозък: модел-сървър :11434 + GPU ] евтин възел, следена папка машина с GPU, текстов модел -
Двете роли
Роля Какво върти Изисква Работник OCR контейнер, следена папка Docker Мозък модел-сървър, текстов модел GPU + модела 🔗Една форма, различни машиниПри нас шаблонът работи на две различни двойки машини. Работният възел дори не иска платформа за синхронизация на файлове — стига следена папка и контейнер. -
Свързването през частната мрежа
Работникът стига мозъка по частния адрес на мозъка в mesh мрежата — нищо не се излага публично. Контейнерът тръгва с
--network host, за да ползва мрежата на машината и да стигне порта на модела. Мозъкът трябва да слуша на достижим адрес, не само на localhost — това се задава сOLLAMA_HOSTв настройката на услугата.bash · на мозъка: слушай на адреса в частната мрежаsudo systemctl edit ollama # в отворения файл: # [Service] # Environment="OLLAMA_HOST=<mesh-адрес-на-мозъка>:11434" sudo systemctl restart ollamabash · на работника: провери и пусни# проверка, че мозъкът се вижда curl -s http://<mesh-адрес-на-мозъка>:11434/api/version # пусни контейнера, сочейки модела на другия възел docker run --rm --network host \ -e OLLAMA_URL=http://<mesh-адрес-на-мозъка>:11434 -e MODEL=<текстов-модел> \ -v /път/вход:/data doc-ocr /data⛔Не отваряй модела към всичкиЛокалният API на модела не иска вход — отговаря на всеки, който го стигне по мрежата. Задай адреса в частната мрежа, а не „всички интерфейси“, и не пренасочвай порта към интернет.⚠️Само работникът иска DockerМозъкът не иска Docker — само модел-сървърът да слуша. Не усложнявай: ако площадката няма синхронизация на файлове, стига следена папка и контейнер. -
Защо е шаблон, а не еднократна настройка
Веднъж описан, шаблонът пътува: смениш адреса на мозъка и папката — и имаш нов „четец“ на ново място. Един възел с GPU обслужва много работници, без нови видеокарти.
✅Собственост ≠ акаунтМоже да ползваш хардуер, който е твой, но е в чужда mesh мрежа (например на партньор). Тогава ползваш възела, но не пипаш акаунта на мрежата. Разграничението „моето желязо ≠ моят акаунт“ пази отношенията чисти.
04Проверка
1. Кой възел иска GPU?
2. Как работникът стига мозъка?
3. Кой възел задължително иска Docker?
4. Защо това е шаблон, а не еднократна настройка?
05Какво следва
06Източници
- Ollama API —
GET /api/versionза проверка, че сървърът се вижда. - Ollama FAQ —
OLLAMA_HOSTи настройка на услугата в systemd. - Docker: host network — какво прави
--network host. - Tailscale — един пример за частна mesh мрежа.
- Собствен опит на КАГАМИ: шаблонът работи на две двойки машини.