Запуск заданий DataSphere Jobs
Вы можете удаленно запускать задания (jobs) — Python- и bash-скрипты и исполняемые бинарные файлы, которые будут выполняться на ВМ Yandex DataSphere.
Задания создаются и выполняются в проектах, но не зависят от ноутбуков и запущенных ВМ в проекте.
Для запуска задания необходимо установить и сконфигурировать интерфейс командной строки Yandex Cloud, чтобы с его помощью аутентифицироваться в Yandex Cloud. Также нужно установить библиотеку datasphere
в свое окружение Python командой pip install datasphere
.
Работа с заданиями также доступна в Visual Studio Code
При запуске задания библиотека datasphere
анализирует окружение, собирает зависимости кода и может передавать их в DataSphere для развертывания окружения на ВМ в облаке. Чтобы избежать лишних системных зависимостей, которые могут нарушить работу задания, рекомендуем использовать виртуальное окружение venv
Примечание
По умолчанию для запуска заданий DataSphere использует менеджер пакетов conda с предустановленным Python 3.10. Чтобы сократить время переноса окружения, используйте эту же версию Python в своих заданиях.
Создайте задание
-
Установите библиотеку
datasphere
:pip install datasphere
-
Подготовьте скрипт или исполняемый бинарный файл.
-
Подготовьте файл с входящими данными.
-
Настройте параметры задания. В файле
config.yaml
укажите ресурсы для выполнения задания и конфигурацию, на которой его нужно запустить:name: <название_задания> desc: <описание_задания> cmd: > python3 <исполняемый_файл> --data ${DATA} --result ${OUTPUT} env: python: auto inputs: - <входящие_данные>: DATA outputs: - <результаты>: OUTPUT cloud-instance-types: - <конфигурация_вычислительных_ресурсов> - <конфигурация_вычислительных_ресурсов> - <конфигурация_вычислительных_ресурсов>
Где:
name
— название задания.desc
— описание задания.cmd
— файл со скриптом и переменные для входящих данных и результатов.env
— параметры окружения. Значениеpython: auto
означает, что необходимо передавать в DataSphere код и зависимостиpip
.inputs
— файл с входящими данными. Название переменнойDATA
можно изменить.outputs
— файл с результатами. Название переменнойOUTPUT
можно изменить.cloud-instance-types
— список допустимых конфигураций вычислительных ресурсов для запуска задания в порядке приоритета.
Для одной конфигурации также допустимо использовать старое поле —
cloud-instance-type
(например,cloud-instance-type: g1.1
), но лучше использовать новое. -
Откройте командную оболочку в папке с подготовленными файлами и запустите задание:
datasphere project job execute -p <идентификатор_проекта> -c config.yaml
Чтобы скопировать идентификатор проекта, выберите нужный проект на главной странице
DataSphere и нажмите ID .
Вы сможете отслеживать прогресс выполнения заданий на странице проекта в интерфейсе DataSphere.
Пример
Рассмотрим пример обучения модели классификации на датасете MNIST, содержащем образцы рукописных цифр. Запуск обучения в DataSphere происходит удаленно, после чего файл с обученной моделью возвращается в качестве результата. Другие примеры для запуска заданий доступны в репозитории
Важно
Для запуска задания требуется Python 3.10.0 и TensorFlow 2.12.0.
-
Установите библиотеку
tensorflow
:pip install tensorflow==2.12.0
-
Подготовьте скрипт в файле
example.py
:import argparse import json import os import shutil import tensorflow as tf parser = argparse.ArgumentParser(prog='example') parser.add_argument('-i', '--input', required=True, help='Input file') parser.add_argument('-m', '--model', required=True, help='Output file') def make_archive(source, destination): base = os.path.basename(destination) name = base.split(".")[0] fmt = base.split(".")[1] shutil.make_archive(name, fmt, source) def main(epoch_count, model_file): print("TensorFlow version: ", tf.__version__) print("") print(os.system("nvidia-smi")) print("") print("Load MNIST dataset...") mnist = tf.keras.datasets.mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() x_train, x_test = x_train / 255.0, x_test / 255.0 print("Build Sequential model...") model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(128, activation="relu"), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10) ]) #predictions = model(x_train[:1]).numpy() #tf.nn.softmax(predictions).numpy() loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True) #loss_fn(y_train[:1], predictions).numpy() print("Compile model...") model.compile(optimizer="adam", loss=loss_fn, metrics=["accuracy"]) print("Fit...") model.fit(x_train, y_train, epochs=epoch_count) print("Evaluate...") model.evaluate(x_test, y_test, verbose=2) print(f"Save model to '{model_file}'") tf.keras.models.save_model(model, "model", save_format="tf") make_archive("model", model_file) print("Done") if __name__ == "__main__": args = parser.parse_args() epoch_count = 5 with open(args.input) as f: data = json.load(f) epoch_count = int(data["epoch_count"]) main(epoch_count, args.model)
-
Подготовьте файл с входящими данными
input.json
:{ "epoch_count" : 3 }
-
Создайте файл
config.yaml
с параметрами задания:name: simple-tf-script desc: Simple TF script cmd: python3 example.py --input ${INPUT} --model ${MODEL} env: python: auto inputs: - input.json: INPUT outputs: - model.zip: MODEL cloud-instance-types: - g1.1
-
Запустите задание:
datasphere project job execute -p <идентификатор_проекта> -c config.yaml
Чтобы скопировать идентификатор проекта, выберите нужный проект на главной странице
DataSphere и нажмите ID .
Модель сохранится в архив model.zip
в папке задания.
См. также
- DataSphere Jobs
- GitHub-репозиторий
с примерами для запуска заданий