为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Sagemaker 的处理步骤中将包上传到实例?

如何在 Sagemaker 的处理步骤中将包上传到实例?

紫衣仙女 2023-10-06 13:44:50
我必须对一些数据进行大规模特征工程。我当前的方法是使用启动实例SKLearnProcessor,然后通过选择更大的实例大小或增加实例数量来扩展作业。我需要使用一些默认情况下未安装在 Sagemaker 实例上的软件包,因此我想使用 .whl 文件安装这些软件包。另一个障碍是 Sagemaker 角色无法访问互联网。import boto3import sagemakerfrom sagemaker import get_execution_rolefrom sagemaker.sklearn.processing import SKLearnProcessorsess = sagemaker.Session()sess.default_bucket()        region = boto3.session.Session().region_namerole = get_execution_role()sklearn_processor = SKLearnProcessor(framework_version='0.20.0',                                     role=role,                                     sagemaker_session = sess,                                     instance_type="ml.t3.medium",                                     instance_count=1)sklearn_processor.run(code='script.py')尝试的解决方案:将包上传到 CodeCommit 存储库并将存储库克隆到 SKLearnProcessor 实例中。因错误而失败fatal: could not read Username for 'https://git-codecommit.eu-west-1.amazonaws.com': No such device or address。我尝试将存储库克隆到 sagemaker 笔记本实例中并且它可以工作,所以这不是我的脚本的问题。使用 bash 脚本通过 CLI 从 s3 复制包。我使用的 bash 脚本基于这篇文章。但包永远不会被复制,并且不会抛出错误消息。还研究了使用该包s3fs,但似乎不适合复制轮文件。备择方案我的客户对于是否从自定义 Docker 镜像启动容器犹豫不决。还有其他选择吗?
查看完整描述

2 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

2. Use a bash script to copy the packages from s3 using the CLI. The bash script I used is based off this post. But the packages never get copied, and an error message is not thrown.

这种方法似乎很合理。

您最好覆盖tocommand上的字段,运行 bash 脚本,就像安装包含 python 依赖项的wheel,然后运行主 python 入口点脚本。SKLearnProcessor/bin/bashinstall_and_run_my_python_code.sh

此外,您可以使用ProcessingInput来下载代码,而不是使用AWS S3调用来下载脚本中的代码,而不是使用bash脚本中的AWS CLI调用来下载代码,这就是SKLearnProcessor下载入口点script.py代码的方法。所有实例。


查看完整回答
反对 回复 2023-10-06
?
弑天下

TA贡献1818条经验 获得超7个赞

还有其他一些选择。这是我能想到的所有选项(有些已经提到了)

  1. 使用sagemaker.processing.*Processor.run(code=<bash script>)bash 脚本从存储库中提取:提交到 Codecommit/Github/Bitbucket 存储库,并使用您的运行 bash 脚本通过从同一存储库克隆来进行设置

  2. Hijack ProcessingInput:指向ProcessingInput本地目录,或者通过将文件上传到 S3 并指向ProcessingInput同一个 S3 来进行预先设置。

  3. 将您的库打包并推送到本地存储库(Nexus、EC2、CodArtifact,支持此),然后像任何带有 bash 运行文件的 python 包一样安装它们。

  4. 劫持sagemaker.sklearn.estimator并用于source_dir指定您的整个源目录

  5. 从包中编译一个轮子并推送到容器并ProcessingInput安装。

这些都不是很好。我没有做1,因为我不想每次都推送最新的代码来测试,不想构建一个包(3)或编译一个轮子(5),并使用估计器来运行处理作业似乎是错误的。使用 2,在我的情况下,有必要将单个文件放在正确的位置(ProcessingInput不支持单个文件,并且我在更高的目录中有 pyproject.toml),因此运行该作业的作业脚本通过订购进行预先设置并将文件上传到 S3,我在ProcessingInput.


查看完整回答
反对 回复 2023-10-06
  • 2 回答
  • 0 关注
  • 68 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信