Quilmo

Что делает агент

Агент — программа Quilmo, которая работает на вашем сервере и сообщает платформе, что у вас за оборудование и в каком оно состоянии. Исходный код агента закрыт, поэтому это единственное описание его поведения. Если что-то здесь не совпадает с тем, что вы видите на своей машине, напишите нам.

Агент работает от имени root

Ему нужно управлять Docker, а доступ к Docker равен root-доступу к машине. Установщик тоже запускается через sudo. Не ставьте агент на компьютер, на котором лежат данные, которыми вы не готовы рисковать.

Что агент делает в этой версии

  • Работает как служба systemd gpum-agent и каждые около 10 секунд связывается с платформой. Соединение только исходящее по HTTPS: входящие порты открывать не нужно, ваш роутер настраивать не нужно.
  • Определяет оборудование и сообщает его платформе при регистрации и при каждом изменении (смена драйвера, видеокарты, системы).
  • Передаёт показатели состояния (список ниже), по ним платформа понимает, что сервер онлайн.
  • Сам запускает короткий тест: контейнер с доступом к GPU, чтобы убедиться, что видеокарта работает внутри Docker (подробнее ниже).
  • Удаляет контейнеры с меткой gpum.managed=true, о которых платформа не знает. Контейнеры без этой метки агент не видит и не трогает.
  • Выполняет команды платформы из короткого фиксированного списка: повторить проверку, перезапустить агент.

Что агент отправляет на платформу

КогдаЧто
При регистрации и измененииИмя компьютера, ОС и ядро, модель процессора, число ядер и потоков, объём ОЗУ, размер, свободное место и тип диска, на котором лежит Docker, у каждой видеокарты: UUID, модель, объём памяти и PCI-шина, версии драйвера NVIDIA, CUDA и Docker
Каждые около 10 секундЗагрузка и занятая память GPU, температура, потребляемая мощность, загрузка процессора, свободная ОЗУ и диск, список контейнеров агента, время ответа платформы

Арендаторам показываются только характеристики объявления (модель карты, видеопамять, процессор, ОЗУ, диск), состояние «онлайн/офлайн» и результат проверки. Имя компьютера, UUID видеокарт и версии программ видите только вы. Платформа не записывает ваш IP-адрес в данные сервера; как у любого веб-сервиса, он виден хостинг-провайдеру в служебных журналах соединений.

Агент не читает ваши файлы, не отправляет список процессов и установленных программ, не смотрит содержимое ваших контейнеров и не собирает данные о других устройствах в вашей сети.

Тестовый контейнер с GPU

Агент запускает его сам: один раз после первого подключения и снова после изменения оборудования, драйвера, системы или версии Docker.

  • Запускается контейнер с доступом к видеокартам и выполняет nvidia-smi.
  • У контейнера отключена сеть. После проверки он удаляется вместе с данными.
  • Docker один раз скачивает образ для проверки из публичного реестра.
  • Если проверка пройдена, у сервера появляется отметка «Оборудование проверено». Это проверка, что GPU виден в Docker, а не тест производительности.
  • Пока образ для проверки не выбран, тест не запускается, а сервер показывается как «Ожидает проверки». Это не ошибка.

Чего агент не делает

  • Не читает и не меняет файлы вне своих каталогов: /opt/gpum-agent, /etc/gpum-agent, /var/lib/gpum-agent.
  • Не устанавливает, не обновляет и не удаляет драйвер NVIDIA.
  • Не открывает входящие порты и не меняет настройки файрвола.
  • Не назначает цену: её задаёте только вы.
  • Не имеет административных ключей платформы: использует только публичный ключ и токен вашего сервера.

Что установщик ставит на машину

  • Docker Engine и NVIDIA Container Toolkit из официальных репозиториев, только если их нет. Подписи репозиториев проверяются по заранее известным отпечаткам ключей.
  • Установка настраивает Docker на работу с NVIDIA и перезапускает его. Контейнеры без политики автозапуска при этом остановятся; установщик предупредит заранее и спросит подтверждение.
  • Службу systemd и сам агент.

Перед первым запуском можно добавить к команде --dry-run: установщик только проверит машину и ничего не изменит.

Что нужно и что проверено

  • Права root: установщик запускается через sudo.
  • Ubuntu 22.04 (x86_64), systemd, работающий драйвер NVIDIA, не менее 50 ГБ свободного места под Docker, выход в интернет.
  • Каталог /tmp должен разрешать запуск программ. Если он смонтирован с запретом запуска (noexec), установщик остановится с сообщением об этом и покажет команду с другим каталогом.

Команду установки берите в личном кабинете. Если /tmp запрещает запуск, замените в ней sudo bash на sudo env TMPDIR=/var/tmp bash. Проверено на Ubuntu 22.04 в виртуальной машине дата-центра с видеокартой Tesla T4. На Ubuntu 24.04 проверялся только запуск программы без видеокарты; установка с видеокартой ещё не проверена.

Как обновить агент

Обновления на месте нет. Чтобы перейти на новую версию, удалите сервер в личном кабинете (кнопка «Удалить»), создайте новый код подключения и запустите установщик снова: будет создан новый сервер. Если запустить установщик, не удалив прежний сервер, он остановится с сообщением «Эта видеокарта уже зарегистрирована на другом сервере»: сначала удалите тот сервер в личном кабинете.

Если что-то пошло не так

Установщик пишет, что случилось и что делать. Ниже случаи, когда нужно действие от вас; в скобках код выхода, его видно по $?.

  • «Установщик нужно запускать от имени root» (код 13): повторите команду с sudo.
  • «Код подключения выглядит неверно» (код 2): скопируйте команду из личного кабинета целиком, вместе с кодом. Тот же код 2 у остальных сообщений о параметрах команды («Не указан код подключения», «Неизвестный параметр»): в каждом сказано, что исправить.
  • «Проверка машины не пройдена» (код 10): исправьте отмеченное выше и запустите установщик снова.
  • «На этой машине не запущен systemd» (код 14): контейнеры, WSL и системы без systemd не поддерживаются.
  • «Не удалось запустить скачанный агент» (код 10): скорее всего, /tmp смонтирован с запретом запуска; замените в команде установки sudo bash на sudo env TMPDIR=/var/tmp bash, как описано выше.
  • «Не удалось скачать или проверить агент» (код 20): повторите попытку; если ошибка повторяется, напишите нам.
  • «Видеокарта не видна внутри контейнера» (код 31): проверьте nvidia-smi на машине, затем выполните sudo nvidia-ctk runtime configure --runtime=docker и sudo systemctl restart docker.
  • «Код подключения недействителен, истёк или уже использован» (код 40): создайте новый код в личном кабинете.
  • «Эта видеокарта уже зарегистрирована на другом сервере» (код 40): удалите тот сервер в личном кабинете и запустите установщик снова.
  • «Служба не запустилась» (код 50): посмотрите journalctl -u gpum-agent -n 50 и sudo /opt/gpum-agent/gpum-agent status.
  • Агент остановился сам и не запускается снова (код 78 у службы; systemd такую остановку не перезапускает). Команда sudo /opt/gpum-agent/gpum-agent status покажет причину. «Агент остановлен: сервер удалён или токен заменён» — создайте новый код и запустите установщик. «Агент остановлен: ошибка конфигурации» — проверьте /etc/gpum-agent/config.toml или запустите установщик с новым кодом. Контейнеры при этом не удаляются.
  • Команда status без root отвечает «Для чтения состояния агента нужны права root (sudo)» и выходит с кодом 13: запустите её через sudo.

Где что лежит

/opt/gpum-agent/gpum-agentпрограмма агента
/etc/gpum-agent/config.tomlнастройки и токен сервера, права 0600 (только root)
/var/lib/gpum-agent/состояние агента
/var/log/gpum-agent-install.logжурнал установки, без токенов и кодов
journalctl -u gpum-agentжурнал работы агента; токены и коды в нём скрыты

Платформа хранит только хэш токена, не сам токен. Состояние агента и ход работы можно посмотреть командой sudo /opt/gpum-agent/gpum-agent status. Если /tmp смонтирован с noexec, любой команде агента, набранной вручную, нужен тот же префикс: sudo env TMPDIR=/var/tmp /opt/gpum-agent/gpum-agent status. Служба этого не требует: она задаёт каталог сама.

Как остановить и удалить

  • Остановить: sudo systemctl stop gpum-agent. Агент закончит текущий шаг и выйдет. Через минуту сервер на сайте станет офлайн.
  • Удалить полностью: sudo /opt/gpum-agent/gpum-agent uninstall --yes. Удаляются служба, файлы агента и его контейнеры; Docker, драйверы и образы остаются.
  • Удалить сервер в кабинете: агент при следующем обращении получит отказ, остановится и не будет перезапускаться сам. Файлы при этом остаются на машине до команды удаления.

Кому вы доверяете

Доверие здесь в двух местах: откуда скачивается программа и как она собрана.

Установщик и агент скачиваются с этого сайта, контрольная сумма программы берётся оттуда же. Это значит, что тот, кто управляет сайтом, фактически управляет root-доступом на машинах, где стоит агент. Подпись программы отдельным ключом пока не реализована, это следующий шаг после закрытой беты. Хотите убедиться сами — сначала посмотрите скрипт и запустите его с --dry-run.

Программа собрана нашим скриптом. Версии Nuitka (компилятор), zstandard и ordered-set закреплены, но средства сборки (pip, setuptools, wheel) берутся актуальных версий, и ни один пакет сборки пока не проверяется по контрольной сумме; Python и компилятор C ставятся из репозиториев Ubuntu и PPA deadsnakes. Закрепление пакетов сборки по контрольным суммам будет сделано до того, как программу установит кто-либо, кроме владельца Quilmo.

Что появится позже (ещё не реализовано)

Автоматическая аренда ещё не включена: в этой версии агент не запускает чужие контейнеры. Когда мы её включим, изменится следующее, и мы опишем это на этой странице до включения:

  • Агент будет запускать контейнеры арендаторов с доступом к назначенным GPU, с ограничениями по процессору, памяти и числу процессов.
  • Арендатор получит root внутри своего контейнера на вашем оборудовании. Изоляция контейнеров не идеальна, и мы не обещаем обратного.
  • Для изоляции контейнеров от вашей локальной сети агенту понадобятся правила сетевого экрана, относящиеся к трафику контейнеров.
  • Доступ арендатора будет проходить через исходящий туннель, входящие порты по-прежнему открывать не придётся.
  • По окончании аренды контейнер и его данные удаляются. Мы обещаем удаление, а не сертифицированное затирание диска.
  • События агента (запуск, смена оборудования, удаление контейнеров, команды платформы) записываются на платформе; просмотр журнала в кабинете появится позже.

Готовы подключить сервер? Перейти к серверам