AWS 自动扩展器
ClearML AWS 自动扩展器应用程序可在 ClearML Pro 计划下使用。
AWS自动扩展应用程序根据用户定义的资源预算优化AWS EC2实例的使用:通过指定可用计算资源的类型和数量来定义您的预算。
每种资源类型都与一个ClearML 队列相关联,其状态决定了该资源类型实例的需求(即如果队列上有待处理的任务,则启动新实例)。
运行时,自动扩展器会定期轮询您的AWS集群。自动扩展器会根据指定的最大空闲时间自动终止空闲实例,或者在队列中没有足够的实例来执行待处理任务时启动新实例(直到达到定义的最大实例数)。您可以添加一个初始化脚本,该脚本将在每个实例启动时执行。
有关自动扩展器如何工作的更多信息,请参阅自动扩展器概述。
自动扩展器实例配置
在配置新的AWS自动扩展实例时,您可以填写所需的参数或重用之前启动实例的配置。
使用以下选项之一启动一个应用程序实例,配置与之前启动的实例相同:
- 克隆先前启动的应用程序实例将打开实例启动表单,其中预填充了原始实例的配置。
- 导入应用程序配置文件。您可以在查看其配置时,将先前启动的实例的配置导出为JSON文件。
在启动新的应用程序实例之前,可以编辑预填充的实例启动表单。
要配置一个新的应用程序实例,请点击Launch New
以打开应用程序的实例启动表单。
配置选项
-
导入配置 - 导入一个应用实例配置文件。这将用文件中的值填充实例启动表单,可以在启动应用实例之前进行修改。
-
AWS 凭证 - 自动扩展器可以用来访问您的 AWS 账户的凭证。请参阅 生成 AWS IAM 凭证
-
Git 配置 - Git 凭据,用于在您的 EC2 实例上运行的 ClearML 代理访问您的仓库以检索其作业的代码
- Git 用户
- Git 密码 / 个人访问令牌
-
最大空闲时间(可选)- EC2实例在自动扩展器将其关闭之前可以空闲的最大时间(以分钟为单位)
-
Workers Prefix(可选)- 添加到工人名称的前缀,将它们与此自动缩放器关联
-
轮询间隔 (可选) - 以分钟为单位的时间段,用于轮询指定队列以获取新任务
-
使用Docker模式 - 如果选择此选项,排入自动扩展器的任务将由在Docker模式下运行的ClearML代理执行
- 基础Docker镜像 (可选) - 当选择
使用Docker模式
时可用:ClearML代理将运行的默认Docker镜像。提供一个存储在Docker仓库中的镜像,以便实例可以自动获取它
- 基础Docker镜像 (可选) - 当选择
-
计算资源
- Resource Name - Assign a name to the resource type. This name will appear in the autoscaler dashboard
- EC2 Instance Type - See 实例类型 for full list of types
- Run in CPU mode - Check box to run with CPU only
- Use Spot Instance - Select to use a spot instance. Otherwise, a reserved instance is used.
- Regular Instance Rollback - When selected, if a spot instance is unavailable for the time specified in the
Regular Instance Rollback Timeout
, a reserved instance will be spun up instead - Regular Instance Rollback Timeout - Controls how long the autoscaler will wait for a spot instance to become available. It will first attempt to start a spot instance, then periodically retry. Once the specified time is exceeded, the autoscaler will try to start a reserved instance instead. The timeout applies for a specific attempt, where starting a spot fails and an alternative instance needs to be started.
- Spot Instance Blackout Period - Specifies a blackout period after failing to start a spot instance. This is related to future attempts: after failing to start a spot instance, all requests to start additional spot instances will be converted to attempts to start regular instances, as a way of "easing" the spot requests load on the cloud provider and not creating a "DOS" situation in the cloud account which might cause the provider to refuse creating spots for a longer period.
- Regular Instance Rollback - When selected, if a spot instance is unavailable for the time specified in the
- Place tags on resources - In addition to placing tags on the instance, choose which cloud resources tags will be placed on
- Availability Zone - The EC2可用区 to launch this resource in
- AMI ID - The AWS AMI to launch
AMI prerequisites用于自动扩展器的AMI必须包含docker运行时和virtualenv。
最近的NVIDIA AMI仅在初始用户登录时安装所需的驱动程序。为了使用此类AMI,自动缩放器需要模拟初始用户登录。这可以通过将以下脚本添加到
Init script
字段来实现:apt-get update
DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
su -l ubuntu -c '/usr/bin/bash /home/ubuntu/.profile'- Max Number of Instances - Maximum number of concurrent running instances of this type allowed
- Monitored Queue - Queue associated with this instance type. The tasks enqueued to this queue will be executed on instances of this type
- EC2 Tags (optional) - AWS instance tags to attach to launched EC2 instances. Insert key=value pairs, separated by commas
- EBS Device (optional) - Disk mount point
- EBS Volume Size (optional) - Disk size (GB)
- EBS Volume Type (optional) - See Amazon EBS 卷类型 for full list of types
- Instance Key Pair (optional) - AWS key pair that is provided to the spun EC2 instances for connecting to them via SSH. Provide the Key Pair's name, as was created in AWS. See Amazon EC2 密钥对 for more details
- Security Group ID (optional) - Comma separated list of AWS VPC Security Group IDs to attach to the launched instance. Read more here
- VPC Subnet ID - The subnet ID For the created instance. If more than one ID is provided, the instance will be started in the first available subnet. For more information, see 什么是Amazon VPC?
- + Add Item - Define another resource type
-
IAM 实例配置文件 (可选) - 为自动扩展器启动的所有实例设置一个 IAM 实例配置文件
- Arn - 指定实例配置文件的 Amazon 资源名称
- Name - 标识实例配置文件的名称
-
自动扩展器实例名称(可选)- 自动扩展器实例的名称。这将出现在实例列表中
-
应用任务所有者配置库 - 选择在执行任务时应用任务所有者的配置库中的值(适用于ClearML企业版计划)
-
如果多个实例正在执行相同的任务,则发出警告 - 选择在多个实例运行相同任务时向控制台打印警告。在大多数情况下,这表明存在问题。
-
排除 .bashrc 脚本 - 选择以跳过
.bashrc
脚本的执行 -
忽略保险库解析错误 - 如果未选择,自动扩展器在启动时加载保险库时遇到错误将中止。这仅适用于由自动扩展器本身加载的保险库,不适用于在云实例上加载的保险库或由自动扩展器运行的任务加载的保险库。有关更多信息,请参阅配置保险库(适用于ClearML企业计划)。
-
初始化脚本(可选)- 在启动EC2实例后执行的bash脚本
-
额外的ClearML配置(可选)- 一个ClearML配置文件,供ClearML代理在执行您的实验时使用
-
自定义启动规范 - 以JSON格式自定义AWS EC2启动规范。这将用作创建实例启动规范的基础。请参阅boto3 EC2.client.run_instances 请求语法 和AWS API 参考:RunInstances(适用于ClearML企业计划)
-
使用服务账户运行 - 选择允许应用程序在服务账户身份下运行,而不是在您自己的身份下运行(适用于ClearML企业计划)
-
导出配置 - 将应用程序实例配置导出为JSON文件,稍后可以导入以创建具有相同配置的新实例
配置保险库
配置保险库在ClearML企业计划下可用。
你可以利用配置保险库来设置以下内容:
aws_region
aws_credentials_key_id
和aws_secret_access_key
- 自动缩放器的AWS凭证extra_vm_bash_script
- 在启动EC2实例后执行的bash脚本。此脚本将附加到实例启动表单中Init script
字段设置的脚本中extra_clearml_conf
- ClearML 配置,由 ClearML 代理在执行您的实验时使用。此配置将附加到实例启动表单的Additional ClearML Configuration
字段中设置的配置。files
- 在运行自动缩放器的容器内,按照指定路径创建包含预定义内容的文件。 更多信息,请参阅 文件部分environment
- 在运行自动缩放器的容器的操作系统环境中设置的环境变量和值的字典。有关更多信息,请参阅环境部分
例如,以下配置将应用于所有自动缩放器实例:
auto_scaler.v1.aws {
aws_region: "us-east-1"
aws_access_key_id: "<key>"
aws_secret_access_key: "<secret>"
extra_vm_bash_script: """
echo "Hello world!"
"""
extra_clearml_conf: """
agent.docker_force_pull: true
"""
files {
boto3_file {
contents: """
boto3 {
pool_connections: 512
max_multipart_concurrency: 16
}
"""
path: "/boto3_config.yaml"
target_format: yaml
mode: "0o644"
}
}
}
environment {
DB_PASSWORD: "secretpassword"
LOG_LEVEL: "info"
}
}
配置特定的自动扩展器实例
使用配置库来配置特定实例:添加一个正则表达式以匹配自动缩放器的Workers Prefix
在auto_scaler.v1.aws.match
下。在此部分中,输入将合并到任何匹配的自动缩放器配置中的特定配置。
例如:
auto_scaler.v1.aws {
# this will be applied to all AWS autoscalers
aws_region: "us-east-2"
match {
"^aws_test$": {
# this will be applied only to AWS autoscalers who's workers prefix exactly matches aws_test
extra_vm_bash_script: """ echo "Hello world!" """
}
"^aws_.*$": {
# this will be applied to all AWS autoscalers who's workers prefix starts with aws_
extra_vm_bash_script: """ echo "Goodbye!" """
}
}
}
配置由自动扩展器生成的实例
要配置由自动扩展器生成的实例,请执行以下任一操作:
- 在配置库的
auto_scaler.v1.aws.extra_clearml_conf
字段中添加配置 - 使用ClearML 服务账户运行自动扩展器。将配置添加到服务账户的配置库中,并在
Run with Service Account
字段中设置自动扩展器在该账户下运行。 - 管理员可以将配置添加到ClearML 管理员保险库 并将保险库与包含运行自动扩展程序的用户的用户组链接
仪表盘
一旦启动自动扩展器,自动扩展器的仪表板将提供有关可用EC2实例及其状态的信息。
自动缩放仪表板显示:
- 空闲实例数量
- 队列及其关联的资源类型
- 当前运行的实例数量
- 控制台:应用程序日志包含所有打印到stdout和stderr的内容,显示在控制台日志中。日志显示自动缩放器关联队列的轮询结果,包括排队的任务数量,以及正在启动/关闭的EC2实例的更新。
为了使自动缩放器控制台日志显示额外的调试信息,将活动应用实例的日志级别更改为DEBUG:
- 转到应用程序实例任务页面 > 配置 标签 > 用户属性 部分
- 将鼠标悬停在部分上 > 点击
Edit
> 点击+ADD PARAMETER
- 输入
log_level
作为键,DEBUG
作为新参数的值。
控制台的日志级别将在自动缩放器的下一次迭代中更新。
- 实例日志文件 - 点击访问应用实例的日志。这将带您到应用实例任务的ARTIFACTS标签页,该页面列出了应用实例的日志。在日志的
File Path
字段中,点击以下载完整的日志。
您可以将应用程序实例仪表板中的图表嵌入到ClearML 报告中。这些可视化内容会随着应用程序实例的更新而实时更新。企业计划和托管服务支持将资源嵌入到外部工具中(例如 Notion)。将鼠标悬停在图表上并点击以复制嵌入代码,然后导航到报告并粘贴嵌入代码。
生成 AWS IAM 凭证
自动扩展应用程序使用您提供的凭据访问您的AWS账户。
您需要创建一个AWS策略,该策略授予自动扩展应用程序所需的访问权限,将该策略附加到IAM用户,并为该用户创建凭证密钥以在自动扩展应用程序中配置:
-
在您的AWS账户中,转到服务菜单 > IAM > 策略
-
在策略下,点击创建策略
-
在创建策略模态框中,点击JSON选项
-
将以下策略插入文本框(确保将
替换为您的账户ID):{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CreateTags",
"Effect": "Allow",
"Action": "ec2:CreateTags",
"Resource": [
"arn:aws:ec2:*:<AWS_ACCOUNT_ID>:instance/*",
"arn:aws:ec2:*:<AWS_ACCOUNT_ID>:dedicated-host/*",
"arn:aws:ec2:*:<AWS_ACCOUNT_ID>:elastic-ip/*",
"arn:aws:ec2:*:<AWS_ACCOUNT_ID>:reserved-instances/*",
"arn:aws:ec2:*:<AWS_ACCOUNT_ID>>:capacity-reservation-fleet/*",
"arn:aws:ec2:*:<AWS_ACCOUNT_ID>>:volume/*",
"arn:aws:ec2:*:<AWS_ACCOUNT_ID>:capacity-reservation/*",
"arn:aws:ec2:*:<AWS_ACCOUNT_ID>:fleet/*",
"arn:aws:ec2:*:<AWS_ACCOUNT_ID>:spot-instances-request/*",
"arn:aws:ec2:*:<AWS_ACCOUNT_ID>:host-reservation/*",
"arn:aws:ec2:*:<AWS_ACCOUNT_ID>:launch-template/*",
"arn:aws:ec2:*:<AWS_ACCOUNT_ID>:network-interface/*"
]
},
{
"Sid": "EC2Actions",
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ec2:RequestSpotInstances",
"ec2:CancelSpotFleetRequests",
"ec2:DescribeInstanceAttribute",
"ec2:SendSpotInstanceInterruptions",
"ec2:RunInstances",
"ec2:RequestSpotFleet",
"ec2:DescribeSpotInstanceRequests",
"ec2:DescribeInstanceEventNotificationAttributes",
"ec2:GetConsoleOutput",
"ec2:CancelSpotInstanceRequests",
"ec2:DescribeInstanceTypes",
"ec2:DescribeInstanceStatus",
"ec2:TerminateInstances"
],
"Resource": "*"
},
{
"Sid": "AllowUsingMarketplaceAMIAliases",
"Effect": "Allow",
"Action": [
"ssm:GetParametersByPath",
"ssm:GetParameters",
"ssm:GetParameter"
],
"Resource": "arn:aws:ssm:*::parameter/aws/service/marketplace/*"
}
]
} -
完成创建策略
-
将创建的策略附加到IAM用户/组,其凭据将在自动扩展应用程序中使用(您可以为此目的创建一个新的IAM用户/组)
-
获取一组AWS IAM凭证,用于您在上一步中附加了创建策略的用户/组