Skip to content

Установка ClearML Agent

Важно

Вместо <userdomain> укажите свой домен.

Использование аутентификационного токена для установки ClearML Agent

Для генерации пользовательского токена выполните следующие действия:

  1. Аутентифицируйтесь на ClearML Server по адресу: https://clearml-app.<userdomain>.ru или соответствующему адресу предоставленному клиентом.

  2. Войдите в меню Settings профиля пользователя и во вкладке Workspace нажмите на Create new credentials.

  3. Получите и сохраните сгенерированные Access key и Secret key.

  4. В web-интерфейсе ClearML в разеделе Workers and Queues перейдите на вкладку Queues, выберите New Queue и создайте очередь с именем "k8s_scheduler". В качестве шаблона используйте прилагаемый файл: clearml.conf.

  5. Измените параметры для доступа к ClearML Server используя соответствующие токены Access key и Secret key.

Установка ClearML Agent на k8s worker nodes

Для установки ClearML Agent на нодах Kubernetes измените настройки переменных для Helm chart и внесите соответствующие изменения в файл clearml-agent-myvalues.yaml для дальнейшего его использования при развертывании Helm chart. В качестве шаблона используйте прилагаемый файл: clearml.zip, clearml.tar.

Измените значения одним из способов: с помощью шаблона скрипта или выполните пошагово действия настройки.

Изменение значений с помощью шаблона скрипта

bash
DOMAIN=new.<userdomain>.ru
KEY=<key>
SCRT=<secret>
sed -i "s/<userdomain>.ru/$DOMAIN/g" clearml-agent-myvalues.yaml
sed -i -E "s/agentk8sglueKey\s*:\s*\"[^\"]+\"/agentk8sglueKey: \"$KEY\"/g" clearml-agent-myvalues.yaml
sed -i -E "s/agentk8sglueSecret\s*:\s*\"[^\"]+\"/agentk8sglueSecret: \"$SCRT\"/g" clearml-agent-myvalues.yaml
sed -i -E "s/access_key\":\s*\"[^\"]+\"/access_key\": \"$KEY\"/g" clearml-agent-myvalues.yaml
sed -i -E "s/secret_key\":\s*\"[^\"]+\"/secret_key\": \"$SCRT\"/g" clearml-agent-myvalues.yaml
S3_HOST=0123456789.s3mts.ru
S3_KEY=admin-0123456789
S3_SCRT=s3_secret
sed -i -E "s/[0-9]+\.s3mts.ru/$S3_HOST/g" clearml-agent-myvalues.yaml
sed -i -E "s/admin-[0-9]+/$S3_KEY/g" clearml-agent-myvalues.yaml
sed -i -E "s/secret:\s*\"[^\"]+\"/secret: \"$S3_SCRT\"/g" clearml-agent-myvalues.yaml

Изменение значений пошагово

  1. Измените значения clearml.agentk8sglueKey и clearml.agentk8sglueSecret на значения Access Key и Secret Key, полученные на шаге Использование аутентификационного токена для установки ClearML Agent.

    bash
    # -- ClearMl generic configurations
    clearml:
      # -- If this is set, chart will not generate a secret but will use what is defined here
      existingAgentk8sglueSecret: ""
      # -- Agent k8s Glue basic auth key
      agentk8sglueKey: "<key>"
      # -- Agent k8s Glue basic auth secret
      agentk8sglueSecret: "<secret>"
  2. Измените в шаблоне значения всех переменных, указывающих на URL ClearML:

    • api.api_server
    • api.web_server
    • api.files_server
    Пример секции api
    bash
    # -- ClearML configuration file
      clearmlConfig: |-
        # CLEARML-AGENT configuration file
        api {
            # Notice: 'host' is the api server (default port 8008), not the web server.
            api_server: https://clearml-api.<userdomain>.ru
            web_server: https://clearml-app.<userdomain>.ru
            files_server: https://clearml-files.<userdomain>.ru
            # Credentials are generated using the webapp, http://clearml-app.cloud.mts.ru:80/settings
            # Override with os environment: CLEARML_API_ACCESS_KEY / CLEARML_API_SECRET_KEY
            credentials {"access_key": "you key", "secret_key": "you secret"}
        }
     
    # Default Task output_uri. if output_uri is not provided to Task.init, default_output_uri will be used instead.
        sdk.development.default_output_uri="https://clearml-files.<userdomain>.ru"
      # -- Reference to Api server url
      apiServerUrlReference: "https://clearml-api.<userdomain>.ru"
      # -- Reference to File server url
      fileServerUrlReference: "https://clearml-files.<userdomain>.ru"
      # -- Reference to Web server url
      webServerUrlReference: "https://clearml-app.<userdomain>.ru"
  3. Измените значения aws.s3.credentials:

    • aws.s3.credentials.host
    • aws.s3.credentials.key
    • aws.s3.credentials.secret
    Пример секции aws
    bash
    aws {
        s3 {
            # S3 credentials, used for read/write access by various SDK elements
            credentials: [
                {
                    # Host with the namespace for accessing object storage:
                    host: "6839735844.s3mts.ru"
                    # Bucket name - optional:
                    bucket: "clearml-bucket-1"
                    # Key for object storage access:
                    key: "admin-6839735844"
                    # Secret for object storage access:
                    secret: "secret-xuXsuf-2romme-qymwoh"
                    secure: false
                    multipart: false
                }
            ]
        }
        boto3 {
            pool_connections: 512
            max_multipart_concurrency: 16
            #https_validate_certificates: false
        }
    }
  4. Установите ClearML Agent в k8s кластер с помощью Helm:

    bash
    helm install --generate-name allegroai/clearml-agent -f clearml-agent-myvalues.yaml --version 2.0.2
    NAME: clearml-agent-1674060515
    LAST DEPLOYED: Wed Jan 18 19:48:36 2023
    NAMESPACE: default
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
    NOTES:
    Glue Agent deployed.

Совет

Дополнительная документация по установке ClearML Agent в k8s представлена по адресу.

Установка ClearML Agent на виртуальные машины

Для установки ClearML Agent на виртуальные машины выполните следующие действия:

  1. Войдите на виртуальную машину:

    bash
    ssh -l user <vm_ip>
  2. Поднимите привилегии до root:

    bash
    sudo -i
  3. Установите python:

    bash
    root@clearml-vm-node1:~# apt install python3
    Reading package lists... Done
    Building dependency tree... Done
    Reading state information... Done
    python3 is already the newest version (3.9.2-3).
    python3 set to manually installed.
    0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
    root@clearml-vm-node1:~# python3 --version
    Python 3.9.2
  4. Установите pip:

    bash
    user@clearml-vm-node1:~$ sudo apt-get install python3-pip
    Reading package lists... Done
    Building dependency tree... Done
    Reading state information... Done
    python3-pip is already the newest version (20.3.4-4+deb11u1).
    0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
    dgxuser@clearml-vm-node1:~$ pip --version
    pip 20.3.4 from /usr/lib/python3/dist-packages/pip (python 3.9)
    dgxuser@clearml-vm-node1:~$ pip3 --version
    pip 20.3.4 from /usr/lib/python3/dist-packages/pip (python 3.9)
  5. Установите ClearML Agent:

    bash
    user@clearml-vm-node1:~$ python3 -m pip install clearml-agent
    Collecting clearml-agent
      Downloading clearml_agent-1.5.1-py3-none-any.whl (397 kB)
         |████████████████████████████████| 397 kB 1.4 MB/s
    Collecting python-dateutil<2.9.0,>=2.4.2
      Downloading python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)
         |████████████████████████████████| 247 kB 25.3 MB/s
    Collecting pathlib2<2.4.0,>=2.3.0
      Downloading pathlib2-2.3.7.post1-py2.py3-none-any.whl (18 kB)
    Collecting virtualenv<21,>=16
      Downloading virtualenv-20.17.1-py3-none-any.whl (8.8 MB)
         |████████████████████████████████| 8.8 MB 38.3 MB/s
    Requirement already satisfied: six<1.17.0,>=1.13.0 in /usr/lib/python3/dist-packages (from clearml-agent) (1.16.0)
    Requirement already satisfied: urllib3<1.27.0,>=1.21.1 in /usr/lib/python3/dist-packages (from clearml-agent) (1.26.5)
    Collecting furl<2.2.0,>=2.0.0
      Downloading furl-2.1.3-py2.py3-none-any.whl (20 kB)
    Collecting pyparsing<3.1.0,>=2.0.3
      Downloading pyparsing-3.0.9-py3-none-any.whl (98 kB)
         |████████████████████████████████| 98 kB 11.1 MB/s
    Requirement already satisfied: attrs<23.0.0,>=18.0 in /usr/local/lib/python3.9/dist-packages (from clearml-agent) (22.1.0)
    Requirement already satisfied: PyYAML<6.1,>=3.12 in /usr/local/lib/python3.9/dist-packages (from clearml-agent) (6.0)
    Requirement already satisfied: jsonschema<5.0.0,>=2.6.0 in /usr/local/lib/python3.9/dist-packages (from clearml-agent) (4.17.0)
    Requirement already satisfied: requests<2.29.0,>=2.20.0 in /usr/lib/python3/dist-packages (from clearml-agent) (2.25.1)
    Collecting psutil<5.10.0,>=3.4.2
      Downloading psutil-5.9.4-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (280 kB)
         |████████████████████████████████| 280 kB 90.5 MB/s
    Collecting pyjwt<2.7.0,>=2.4.0
      Downloading PyJWT-2.6.0-py3-none-any.whl (20 kB)
    Collecting orderedmultidict>=1.0.1
      Downloading orderedmultidict-1.0.1-py2.py3-none-any.whl (11 kB)
    Requirement already satisfied: pyrsistent!=0.17.0,!=0.17.1,!=0.17.2,>=0.14.0 in /usr/local/lib/python3.9/dist-packages (from jsonschema<5.0.0,>=2.6.0->clearml-agent) (0.19.2)
    Collecting distlib<1,>=0.3.6
      Downloading distlib-0.3.6-py2.py3-none-any.whl (468 kB)
         |████████████████████████████████| 468 kB 79.7 MB/s
    Collecting filelock<4,>=3.4.1
      Downloading filelock-3.9.0-py3-none-any.whl (9.7 kB)
    Collecting platformdirs<3,>=2.4
      Downloading platformdirs-2.6.2-py3-none-any.whl (14 kB)
    Installing collected packages: platformdirs, orderedmultidict, filelock, distlib, virtualenv, python-dateutil, pyparsing, pyjwt, psutil, pathlib2, furl, clearml-agent
      WARNING: The script virtualenv is installed in '/home/dgxuser/.local/bin' which is not on PATH.
      Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
      WARNING: The script clearml-agent is installed in '/home/dgxuser/.local/bin' which is not on PATH.
      Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
    Successfully installed clearml-agent-1.5.1 distlib-0.3.6 filelock-3.9.0 furl-2.1.3 orderedmultidict-1.0.1 pathlib2-2.3.7.post1 platformdirs-2.6.2 psutil-5.9.4 pyjwt-2.6.0 pyparsing-3.0.9 python-dateutil-2.8.2 virtualenv-20.17.1
  6. Измените настройки PATH:

    bash
    user@clearml-vm-node1:~$ grep PATH ~/.bashrc
    user@clearml-vm-node1:~$ cp -av ~/.bashrc ~/.bashrc-
    '/home/user/.bashrc' -> '/home/user/.bashrc-'
    user@clearml-vm-node1:~$ echo 'export PATH=$PATH:/home/user/.local/bin' >> ~/.bashrc
  7. Проверьте версию ClearML Agent:

    bash
    user@clearml-vm-node1:~$ source ~/.bashrc
    user@clearml-vm-node1:~$ echo $PATH
    /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/user/.local/bin:/home/user/.local/bin
    user@clearml-vm-node1:~$ clearml-agent --version
    CLEARML-AGENT version 1.5.1
  8. Для настройки параметров ClearML Agent скопируйте конфигурационный файл агента clearml.conf в домашнюю директорию пользователя.

  9. Запустите сессию агента в shell виртуальной машины:

    bash
    $ screen -d -m "clearml-agent daemon --queue default —foreground"

Важно

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

Установка стека Grafana-Prometheus

Для развертывания системы мониторинга используется kube-prometheus stack, состоящий из коллекции манифестов Kubernetes, Grafana dashboards и Prometheus rules. Prometheus rules объединены с документацией и скриптами, которые упрощают мониторинг кластера Kubernetes с помощью Prometheus, использующих Prometheus Operator.

Используемая версия Helm chart: 45.2.0 (20 Feb, 2023).

Для установки стека Grafana-Prometheus выполните следующие действия:

  1. Добавьте репозиторий prometheus-community:

    bash
    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
    helm repo update
  2. Проверьте доступность репозитория:

    bash
    helm search repo kube-prometheus-stack
    NAME                                          CHART VERSION    APP VERSION    DESCRIPTION
    prometheus-community/kube-prometheus-stack    45.2.0           v0.63.0        kube-prometheus-stack collects Kubernetes manif...
  3. Для установки стека мониторинга в k8s, в файле значений grafana-myvalues.yaml для helm charts в переменной grafana.ingress.hosts установите имя хоста для Grafana server:

    bash
    hosts:
      - "clearml-grafana.cloud.mts.ru"
  4. Установите стек c помощью следующей команды:

    bash
    helm install mon-prometheus-stack prometheus-community/kube-prometheus-stack --version 45.2.0 -f grafana-myvalues.yaml
    NAME: mon-prometheus-stack
    LAST DEPLOYED: Mon Feb 20 15:37:53 2023
    NAMESPACE: default
    STATUS: deployed
    REVISION: 1
    NOTES:
    kube-prometheus-stack has been installed. Check its status by running:
      kubectl --namespace default get pods -l "release=mon-prometheus-stack"
    Visit https://github.com/prometheus-operator/kube-prometheus for instructions on how to create & configure Alertmanager and Prometheus instances using the Operator.
  5. Проверьте статус разворачиваемых pods:

    bash
    helm-charts git:(main) kubectl --namespace default get pods -l "release=mon-prometheus-stack"
    NAME                                                       READY   STATUS    RESTARTS   AGE
    mon-prometheus-stack-kube-operator-54659db86b-zfmgt        1/1     Running   0          75s
    mon-prometheus-stack-kube-state-metrics-6cc6b8d6d8-zfkk2   1/1     Running   0          75s
    mon-prometheus-stack-prometheus-node-exporter-z9dx8        1/1     Running   0          75s
  6. Проведите апгрейд настроек развернутой инсталляции ClearML Server в k8s:

    bash
    helm upgrade clearml allegroai/clearml -f myvals.yaml --version 4.4.0

Установка сертификата TLS/SSL для Grafana

Для установки сертификата TLS/SSL для Grafana выполните следующие действия:

  1. В секции tls файла grafana-myvalues.yaml в значение secretName укажите имя созданного хранилища секретов, а в значении hosts укажите имя хоста для которого будут применены настройки сертификата:

    bash
    tls:
      - secretName: "tls-secret-clearml-app"
        hosts:
        - "clearml-grafana.cloud.mts.ru"
  2. Произведите апгрейд настроек развернутой инсталляции Grafana в k8s помощью следующей команды:

    bash
    helm upgrade mon-prometheus-stack prometheus-community/kube-prometheus-stack --version 45.2.0 -f grafana-myvalues.yaml
    Release "mon-prometheus-stack" has been upgraded. Happy Helming!
    NAME: mon-prometheus-stack
    LAST DEPLOYED: Wed Feb 22 16:59:01 2023
    NAMESPACE: default
    STATUS: deployed
    REVISION: 5
    NOTES:
    kube-prometheus-stack has been installed. Check its status by running:
      kubectl --namespace default get pods -l "release=mon-prometheus-stack"
    Visit https://github.com/prometheus-operator/kube-prometheus for instructions on how to create & configure Alertmanager and Prometheus instances using the Operator.

Проверка функционирования инсталляции

Для проверки доступности приложения в web-интерфейсе ClearML в меню Workers and Queues проверьте наличие зарегистрированных workers.