Где хранится скрипт entry_point в пользовательском контейнере учебного задания Sagemaker Framework? - PullRequest
1 голос
/ 25 мая 2020

Я пытаюсь создать свою собственную настраиваемую платформу Sagemaker Framework, которая запускает настраиваемый сценарий python для обучения модели машинного обучения с использованием параметра entry_point.

Следуя документации Python SDK (https://sagemaker.readthedocs.io/en/stable/estimators.html), я написал простейший код для запуска задания по обучению, чтобы просто посмотреть, как он себя ведет и как работает Sagemaker Framework.

Моя проблема в том, что я не знаю, как правильно собрать свой Docker контейнер для запуска сценария entry_point.

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

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

Вот код, который я использовал:

  • Пользовательский класс Sagemaker Framework:
from sagemaker.estimator import Framework

class Doc2VecEstimator(Framework):
    def create_model():
        pass
  • train.py:
import argparse
import os
from datetime import datetime


def log(*_args):
    print('[log-{}]'.format(datetime.now().isoformat()), *_args)


def listdir_rec(path):
    ls = os.listdir(path)
    print(path, ls)

    for ls_path in ls:
        if os.path.isdir(os.path.join(path, ls_path)):
            listdir_rec(os.path.join(path, ls_path))


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--epochs', type=int, default=5)
    parser.add_argument('--debug_size', type=int, default=None)

    # # I commented the lines bellow since I haven't configured the environment variables in my container
    #     # Sagemaker specific arguments. Defaults are set in the environment variables.
    #     parser.add_argument('--output-data-dir', type=str, default=os.environ['SM_OUTPUT_DATA_DIR'])
    #     parser.add_argument('--model-dir', type=str, default=os.environ['SM_MODEL_DIR'])
    #     parser.add_argument('--train', type=str, default=os.environ['SM_CHANNEL_TRAIN'])

    args, _ = parser.parse_known_args()

    log('Received arguments {}'.format(args))

    log(os.environ)

    listdir_rec('.')

  • Dockerfile: * 1 034 *
FROM ubuntu:18.04

RUN apt-get -y update \
    && \
    apt-get install -y --no-install-recommends \
        wget \
        python3 \
        python3-pip \
        nginx \
        ca-certificates \
    && \
    rm -rf /var/lib/apt/lists/*

RUN pip3 install --upgrade pip setuptools \
    && \
    pip3 install \
        numpy \
        scipy \
        scikit-learn \
        pandas \
        flask \
        gevent \
        gunicorn \
        joblib \
        pyAthena \
        pandarallel \
        nltk \
        gensim \
    && \
    rm -rf /root/.cache

ENV PYTHONUNBUFFERED=TRUE
ENV PYTHONDONTWRITEBYTECODE=TRUE

COPY train.py /train.py

ENTRYPOINT ["python3", "-u", "train.py"]
  • Сценарий выполнения учебного задания:
framework = Doc2VecEstimator(
    image_name=image,
    entry_point='train_doc2vec_model.py',
    output_path='s3://{bucket_prefix}'.format(bucket_prefix=bucket_prefix),

    train_instance_count=1,
    train_instance_type='ml.m5.xlarge',
    train_volume_size=5,

    role=role,
    sagemaker_session=sagemaker_session,
    base_job_name='gensim-doc2vec-train-100-epochs-test',

    hyperparameters={
        'epochs': '100',
        'debug_size': '100',
    },
)

framework.fit(s3_input_data_path, wait=True)

Я не нашел способ сделать учебное задание запустите train_doc2vec_model.py. Итак, как мне создать свой собственный класс / контейнер Framework?

Спасибо!

1 Ответ

2 голосов
/ 25 мая 2020
Команда

SageMaker создала пакет python sagemaker-training для установки в вашем docker, чтобы ваш клиентский контейнер мог обрабатывать внешние entry_point скрипты. См. Здесь пример использования Catboost, который делает то, что вы хотите:)

https://github.com/aws-samples/sagemaker-byo-catboost-container-demo

...