banner

大语言模型 (LLM) 正在彻底改变人工智能领域。然而,驱动这些计算巨头可能带来相当大的挑战。以使用 HuggingFace Transformers 服务的 LLaMA-13B 为例,它在高端 A100 GPU 上每分钟只能处理区区 6.4 个请求。这个瓶颈导致用户等待时间长,并且对于任何组织来说,每 1,000 个请求大约 10 美元的成本也是一笔不小的开销。

我们最近的项目,vLLM,是一个在加州大学伯克利分校开发的开源库,它确保了快速高效的 LLM 推理。得益于我们新的 PagedAttention 算法,vLLM 将 LLM 服务速度提升到了一个新的水平(吞吐量比 HuggingFace Transformers 高出 24 倍),即使是资源有限的团队也能负担得起 LLM。请查看 vLLM 的博客文章GitHub 仓库以获取更多详细信息。

在本文中,我们将展示

  • 使用 SkyPilot,在您自己的云端使用我们的 vLLM 系统提供 LLM 服务的“一键”指南
  • SkyPilot 如何帮助我们专注于 AI 而不必担心基础设施(以及为什么其他 LLM 项目应该使用它!)

在您的云端一键启动 vLLM

我们通过提供一个简单的 SkyPilot yaml serve.yaml 来启动 vLLM,使其变得异常简单(请此处查看详细说明)。只需一个 SkyPilot 命令,您就可以在您的云账户中,在任何云上为 LLaMA-65B 启动 vLLM

sky launch -c vllm serve.yaml

SkyPilot 将在云端启动一个集群,该集群将具有所需 8 个 A100 GPU 的最佳价格和可用性,以启动 vLLM 服务。

optmizer
SkyPilot 找到的可能寻找所需资源的位置。

点击作业输出中的 URL(查找字符串 https://xxxxx.gradio.live)。模型现在可以访问,并以惊人的速度提供服务。

demo
LLaMA-65B 模型文本补全演示(视频为原始速度)。

要使用更小的模型(如 LLaMA-13b)和要求不高的 GPU 资源(如单个 A100)进行尝试,只需稍作修改命令即可神奇地运行。

sky launch -c vllm serve.yaml --gpus A100 --env MODEL_NAME=decapoda-research/llama-13b-hf

SkyPilot 如何加速 vLLM 在云上的开发

在开发 vLLM 的过程中,我们在配置和使用云 GPU 方面遇到了几个痛点。

幸运的是,我们开始每天使用 SkyPilot 进行实验,这减轻了云基础设施的负担,使我们能够专注于开发 vLLM 和运行 LLM 作业,也就是有趣的部分!

我们在下面讨论遇到的痛点,并展示我们在 SkyPilot 中找到的解决方案,我们相信这些解决方案也将有助于加速其他 LLM 项目/实践者的工作。

应对 GPU 短缺

LLM 通常需要高端 GPU,例如备受追捧的 A100-40GB 或 A100-80GB GPU。不幸的是,最近我们见证了云端严重的 GPU 短缺。在不同区域(或云!)搜索 GPU 实例通常感觉像是一场永无止境的寻宝。

想象一下,在 AWS、GCP、Azure 等主要云的数十个区域手动搜索可用的 GPU 虚拟机是多么麻烦,更不用说 Lambda Cloud、Oracle Cloud 等其他云了。仅仅找到一个拥有 8 个 A100 GPU 的实例就可能花费我们一个多小时!

借助 SkyPilot,我们使用了它的自动故障转移功能来完全自动化这个过程。一个简单的命令,SkyPilot 就会自动遍历我们有权访问的所有区域和云,配置最便宜的可用实例,设置虚拟机,然后运行我们的作业。

降低高成本

另一个障碍是云端 GPU 的高昂成本。一个拥有 8 个 A100 的实例每小时花费约 30 美元。更糟糕的是什么?为了获取那些难得的实例,即使它们处于空闲状态,我们也不愿意停止/终止它们,这导致了更高的仅仅是预留的成本。

这时 SkyPilot 出现了。它能够在所有云中自动搜索可用实例,这意味着一旦我们的作业完成,我们可以放心地使用其自动关闭功能来消除不必要的成本。

# Automatically terminate the cluster after all jobs on the cluster ‘vllm’ finish
sky autostop --down vllm

此外,即使我们只使用一个云,SkyPilot 默认也会使用给定云中最便宜的区域,为我们节省高达 20% 的费用。

高效的集群管理

当我们需要管理多个集群进行实验时,SkyPilot 被证明是无价的。没有它,跟踪跨越不同区域和云的集群将非常繁琐。

使用 sky status 命令,所有集群都可以轻松地在一个表格中查看——这适用于我们分散在不同区域和云中的所有开发集群。像 sky stop/down/start 这样的命令使我们能够管理我们的集群,无论它们位于哪个云/区域,而无需访问不同的云控制台。

status
SkyPilot 管理的来自不同云的所有集群表格。

轻松扩展

当我们准备好扩展(例如,运行数千个实验作业)时,SkyPilot 在任何集群上都提供了一个开箱即用的作业队列。我们编写了一个简单的 Python 脚本来生成数千个要运行的作业变体,并使用 sky exec 调用(在 Python 中为 sky.exec())将它们提交到我们的 SkyPilot 集群。所有作业都根据其资源需求自动调度(例如,每个节点 8 个并发作业,每个作业占用 1 个 GPU)。

queue
集群“vllm”上的作业表格。

总结

在本文中,我们首先分享了如何在任何云上仅用一个命令启动 vLLM 的简单方法;请参见此处的完整可启动示例。试试看,看看它是否能将您的 LLM 服务速度提升高达 24 倍!

此外,我们分享了在 SkyPilot 的帮助下,在云端开发 vLLM 的具体经验。我们的目标是快速迭代并构建一个高效的 LLM 推理系统,我们不想处理任何云基础设施的挑战:GPU 短缺、高昂的 GPU 成本或管理大量集群和作业。感谢 SkyPilot,我们得以完全卸下这些负担,同时使 vLLM 的开发更具成本效益。

我们希望我们分享的示例和经验能惠及 LLM 社区。祝愿未来有更多的人工智能创新!