首页 > 编程问答 >跨 Sagemaker 管道步骤共享代码,无需

跨 Sagemaker 管道步骤共享代码,无需

时间:2024-07-24 10:22:54浏览次数:11  
标签:python amazon-web-services amazon-sagemaker mlops

我正在尝试通过多个步骤创建 Sagemaker 管道。我有一些代码想在不同的步骤中分享。下一个示例不是精确的,而是用于说明的简化版本。

我有如下所示的文件夹结构:

source_scripts/
├── utils
│   ├── logger.py
├── models/
│   ├── ground_truth.py
│   ├── document.py
├── processing/
│   ├── processing.py
│   └── main.py
└── training/
    ├── training.py
    └── main.py

我想使用 models utils 内部 training.py 的代码,因为我不知道在哪里我正在使用的 Sagemaker 实例上安装的代码:

from ..common.ground_truth import GroundTruthRow

在构建管道时,我创建处理和训练步骤:

script_processor = FrameworkProcessor()
args = script_processor.get_run_args(
    source_dir="source_scripts"
    code="processing/main.py"
)
step_process = ProcessingStep(
    code=args.code
)

estimator = Estimator(
    source_dir="source_scripts"
    code="training/main.py"
)
step_train = TrainingStep(
   estimator=estimator
)

但在管道执行期间会导致错误:

ImportError: attempted relative import with no known parent package

有关如何在多个 SageMaker 作业之间共享代码的任何建议在单个管道中无需构建自定义 Docker 映像?


可以通过几种方法在 SageMaker 管道步骤之间共享代码,而无需构建自定义 Docker 映像:

1. 使用公共 S3 位置:

  • 上传代码: 将的 utils models 目录上传到 S3 中的一个公共存储桶。
  • 在步骤中下载: 在处理和训练步骤的开头,从 S3 下载这些目录。
  • 更新路径: 使用 sys.path.append() 将下载目录添加到 Python 路径中,以便可以导入模块。

```python import sys import os import boto3

# 在 S3 中存储代码的存储桶和前缀 bucket_name = 'your-bucket-name' prefix = 'your-code-prefix/'

# 下载代码 s3 = boto3.client('s3') for dir_name in ['utils', 'models']: local_dir = f'/tmp/{dir_name}' os.makedirs(local_dir, exist_ok=True) for obj in s3.list_objects_v2(Bucket=bucket_name, Prefix=f'{prefix}{dir_name}/')['Contents']: s3.download_file(bucket_name, obj['Key'], os.path.join(local_dir, os.path.basename(obj['Key'])))

# 更新 Python 路径 sys.path.append('/tmp/utils') sys.path.append('/tmp/models')

# 现在可以导入模块了 from utils.logger import logger from models.ground_truth import GroundTruthRow ```

2. 将代码作为依赖项包含在内:

  • 创建 requirements.txt: source_scripts 目录中创建一个 requirements.txt 文件,其中列出了的代码所需的所有依赖项,包括 utils models 目录。
  • 在 Estimator 和 Processor 中指定依赖项: 在创建 Estimator FrameworkProcessor 时,使用 dependencies 参数指定 requirements.txt 文件的路径。这将确保在构建环境时安装依赖项。

```python # requirements.txt utils models other-dependencies

# 在 Estimator 和 Processor 中指定依赖项 script_processor = FrameworkProcessor( # ... other arguments ... dependencies=['source_scripts/requirements.txt'] )

estimator = Estimator( # ... other arguments ... dependencies=['source_scripts/requirements.txt'] ) ```

3. 使用代码目录作为源目录:

  • 修改源目录: source_dir 参数设置为 source_scripts 目录的父目录,该目录包含 utils models processing training
  • 更新导入: 更新的导入语句以包含完整的包路径。

```python # 修改后的目录结构 parent_directory/ └── source_scripts/ ├── utils/ ├── models/ ├── processing/ └── training/

# 更新后的导入 from source_scripts.utils.logger import logger from source_scripts.models.ground_truth import GroundTruthRow

# 创建 Estimator 和 Processor script_processor = FrameworkProcessor( source_dir='parent_directory', code='source_scripts/processing/main.py' )

estimator = Estimator( source_dir='parent_directory', code='source_scripts/training/main.py' ) ```

这些方法允许在 SageMaker 管道步骤之间有效共享代码,而无需创建自定义 Docker 映像,从而简化代码管理和部署。选择最适合需求和项目结构的方法。

标签:python,amazon-web-services,amazon-sagemaker,mlops
From: 78786150

相关文章

  • 使用 mypy 时Python中的继承和多态性不起作用
    我正在寻找用mypy做一些标准的多态性,我以前从未使用过它,而且到目前为止它并不直观。基类classContentPullOptions:passclassTool(Protocol):asyncdefpull_content(self,opts:ContentPullOptions)->str|Dict[str,Any]:...子类classGoogle......
  • Python函数获取匹配和错误记录
    我有一个以下格式的json文件:[{"type":"BEGIN","id":"XYZ123"},{"type":"END","id":"XYZ123",},{"type":&......
  • python,替换标点符号但保持特殊单词完整的最佳方法
    我正在制作一个调制函数,它将采用带有特殊字符(@&*%)的关键字,并保持它们完整,同时从句子中删除所有其他标点符号。我设计了一个解决方案,但它非常庞大,而且可能比需要的更复杂。有没有一种方法可以以更简单的方式做到这一点。简而言之,我的代码匹配特殊单词的所有实例以查找跨度。然......
  • Python 检测 USB 设备 - IDLE 和 CMD 解释器之间的不同结果
    我正在尝试解决VDI解决方案中智能卡设备的USB重定向问题。我正在使用pyscard模块作为智能卡。对于进一步的上下文,主要问题是当浏览器插件调用用于处理智能卡的python脚本时,未检测到读卡器。关于问题,当我从CMD解释器运行此代码片段时,我收到空列表,表示系统上未找......
  • Python查找字符串的CRC32
    我尝试获取字符串数据类型变量的CRC32,但出现以下错误:>>>message='helloworld!'>>>importbinascii>>>binascii.crc32(message)Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>TypeError:aby......
  • 使用python,如何创建重复的工作时间表
    这是我们公司的小组工作安排表。为三班制,2组日夜工作,1组休息。重复白天工作4天休息2天,然后再次夜间工作4天休息2天的时间表。我想使用python(pandas)自动安排在8月9日之后。抱歉英语不好,提前感谢您的帮助以下是使用Python和Pandas创建重复工作时间表的代码......
  • venv 已激活,但 pip 安装仍然默认进行,并且 python 在源代码中看不到该库
    在终端shell中的vscode中输入“whichpython”显示默认路径:C:\Users\erjan\AppData\Local\Programs\Python\Python311\python.exe(my_venv)但是(my_venv)意味着我的venv处于活动状态,我做了pipinstalltransformers,但下面的代码仍然显示错误-无法看到......
  • 在Python多处理中执行二进制信号量或互斥体以进行上下文切换操作
    我正在尝试自动化win应用程序和java应用程序之间的同步关系。我的标准是:启动win和jav应用程序在jav应用程序中执行命令等待jav应用程序的响应使用jav应用程序的响应到Windows应用程序作为输入。在jav应用程序中执行命令win应用程序......
  • 在spyder-python上随机出现的这些奇怪的亮点是什么
    在此处输入图像描述每次我单击此按钮或进行任何更改时,都会创建奇怪的突出显示,当我最小化功能时更是如此。有什么建议如何摆脱这些或可能的原因是什么?谢谢!我尝试更改外观首选项中的设置,但无法影响问题。很抱歉,我无法直接查看或与Spyder界面交互。我是一个AI......
  • 比较Python字典并找到缺失的元素
    我遇到了一个问题,我已经尝试了几天但没有得到任何结果。我想比较两个字典,在一个字典中有“赛前”足球比赛,在第二个字典中有“现场”足球比赛。我想将它们相互比较并打印它们(如果有)没有赛前比赛直播。示例1pre=[{"Home":"Genoa","Away":"In......