Что определить как точку входа при инициализации оценщика pytorch с пользовательским docker изображением для обучения на AWS Sagemaker? - PullRequest
1 голос
/ 08 января 2020

Итак, я создал docker образ для обучения. В dockerfile у меня определена точка входа, так что при выполнении docker run будет запущен мой код python. Чтобы использовать это на aws sagemaker в моем понимании, мне нужно создать оценку pytorch в блокноте jupyter в sagemaker. Я попробовал что-то вроде этого:

import sagemaker
from sagemaker.pytorch import PyTorch

sagemaker_session = sagemaker.Session()

role = sagemaker.get_execution_role()

estimator = PyTorch(entry_point='train.py',
                    role=role,
                    framework_version='1.3.1',
                    image_name='xxx.ecr.eu-west-1.amazonaws.com/xxx:latest',
                    train_instance_count=1,
                    train_instance_type='ml.p3.xlarge',
                    hyperparameters={})

estimator.fit({})

В документации я обнаружил, что в качестве имени изображения я могу указать ссылку на мое изображение docker на aws ecr. Когда я пытаюсь выполнить это, он продолжает жаловаться

[Errno 2] No such file or directory: 'train.py'

Он жалуется безотлагательно, поэтому, конечно, я делаю что-то совершенно неправильно. Я ожидаю, что сначала должен запуститься мой docker образ, и затем он сможет обнаружить, что точка входа не существует.

Но кроме этого, зачем мне указывать точку входа, как в разве не должно быть ясно, что вход в мое обучение просто docker run?

Для лучшего понимания. Файл точки входа python в моем изображении docker выглядит следующим образом:

if __name__=='__main__':
    parser = argparse.ArgumentParser()

    # Hyperparameters sent by the client are passed as command-line arguments to the script.
    parser.add_argument('--epochs', type=int, default=5)
    parser.add_argument('--batch_size', type=int, default=16)
    parser.add_argument('--learning_rate', type=float, default=0.0001)

    # Data and output directories
    parser.add_argument('--output_data_dir', type=str, default=os.environ['OUTPUT_DATA_DIR'])
    parser.add_argument('--train_data_path', type=str, default=os.environ['CHANNEL_TRAIN'])
    parser.add_argument('--valid_data_path', type=str, default=os.environ['CHANNEL_VALID'])

    # Start training
    ...

Позже я хотел бы указать гиперпараметры и каналы данных. Но пока я просто не понимаю, что ставить в качестве точки входа. В документации говорится, что точка входа требуется, и это должен быть локальный / глобальный путь к точке входа ...

1 Ответ

0 голосов
/ 17 января 2020

Если вы действительно хотите использовать отдельный отдельный образ docker, вы должны создать алгоритм Amazon Sagemaker (который является одним из параметров в меню Sagemaker). Здесь вы должны указать ссылку на ваше docker изображение на Amazon ECR, а также входные параметры и каналы данных и т.д. c. При выборе этой опции вы должны не использовать оценщик PyTorch, а Оценщик алгоритма . Таким образом, вам действительно не нужно указывать точку входа, потому что она просто запускает docker при обучении, и точка входа по умолчанию может быть определена в вашем файле docker.

Оценку Pytorch можно использовать при наличии у вас есть код модели, но вы хотите запустить этот код в готовом образе Sagemaker PyTorch docker. Вот почему вы должны, например, указать версию фреймворка PyTorch. В этом случае файл точки входа по умолчанию должен быть расположен рядом с местом хранения вашего блокнота jupyter (просто загрузите файл, нажав кнопку загрузки). Оценщик PyTorch наследует все опции от оценщика framework , где можно найти опции, где разместить точку входа и модель, например source_dir .

...