亚马逊AWS官方博客
推云揽竞 – 借力竞价实例(Spot), 提升大语言模型云端推理效能
使用场景
随着生成式 AI 的飞速发展,大语言模型(Large Language Models, LLMs)在智能对话、内容生成、知识问答等领域得到了广泛应用。许多企业开始将 LLM 集成到其产品和服务中,以提供更加智能、人性化的用户体验。然而,LLM 的推理过程需要强大的算力,包括显存资源,这使得在现代硬件平台上高效服务这些模型变得极具挑战性。特别是对于角色扮演这一类面向 C 端的应用,其用户规模大,对话轮次多,同时要求推理速度快,高昂的推理费用也成为应用规模化的一大阻碍。
Amazon EC2 提供的 Spot 实例为解决这一问题提供了一个经济高效的方案。Spot 实例价格相比按需实例最低可以达到按需实例价格的一折。通过使用 Spot 实例, 在维持高性能的同时能显著降低大语言模型的推理成本。
挑战
在使用 EC2 Spot 实例优化 LLM 推理成本时,主要面临以下挑战:
- 实例中断:Spot 实例由亚马逊云科技根据市场供需动态定价,当出价低于市场价时,实例可能会被回收。这对 LLM 推理工作负载的连续性提出了挑战。
- 动态伸缩:LLM 推理的请求量通常是动态变化的,存在明显的高峰和低谷期,需要根据负载变化自动调整 Spot 实例的数量,以平衡成本和性能。
- 异构优化:LLM 推理对 GPU 性能敏感,EC2 提供了多种类型的 GPU 实例(如 G4、G5、G6、P4、P5 系列等),需要根据负载的特点,在保证性能的前提下,选择不同的实例类型来匹配最佳的性价比。
解决方案
介绍
本解决方案利用 Amazon EC2 Spot 实例结合 GPU Smart Scheduler(GSS)工具,为大语言模型的推理任务提供了一个高性价比的运行环境。GSS 能够帮助用户方便地管理和调度 Spot 实例,并且能够优雅地处理实例中断问题。通过在 GSS 中配置合适的 yaml 文件,用户可以根据自己的需求灵活选择不同类型和数量的 GPU 实例,并且可以对实例进行动态的弹性伸缩,以应对负载的变化。
安装依赖环境
安装 GSS
配置操作集群的 AKSK
请确保您已经正确安装 AWS CLI,同时在控制台中创建了具有 AmazonEC2FullAccess 权限的 IAM 用户,在 IAM 用户的安全凭证中创建并保存了访问密钥。请在以下 AWS configure 命令中输入对应的访问密钥和区域信息:
启动集群
我们用预先在 ./sample/目录下提供的 yaml 文件 awsgpus-cluster.yaml 进行配置,运行以下命令启动 Spot 实例集群:
在运行阶段,展示了当前选择的 region,对应 Spot 的价格以及可用区,同时会根据我们的配置请求对应的 Spot 实例。在控制台 EC2 的 Spot 请求页可以看到已经请求成功的 Spot 实例。
当 Replicas 状态变为 READY 时就可以运行了:
我们可以启用一个 Web UI 对以上启动的集群进行访问:
yaml 文件说明
服务配置(service
)
- replicas:指定服务的副本数量,这里设置为 2。
- readiness_probe:用于检查服务是否准备就绪。通过发送一个请求到
/v1/chat/completions
路径,使用指定的模型和消息内容来验证服务的可用性。
资源配置(resources
)
- accelerators:指定使用的显卡类型和数量,这里制定了 Nvidia A10g 显卡,在亚马逊云平台中是 G5 实例家族。
- cpus:指定使用的 CPU 数量,这里是 8 个或更多。
- use_spot:是否使用 Spot 实例,这里设置为 True;如果设置为 False 则使用按需实例。
- disk_size:指定磁盘大小,这里是 512GB,以确保能存放下模型检查点。
- ports:指定暴露给互联网的端口,这里是 8081。
关于中断
中断的优雅处理是借助 Spot 进行大模型推理的重要前提。Amazon EC2 的 Spot 实例在中断前 2 分钟会发出通知,通过 Amazon EventBridge 可以检测该事件,并采取相应的操作。
以下是 EventBridge 提供的标准通知事件样例:
在 GSS 中会通过一个 Lambda 函数接受相关的中断信息,(1) 通知 load_balancer 提前移除相关实例;(2) 启动新的实例,让用户更加平滑地过度中断这个过程。
当启动新的实例,新启动的实例 ID 会在当前最大实例 ID 的基础上+1。
在图中的 ID 是一个自增的序列,在运行了 2 天后,序列已经增加到了 36。
关闭集群
方案收益
要查看 Spot 实例价格,打开 EC2 实例控制台→Spot 请求→定价历史记录,选择对应的实例类型即可查看该实例的历史价格波动,您可以查看最近 90 天的 Spot 价格历史记录,并按照实例类型、操作系统和可用区筛选。
在俄勒冈区域,分别以 g5.2xlarge,g5.12xlarge,g5.48xlarge 这三种不同的实例类型为例,每小时单价的平均值在过去一个月内的历史记录如下,请注意,以下价格记录为当前时间统计的历史一个月内的数值,实时价格记录请参照以上步骤在控制台中查看。
此外还可以打开价格计算器,看到和按需实例相比,Spot 提供了高达 63% 的历史平均折扣。
结论
本方案介绍了如何利用 Amazon Spot Instance,在带来 3-6 倍的成本节省的同时保证作业稳定运行。同时详细阐述了如何使用 GSS 来配置固定容量的集群 Spot 集群,我们将在下一期介绍如何配置可伸缩的集群。
参考链接
https://www.usenix.org/system/files/nsdi23-yang-zongheng.pdf
https://github.com/skypilot-org
https://thinkwithwp.com/cn/ec2/faqs/#Spot_instances