Статьи → DevOps → Карманный набор нейросетей на Astra Linux в Docker
DevOps Актуальная

Карманный набор нейросетей на Astra Linux в Docker

Andrew ⚡ Администратор
(обновлено 07.09.2026)
142 v1.0

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

Стенд:

  • рабочий ноутбук:
    • ОЗУ: 12 Gb;
    • SSD: 512 Gb;
    • CPU: intel core i5-1155G7.

В одной из статей я показывал, как можно скачать и запустить локальную нейросеть у себя на компьютере, но там это относится больше к станционарному компьютеру, а здесь я хочу показать, как можно собрать портативную версию.

Что значит портативную версию? Соберем ollama в Docker контейнер и так же Open-webui к нему, рядом положем модель нейросети. Поработали на одном устройстве, перекинули образы контейнеров и файлы от контейнеров с моделькой на флэшку, пересели за другой компьютер (ноутбук), подняли контейнеры из локальных образов, подкинули файлы контейнеров и у нас полная история чатов с нейронкой. Мы можем переезжать с устройства на устройство в полевых условиях без интернета.

Есть конечно свои минусы и нюансы по типу технических характеристик устройств, наличие флэшки или витой пары (чтобы перекинуть с устройства на устройство), объем этих файлов. Но это все равно хоть что-то.


Для начала, нам нужен Docker и Docker compose. Как установить описано здесь.

После того, как установили или уже есть Docker, то заходим на хаб моделек нейросетей.

В поиске ищем qwen 2.5 coder Q4

Либо заходим по прямой ссылке.

ищем модельку

Так как у нас ноутбук не болит формулы 1, а выше средней рабочей лошадке, то модельку я решил взять - это квантованные модели формата GGUF, которые отлично работают на CPU и требуют минимум ресурсов. Так как видеокарты нет, поэтому мы будем ориентироваться на эффективный CPU.

Выбор пал на Qwen 2.5 coder (заточенную под программирование).

Скачиваем модельку к себе на ноутбук.

страница модельки

загрузка модельки

Ставим на загрузку Ollama и Open-webui:

docker pull ollama/ollama:latest

docker pull ghcr.io/open-webui/open-webui:main

Пока мы загружаем образы, создадим директорию под работу нейронки.

Создаем структуру папок:

mkdir -p ~/local_ai/{models,ollama_data,webui_data}

Схема получается вот такой:

local_ai/
├── docker-compose.yml
├── models/
│   ├── qwen2.5-coder-3b-instruct-q4_k_m.gguf
│   └── Modelfile
├── ollama_data/
└── webui_data/
  • local_ai - локальный каталог (папка):
    • docker-compose.yml - наша кнопка старт/стоп (вкл/выкл) веб-интерфейса с нейронкой;
    • models - в ней лежит модель нейросети и файл с настрйоками для ollama;
    • ollama_data - в ней будут сохраняться все файлы ollama из контейнера ollama. Если контейнер решим удалить (для переезда на другой компьютер, то когда создадим новый контейнер, он заберет все файлы настроек и историю с этой папки и продолжит работы до пеерезда);
    • webui_data - аналогична как ollama_data только для контейнера open-webui.

После создания директории, переходим в нее.

cd ~/local_ai/models

Переносим модельку из загрузок:

mv ~/Загрузки/ВАША_МОДЕЛЬ .

переносим модель в домашнюю

Создаем рядом с моделью файл Modelfile (в папке models/). Этот файл скажет Ollama, как называть модель и где ее взять.

nvim Modelfile

Если nvim нету, то nano или vim.

содержимое Modelfile

FROM /models/ВАША_МОДЕЛЬ

Теперь возвращаемся в корень local_ai:

cd ..

и создаем docker-compose.yml файл:

nvim docker-compose.yml

с содержимым:

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    ports:
      - "11434:11434"
    volumes:
      - ./ollama_data:/root/.ollama
      - ./models:/models
    environment:
      - OLLAMA_NUM_PARALLEL=1
      - OLLAMA_MAX_LOADED_MODELS=1
      - OLLAMA_NUM_THREADS=4
    restart: unless-stopped

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    ports:
      - "8080:8080"
    volumes:
      - ./webui_data:/app/backend/data
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434
    restart: unless-stopped
    depends_on:
      - ollama

Ничего тут менять не нужно, за исключем OLLAMA_NUM_THREADS=4 -это количество потоко. Если у вас есть больше, можете поменять на то, которое у вас есть, но не больше!

docker-compose.yml файл

создание compose файла

Если все сделали правильно, то запускаем оркестрацию:

docker-compose up -d

Через docker ps проверяем, поднялись ли контейнеры. Должно быть Up и Up.

создание контейнеров

Видим, что контейнеры создались и оба в работе (Up). Теперь нужно зарегистрировать модель в Ollama (делается 1 раз).

Так как Ollama не умеет сама видеть сырые GGUF файлы в папке, их нужно один раз зарегистрировать.

Выполняем команду:

docker exec -it ollama ollama create coder -f /models/Modelfile

регистрация модели

Все, теперь модель с именем coder навсегда сохранена в ollama_data.

Открываем интерфейс.

Заходи в браузере на http://localhost:8080. При первом входе нужно будет зарегистрировать локального админа (данные хранятся в папке webui_data). В списке моделей выбираем coder и начинаем работать.

главная страница open-webui

регистрируем учетную запись админа

главная страница\

выбор моделей

Видим нашу загруженную модель coder. Можно подкинуть и зарегистрировать несколько моделей. 

Если вы получили ошибку как у меня:

{"error":{"code":400,"message":"request (5956 tokens) exceeds the available context size (4096 tokens), try increasing it","type":"exceed_context_size_error","n_prompt_tokens":5956,"n_ctx":4096}}

ошибка чата

То мы не укладываемся в количество токенов. Полазив в настройках, я нашел параметр отвечающий за этот порог. Слева где аватар, нажимаем на наш аватар и настройки. Сразу откроются общие настройки, в них находим внизу Model parameters и нажимаем «Показать».

настройки

Нам нужно найти num_ctx. Можно воспользоваться поиском Ctrl + F и вбить num_ctx.

По-умолчанию стояло 2048, я поставил 8192.

настройки ctx

новые данные

После нажимаем «Сохранить».

сохранение настроек

Теперь попробуем перезапустить ответ нейронки.

ответ нейронки

Нейронка нам ответила. Правда на английском, но стоит попросить отвечать на Русском и она перестроится.

Попросил я на трех языках написать функцию приветствия, она сгенерировала ответ за ~1.5-2 минуты. При этом ресурсы ноута почти на пределе.

потребление ресурсов

Вот такой результат.

ответ нейронки по функциям

Теперь покажу, как выгрузить образ ollama и open-webui.

Выгружаем ollama:

docker save -o ollama.tar ollama/ollama:latest

Выгружаем webui:

docker save -o webui.tar ghcr.io/open-webui/open-webui:main

выгружаем образы

Вот объем файлов:

объем ollama

общий объем

общий объем с архивом

Общий объем архива 9,1 GiB, в целом более-менее приемлимо для портативной сборки нейронки.

Как пеерехать:

Стопим и удаляем контейнеры:

docker-compose down

останавливаем и удаляем контейнеры

файлы data

Как видим, файлы с контейнеров на месте, хотя контейнеров уже физически нет (они удалены). А это значит, что при создании новых им вернется память от предыдущих контейнеров.

  • down - останавливает и удаляет;
  • stop - останавливает контейнеры из docker-compose.yml;
  • start - запускает контейнеры из docker-compose.yml;
  • down -v - останавливает и удаляем контейнеры и volume (папки ollama_data и webui_data).

условно у вас есть ollama.tar и webui.tar и все это в local_ai.

Упаковываем компактно в tar.gz

tar -czvf local_ai.tar.gz local_ai/

Переносим на флэшку, на внешний диск, либо по сети переносим, как угодно этот архив.

На другой машине распаковываем:

tar -xzvf local_ai.tar.gz -C ~/

Извлекает в домашнюю ~/

Далее переходм в ~/local_ai

и загружаем образы в Docker:

docker load -i ollama.tar

и

docker load -i webui.tar

После успешной загрузки образов, запускаем оркестрацию:

docker-compose up -d

Если все сделали правильно, то на новом устройстве у вас из коробки будет сохранен весь чат общения с нейронкой уже на новом месте. В условиях отсутствия интернета я считаю это отличным вариантом, тем более если нужно поработать временно.

Надеюсь Вам данная статья была интересной и полезной, удачи!

0
Andrew

DevOps Engineer

1 50 статей
Комментарии (0)
Войдите, чтобы оставить комментарий

Пока нет комментариев. Будьте первым!