如何快速判断 AWS 当前哪些区域更可能拿到 GPU 实例:以 G6e 为例

发布于:2026/09/22 作者:沈大力 浏览量:10 评论:0

标签: 网站相关 工具/方法/算法 Python



在 AWS 上临时申请 GPU 实例时,一个很常见的问题是:我知道自己需要某种 GPU,但不知道现在到底哪个 Region 更容易拿到机器。如果直接打开 EC2 Console 一个区域一个区域尝试,会遇到两个问题:第一,很多区域虽然支持该实例类型,但当前未必有容量,大白话讲就是没货了;第二,GPU 实例通常受到 Region-specific Service Quota 限制,如果 quota 为 0,即使该区域有机器也无法启动。

因此,一个更合理的流程应该是:

先明确算力需求 → 确定可以接受的实例类型 → 用实时 capacity signal 筛选 Region/AZ → 再检查并申请对应 Region 的 quota → quota 到位后立即启动。

 

需要特别区分三个概念:

Instance offered in Region
        ≠
Currently enough capacity
        ≠
My AWS account is allowed to launch it

 这三个问题分别对应 Instance Type Offering、Spot Placement Score 和 Service Quota。

 

1. 先明确自己到底需要什么机器

根据个人项目需求来选择,我的场景主要是深度学习模型计算,希望使用 NVIDIA L40S,显存大约需要40-50G。根据跟AI讨论的结果,它推荐我申请g6e类型的机器,部分规格如下:

Instance vCPU RAM GPU GPU memory
g6e.xlarge 4 32 GiB 1 × NVIDIA L40S 44 GiB
g6e.2xlarge 8 64 GiB 1 × NVIDIA L40S 44 GiB
g6e.4xlarge 16 128 GiB 1 × NVIDIA L40S 44 GiB

根据我自己的需求,我不需要RAM,只对显存有要求,那这里我可以选择最便宜的g6e.xlarge。但是,待会下面要说的Spot Placement Score最适合输入至少 3 个自己真正能够接受的实例类型。如果需求写得过死,例如“只能是 g6e.4xlarge”,寻找可用容量的空间会明显缩小。因此我们会把这3个满足条件的都纳入候选机器。

那么我们的需求就可以定义为:

GPU: NVIDIA L40S
GPU memory: ≥ 44 GiB
GPU count: 1
Instance candidates:
    g6e.xlarge
    g6e.2xlarge
    g6e.4xlarge
Target capacity: 1 instance

 

2. Linux 安装并登录 AWS CLI

AWS CLI v2 可以直接在 Linux 本地使用。当前 AWS 官方推荐的用户级安装方式为:

curl -fsSL https://awscli.amazonaws.com/v2/install.sh | bash
export PATH="$HOME/.local/bin:$PATH"
aws --version

默认安装到:

~/.local/share/aws-cli

并在:

~/.local/bin

创建命令链接。AWS CLI 官方同时支持 x86-64 和 ARM Linux。如果希望以后每次打开 shell 都能直接使用:

echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

如果平时 AWS Console 是通过 root user 邮箱登录,并不需要专门创建长期 Access Key。AWS CLI v2.32.0 以后支持浏览器登录:

aws login

第一次会要求输入一个 Region,例如:

eu-north-1

随后浏览器打开 AWS 登录页面,使用原来的 root user 邮箱、密码和 MFA 登录即可。aws login 支持 root user、IAM user 和 federated identity;root user 不需要额外赋予登录权限。

登录完成后验证:

aws sts get-caller-identity

如果能正常返回 Account 和 ARN,说明 CLI 已经可以调用 AWS API。需要注意,AWS 官方仍然不建议日常长期使用 root user;这里主要是为了临时查询和管理当前账号资源。

 

3. 真正寻找“当前哪里比较有机器”:Spot Placement Score

AWS 对普通 On-Demand EC2 没有提供一个公开 API,让用户直接查询目前有多少机器available。所以目前最有价值的实时容量信号是Spot Placement Score。它根据当前 Spot capacity、使用趋势、请求规模和实例组合等信息,对 Region 或 AZ 打 1–10 分。10 表示当前请求成功的可能性很高,1 表示成功可能性很低。这个分数是 point-in-time signal,会随时间变化。

对于前面定义的需求,可以直接查询:

aws ec2 get-spot-placement-scores \
  --instance-types g6e.xlarge g6e.2xlarge g6e.4xlarge \
  --target-capacity 1 \
  --target-capacity-unit-type units \
  --output table

这里:

--target-capacity 1

表示需要 1 个 capacity unit,而:

--target-capacity-unit-type units

表示这里的单位按实例数量理解。

AWS 要求在通过 instance type 查询 Spot Placement Score 时最好提供至少 3 种不同 instance types;少于 3 种时 AWS 会返回较低的 score。因此,这三个类型不应该随便凑数,而应该都是真正可以接受的机器。

一次实际查询得到:

Region            Score
ap-south-1          2
eu-central-1        2
ap-northeast-3      1
ap-northeast-2      9
us-east-2           1
us-east-1           9
ap-south-2          4
eu-south-2          1
ap-northeast-1      9
us-west-2           1

这个结果说明,在查询发生的那个时间点,下面三个区域对于这组 G6e 请求表现出了明显更好的 Spot capacity signal:

ap-northeast-2   Seoul          9
us-east-1        N. Virginia    9
ap-northeast-1   Tokyo          9

因此,这表明如果现在以这组 instance types 和 target capacity 请求 Spot,这三个 Region 相对更可能成功。但不代表100%,AWS 明确说明 Spot Placement Score 只是 recommendation,并不保证最终请求一定成功。

当然这里还有一点,Region score 高并不意味着这个 Region 内每一个 AZ 都有很好的容量。因此,对于高分区域进一步执行:

aws ec2 get-spot-placement-scores \
  --instance-types g6e.xlarge g6e.2xlarge g6e.4xlarge \
  --target-capacity 1 \
  --target-capacity-unit-type units \
  --single-availability-zone \
  --region-names ap-northeast-2 us-east-1 ap-northeast-1 \
  --output table

实际结果:

AvailabilityZoneId   Region           Score
apne2-az1            ap-northeast-2     1
apne1-az4            ap-northeast-1     9
use1-az6             us-east-1          1
apne2-az2            ap-northeast-2     9
apne1-az1            ap-northeast-1     9
use1-az4             us-east-1          3
use1-az2             us-east-1          2
use1-az1             us-east-1          1

这个结果比前面的 Region score 更有价值。

虽然 us-east-1 在 Region level 得到了 9,但具体 AZ 最高只有 3;相反:

Tokyo:
    apne1-az4 = 9
    apne1-az1 = 9

Seoul:
    apne2-az2 = 9

因此,如果最终要把任务落到单个 AZ,东京和首尔明显比 N. Virginia 更值得优先考虑。

之所以会出现“Region=9,但单个 AZ 很低”,是因为 Region-level score 默认假设请求可以在整个 Region 的多个 AZ 之间灵活选择,并使用 capacity-optimized strategy;而 --single-availability-zone 查询的则是单个 AZ 本身的容量情况。

所以总结一下筛选顺序:

Global Region score
        ↓
挑选高分 Region
        ↓
AZ-level score
        ↓
找真正高分的 AZ

 

4. Capacity 找到了以后,再检查 quota

通过 Spot Placement Score 找到高分 Region 和 AZ 之后,还需要检查当前 AWS 账号在这些区域是否具有足够的 EC2 GPU quota。EC2 GPU quota 具有明显的 Region-specific 特征,同一账号在不同 Region 中的额度彼此独立,同时 Spot 和 On-Demand 也分别采用不同的 quota。因此,一个 Region 的 Spot Placement Score 很高,只能说明当前容量信号较好,无法说明当前账号已经具备启动实例的权限。

对于 G6、G6e 等 G family 实例,AWS 使用 G/VT quota 管理可运行规模,并按照 vCPU 数量计算额度。例如,g6e.xlarge 配置 4 vCPU、1 张 NVIDIA L40S 和 44 GiB GPU memory,因此启动一台 g6e.xlarge 至少需要 4 个 G/VT vCPU quota;g6e.2xlarge 需要 8,g6e.4xlarge 需要 16。这里的 quota 数值代表 vCPU 数量,与 GPU 数量并不直接对应。AWS 官方文档也将 EC2 instance quota 定义为基于 vCPU 的区域级限制。

Spot G/VT quota 可以通过以下命令查询:

for r in ap-northeast-1 ap-northeast-2 us-east-1; do
  echo "===== $r ====="
  aws service-quotas get-service-quota \
    --service-code ec2 \
    --quota-code L-3819A6DF \
    --region "$r" \
    --query "Quota.Value" \
    --output text
done

其中,L-3819A6DF 对应 All G and VT Spot Instance Requests。如果同时考虑 On-Demand,可以查询 Running On-Demand G and VT instances

for r in ap-northeast-1 ap-northeast-2 us-east-1; do
  echo "===== $r ====="
  aws service-quotas get-service-quota \
    --service-code ec2 \
    --quota-code L-DB2E81BA \
    --region "$r" \
    --query "Quota.Value" \
    --output text
done

在一次实际测试中,东京、首尔和 N. Virginia 都获得了较高的 Spot Placement Score,但这些区域的 G/VT Spot quota 均为 0。这一结果需要拆成两个维度理解:Spot Placement Score 描述当前容量信号,Service Quota 描述当前账号能够申请的资源上限。前者由 AWS 当前基础设施容量和需求状况决定,后者属于账号级限制。只有两个条件同时满足,实例才具备实际启动的可能性。

这里还有一个容易产生误解的现象。如果扫描所有 Region 后发现某些区域已经具有非零 quota,例如 eu-central-1 = 8eu-north-1 = 4eu-west-1 = 16,这些数值本身不能作为当前 GPU availability 的依据。若这些额度来自此前提交的 quota increase request,那么它们记录的只是账号过去在哪些 Region 获得过额度。当前实例容量仍然需要通过 Placement Score、实际 Spot 请求或最终启动结果判断。因此,在整个流程中可以把两个指标理解为两个独立筛选条件:Placement Score 用于寻找当前值得尝试的区域,Service Quota 用于确认账号是否已经具备进入这些区域申请资源的资格。

 

5. 对高分 Region 并行申请 Quota

当候选 Region 已经通过 Spot Placement Score 筛选出来后,quota 申请应围绕这些区域展开。如果任务具有较强的时间限制,可以同时向多个高分 Region 提交 quota increase request,从而避免整个流程依赖单一区域的审批速度。对于本文的例子,东京和首尔在 AZ-level 查询中都出现了 score=9 的 Availability Zone,因此它们具有较高的优先级;N. Virginia 的 Region-level score 同样达到 9,但具体 AZ 得分较低,可以作为额外候选区域。

如果目标是一台 g6e.xlarge,最低 G/VT quota 为 4,因此可以直接向多个候选 Region 同时申请 4 vCPU 的 Spot quota:

for r in ap-northeast-1 ap-northeast-2 us-east-1; do
  echo "===== Requesting Spot quota in $r ====="
  aws service-quotas request-service-quota-increase \
    --service-code ec2 \
    --quota-code L-3819A6DF \
    --desired-value 4 \
    --region "$r"
done

如果任务同时接受 On-Demand,也可以并行提交对应的 On-Demand G/VT quota:

for r in ap-northeast-1 ap-northeast-2 us-east-1; do
  echo "===== Requesting On-Demand quota in $r ====="
  aws service-quotas request-service-quota-increase \
    --service-code ec2 \
    --quota-code L-DB2E81BA \
    --desired-value 4 \
    --region "$r"
done

这种做法的核心目的是增加并行候选路径。例如,Tokyo Spot、Tokyo On-Demand、Seoul Spot、Seoul On-Demand 可以同时进入审批流程;只要其中任意一个满足 quota 要求,就可以立即进入实例启动阶段。这里需要注意,Spot Placement Score 与 quota approval 属于两个独立系统。Placement Score 高表示当前 Spot capacity signal 较好,并不会直接提高 Service Quota 的审批概率,因此 quota 申请范围仍然需要结合时间要求、成本限制和可接受的实例类型综合决定。

提交 quota increase request 后,可以等待 AWS 邮件通知,也可以直接通过 CLI 查询申请状态:

for r in ap-northeast-1 ap-northeast-2 us-east-1; do
  echo "===== $r ====="
  aws service-quotas list-requested-service-quota-change-history-by-quota \
    --service-code ec2 \
    --quota-code L-3819A6DF \
    --region "$r" \
    --query "RequestedQuotas[*].[DesiredValue,Status,Created]" \
    --output table
done

常见状态包括 PENDINGCASE_OPENEDAPPROVEDDENIED。如果其中一个候选 Region 已经变为 APPROVED,就可以立即转向该区域准备启动实例。

-END-


发布评论:

登录后方可评论,点击登录注册


评论列表:

暂无评论。


苏公网安备 32050602011302号
苏ICP备2020062135号-1
Copyright© Li Shen. All rights reserved.