我正在为一个开箱即用的框架编写一个自定义Estimator
,用于不支持开箱即用的框架。我有自己的 docker 镜像用于训练,训练代码捆绑到镜像中,这迫使我在每次代码更改时重建镜像。
我想做的是创建一个使用此图像的估算器,并接受文件作为入口点,就像内置框架估计器所做的那样(例如 Tensorflow(。
通过阅读Sagemaker python SDK的源代码,我找到了sagemaker.estimator.Framework
类,它接受entry_point
参数,内置框架估计器继承自该类。但是,文档并没有真正显示如何在我自己的代码中从该类继承。
是否可以编写一个继承自Framework
的自定义估算器类,或者是否有另一种方法可以创建接收entry-point
参数的自定义估计器?
不要使用估算器,而是使用 TensorFlow 估算器,然后将自定义图像作为输入传递给image_uri。这样你就拥有两全其美的优势。如果你的source_dir中有 require.txt 文件,则会在训练之前安装该文件。
这是一个自定义映像 docker 文件
FROM python:3.9-buster
RUN apt-get -y update && apt-get install -y --no-install-recommends
wget
python3-pip
python3-setuptools
nginx
ca-certificates
vim
&& rm -rf /var/lib/apt/lists/*
#RUN ln -s /usr/bin/python3 /usr/bin/python
RUN ln -s /usr/bin/pip3 /usr/bin/pip
ENV PYTHONUNBUFFERED=TRUE
ENV PYTHONDONTWRITEBYTECODE=TRUE
ENV PATH="/opt/program:${PATH}"
RUN pip install sagemaker-training
以下是您如何调用自定义映像
tf_estimator = TensorFlow(entry_point='mnist_keras_tf.py',
source_dir='.',
role=role,
instance_count=1,
instance_type='ml.p3.2xlarge',
image_uri='<arn of custom image>',
script_mode=True,
hyperparameters={
'epochs': 2,
'batch-size': 256,
'learning-rate': 0.01}
SageMaker Python SDK 中现有的框架估算器可能是一个很好的起点,例如 https://github.com/aws/sagemaker-python-sdk/blob/master/src/sagemaker/pytorch/estimator.py
但是,由于您已经将训练代码捆绑到映像中,因此在运行训练代码的 Dockerfile 中设置入口点可能会更容易。有关 Amazon SageMaker 如何运行训练映像的更多信息,请参阅 https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo-dockerfile.html