gpt4 book ai didi

python - 使用 'entrypoint' 在 Sagemaker 中使用预先创建的 Keras 架构训练和部署模型

转载 作者:可可西里 更新时间:2023-11-01 10:36:51 24 4
gpt4 key购买 nike

问题前言:我有一个存储在 MongoDB 中的用户创建的神经网络架构数据库(用我转编译为 Keras 模型的不同语言编写)。我的目标是采用这些架构,用它们创建一个 Keras 模型,然后使用 SageMaker 在云中训练它们。截至目前,我可以从 MongoDB 加载模型并将它们转译为 Keras,效果非常好。 但是,我无法使用 Python SDK 将这些动态创建的模型发送到 SageMaker。

有没有一种方法可以通过将估算器的 entry_point 属性指定为定义了这些模型对象的文件来在 SageMaker 中训练和部署这些 Keras 模型架构(即只是 Python Keras 模型对象)?

迄今为止的工作和代码示例截至目前,当模型架构在单独的文件中定义时,我可以创建训练作业并部署端点。在 SageMaker's GitHub. 上查看单独文件和部署/培训过程的示例

train-and-deploy-sagemaker.py


# Import Sagemaker Tensorflow
from sagemaker.tensorflow import TensorFlow

# Create an estimator object using the entry_point file entry_point.py
estimator = TensorFlow(entry_point='entry_point.py',
role=arn_role,
framework_version='1.12.0',
hyperparameters={...some hyperparams for the model...},
training_steps=1000,
evaluation_steps=100,
train_instance_count=4, train_instance_type='ml.p3.8xlarge')

# Start the training job to train the above estimator
estimator.fit(training_data_inputs)

# Deploy said estimator after training
predictor = estimator.deploy(initial_instance_count=1, instance_type='ml.m4.xlarge')


入口点.py


def keras_model_fn(hyperparameters):
"""keras_model_fn receives hyperparameters from the training job and returns a compiled keras model.
The model will be transformed into a TensorFlow Estimator before training and it will be saved in a
TensorFlow Serving SavedModel at the end of training.

Args:
hyperparameters: The hyperparameters passed to the SageMaker TrainingJob that runs your TensorFlow
training script.
Returns: A compiled Keras model
"""
model = Sequential()

... add layers ...

return model

def train_input_fn():
...

# other functions for inference and training, see link above

但是,有没有一种方法可以动态定义该架构? I.E 从 MongoDB 中获取预先编写的架构,然后将其转译为 entrypoint.py 中相同的 Sequential Keras 模型?

潜在的想法和疑虑:

  1. 想法:只需从 MongoDB 中获取模型并在 entry_point 文件中进行转译。然后AWS需要的每个方法都可以引用编译后的模型对象。

    问题:考虑到 AWS 将从该文件创建 VM 以在其云中运行代码,这种做法是否安全或最佳实践?此外,源随后存储在 S3 存储桶中,因此无论权限如何,这都可能带来另一个安全风险。此外,像 pymongo 这样的依赖项无法从 entry_point 文件中加载,这使得在不更改训练图像的情况下无法获取数据。

  2. 想法:在创建训练作业和部署实例的文件中执行提取和转译 - 上面的 train-and-deploy-sagemaker.py。然后通过估计器中的 hyperparams 属性传递一些可以重建模型的代码——比如 Keras 模型 JSON。

    问题:根据 AWS,超参数的长度只能是 256 个字符。

  3. 思路:根据需要包含的模型架构,动态生成entry_point文件。

    关注点: 许多问题,例如出于不必要的 I/O 原因不想在服务器上创建一次性文件,生成代码是困惑和不好的做法,必须有更好的方式。

  4. 想法:将entry_point 属性设为非外部文件,而是在创建估算器的文件中指定所需的方法。这表面上可以解决我所有的问题,但是......

    问题:我在 SageMaker 文档中没有看到任何关于此的信息。尽管如此,这是最理想的。

如有任何帮助,我们将不胜感激并提前致谢!

最佳答案

请注意,为了简化您的训练脚本,您可以使用 SageMaker script mode而不是 entry_point.py。

  1. 您为您的估算器指定了一个 requirements_file,因此您将拥有必要的 pip 可安装库。如果 MongoDB 在您的 VPC 中运行,您也需要在 VPC 中运行训练作业。
  2. 您可以使用 source_dir 或 dependencies 参数包含相关文件,但无论如何它们最终都会在 S3 中,您可以在作业完成时清除 S3 存储桶。来自 class FrameworkModel :

source_dir (str): Path (absolute or relative) to a directory with any other training source code dependencies aside from tne entry point file (default: None). Structure within this directory will be preserved when training on SageMaker. If the directory points to S3, no code will be uploaded and the S3 location will be used instead.

dependencies (list[str]): A list of paths to directories (absolute or relative) with any additional libraries that will be exported to the container (default: []). The library folders will be copied to SageMaker in the same folder where the entrypoint is copied. If the source_dir points to S3, code will be uploaded and the S3 location will be used instead

  1. 是的,最好避免。
  2. 不可行,因为 SageMaker 从 S3 读取代码。你可以传递一个环境

希望对您有所帮助。

关于python - 使用 'entrypoint' 在 Sagemaker 中使用预先创建的 Keras 架构训练和部署模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55787726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com