如何解决boto3加载自定义模型
例如:
session = boto3.Session()
client = session.client('custom-service')
我知道我可以在〜/ .aws / models下用API定义创建一个json,botocore将从那里加载它。问题是我需要在AWS Lambda函数上完成此操作,这似乎是不可能的。
寻找一种方法告诉boto3自定义json API定义在哪里,以便可以从定义的路径加载。
谢谢
解决方法
我只有部分答案。有一些关于botocore
的{{3}}的文档,这些文档可以读取模型文件。在讨论从ZIP存档中加载模型时,loader
module将ZIP提取到一个临时文件系统位置,然后将加载器搜索路径扩展到该位置。似乎您无法基于API直接从内存中加载模型数据,但是Lambda确实在/tmp
中为您提供了一些暂存空间。
以下是重要的地方:
import boto3
session = boto3.Session()
session._loader.search_paths.extend(["/tmp/boto"])
client = session.client("custom-service")
/tmp/boto
的目录结构需要遵循资源加载器文档。主模型文件必须位于/tmp/boto/custom-service/yyyy-mm-dd/service-2.json
。
该问题还提到可以使用Session.register_component
交换其他加载器,因此,如果您想编写一个从内存中直接返回模型的便笺式加载器,也可以尝试这样做。我没有有关如何执行此操作的任何信息。
只需添加更多详细信息:
import boto3
import zipfile
import os
s3_client = boto3.client('s3')
s3_client.download_file('your-bucket','model.zip','/tmp/model.zip')
os.chdir('/tmp')
with zipfile.ZipFile('model.zip','r') as archive:
archive.extractall()
session = boto3.Session()
session._loader.search_paths.extend(["/tmp/boto"])
client = session.client("custom-service")
model.zip只是一个压缩文件,其中包含:
Archive: model.zip
Length Date Time Name
--------- ---------- ----- ----
0 11-04-2020 16:44 boto/
0 11-04-2020 16:44 boto/custom-service/
0 11-04-2020 16:44 boto/custom-service/2018-04-23/
21440 11-04-2020 16:44 boto/custom-service/2018-04-23/service-2.json
请记住,只有适当的lambda角色才能访问S3和您的定制服务。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。