Перейти к содержанию

Установка Line#

Данный раздел описывает установку и использование Docker и Docker Compose для развертывания Line (на примере RedOS)

Docker и Docker Compose не входят в дистрибутив Line.

Перед установкой#

1․ Создайте главную директорию, где в дальнейшем будут все версии продукта:

mkdir -p /opt/lunaline

2․ Переместите дистрибутив в созданную директорию:

mv /root/lunaline_v.0.1.zip /opt/lunaline

3․ При необходимости установите приложение для распаковки архива:

dnf install -y unzip

4․ Откройте папку с дистрибутивом:

cd /opt/lunaline

5․ Распакуйте файлы:

unzip lunaline_v0.1.zip

Настройка файлов конфигурации#

1․ Исходный вариант файла .env (в комплекте поставки):

API_TAG=v.0.1
UI_TAG=v.0.1    
DATA_FOLDER=./data
LOGS_FOLDER=./logs
CLEARML_AGENT_ACCESS_KEY=
CLEARML_AGENT_SECRET_KEY=
CLEARML_AGENT_CPU_ONLY=1
CLEARML_HOST_IP=
CLEARML_AGENT_GIT_USER=
CLEARML_AGENT_GIT_PASS=
CLEARML_API_ACCESS_KEY=TNKIR06ST3FC3E9Z1V5NLSS0VJTE56
CLEARML_API_SECRET_KEY=7SXKsMtxyfBkdkbNt0rffOL5lxJC3Gkxyw2gA83P0kczrKcpukbaUu_v9SfgSNGobF4
CLEARML_API_HOST=http://apiserver:8008
CLEARML_WEB_HOST=http://webserver:8080
CLEARML_FILES_HOST=http://fileserver:8081
SERVING__HOST=clearml-serving-inference
SERVING__PORT=8080
CLEARML_SERVING_TASK_ID="CLEARML_SERVING_TASK_PLACEHOLDER"
S3__HOST=minio
S3__PROTOCOL=http
S3__PORT=9000
AWS_PUBLIC_ACCESS_KEY=minioadmin
AWS_SECRET_ACCESS_KEY=minioadmin
DATABASE__USER=simplecv
DATABASE__PASSWORD=simplecv
DATABASE__NAME=simplecv
ADMIN_EMAIL=admin@admin.io
ADMIN_PASSWORD=42
RABBITMQ_DEFAULT_USER="rmuser"
RABBITMQ_DEFAULT_PASS="rmpassword"
INSTALL_PACKAGE=true
UPDATE_SYSTEM=false
DOCKER_REGISTRY=registry.dev.vlabs
DOWNLOAD_USER=
DOWNLOAD_PASSWORD=
CERT_PATH=./cert/
TRAINING__DEVICE=cpu
TRAINING__MIN_IMAGE_COUNT=50
AGENT_GPU=0
AGENT_IMAGE=simplecv/simplecv-yolo:0.0.11

2․ Внесите изменения в файле .env:

2․1 Обязательно укажите параметры пользователя:

DOWNLOAD_USER
DOWNLOAD_PASSWORD

2․2 Измените значения в случае, если сервис clearml планируется разворачивать на другом сервере:

CLEARML_API_HOST
CLEARML_WEB_HOST
CLEARML_FILES_HOST

2․3 Измените значения в случае, если сервис clearml serving планируется разворачивать на другом сервере:

SERVING__HOST
SERVING__PORT

2․4 Измените значение, в случае если планируется использовать для обучения мощности GPU:

TRAINING__DEVICE

В данном случае необходимо использовать TRAINING__DEVICE=cuda.

2․5 Измените значение, в случае если необходимо изменить минимальное количество размеченных изображений для старта обучения модели:

TRAINING__MIN_IMAGE_COUNT

2․6 Измените значение в случае, если планирутся использовать другой графический процессор:

AGENT_GPU

В данном случае AGENT_GPU=N-1, где N - порядковый номер GPU в системе.

2․7 Измените значения в случае, если планирутся использовать отдельное хранилище данных:

S3__HOST
S3__PROTOCOL
S3__PORT
AWS_PUBLIC_ACCESS_KEY
AWS_SECRET_ACCESS_KEY

2․8 Измените значение в случае, если при установке требуется обновить системные пакеты:

UPDATE_SYSTEM

В данном случае UPDATE_SYSTEM=true.

2․9 Измените значение в случае, если планируется использовать протокол HTTPS, а не протокол HTTP:

CERT_PATH

2․10 Измените значения в случае, если необходимо изменить логин и пароль пользователя для брокера очередей:

RABBITMQ_DEFAULT_USER
RABBITMQ_DEFAULT_PASS

2․11 Измените значения в случае, если необходимо изменить название базы данных, а также логин и пароль пользователя:

DATABASE__USER 
DATABASE__PASSWORD
DATABASE__NAME

2․12 Измените значения в случае, если требуется использовать конкретные адрес и пароль для учетной записи администратора:

ADMIN_EMAIL
ADMIN_PASSWORD

3․ Исходный вариант файла .env (в комплекте поставки):

api {
    web_server: http://localhost:8080/
    api_server: http://localhost:8008
    files_server: http://localhost:8081
    credentials {
        "access_key" = "TNKIR06ST3FC3E9Z1V5NLSS0VJTE56"
        "secret_key" = "7SXKsMtxyfBkdkbNt0rffOL5lxJC3Gkxyw2gA83P0kczrKcpukbaUu_v9SfgSNGobF4"
    }
    verify_user_tokens: false
}

4․ Внесите изменения в файле .env:

Измените значения в случае, если сервис clearml планируется разворачивать на другом сервере:

DATABASE__USER 
DATABASE__PASSWORD
DATABASE__NAME

Запуск с помощью скриптов#

1․ Выполните конфигурирование системы:

./start_all.sh host_configure

2․ Запустите сервис clearml:

./start_all.sh clearml

3․ Запустите сервис line:

./start_all.sh line

4․ Запустите clearml-agent:

./start_all.sh start_agent

5․ Запустите сервис clearml-serving:

 ./start_all.sh serving 

Запуск с помощью команд Docker#

1․ Выполните конфигурирование системы:

1․1 Деинсталлируйте старые файлы Docker:

dnf -y remove \
    docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine

1․2 Подключите репозиторий Docker:

dnf -y install dnf-plugins-core
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

1․3 Установите пакеты Docker, python3.12 и zstd:

dnf -y install \
    containerd.io \
    docker-buildx-plugin \
    docker-ce \
    docker-ce-cli \
    docker-compose-plugin \
    python3.12 \
    python3.12-pip \
    zstd

1․4 Активируйте Docker:

systemctl enable --now docker
systemctl enable docker.service containerd.service

1․5 Установите библиотеки для работы clearml-agent:

pip3.12 install \
    clearml-agent==1.9.2    

1․6 При необходимости обновите системные пакеты:

dnf -y update

2․ Выполните конфигурирование портов:

Обратите внимание, что нижеуказанные команды необходимо выполнить только в том случае, если вся установка осуществляется на одном сервере!

SERVICE_IP=$(hostname -I | awk '{print $1}')
sed -i "s/localhost/${SERVICE_IP}/g" clearml.conf
sed -i "s/fileserver/${SERVICE_IP}/g" .env
sed -i "s/apiserver/${SERVICE_IP}/g" .env
sed -i "s/webserver/${SERVICE_IP}/g" .env    
export $(grep -v '^#' .env | xargs)

3․ Настройте доступ к хранилищу docker registry:

docker login dockerhub.visionlabs.ru --username "$DOWNLOAD_USER" --password "$DOWNLOAD_PASSWORD"

4․ Создайте структуру каталогов:

sudo mkdir -p "${DATA_FOLDER}/clearml"
sudo mkdir -p "${DATA_FOLDER}/clearml/data/elastic_7"
sudo mkdir -p "${DATA_FOLDER}/minio"
sudo mkdir -p "${DATA_FOLDER}/storage"
sudo mkdir -p "${DATA_FOLDER}/logs"
sudo chown -R 1001:1001 "${DATA_FOLDER}/logs"
sudo chown -R 1000:1000 "${DATA_FOLDER}/clearml"
sudo chown -R 1000:root "${DATA_FOLDER}/clearml"
sudo mkdir -p "${LOGS_FOLDER}"
sudo chmod a+rw "${LOGS_FOLDER}"
sudo mkdir -p "${DATA_FOLDER}/models"
sudo chmod a+rw "${DATA_FOLDER}/models"

5․ Запустите сервис clearml:

docker compose --profile clearml up -d

6․ Проверьте корректность запуска сервиса clearml:

6․1 Выполните команду:

docker ps

6․2 Проверьте наличие следующих запущенных контейнеров:

async_delete
clearml-webserver
clearml-agent-services
clearml-apiserver
clearml-fileserver
clearml-elastic
clearml-mongo
clearml-redis

7․ Запустите сервис line:

docker compose --profile line up -d

8․ Проверьте корректность запуска сервиса line:

8․1 Выполните команду:

docker ps

8․2 Проверьте наличие следующих запущенных контейнеров:

line-ops-service-1
line-ui-1
line-api-1
rabbitmq
line-minio-1
postgres_db

9․ Запустите агентов clearml:

Обратите внимание, что допустимо запускать любое количество агентов, однако, следует учитывать, что для корректной работы необходимо не менее 8 ГБ VRAM для каждого агента.

9․1 В случае запуска агента clearml на CPU выполнить команду:

clearml-agent --config-file clearml.conf daemon --cpu-only --docker --force-current-version -d

9․2 В случае запуска агента clearml на CPU выполнить команду:

clearml-agent --config-file clearml.conf daemon --gpus "${AGENT_GPU}" --docker --force-current-version -d

10․ Проверьте корректность запуска агентов clearml:

10․1 Выполните команду:

clearml-agent list

10․2 Проверьте наличие следующих агентов:

  • Один экземпляр служебного агента clearml (id: clearml-services)
  • X экземпляров агентов, где X - количество вручную запущенных агентов

11․ Выполните конфигурирование сервиса clearml serving:

SERVING_OUTPUT=$(docker compose exec api clearml-serving create --name "serving")
TASK_ID="${SERVING_OUTPUT#*id=}"
sed -i "s/CLEARML_SERVING_TASK_ID.*$/CLEARML_SERVING_TASK_ID=${TASK_ID}/" .env
export $(grep -v '^#' .env | xargs)

12․ Запустите сервис clearml serving:

Обратите внимание, что должен быть запущен только 1 экземпляр сервиса!

12․1 Выполните команду:

docker compose  --profile serving up -d

12․2 В случае, если по ошибке было запущено несколько экземпляров сервиса, выполните следующие операции:

12․2.1 Выполните команду:

docker compose exec api clearml-serving create --name "serving"

12․2.2 В списке сервисов определите идентификатор ошибочно запущенного экземпляра:

Currently running Serving Services:
{'tags': [], 'id': '0675d3c81099430eaf599bae4cf750bb', 'project': 'DevOps', 'name': 'serving'}
{'tags': [], 'id': '4a08998c0a27428db3fe471b85bd7e6f', 'project': 'DevOps', 'name': 'serving'}

12․2.3 Остановите экземпляр сервиса:

В качестве task_id используйте id ошибочно загруженного экземпляра.

docker compose exec api simplecv_api.commands.stop_serving_tasks "${task_id}"

13․ Проверьте корректность запуска сервиса clearml serving:

13․1 Выполните команду:

docker ps

13․2 Проверьте наличие следующих запущенных контейнеров:

clearml-serving-inference
clearml-serving-triton