【问题标题】:Listing Notebook instances tags can takes ages列出笔记本实例标签可能需要很长时间
【发布时间】:2019-08-12 05:38:58
【问题描述】:

我目前正在使用 Lambda 函数中的 boto3 开发工具包来检索有关部署在我的账户中的 Sagemaker Notebook 实例的各种信息(几乎 70 个,所以不多...)

我尝试执行的操作之一是列出每个实例的标签。

但是,有时返回标签需要很长时间:我的 Lambda 要么停止(我可以增加超时但仍然......)或 ThrottlingExceptionsagemaker.list_tags 函数引发(可以通过在创建 sagemaker boto3 客户端时增加重试次数来避免):

sagemaker = boto3.client("sagemaker", config=Config(retries = dict(max_attempts = 10)))
instances_dict = sagemaker.list_notebook_instances()

if not instances_dict['NotebookInstances']:
    return "No Notebook Instances"

while instances_dict:
    for instance in instances_dict['NotebookInstances']:
        print instance['NotebookInstanceArn']
        start = time.time()
        tags_notebook_instance = sagemaker.list_tags(ResourceArn=instance['NotebookInstanceArn'])['Tags']
        print (time.time() - start)
    instances_dict = sagemaker.list_notebook_instances(NextToken=instances_dict['NextToken']) if 'NextToken' in instances_dict else None 

如果你们有任何避免这种延误的想法:)

TY

【问题讨论】:

  • 你认为“年龄”是什么? 10秒? 5 分钟?
  • 你好@jarmod,我所说的“年龄”是指 10 秒,有时是 20 秒;)

标签: amazon-web-services aws-lambda boto3 amazon-sagemaker


【解决方案1】:

正如您所指出的,您受到了限制。与其增加重试次数,不如尝试更改延迟(即增加growth_factor)。似乎可以配置查看https://github.com/boto/botocore/blob/develop/botocore/data/_retry.json#L83

请注意,存储桶(和再填充率)通常处于第二个粒度。因此,使用 70 个 ARN,您可以查看几秒钟;两位数并不让我感到惊讶。

您可能需要考虑以不同的方式分解工作,因为添加重试次数/更大的增长因子只会增加函数运行的时间长度。

我在分解事物方面取得了相当大的成功,因此 Lambda 函数每次调用只处理一个 ARN。 Lambda 正在处理工作(我通常会使用 SQS 队列来管理需要处理的内容),并且可以通过配置 Lambda 和 SQS 消息可见性的组合来配置工作速率。

不知道您在原始 Lambda 之外尝试完成什么我意识到以这种方式分解工作可能(或将会)给您的整体工作带来挑战。

还值得注意的是,如果您启用了 CloudTrail,标签将成为“EventName”(与调用的方法相匹配,即 CreateTrainingJob、AddTags 等)的事件数据(请求数据)的一部分。

第三种选择是,如果您尝试查找所有带有特定标签的笔记本实例,那么您可以使用资源组创建查询并相当快地找到带有这些标签的 ARN。

【讨论】:

  • 非常感谢@Ken-Amazon,我会看看你的各种建议
猜你喜欢
  • 1970-01-01
  • 2019-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-12
  • 2015-12-28
  • 1970-01-01
  • 2018-05-15
相关资源
最近更新 更多