将模块化代码用于 @remote 装饰器 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将模块化代码用于 @remote 装饰器

可以将您的代码整理为模块,以便在开发过程中轻松管理工作区,并且仍可以使用 @remote 函数来调用函数。您也可以将本地模块从开发环境复制到远程作业环境。为此,请将 include_local_workdir 参数设置为 True,如以下示例所示。

@remote( include_local_workdir=True, )
注意

@remote 装饰器和参数必须出现在主文件中,而不是出现在任何依赖项文件中。

如果设置include_local_workdirTrue,则 SageMaker 打包所有 Python 脚本,同时保持进程当前目录中的目录结构。它还使依赖关系在作业的工作目录中可用。

例如,假设处理 MNIST 数据集的 Python 脚本分为main.py脚本和依赖pytorch_mnist.py脚本。 main.py调用依赖脚本。此外,该main.py脚本还包含用于导入依赖关系的代码,如图所示。

from mnist_impl.pytorch_mnist import ...

main.py文件还必须包含@remote装饰器,并且必须将include_local_workdir参数设置为。True

默认情况下,该include_local_workdir参数包括目录中的所有 Python 脚本。您可以将此参数与参数结合使用,自定义要上传到作业的custom_file_filter文件。您可以传递一个用于筛选要上传到 S3 的作业依赖关系的函数,也可以传递一个指定要在远程函数中忽略的本地目录和文件的CustomFileFilter对象。custom_file_filter只有在设置include_local_workdirTrue —时才能使用,否则参数将被忽略。

以下示例用于CustomFileFilter忽略所有笔记本文件和文件夹,或者在将文件上传到 S3 data 时命名的文件。

@remote( include_local_workdir=True, custom_file_filter=CustomFileFilter( ignore_pattern_names=[ # files or directories to ignore "*.ipynb", # all notebook files "data", # folter or file named data ] ) )

以下示例演示了如何打包整个工作空间。

@remote( include_local_workdir=True, custom_file_filter=CustomFileFilter( ignore_pattern_names=[] # package whole workspace ) )

以下示例显示了如何使用函数来筛选文件。

import os def my_filter(path: str, files: List[str]) -> List[str]: to_ignore = [] for file in files: if file.endswith(".txt") or file.endswith(".ipynb"): to_ignore.append(file) return to_ignore @remote( include_local_workdir=True, custom_file_filter=my_filter )

构建工作目录的最佳实践

以下最佳实践建议在模块化代码中使用@remote装饰器时如何组织目录结构。

  • 将 @remote 装饰器放入位于工作区的根级别目录下的文件中。

  • 在根级别构建本地模块。

以下示例图显示了推荐的目录结构。在此示例结构中,main.py 脚本位于根级别目录下。

. ├── config.yaml ├── data/ ├── main.py <----------------- @remote used here ├── mnist_impl │ ├── __pycache__/ │ │ └── pytorch_mnist.cpython-310.pyc │ ├── pytorch_mnist.py <-------- dependency of main.py ├── requirements.txt

以下示例图显示了一个目录结构,当使用 @remote 装饰器为代码添加注释时,该结构会导致不一致的行为。

在此示例结构中,包含 @remote 装饰器的 main.py 脚本在根级别目录下。建议使用以下结构。

. ├── config.yaml ├── entrypoint │ ├── data │ └── main.py <----------------- @remote used here ├── mnist_impl │ ├── __pycache__ │ │ └── pytorch_mnist.cpython-310.pyc │ └── pytorch_mnist.py <-------- dependency of main.py ├── requirements.txt