entry_point 脚本存储在自定义 Sagemaker Framework 训练作业容器中的什么位置?
Where does entry_point script is stored in custom Sagemaker Framework training job container?
我正在尝试创建我自己的自定义 Sagemaker 框架,它 运行 是一个自定义 python 脚本,使用 entry_point 参数训练 ML 模型。
根据 Python SDK 文档 (https://sagemaker.readthedocs.io/en/stable/estimators.html),我将最简单的代码编写到 运行 训练作业,只是为了了解它的行为方式以及 Sagemaker Framework 的工作方式。
我的问题是我不知道如何正确构建我的 Docker 容器以便 运行 entry_point 脚本。
我将 train.py
脚本添加到容器中,该脚本仅记录文件夹和文件路径以及容器环境中的变量。
我能够 运行 训练作业,但是我在环境变量和容器中的文件中都找不到 entry_point 脚本的任何引用。
这是我使用的代码:
- 自定义 Sagemaker 框架 Class:
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('.')
- Docker文件:
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
的训练作业。那么如何创建自己的自定义框架 class/container?
谢谢!
SageMaker 团队创建了一个 python package sagemaker-training
安装在您的 docker 中,以便您的客户容器能够处理外部 entry_point
脚本。
请在此处查看使用 Catboost 执行您想要执行的操作的示例:)
https://github.com/aws-samples/sagemaker-byo-catboost-container-demo
我正在尝试创建我自己的自定义 Sagemaker 框架,它 运行 是一个自定义 python 脚本,使用 entry_point 参数训练 ML 模型。
根据 Python SDK 文档 (https://sagemaker.readthedocs.io/en/stable/estimators.html),我将最简单的代码编写到 运行 训练作业,只是为了了解它的行为方式以及 Sagemaker Framework 的工作方式。
我的问题是我不知道如何正确构建我的 Docker 容器以便 运行 entry_point 脚本。
我将 train.py
脚本添加到容器中,该脚本仅记录文件夹和文件路径以及容器环境中的变量。
我能够 运行 训练作业,但是我在环境变量和容器中的文件中都找不到 entry_point 脚本的任何引用。
这是我使用的代码:
- 自定义 Sagemaker 框架 Class:
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('.')
- Docker文件:
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
的训练作业。那么如何创建自己的自定义框架 class/container?
谢谢!
SageMaker 团队创建了一个 python package sagemaker-training
安装在您的 docker 中,以便您的客户容器能够处理外部 entry_point
脚本。
请在此处查看使用 Catboost 执行您想要执行的操作的示例:)
https://github.com/aws-samples/sagemaker-byo-catboost-container-demo