保持高性能,Amazon EC2 Spot 实例节省超 3 倍 LLM 推理成本

e466139d2fe456ad3db2b6adc8109467.gif

使用场景

随着生成式 AI 的飞速发展,大语言模型(LLM)在智能对话、内容生成、知识问答等领域得到了广泛应用。许多企业开始将 LLM 集成到其产品和服务中,以提供更加智能、人性化的用户体验。然而,LLM 的推理过程需要强大的算力,包括显存资源,这使得在现代硬件平台上高效服务这些模型变得极具挑战性。特别是对于角色扮演这一类面向 C 端的应用,其用户规模大、对话轮次多、同时要求推理速度快,高昂的推理费用也成为应用规模化的一大阻碍。

Amazon EC2 提供的 Amazon EC2 Spot 实例为解决这一问题提供了经济高效的方案。Amazon EC2 Spot 实例价格可以低至按需实例价格的一折。通过使用 Amazon EC2 Spot 实例, 在维持高性能的同时能显著降低 LLM 的推理成本。

Amazon EC2 Spot 实例

https://aws.amazon.com/cn/ec2/spot/

场景

在使用 Amazon EC2 Spot 实例优化 LLM 推理成本时,会遇到下列场景:

  • 实例中断:Amazon EC2 Spot 实例由亚马逊云科技根据市场供需动态定价,当出价低于市场价时,实例可能会被回收。这对 LLM 推理工作负载的连续性提出了挑战。

  • 动态伸缩:LLM 推理的请求量通常是动态变化的,存在明显的高峰和低谷期,需要根据负载变化自动调整 Amazon EC2 Spot 实例的数量,以平衡成本和性能。

  • 异构优化:LLM 推理对 GPU 性能敏感,Amazon EC2 提供了多种类型的 GPU 实例(如 Amazon G4、Amazon G5、Amazon G6、Amazon P4、Amazon P5 系列等),需要根据负载的特点,在保证性能的前提下,选择不同的实例类型来匹配最佳的性价比。

解决方案

介绍

本解决方案利用 Amazon EC2 Spot 实例结合 GPU Smart Scheduler(GSS)工具,为大语言模型的推理任务提供了一个高性价比的运行环境。GSS 能够帮助用户方便地管理和调度 Amazon EC2 Spot 实例,并且能够顺利地处理实例中断问题。通过在 GSS 中配置合适的 .yaml 文件,用户可以根据自己的需求灵活选择不同类型和数量的 GPU 实例,并且可以对实例进行动态的弹性伸缩,以应对负载的变化。

GPU Smart Scheduler(GSS)

https://github.com/tsaol/GSS

.yaml 文件

https://github.com/tsaol/GSS/blob/main/sample/awsgpus-cluster.yaml

安装依赖环境

# requires 3.7 <= python <= 3.11.
conda create -y -n awsspotgpus python=3.10
conda activate awsspotgpus
# Choose your cloud:

左右滑动查看完整示意

安装 GSS。

git clone https://github.com/tsaol/GSS.git
cd GSS
pip install -e .

左右滑动查看完整示意

配置操作集群的 AKSK。

请确保您已经正确安装 Amazon CLI,同时在控制台中创建了具有 Amazon EC2 Full Access 权限的 Amazon IAM 用户,在 Amazon IAM 用户的安全凭证中创建并保存了访问密钥。请在以下 Amazon configure 命令中输入对应的访问密钥和区域信息:

# Install boto
pip install boto3
# Configure your AWS credentials
aws configure

Amazon CLI

https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html

启动集群

我们用预先在 ./sample/ 目录下提供的 .yaml 文件 awsgpus-cluster.yaml 进行配置,运行以下命令启动 Amazon EC2 Spot 实例集群:

HF_TOKEN=hf_xxxxxxxx sky serve up ./sample/awsgpus-cluster.yaml -n llama3 --env HF_TOKEN

左右滑动查看完整示意

1657b58f676f075523e99da581ce8d7e.png

在运行阶段,展示了当前选择的 Region,对应 Amazon EC2 Spot 的价格以及可用区,同时会根据我们的配置请求对应的 Amazon EC2 Spot 实例。在控制台 Amazon EC2 的 Amazon EC2 Spot 请求页可以看到已经请求成功的 Amazon EC2 Spot 实例。

a4a6ea1f2b34b02171d3a4a520ef150d.png

当 Replicas 状态变为 READY 时就可以运行了:

Services
NAME    VERSION  UPTIME  STATUS  REPLICAS  ENDPOINT
llama3  1        1m 55s  READY   3/3       44.200.76.29:30001


Service Replicas
SERVICE_NAME  ID  VERSION  ENDPOINT                   LAUNCHED    RESOURCES                  STATUS  REGION
llama3        1   1        http://3.231.229.47:8081   7 mins ago  1x AWS([Spot]{'A10G': 1})  READY   us-east-1
llama3        2   1        http://3.238.133.168:8081  7 mins ago  1x AWS([Spot]{'A10G': 1})  READY   us-east-1
llama3        3   1        http://44.212.99.147:8081  7 mins ago  1x AWS([Spot]{'A10G': 1})  READY   us-east-1

左右滑动查看完整示意

我们可以启用一个 Web UI 对以上启动的集群进行访问:

sky launch -c llama3-gui ./gui.yaml --env ENDPOINT=$(sky serve status --endpoint llama3)

左右滑动查看完整示意

69501856bd8cf690ca69554af67c8344.png

.yaml 文件说明

服务配置(service)。

service:
  replicas: 2
  # An actual request for readiness probe.
  readiness_probe:
    path: /v1/chat/completions
    post_data:
      model: $MODEL_NAME
      messages:
        - role: user
          content: Hello! What is your name?
      max_tokens: 1

左右滑动查看完整示意

  • replicas:指定服务的副本数量,这里设置为 2。

  • readiness_probe:用于检查服务是否准备就绪。通过发送一个请求到 /v1/chat/completions 路径,使用指定的模型和消息内容来验证服务的可用性。

资源配置(resources)。

resources:
  accelerators: {A10g}
  cpus: 8+
  use_spot: True
  disk_size: 512  # Ensure model checkpoints can fit.
  disk_tier: best
  ports: 8081  # Expose to internet traffic.

左右滑动查看完整示意

  • accelerators:指定使用的显卡类型和数量,这里制定了 Nvidia A10g 显卡,在亚马逊云科技的服务平台中是 Amazon EC2 G5 实例家族。

  • cpus:指定使用的 CPU 数量,这里是 8 个或更多。

  • use_spot:是否使用 Amazon EC2 Spot 实例,这里设置为 True;如果设置为 False 则使用按需实例。

  • disk_size:指定磁盘大小,这里是 512GB,以确保能存放下模型检查点。

  • ports:指定暴露给互联网的端口,这里是 8081。

关于中断

中断的优雅处理是借助 Amazon EC2 Spot 进行大模型推理的重要前提。Amazon EC2 的 Amazon EC2 Spot 实例在中断前 2 分钟会发出通知,通过 Amazon EventBridge 可以检测该事件,并采取相应的操作。

以下是 Amazon EventBridge 提供的标准通知事件样例:

13944c137da817175c4e806db954b778.jpeg

在 GSS 中会通过一个 Amazon Lambda 函数接受相关的中断信息:

  1. 通知 load_balancer 提前移除相关实例。

  2. 启动新的实例,让用户更加平滑地过度中断这个过程。

def handle_instance_interrupt(instance_id: str):
    # [1]Find the corresponding ReplicaInfo based on the instance ID
    replica_info = replica_managers.get_replica_by_instance_id(instance_id)
    if replica_info:
        #[2] Set the replica state to TERMINATING
        replica_info.state = ReplicaState.TERMINATING
        #[3] Notify load_balancer to remove the replica from the forwarding targets
        load_balancer.remove_replica(replica_info)

左右滑动查看完整示意

当启动新的实例,新启动的实例 ID 会在当前最大实例 ID 的基础上 +1。

425596968c56c26724b7455d26574939.png

在图中的 ID 是一个自增的序列,在运行了 2 天后,序列已经增加到了 36。

关闭集群。

sky down llama3

方案收益

要查看 Amazon EC2 Spot 实例价格,打开 Amazon EC2 实例控制台→Spot 请求→定价历史记录,选择对应的实例类型即可查看该实例的历史价格波动,您可以查看最近 90 天的 Amazon EC2 Spot 价格历史记录,并按照实例类型、操作系统和可用区筛选。

在俄勒冈区域,分别以 g5.2xlarge、g5.12xlarge、g5.48xlarge 这三种不同的实例类型为例,每小时单价的平均值在过去一个月内的历史记录如下,请注意,以下价格记录为当前时间统计的历史一个月内的数值,实时价格记录请参照以上步骤在控制台中查看。

此外还可以打开价格计算器,看到和按需实例相比,Amazon EC2 Spot 提供了高达 63% 的历史平均折扣。

价格计算器

https://calculator.aws/#/createCalculator/ec2-enhancement

总结

本方案介绍了如何利用 Amazon EC2 Spot 实例,在带来 3-6 倍的成本节省的同时保证作业稳定运行。同时详细阐述了如何使用 GSS 来配置固定容量的集群 Amazon EC2 Spot 集群,我们将在下一期介绍如何配置可伸缩的集群。

outside_default.png

参考链接

1.https://www.usenix.org/system/files/nsdi23-yang-zongheng.pdf

2.https://github.com/tsaol/GSS

3.https://github.com/skypilot-org

4.https://aws.amazon.com/cn/ec2/faqs/#Spot_instances

本篇作者

71372098166c7001a92e0bd26097de17.jpeg

曹镏

亚马逊云科技解决方案架构师,专注于为企业级客户提供信息化以及生成式 AI 方案的咨询与设计,在人工智能和机器学习领域具有解决实际问题能力以及落地大模型训练项目的经验。

45e9613cb9a99fc66715102ab0548a2b.jpeg

郑昊

亚马逊云科技人工智能和机器学习解决方案架构师。主要专注于语言模型的训练及推理、搜推算法及系统基于亚马逊云科技人工智能和机器学习技术栈的相关优化及方案构建。

b94227922221462d8298573820d14697.jpeg

王泽耀

亚马逊云科技解决方案架构师,面向国内大型企业助力品牌出海,致力于亚马逊云科技云服务在国内的应用及推广。

99e47f46d64c7019467be3a10d18ff41.jpeg

曹阳

亚马逊云科技解决方案架构师,负责基于亚马逊云科技云计算方案的架构咨询与设计,同时致力于亚马逊云科技在各行业中的应用与推广,目前侧重于移动应用以及物联网领域的研究。

99bf5e6be8c4d8b22b984db1e94d6afd.png

e5b34df2c9d29a95226c3d6d803b8a56.gif

星标不迷路,开发更极速!

关注后记得星标「亚马逊云开发者」

听说,点完下面4个按钮

就不会碰到bug了!

d1e5da2a37a6bc550225a0225240cd48.gif

点击阅读原文查看博客!获得更详细内容!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值