Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Практические руководства
    • Все руководства
      • Интеграция сервиса DataSphere с сервисом Yandex Data Processing
      • Классификация изображений на видеокадрах
      • Запуск вычислений по расписанию в DataSphere
      • Запуск вычислений в DataSphere с помощью API
      • Использование данных из Object Storage для обучения модели в DataSphere
      • Создание сервера MLFlow для логирования экспериментов и артефактов
      • Дообучение моделей в DataSphere

В этой статье:

  • Перед началом работы
  • Необходимые платные ресурсы
  • Подготовьте инфраструктуру
  • Создайте каталог
  • Создайте сервисный аккаунт для Object Storage
  • Создайте статический ключ доступа
  • Создайте пару ключей SSH
  • Создайте виртуальную машину
  • Создайте управляемую БД
  • Создайте бакет
  • Установите MLFlow Tracking Server и добавьте его в автозагрузку ВМ
  • Включите автозапуск MLFlow
  • Создайте секреты
  • Обучите модель
  • Как удалить созданные ресурсы
  1. Машинное обучение и искусственный интеллект
  2. Разработка с помощью DataSphere
  3. Создание сервера MLFlow для логирования экспериментов и артефактов

Создание сервера MLFlow для логирования экспериментов и артефактов

Статья создана
Yandex Cloud
Улучшена
Egor K.
Обновлена 6 марта 2025 г.
  • Перед началом работы
    • Необходимые платные ресурсы
  • Подготовьте инфраструктуру
    • Создайте каталог
    • Создайте сервисный аккаунт для Object Storage
  • Создайте статический ключ доступа
  • Создайте пару ключей SSH
  • Создайте виртуальную машину
  • Создайте управляемую БД
  • Создайте бакет
  • Установите MLFlow Tracking Server и добавьте его в автозагрузку ВМ
    • Включите автозапуск MLFlow
  • Создайте секреты
  • Обучите модель
  • Как удалить созданные ресурсы

В практическом руководстве показано, как развернуть MLFlow Tracking Server для логирования экспериментов и артефактов на отдельной виртуальной машине Yandex Compute Cloud. Эксперименты будут проводиться в JupyterLab Notebook. Для хранения внутренних объектов будет использоваться база данных Yandex Managed Service for PostgreSQL, а для хранения артефактов — бакет Yandex Object Storage.

Чтобы создать сервер MLFlow для логирования экспериментов и артефактов JupyterLab Notebook:

  1. Подготовьте инфраструктуру.
  2. Создайте статический ключ доступа.
  3. Создайте пару ключей SSH.
  4. Создайте виртуальную машину.
  5. Создайте управляемую БД.
  6. Создайте бакет.
  7. Установите MLFlow Tracking Server и добавьте его в автозагрузку ВМ.
  8. Создайте секреты.
  9. Обучите модель.

Если созданные ресурсы вам больше не нужны, удалите их.

Перед началом работыПеред началом работы

Перед началом работы нужно зарегистрироваться в Yandex Cloud, настроить сообщество и привязать к нему платежный аккаунт:

  1. На главной странице DataSphere нажмите Попробовать бесплатно и выберите аккаунт для входа — Яндекс ID или рабочий аккаунт в федерации (SSO).
  2. Выберите организацию Yandex Cloud Organization, в которой вы будете работать в Yandex Cloud.
  3. Создайте сообщество.
  4. Привяжите платежный аккаунт к сообществу DataSphere, в котором вы будете работать. Убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его в интерфейсе DataSphere.

Необходимые платные ресурсыНеобходимые платные ресурсы

В стоимость реализации обучения модели с помощью данных из Object Storage входят:

  • плата за использование вычислительных ресурсов DataSphere;
  • плата за использование вычислительных ресурсов Compute Cloud;
  • плата за запущенный кластер Managed Service for PostgreSQL;
  • плата за хранение данных в бакете (см. тарифы Object Storage);
  • плата за операции с данными (см. тарифы Object Storage).

Подготовьте инфраструктуруПодготовьте инфраструктуру

Войдите в консоль управления Yandex Cloud и выберите организацию, в которой вы работаете с DataSphere. На странице Yandex Cloud Billing убедитесь, что у вас подключен платежный аккаунт.

Если у вас есть активный платежный аккаунт, на странице облака вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура.

Примечание

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

Создайте каталогСоздайте каталог

Консоль управления
  1. В консоли управления выберите облако и нажмите кнопку Создать каталог.
  2. Введите имя каталога, например, data-folder.
  3. Нажмите кнопку Создать.

Создайте сервисный аккаунт для Object StorageСоздайте сервисный аккаунт для Object Storage

Для доступа к бакету в Object Storage вам понадобится сервисный аккаунт с ролями storage.viewer и storage.uploader.

Консоль управления
  1. В консоли управления перейдите в каталог data-folder.
  2. В списке сервисов выберите Identity and Access Management.
  3. Нажмите кнопку Создать сервисный аккаунт.
  4. Введите имя сервисного аккаунта, например, datasphere-sa.
  5. Нажмите Добавить роль и назначьте сервисному аккаунту роли storage.viewer и storage.uploader.
  6. Нажмите кнопку Создать.

Создайте статический ключ доступаСоздайте статический ключ доступа

Чтобы получить доступ к Object Storage из DataSphere, вам понадобится статический ключ.

Консоль управления
CLI
API
  1. В консоли управления перейдите в каталог, которому принадлежит сервисный аккаунт.
  2. В списке сервисов выберите Identity and Access Management.
  3. На панели слева выберите Сервисные аккаунты.
  4. В открывшемся списке выберите сервисный аккаунт datasphere-sa.
  5. На верхней панели нажмите кнопку Создать новый ключ.
  6. Выберите Создать статический ключ доступа.
  7. Задайте описание ключа и нажмите кнопку Создать.
  8. Сохраните идентификатор и секретный ключ. После закрытия диалога значение ключа будет недоступно.
  1. Создайте ключ доступа для сервисного аккаунта datasphere-sa:

    yc iam access-key create --service-account-name datasphere-sa
    

    Результат:

    access_key:
      id: aje6t3vsbj8l********
      service_account_id: ajepg0mjt06s********
      created_at: "2022-07-18T14:37:51Z"
      key_id: 0n8X6WY6S24N7Oj*****
    secret: JyTRFdqw8t1kh2-OJNz4JX5ZTz9Dj1rI9hx*****
    
  2. Сохраните идентификатор key_id и секретный ключ secret. Получить значение ключа снова будет невозможно.

Чтобы создать ключ доступа, воспользуйтесь методом create для ресурса AccessKey.

Создайте пару ключей SSHСоздайте пару ключей SSH

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

Примечание

В публичных образах Linux, предоставляемых Yandex Cloud, возможность подключения по протоколу SSH с использованием логина и пароля по умолчанию отключена.

Чтобы создать пару ключей:

Linux/macOS
Windows 10/11
Windows 7/8
  1. Откройте терминал.

  2. Создайте новый ключ с помощью команды ssh-keygen:

    ssh-keygen -t ed25519 -C "<опциональный_комментарий>"
    

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

    После выполнения команды вам будет предложено указать имя и путь к файлам с ключами, а также ввести пароль для закрытого ключа. Если задать только имя, пара ключей будет создана в текущей директории. Открытый ключ будет сохранен в файле с расширением .pub, закрытый ключ — в файле без расширения.

    По умолчанию команда предлагает сохранить ключ под именем id_ed25519 в директории /home/<имя_пользователя>/.ssh. Если в этой директории уже есть SSH-ключ с именем id_ed25519, вы можете случайно перезаписать его и потерять доступ к ресурсам, в которых он используется. Поэтому рекомендуется использовать уникальные имена для всех SSH-ключей.

Если у вас еще не установлен OpenSSH, установите его по инструкции.

  1. Запустите cmd.exe или powershell.exe (предварительно обновите PowerShell).

  2. Создайте новый ключ с помощью команды ssh-keygen:

    ssh-keygen -t ed25519 -C "<опциональный_комментарий>"
    

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

    После выполнения команды вам будет предложено указать имя и путь к файлам с ключами, а также ввести пароль для закрытого ключа. Если задать только имя, пара ключей будет создана в текущей директории. Открытый ключ будет сохранен в файле с расширением .pub, закрытый ключ — в файле без расширения.

    По умолчанию команда предлагает сохранить ключ под именем id_ed25519 в папку C:\Users\<имя_пользователя>/.ssh. Если в этой директории уже есть SSH-ключ с именем id_ed25519, вы можете случайно перезаписать его и потерять доступ к ресурсам, в которых он используется. Поэтому рекомендуется использовать уникальные имена для всех SSH-ключей.

Создайте ключи с помощью приложения PuTTY:

  1. Скачайте и установите PuTTY.

  2. Добавьте папку с PuTTY в переменную PATH:

    1. Нажмите кнопку Пуск и в строке поиска Windows введите Изменение системных переменных среды.
    2. Справа снизу нажмите кнопку Переменные среды....
    3. В открывшемся окне найдите параметр PATH и нажмите Изменить.
    4. Добавьте путь к папке в список.
    5. Нажмите кнопку ОК.
  3. Запустите приложение PuTTYgen.

  4. В качестве типа генерируемой пары выберите EdDSA. Нажмите Generate и поводите курсором в поле выше до тех пор, пока не закончится создание ключа.

    ssh_generate_key

  5. В поле Key passphrase введите надежный пароль. Повторно введите его в поле ниже.

  6. Нажмите кнопку Save private key и сохраните закрытый ключ. Никому не сообщайте ключевую фразу от него.

  7. Нажмите кнопку Save public key и сохраните открытый ключ в файле <имя_ключа>.pub.

Создайте виртуальную машинуСоздайте виртуальную машину

Консоль управления
  1. На странице каталога в консоли управления нажмите кнопку Создать ресурс и выберите Виртуальная машина.

  2. В блоке Образ загрузочного диска в поле Поиск продукта введите Ubuntu 22.04 и выберите публичный образ Ubuntu 22.04.

  3. В блоке Расположение выберите зону доступности ru-central1-a.

  4. В блоке Диски и файловые хранилища выберите тип диска SSD и задайте размер 20 ГБ.

  5. В блоке Вычислительные ресурсы перейдите на вкладку Своя конфигурация и укажите необходимую платформу, количество vCPU и объем RAM:

    • Платформа — Intel Ice Lake.
    • vCPU — 2.
    • Гарантированная доля vCPU — 100%.
    • RAM — 4 ГБ.
  6. В блоке Сетевые настройки:

    • В поле Подсеть выберите подсеть, которая указана в настройках проекта DataSphere. У подсети должен быть настроен NAT-шлюз.
    • В поле Публичный IP-адрес оставьте значение Автоматически, чтобы назначить ВМ случайный внешний IP-адрес из пула Yandex Cloud, или выберите статический адрес из списка, если вы зарезервировали его заранее.
  7. В блоке Доступ выберите вариант SSH-ключ и укажите данные для доступа на ВМ:

    • В поле Логин введите имя пользователя. Не используйте имя root или другие имена, зарезервированные ОС. Для выполнения операций, требующих прав суперпользователя, используйте команду sudo.
    • В поле SSH-ключ выберите SSH-ключ, сохраненный в вашем профиле пользователя организации.

      Если в вашем профиле нет сохраненных SSH-ключей или вы хотите добавить новый ключ:

      • Нажмите кнопку Добавить ключ.
      • Задайте имя SSH-ключа.
      • Загрузите или вставьте содержимое открытого SSH-ключа. Пару SSH-ключей для подключения к ВМ по SSH необходимо создать самостоятельно.
      • Нажмите кнопку Добавить.

      SSH-ключ будет добавлен в ваш профиль пользователя организации.

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

  8. В блоке Общая информация задайте имя ВМ: mlflow-vm.

  9. В блоке Дополнительно выберите сервисный аккаунт datasphere-sa.

  10. Нажмите кнопку Создать ВМ.

Создайте управляемую БДСоздайте управляемую БД

Консоль управления
  1. В консоли управления выберите каталог, в котором нужно создать кластер БД.
  2. Выберите сервис Managed Service for PostgreSQL.
  3. Нажмите кнопку Создать кластер.
  4. Введите имя кластера, например mlflow-bd.
  5. В блоке Класс хоста выберите конфигурацию s3-c2-m8.
  6. В блоке Размер хранилища выберите 250 ГБ.
  7. В блоке База данных введите имя пользователя и пароль. Они понадобятся для подключения.
  8. В блоке Хосты выберите зону доступности ru-central1-a.
  9. Нажмите кнопку Создать кластер.
  10. Зайдите в созданную БД и нажмите Подключиться.
  11. Сохраните ссылку на хост из поля host — она понадобится для подключения.

Создайте бакетСоздайте бакет

Консоль управления
  1. В консоли управления выберите каталог, в котором хотите создать бакет.
  2. В списке сервисов выберите Object Storage.
  3. Справа сверху нажмите кнопку Создать бакет.
  4. В поле Имя укажите имя бакета, например mlflow-bucket.
  5. В полях Доступ на чтение объектов, Доступ к списку объектов и Доступ на чтение настроек выберите Ограниченный.
  6. Нажмите кнопку Создать бакет.
  7. Чтобы создать папку для артефактов MLflow, зайдите в созданный бакет и нажмите Создать папку.
  8. Введите имя папки, например artifacts.

Установите MLFlow Tracking Server и добавьте его в автозагрузку ВМУстановите MLFlow Tracking Server и добавьте его в автозагрузку ВМ

  1. Подключитесь к виртуальной машине через SSH.

  2. Скачайте дистрибутив Anaconda:

    curl --remote-name https://repo.anaconda.com/archive/Anaconda3-2023.07-1-Linux-x86_64.sh
    
  3. Запустите установку:

    bash Anaconda3-2023.07-1-Linux-x86_64.sh
    

    Дождитесь окончания установки и перезапустите оболочку.

  4. Создайте окружение:

    conda create -n mlflow
    
  5. Активируйте окружение:

    conda activate mlflow
    
  6. Установите необходимые пакеты, последовательно выполнив команды:

    conda install -c conda-forge mlflow
    conda install -c anaconda boto3
    pip install psycopg2-binary
    pip install pandas
    
  7. Создайте переменные окружения для доступа к S3:

    • Откройте файл с переменными:

      sudo nano /etc/environment
      
    • Добавьте в него следующие строки, подставив значение внутреннего IP вашей виртуальной машины:

      MLFLOW_S3_ENDPOINT_URL=https://storage.yandexcloud.net/
      MLFLOW_TRACKING_URI=http://<внутренний_IP-адрес_виртуальной_машины>:8000
      
  8. Укажите данные, которые будут использоваться библиотекой boto3 для доступа к S3:

    • Создайте папку .aws:

      mkdir ~/.aws
      
    • Создайте файл credentials:

      nano ~/.aws/credentials
      
    • Добавьте в него следующие строки, подставив идентификатор и значение статического ключа:

      [default]
      aws_access_key_id=<идентификатор_статического_ключа>
      aws_secret_access_key=<секретный_ключ>
      
  9. Запустите MLFlow Tracking Server, подставив данные вашего кластера:

    mlflow server --backend-store-uri postgresql://<имя_пользователя>:<пароль>@<хост>:6432/db1?sslmode=verify-full --default-artifact-root s3://mlflow-bucket/artifacts -h 0.0.0.0 -p 8000
    

    Проверить подключение к MLFlow можно по ссылке http://<публичный_IP-адрес_виртуальной_машины>:8000.

Включите автозапуск MLFlowВключите автозапуск MLFlow

Чтобы MLFlow автоматически запускался после перезагрузки виртуальной машины, нужно сделать его службой Systemd.

  1. Создайте директории для хранения логов и ошибок:

    mkdir ~/mlflow_logs/
    mkdir ~/mlflow_errors/
    
  2. Создайте файл mlflow-tracking.service:

    sudo nano /etc/systemd/system/mlflow-tracking.service
    
  3. Добавьте в него следующие строки, подставив свои данные:

    [Unit]
    Description=MLflow Tracking Server
    After=network.target
    
    [Service]
    Environment=MLFLOW_S3_ENDPOINT_URL=https://storage.yandexcloud.net/
    Restart=on-failure
    RestartSec=30
    StandardOutput=file:/home/<имя_пользователя_ВМ>/mlflow_logs/stdout.log
    StandardError=file:/home/<имя_пользователя_ВМ>/mlflow_errors/stderr.log
    User=<имя_пользователя_ВМ>
    ExecStart=/bin/bash -c 'PATH=/home/<имя_пользователя_ВМ>/anaconda3/envs/mlflow_env/bin/:$PATH exec mlflow server --backend-store-uri postgresql://<имя_пользователя_БД>:<пароль>@<хост>:6432/db1?sslmode=verify-full --default-artifact-root s3://mlflow-bucket/artifacts -h 0.0.0.0 -p 8000'
    
    [Install]
    WantedBy=multi-user.target
    

    Где:

    • <имя_пользователя_ВМ> — имя учетной записи пользователя ВМ;
    • <имя_пользователя_БД> — имя пользователя, указанное при создании кластера БД.
  4. Запустите сервис и активируйте автозагрузку при старте системы:

    sudo systemctl daemon-reload
    sudo systemctl enable mlflow-tracking
    sudo systemctl start mlflow-tracking
    sudo systemctl status mlflow-tracking
    

Создайте секретыСоздайте секреты

  1. Выберите нужный проект в своем сообществе или на главной странице DataSphere во вкладке Недавние проекты.

  2. В блоке Ресурсы проекта нажмите Секрет.
  3. Нажмите Создать.
  4. В поле Имя задайте имя секрета — MLFLOW_S3_ENDPOINT_URL.
  5. В поле Значение вставьте адрес — https://storage.yandexcloud.net/.
  6. Нажмите Создать.
  7. Создайте еще три секрета:
    • MLFLOW_TRACKING_URI со значением http://<внутренний_IP-адрес_виртуальной_машины>:8000;
    • AWS_ACCESS_KEY_ID с идентификатором статического ключа;
    • AWS_SECRET_ACCESS_KEY со значением статического ключа.

Обучите модельОбучите модель

В примере используется набор данных для прогнозирования качества вина на основе количественных характеристик, таких как кислотность, водородный показатель, остаточный сахар и так далее. Чтобы обучить модель, скопируйте код в ячейки ноутбука.

  1. Откройте проект DataSphere:

    1. Выберите нужный проект в своем сообществе или на главной странице DataSphere во вкладке Недавние проекты.

    2. Нажмите кнопку Открыть проект в JupyterLab и дождитесь окончания загрузки.
    3. Откройте вкладку с ноутбуком.
  2. Установите необходимые модули:

    %pip install mlflow
    
  3. Импортируйте необходимые библиотеки:

    import os
    import warnings
    import sys
    
    import pandas as pd
    import numpy as np
    from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
    from sklearn.model_selection import train_test_split
    from sklearn.linear_model import ElasticNet
    from urllib.parse import urlparse
    import mlflow
    import mlflow.sklearn
    from mlflow.models import infer_signature
    import logging
    
  4. Cоздайте эксперимент в MLFlow:

    mlflow.set_experiment("my_first_experiment")
    
  5. Создайте функцию оценки качества прогноза:

    def eval_metrics(actual, pred):
      rmse = np.sqrt(mean_squared_error(actual, pred))
      mae = mean_absolute_error(actual, pred)
      r2 = r2_score(actual, pred)
      return rmse, mae, r2
    
  6. Подготовьте данные, обучите модель и зарегистрируйте ее в MLflow:

    logging.basicConfig(level=logging.WARN)
    logger = logging.getLogger(__name__)
    
    warnings.filterwarnings("ignore")
    np.random.seed(40)
    
    # Загружаем датасет для оценки качества вина
    csv_url = (
       "https://raw.githubusercontent.com/mlflow/mlflow/master/tests/datasets/winequality-red.csv"
    )
    try:
        data = pd.read_csv(csv_url, sep=";")
    except Exception as e:
        logger.exception(
            "Unable to download training & test CSV, check your internet connection. Error: %s", e
       )
    
    # Разделяем датасет на обучающую и тестовую выборку
    train, test = train_test_split(data)
    
    # Выделяем целевую переменную и переменные, используемые для прогноза
    train_x = train.drop(["quality"], axis=1)
    test_x = test.drop(["quality"], axis=1)
    train_y = train[["quality"]]
    test_y = test[["quality"]]
    
    alpha = 0.5
    l1_ratio = 0.5
    
    # Создаем запуск в mlflow
    with mlflow.start_run():
      
       # Создаем и обучаем модель ElasticNet
       lr = ElasticNet(alpha=alpha, l1_ratio=l1_ratio, random_state=42)
       lr.fit(train_x, train_y)
      
       # Делаем прогнозы качества на тестовой выборке
       predicted_qualities = lr.predict(test_x)
    
       (rmse, mae, r2) = eval_metrics(test_y, predicted_qualities)
    
       print("Elasticnet model (alpha={:f}, l1_ratio={:f}):".format(alpha, l1_ratio))
       print("  RMSE: %s" % rmse)
       print("  MAE: %s" % mae)
       print("  R2: %s" % r2)
    
       # Логируем информацию о гиперпараметрах и метриках качества в MLflow
       mlflow.log_param("alpha", alpha)
       mlflow.log_param("l1_ratio", l1_ratio)
       mlflow.log_metric("rmse", rmse)
       mlflow.log_metric("r2", r2)
       mlflow.log_metric("mae", mae)
    
       predictions = lr.predict(train_x)
       signature = infer_signature(train_x, predictions)
    
       tracking_url_type_store = urlparse(mlflow.get_tracking_uri()).scheme
    
       # Регистрируем модель в MLflow
       if tracking_url_type_store != "file":
         mlflow.sklearn.log_model(
               lr, "model", registered_model_name="ElasticnetWineModel", signature=signature
         )
       else:
          mlflow.sklearn.log_model(lr, "model", signature=signature)
    

    Проверить результат можно по ссылке http://<публичный_IP-адрес_виртуальной_машины>:8000.

Как удалить созданные ресурсыКак удалить созданные ресурсы

Чтобы перестать платить за созданные ресурсы:

  • удалите виртуальную машину;
  • удалите кластер базы данных;
  • удалите объекты из бакета;
  • удалите бакет;
  • удалите проект.

Была ли статья полезна?

Предыдущая
Использование данных из Object Storage для обучения модели в DataSphere
Следующая
Дообучение моделей в DataSphere
Проект Яндекса
© 2025 ООО «Яндекс.Облако»