Использование данных из Object Storage для обучения модели в Yandex DataSphere
Вы создадите бакет в Object Storage, смонтируете его к файловой системе Windows с помощью rclone
Чтобы использовать данные из Object Storage для обучения модели в DataSphere:
- Подготовьте инфраструктуру.
- Создайте статический ключ доступа.
- Создайте бакет.
- Настройте подключение к Object Storage.
- Смонтируйте бакет.
- Подготовьте данные для обучения.
- Создайте коннектор S3.
- Подключите бакет к проекту.
- Обучите модель.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Перед началом работы нужно зарегистрироваться в Yandex Cloud, настроить сообщество и привязать к нему платежный аккаунт:
- На главной странице DataSphere
нажмите Попробовать бесплатно и выберите аккаунт для входа — Яндекс ID или рабочий аккаунт в федерации (SSO). - Выберите организацию Yandex Cloud Organization, в которой вы будете работать в Yandex Cloud.
- Создайте сообщество.
- Привяжите платежный аккаунт к сообществу DataSphere, в котором вы будете работать. Убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе
ACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его в интерфейсе DataSphere.
Необходимые платные ресурсы
В стоимость реализации обучения модели с помощью данных из Object Storage входят:
- Плата за использование вычислительных ресурсов DataSphere.
- Плата за хранение данных в бакете (см. тарифы Object Storage).
- Плата за операции с данными (см. тарифы Object Storage).
Подготовьте инфраструктуру
Войдите в консоль управления
Если у вас есть активный платежный аккаунт, на странице облака
Примечание
Если вы работаете с Yandex Cloud через федерацию удостоверений, вам может быть недоступна платежная информация. В этом случае обратитесь к администратору вашей организации в Yandex Cloud.
Подготовьте рабочее окружение
Скачайте и установите дистрибутив winfsp
Скачайте с сайта производителя и распакуйте в свою рабочую директорию на локальном компьютере:
Создайте каталог
- В консоли управления
выберите облако и нажмите кнопку Создать каталог. - Введите имя каталога, например,
data-folder
. - Нажмите кнопку Создать.
Создайте сервисный аккаунт для Object Storage
Для доступа к бакету в Object Storage вам понадобится сервисный аккаунт с ролью storage.editor
.
- В консоли управления
перейдите в каталогdata-folder
. - В списке сервисов выберите Identity and Access Management.
- Нажмите кнопку Создать сервисный аккаунт.
- Введите имя сервисного аккаунта, например,
datasphere-sa
. - Нажмите Добавить роль и назначьте сервисному аккаунту роль
storage.editor
. - Нажмите кнопку Создать.
Создайте статический ключ доступа
Чтобы получить доступ к Object Storage из DataSphere, вам понадобится статический ключ.
- В консоли управления
перейдите в каталог, которому принадлежит сервисный аккаунт. - В списке сервисов выберите Identity and Access Management.
- На панели слева выберите
Сервисные аккаунты. - В открывшемся списке выберите сервисный аккаунт
datasphere-sa
. - На верхней панели нажмите кнопку
Создать новый ключ. - Выберите Создать статический ключ доступа.
- Задайте описание статического ключа и нажмите кнопку Создать.
- Сохраните идентификатор и секретный ключ. После закрытия диалога значение ключа будет недоступно.
-
Создайте статический ключ доступа для сервисного аккаунта
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*****
Подробнее о команде
yc iam access-key create
см. в справочнике CLI. -
Сохраните идентификатор
key_id
и секретный ключsecret
. Получить значение ключа снова будет невозможно.
Создайте бакет
- В консоли управления
выберите каталог, в котором хотите создать бакет. - В списке сервисов выберите Object Storage.
- Справа сверху нажмите кнопку Создать бакет.
- В поле Имя укажите имя бакета в соответствии с правилами именования.
- В полях Доступ на чтение объектов, Доступ к списку объектов и Доступ на чтение настроек выберите Ограниченный.
- Нажмите кнопку Создать бакет.
-
Если у вас еще нет AWS CLI, установите и сконфигурируйте его.
-
Создайте бакет, указав имя бакета в соответствии с правилами именования:
aws --endpoint-url https://storage.yandexcloud.net \ s3 mb s3://<имя_бакета>
Результат:
make_bucket: <имя_бакета>
Примечание
Terraform взаимодействует с Object Storage от имени сервисного аккаунта. Назначьте сервисному аккаунту нужную роль, например storage.admin
, на каталог, в котором будут создаваться ресурсы.
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
-
Опишите в конфигурационном файле параметры для создания сервисного аккаунта и ключа доступа:
... // Создание сервисного аккаунта resource "yandex_iam_service_account" "sa" { name = "<имя_сервисного_аккаунта>" } // Назначение роли сервисному аккаунту resource "yandex_resourcemanager_folder_iam_member" "sa-admin" { folder_id = "<идентификатор_каталога>" role = "storage.admin" member = "serviceAccount:${yandex_iam_service_account.sa.id}" } // Создание статического ключа доступа resource "yandex_iam_service_account_static_access_key" "sa-static-key" { service_account_id = yandex_iam_service_account.sa.id description = "static access key for object storage" }
-
Добавьте в конфигурационный файл блок с параметрами бакета, указав имя бакета в соответствии с правилами именования:
resource "yandex_storage_bucket" "<имя_бакета>" { access_key = yandex_iam_service_account_static_access_key.sa-static-key.access_key secret_key = yandex_iam_service_account_static_access_key.sa-static-key.secret_key bucket = "<имя_бакета>" }
Подробнее о ресурсе
yandex_storage_bucket
см. в документации провайдера Terraform. -
Создайте ресурсы:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
Terraform создаст все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Используйте метод REST API create для ресурса Bucket, вызов gRPC API BucketService/Create или метод S3 API create.
Настройте подключение к Object Storage
Чтобы перенести данные с локального диска в Object Storage, вам нужно настроить утилиту rclone
.
-
В рабочей директории запустите командную строку от имени администратора и выполните команду:
.\psexec -i -s cmd.exe
-
В открывшейся консоли выполните команду
whoami
и убедитесь, что сессия запущена от имени системного пользователя. -
Перейдите в рабочую директорию и запустите конфигурацию утилиты
rclone
:rclone.exe config
-
Следуя запросам приложения, создайте новый профиль подключения:
- Выберите создание нового профиля: введите в терминал значение
n
. - Введите имя подключения:
s3-connect
. - Выберите тип хранилища: введите в терминал значение
4
. - Выберите провайдера: введите в терминал значение
1
. - Выберите ручной способ ввода учетных данных: введите в терминал значение
1
. - Введите в терминале идентификатор секретного ключа.
- Введите в терминале значение секретного ключа.
- Укажите регион: введите в терминал значение
ru-central1
. - Укажите эндпоинт: введите в терминал значение
storage.yandexcloud.net
. - Остальные настройки можно оставить по умолчанию — нажимайте Enter, чтобы их пропустить.
- Выберите создание нового профиля: введите в терминал значение
Примечание
При необходимости вы можете выполнить расширенную настройку подключения. Для этого на шаге Edit advanced config?
введите в терминале y
. Подробнее с расширенными настройками можно ознакомиться на странице документацииrclone
.
Смонтируйте бакет к файловой системе Windows
-
Проверьте подключение к бакету. В той же командной строке, где выполнялась настройка подключения, выполните команду, указав имя бакета:
rclone.exe ls s3-connect:<имя_бакета>
Если конфигурация настроена правильно, в консоль будет выведен список объектов бакета.
-
Смонтируйте бакет в файловую систему, указав имя бакета и свободную букву диска в файловой системе:
rclone.exe mount s3-connect:<имя_бакета> <буква_диска>: --vfs-cache-mode full
В проводнике Windows появится новый диск с объектами из бакета.
Подготовьте данные для обучения
- Скачайте CSV-файл
, содержащий данные по предсказанию наличия диабета. Датасет создан на основе данных Kaggle за 2015 год. - Скопируйте файл в смонтированный бакет.
Подключите бакет к проекту
Чтобы подключиться к бакету из DataSphere, вам понадобится коннектор S3:
-
Выберите нужный проект в своем сообществе или на главной странице
DataSphere во вкладке Недавние проекты. - В правом верхнем углу нажмите кнопку Создать ресурс. Во всплывающем окне выберите Коннектор S3.
- Заполните поля:
- Имя — имя создаваемого коннектора, например
s3-datasphere-connect
. - Эндпоинт — хост Object Storage —
https://storage.yandexcloud.net/
. - Бакет — имя вашего бакета.
- Имя раздела при подключении — название тома при монтировании бакета в файловую систему проекта.
- Идентификатор статического ключа доступа, который используется для подключения к хранилищу.
- В поле Статический ключ доступа нажмите Создать. В открывшемся окне введите имя секрета и секретный ключ, который используется для подключения к хранилищу.
- Имя — имя создаваемого коннектора, например
- Нажмите кнопку Создать.
- Перейдите на страницу коннектора S3 и нажмите кнопку Активировать. После активации бакет будет доступен в интерфейсе JupyterLab в списке на вкладке S3 Mounts
, и его можно будет просматривать как файловую систему.
Обучите модель
Склонируйте Git-репозиторий, в котором находится ноутбук diabetes_catboost.ipynb
с примером обучения модели CatBoost
-
Откройте проект DataSphere:
-
Выберите нужный проект в своем сообществе или на главной странице
DataSphere во вкладке Недавние проекты. - Нажмите кнопку Открыть проект в JupyterLab и дождитесь окончания загрузки.
- Откройте вкладку с ноутбуком.
-
- В верхнем меню нажмите Git и выберите Clone.
- В открывшемся окне введите URI репозитория
https://github.com/yandex-cloud-examples/yc-datasphere-s3-mount.git
и нажмите кнопку Clone.
В ноутбуке diabetes_catboost.ipynb
вы подключитесь к датасету diabetes_data.csv
в вашем смонтированном бакете и обучите модель CatBoost
:
-
Установите необходимые модули:
%pip install catboost %pip install scikit-learn %pip install ipywidgets
-
Импортируйте необходимые библиотеки:
import pandas as pd from catboost import CatBoostClassifier from sklearn.metrics import classification_report from sklearn.model_selection import train_test_split
-
Загрузите данные для обучения:
data = pd.read_csv('<путь_к_датасету>') data.head()
Чтобы получить путь к файлу
diabetes_data.csv
, во вкладке S3 Mounts нажмите на него правой кнопкой мыши и выберите Copy path. -
Разделите факторы для обучения и целевую переменную:
X = data.loc[:, data.columns != 'Diabetes_binary'] y = data['Diabetes_binary']
-
Разделите выборку на обучающую и тестовую:
X_train, X_validation, y_train, y_validation = train_test_split(X, y, train_size=0.75, random_state=42)
-
Создайте классификатор
СatBoost
и задайте гиперпараметры:model = CatBoostClassifier( iterations=100, random_seed=42, logging_level='Verbose' )
-
Запустите обучение модели:
model.fit( X_train, y_train, eval_set=(X_validation, y_validation), plot=True )
-
Выведите метрики качества обученной модели на экран:
print(classification_report(y_validation, model.predict(X_validation)))
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы:
- Удалите объекты из бакета.
- Удалите бакет.
- Удалите проект.