Skip to content

Развёртывание сервера разметки

Как выбрать хостинг для исследования по сроку, бюджету и уже имеющимся серверам и получить HTTPS, резервные копии и выгрузку данных через potato deploy.

Серверу разметки для настоящего исследования нужны публичный адрес с HTTPS, вход, который пускает только ваших разметчиков, хранилище, переживающее перезапуск, и способ получить разметку обратно, когда исследование закончится. В Potato команда potato deploy up создаёт хост и сертификат по конфигурации, которую вы уже отладили, настраивает резервное копирование на хостах, стирающих диск, и до развёртывания предупреждает, если войти может любой, у кого есть ссылка.

Сервер разметки здесь означает веб-приложение, которое разметчики открывают в браузере. Оно работает не на вашем ноутбуке, а там, где разметчики смогут до него достучаться все те недели, пока идёт исследование. Когда отлаженная задача переезжает на такой сервер, меняются её адрес, способ входа, место хранения данных и то, кому придётся присматривать за машиной.

Четыре требования к серверу для исследования

Каждое требование ниже защищает либо разметчиков, либо данные:

  • Публичный адрес с HTTPS. Разметчики вводят в задачу пароли и метки, поэтому соединение должно быть зашифровано по HTTPS. Сертификат от Let's Encrypt бесплатен, но для него серверу нужен публичный адрес.
  • Вход, который пускает только ваших разметчиков. Публичный адрес можно найти, а задача с открытой регистрацией принимает любого, кто его нашёл. Используйте список именованных учётных записей (управление паролями), вход через Google, GitHub или ваш институт (SSO и OAuth) либо, для краудсорсингового исследования, ссылки, которые платформа выдаёт своим исполнителям (интеграция с краудсорсингом).
  • Хранилище, которое переживает перезапуск. Некоторые хосты стирают диск при каждом перезапуске сервера. Исследованию на таком хосте нужна резервная копия, которая восстанавливается автоматически, иначе вернувшийся разметчик увидит пустую задачу.
  • Способ получить данные обратно. Potato хранит работу каждого разметчика в файлах, а данные проекта держит в базах SQLite. Если копировать файл SQLite, пока сервер работает, последние изменения могут потеряться, поэтому выгрузка должна идти через собственную команду резервного копирования SQLite.

Хостинг для типичных исследовательских ситуаций

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

СитуацияХостСтоимость в месяцРуководство
Исследование при наличии аккаунта AWSAWS Lightsail, 2 GB$12AWS Lightsail
Исследование в американском институте без бюджетаJetstream2бесплатно по выделению ACCESSJetstream2
Исследование по самой низкой ценеHetzner Cloud, 4 GBоколо €6Hetzner, Vultr и Linode
Публичная демонстрация или лаборатория, которая уже работает на Hugging FaceDocker Space на Hugging Faceтариф PRO или TeamHugging Face Spaces
Пилот с несколькими участниками на один вечерваш ноутбук через potato shareбесплатноЗапуск Potato локально или в облаке
Сервер, который уже есть у вашего институтаDocker-образ за обратным проксиот Potato расходов нетProduction-настройка

Первые три хоста дают виртуальную машину с диском, который переживает перезапуск, поэтому именно их стоит брать по умолчанию для исследования на несколько недель. Hugging Face Space теряет диск при каждом перезапуске, поэтому Potato каждые пять минут копирует разметку в приватный датасет на Hugging Face и восстанавливает её при старте Space. На странице Запуск Potato локально или в облаке перечислены все тринадцать облачных целей, включая Fly, Railway, Render и Heroku.

potato deploy на новом хосте

potato deploy up берёт отлаженную конфигурацию и делает то, что иначе пришлось бы делать вручную. На виртуальной машине команда создаёт машину, открывает только порты 22, 80 и 443, устанавливает Docker и веб-сервер Caddy, получает сертификат Let's Encrypt, загружает проект и запускает Potato как службу. Сначала установите pip-дополнение для своего хоста, то есть необязательные зависимости, которые нужны его развёртыванию, а затем проверьте конфигурацию так, как её прочитает хост:

bash
pip install 'potato-annotation[deploy-aws]'
potato deploy check myproject/config.yaml --provider aws
potato deploy up myproject/config.yaml --provider aws --dry-run

potato deploy check сообщает об ошибках конфигурации и находит пути, которые существуют только на вашей машине. Пробный запуск с --dry-run не требует облачного аккаунта и печатает каждый ресурс, который создаст развёртывание, месячную стоимость и то, кто сможет войти. Открытую регистрацию на публичном адресе он отмечает предупреждением D003. Чтобы развернуть задачу, запустите ту же команду без --dry-run. Potato снова покажет план, ничего не создаст, пока вы не подтвердите, а затем напечатает URL, который нужно отправить разметчикам.

Развёртывание меняет только настройки, относящиеся к хостингу. Оно выключает режим отладки, сохраняет сессии между перезапусками и запускает один рабочий процесс, потому что Potato держит пул объектов и очередь назначений в памяти, и второй процесс выдавал бы одни и те же объекты дважды. user_config, authentication и require_password остаются такими, как вы их написали. Развёртывание генерирует ключ администратора и сохраняет его в .potato/secrets.json рядом с конфигурацией. Этот ключ открывает админ-панель по адресу /admin.

Potato на сервере, который уже есть у вашего института

Если у вашего института уже есть сервер, запустите опубликованный Docker-образ за его обратным прокси вместо того, чтобы создавать новый хост. Обратный прокси, например nginx, держит сертификат и передаёт запросы в Potato. На странице Production-настройка есть файл Docker Compose, конфигурация nginx и настройки gunicorn. Оставьте в gunicorn один рабочий процесс и добавляйте потоки для параллельной работы, потому что второй рабочий процесс выдавал бы одни и те же объекты дважды.

Блок backup в Potato хранит копию данных за пределами этого сервера. По умолчанию каждые пять минут он копирует результаты разметки и снимки баз данных проекта в датасет Hugging Face или в S3-совместимый бакет и восстанавливает их, когда сервер стартует с пустым диском. Добавьте этот блок в конфигурацию, установите дополнение hosting и задайте HF_TOKEN в окружении сервера:

yaml
backup:
  schedule_minutes: 5
  restore_on_boot: true
  sinks:
    - type: huggingface
      repo_id: lab/pilot-annotations

Если датасета нет, Potato создаёт его как приватный репозиторий. Вместе с разметкой восстанавливается и список учётных записей, так что разметчики входят с прежними паролями, а разметку, которая уже лежит на диске, восстановление никогда не перезаписывает.

Проверка состояния и выгрузка данных

potato deploy status сообщает, работает ли сервер и в порядке ли его сертификат. На виртуальной машине без доменного имени сертификат выдаётся на IP-адрес и действует около шести дней. Он продлевается автоматически, поэтому, если исследование идёт без присмотра, проверяйте состояние раз в несколько дней или передайте --domain с DNS-записью, указывающей на сервер. potato deploy logs myproject/config.yaml -f следит за журналом сервера, а админ-панель показывает прогресс, темп работы и согласованность разметчиков, пока разметчики работают.

Когда исследование закончится, выгрузите данные до удаления хоста:

bash
potato deploy pull myproject/config.yaml
potato deploy destroy myproject/config.yaml

pull копирует результаты разметки и базы данных проекта в новый каталог potato-pull-<name>-<timestamp> и проверяет, что пришло. destroy не удалит развёртывание, которое ни разу не выгружали, и выгрузка, не вернувшая ни одного файла, не считается. Поэтому откройте выгруженный каталог и убедитесь, что последняя разметка на месте, прежде чем что-либо удалять.

Что почитать дальше