Использовать бакет OBS Advanced в ML Space

В этой инструкции описано, как подключить бакет OBS Advanced, а также как перенести данные в хранилища ML Space несколькими способами.

Перед началом работы создайте Access Key и Security Key в OBS Advanced.

Примечание

Для подключения доступны только бакеты миграции Advanced. При работе с ними учитывайте следующие ограничения:

  • Возможно подключить только один бакет миграции.

  • Нельзя отключить уже подключенный бакет.

  • Нельзя загружать новые файлы и удалять уже имеющиеся через интерфейс платформы. Для загрузки и удаления файлов используйте консольные утилиты. Подробнее — в документации объектного хранилища S3.

Шаг 1. Подключите бакет OBS Advanced

Для подключения бакета OBS Advanced доступно два способа.

Подключение через интерфейс платформы

Для подключения бакета OBS Advanced с помощью Подключить бакет:

  1. Войдите на Главную страницу.

  2. Перейдите Data Catalog → Обзор хранилища → Подключить бакет.

  3. Заполните требуемые поля и нажмите Подключиться.

  4. Подключенный бакет отразится в списке доступных для работы бакетов. Пример приведен на рисунке ниже.

../../_images/s__obs__bucket-sucess.png

Подключение с помощью коннектора

Для подключения бакета OBS Advanced через коннектор:

  1. Войдите на Главную страницу.

  2. Перейдите Data Catalog → Data Transfer Service → Коннекторы.

  3. Выберите Custom S3 в качестве источника данных.

  4. Заполните требуемые поля и нажмите Создать коннектор.

  5. В открывшемся диалоговом окне введите необходимые данные, где Access Key и Security Key — ключи доступа. В качестве S3 Endpoint укажите https://obs.ru-moscow-1.hc.sbercloud.ru

  6. Подключенный коннектор отразится в списке доступных для работы. Пример приведен на рисунке ниже.

../../_images/s__obs__connector-sucess.png

Шаг 2. Перенесите данные из OBS Advanced в ML Space

Рассмотрим несколько примеров того, как перенести объекты из OBS Advanced в хранилища S3 и NFS ML Space.

Перенос данных на S3 с помощью API и Boto3

Для переноса данных используйте:

  • Правило переноса, в котором в качестве источника укажите коннектор, созданный на шаге 1.

  • Вызовы API:

    1. Создайте коннектор.

    2. Активируйте коннектор с помощью вызова.

      Подсказка

      Системные коннекторы создавать и активировать не нужно.

    3. Создайте перенос.

  • Скрипт для Boto3, в котором укажите параметры подключения:

    s3 = boto3.client(
        service_name="s3",
        aws_access_key_id="S3 access key ID",     # Access Key of OBS bucket
        aws_secret_access_key="S3 security key",     # Secret Key of OBS bucket
        endpoint_url=endpoint_url     # Endpoint_url of OBS bucket
    )
    
    s3.download_file(
        "bucket_name",    # Name of OBS Advanced bucket
        "object_name",    # File to download
        "/home/jovyan/test.py"     # Path to upload file to NFS
    )
    

Перенос данных на NFS требуемого региона

Для переноса данных во время обучения задачи используйте Boto3-скрипт, указав параметры подключения и добавив его в начало скрипта обучения:

Import boto3
BUCKET_NAME = 'advanced-mlspace'    # Name of OBS bucket
KEY = 'data/'     # The path to the data to be transferred

s3 = boto3.resource(
    service_name="s3",
    aws_access_key_id=access_key_id    # Access Key of OBS bucket
    aws_secret_access_key=secret_access_key     # Secret Key of OBS bucket
    endpoint_url=endpoint_url    # Endpoint_url of OBS bucket
)
try:
    s3.Bucket(BUCKET_NAME).download_file(KEY, 'test.py')
except botocore.exceptions.ClientError as e:
    if e.response['Error']['Code'] == "404":
        print("The object does not exist.")
    else:
        raise

При создании задачи обучения в качестве параметра script укажите путь до вашего скрипта на NFS.

job = client_lib.Job(
    base_image='cr.ai.cloud.ru/aicloud-base-images/horovod-cuda11.0-tf2.4.0-pt1.7.1-a100',
    script='/home/jovyan/script.file',    # Path to the script
    n_workers=1,
    instance_type='a100.1gpu.80vG.12C.96G',
    region='SR002-MT'      # Without specifying the region, the training task will be sent to Christofari.V100 by default
)
job.submit()

Перенос данных на S3 с помощью скрипта загрузки данных

Для переноса данных можно воспользоваться утилитой Rclone. Чтобы установить утилиту, выполните в командной строке:

sudo -v ; curl https://rclone.org/install.sh | sudo bash

Данные будут перенесены с помощью скрипта data_loader.sh:

# !/usr/bin/env bash

source_acc_key_id="$1"     # Access key ID of bucket in Advanced OBS
source_secret_key="$2"     # Secret access key of bucket in Advanced OBS
obs_bucket_name="$3"    # Bucket name in OBS
dest_acc_key_id="$4"    # Access key ID of bucket in MLSpace S3
dest_secret_key="$5"    # Secret access key of bucket in MLSpace S3
s3_bucket_name="$6"     # Bucket name in MLSpace S3

rclone config create obsadvanced s3 access_key_id=$source_acc_key_id acl=private endpoint=obs.ru-moscow-1.hc.sbercloud.ru provider=HuaweiOBS region=ru-northwest-2 secret_access_key=$source_secret_key

rclone config create mlspaces3 s3 access_key_id=$dest_acc_key_id acl=private endpoint=n-ws-lmcne.s3pd02.sbercloud.ru provider=Other secret_access_key=$dest_secret_key

rclone copyto obsadvanced:$obs_bucket_name mlspaces3:$s3_bucket_name

Чтобы запустить скрипт, замените соответствующие аргументы на требуемые свойства бакета S3.

./data_loader.sh obs_access_key_id obs_secret_key obs_bucket_name mlspaces3_access_key mlspaces3_secret_key mlspaces3_bucket_name

После выполнения начнется перенос данных из бакета OBS Advanced в бакет S3 ML Space.

Примечание

Скрипт не переносит одинаковые файлы из OBS Advanced в S3 платформы.

Запустили Evolution free tier
для Dev & Test
Получить