想在您选择的任何云上托管您自己的 LLM 聊天机器人吗?是否担心云上的 GPU 不可用、高昂的云账单、手动学习如何在不同区域/云中启动实例,或者费力设置云实例?

本文将展示如何使用 SkyPilot 通过一个命令行命令来托管一个基于 LLaMA 的基础聊天机器人

它将自动执行以下操作

  • 在 AWS、GCP、Azure 或 Lambda 上获取一个性能强大的 GPU 实例
  • 设置实例(下载权重、在 Conda 环境中安装依赖项等)
  • 启动一个聊天机器人界面,我们可以通过笔记本电脑的浏览器连接到它

...同时它会抽象掉所有上述基础设施负担并最大限度地降低成本。

Run LLaMA LLM chatbots on any cloud with SkyPilot

背景

LLaMA 是 Meta 最近发布的一系列大型语言模型(LLM)。LLaMA 使用来自公共数据集的超过 1 万亿个 token 进行训练,质量高且空间效率高。您可以填写表格向 Meta 申请访问权限以下载开放模型权重。在下面的步骤中,我们假设 (1) 您有一个未过期的下载 URL,或者 (2) 权重已下载并存储在本地计算机上。

SkyPilot 是加州大学伯克利分校开发的一个开源框架,用于在任何云上无缝运行机器学习。用户可以通过简单的 CLI 轻松启动许多集群和作业,同时显著降低其云账单。目前支持 Lambda(低成本 GPU 云)、AWSGCPAzure。请参阅文档以了解更多信息。

步骤

下面使用的所有 YAML 文件都位于SkyPilot 仓库中,聊天机器人代码在此处

  1. 安装 SkyPilot 并检查云凭据是否存在
pip install "skypilot[aws,gcp,azure,lambda]"  # pick your clouds
sky check
`sky check` output showing enabled clouds for SkyPilot
  1. 获取示例文件夹
git clone https://github.com/skypilot-org/skypilot.git
cd skypilot/llm/llama-chatbots
  1. a. 如果您有 Meta 提供的未过期的 LLaMA URL,请运行
export LLAMA_URL='https://'  # Add URL sent by Meta.
sky launch llama-65b.yaml -c llama -s --env LLAMA_URL=$LLAMA_URL

这将把 65B 模型下载到云实例。设置过程可能需要长达 30 分钟。

b. 否则,如果您的计算机上存储了 LLaMA 检查点:请确保它们按以下目录结构组织(与 Meta 的官方发布结构相同)

<llama-dir>
├── 7B/
|   |-- ...
├── 13B/
|   |-- ...
├── 30B/
|   |-- ...
├── 65B/
|   |-- ...
└── tokenizer.model
`-- tokenizer_checklist.chk

然后,运行下面的命令

export LLAMA_DIR='<llama-dir>'  # Directory of your local LLaMA checkpoints.
ln -s $(readlink -f $LLAMA_DIR) /tmp/llama
sky launch llama-65b-upload.yaml -c llama -s

这将把 65B 模型上传到云实例。

无论哪种方式,您都会看到如下确认提示

SkyPilot launch outputs for 8x A100 GPUs
SkyPilot 会自动跨云和区域找到最便宜的 8x A100 GPU。
您可能看到较少的云选项,因为 SkyPilot 只使用您有权访问的云。

请参阅下文以获取更多可运行的命令!

  1. 打开另一个终端并运行
ssh -L 7681:localhost:7681 llama
  1. 在浏览器中打开 http://localhost:7681 并开始聊天!
    LLaMA chatbot running on the cloud via SkyPilot
    与天上的 LLaMA 聊天

更多可尝试的命令

要在不同的 GPU 或云上启动您的聊天机器人,SkyPilot 只需更改一个参数即可轻松实现。

注意:要使用存储在您计算机上的检查点,请在所有命令中将 llama-*.yaml 替换为 llama-*-upload.yaml(参见上文说明)。

使用 --gpus <type>:<num> 启动不同的 GPU(请参见 sky show-gpus 以查看所有支持的 GPU)

sky launch llama-65b.yaml --gpus A100:8 <other args>
sky launch llama-7b.yaml --gpus A100:1 <other args>
sky launch llama-7b.yaml --gpus V100:1 <other args>

使用 --cloud (可选)在不同云上启动

命令
在最便宜的云/区域启动(自动选择!)sky launch llama-65b.yaml -c llama-65b -s --env LLAMA_URL=$LLAMA_URL
在 Lambda 上启动sky launch llama-65b.yaml --cloud lambda -c llama-65b -s --env LLAMA_URL=$LLAMA_URL
在 GCP 上启动sky launch llama-65b.yaml --cloud gcp -c llama-65b -s --env LLAMA_URL=$LLAMA_URL
在 AWS 上启动sky launch llama-65b.yaml --cloud aws -c llama-65b -s --env LLAMA_URL=$LLAMA_URL
在 Azure 上启动sky launch llama-65b.yaml --cloud azure -c llama-65b -s --env LLAMA_URL=$LLAMA_URL

使用 --use-spot 使用 Spot 实例以节省超过 3 倍的成本

sky launch llama-65b.yaml --use-spot <other args>

要使用其他模型大小,只需将正确的 YAML 路径传递给命令(YAML 文件中已设置正确的 GPU 数量和检查点路径)

sky launch llama-7b.yaml -c llama-7b -s --env LLAMA_URL=$LLAMA_URL
sky launch llama-13b.yaml -c llama-13b -s --env LLAMA_URL=$LLAMA_URL
sky launch llama-30b.yaml -c llama-30b -s --env LLAMA_URL=$LLAMA_URL
sky launch llama-65b.yaml -c llama-65b -s --env LLAMA_URL=$LLAMA_URL

要查看这些标志的详细信息,请参阅CLI 文档或运行 sky launch -h

清理

完成后,您可以停止或拆除集群

  • 要停止集群,请运行
sky stop llama  # or pass your custom name if you used "-c <other name>"

您可以重新启动已停止的集群并使用以下命令重新启动聊天机器人(YAML 中的 run 部分)

sky launch llama-65b.yaml -c llama --no-setup

注意 --no-setup 标志:已停止的集群会保留其磁盘内容,因此我们可以跳过重新进行设置。

  • 要拆除集群(不可重新启动),请运行
sky down llama  # or pass your custom name if you used "-c <other name>"

要查看您的集群,请运行 sky status,它是一个跨区域/云查看所有集群的统一窗口。

要了解有关各种 SkyPilot 命令的更多信息,请参阅快速入门指南

为什么选择 SkyPilot?

首先是一些注意事项。LLaMA 模型并非专门针对作为聊天机器人进行微调,并且我们只对模型进行了基本的预设(chat.py 中的 INIT_PROMPT),因此聊天质量可能不尽人意。另请参阅 Meta 的常见问题解答(FAQ)

话虽如此,我们预计 LLaMA/其他开放 LLM 在不久的将来会迅速发展。随着开放 LLM 变得更强大、更大、更消耗计算资源,对在各种云计算资源上灵活进行微调和运行它们的需求将急剧增加。

这就是 SkyPilot 发挥作用的地方。本示例展示了使用 SkyPilot 在云上运行 ML 项目的三个主要优势

云可移植性和生产力:我们封装了一个现有的 ML 项目,并使用简单的 YAML 文件和一个命令将其启动到您选择的云上。通过简单的 CLI 交互,用户只需更改一个参数即可获得云可移植性

SkyPilot 还提高了 ML 用户使用云的生产力。无需学习不同云的控制台或 API。无需弄清楚正确的实例类型。并且对实际的项目代码无需做任何更改即可运行。

更高的 GPU 可用性:如果某个区域或整个云的 GPU 资源耗尽(在当今的大模型竞赛中越来越常见),除了等待之外,唯一的解决方案是转向更多区域和云

SkyPilot&rsquo;s auto-failover across regions and clouds to improve GPU availability
SkyPilot 的自动故障转移。所有启用的云中的区域按价格排序并按该顺序尝试。如果启动请求被限制为使用特定云,则仅在该云的区域中进行故障转移。图中顺序仅供说明,可能不反映最新的价格。

SkyPilot 的 sky launch 命令使这一切完全自动化。它在后台执行自动故障转移。对于每个请求,系统会遍历所有启用的区域(甚至云)以寻找可用的 GPU,并按最便宜的价格顺序进行。

降低云账单:GPU 在云上可能非常昂贵。SkyPilot 通过支持以下功能来降低 ML 团队的成本

  • 低成本 GPU 云(Lambda;比 AWS/Azure/GCP 便宜 3 倍以上)
  • Spot 实例(比按需实例便宜 3 倍以上)
  • 自动选择最便宜的云/区域/可用区
  • 实例的自动停止和自动终止(文档

总结

恭喜!您已经使用 SkyPilot 通过一个命令在云上启动了一个基于 LLaMA 的聊天机器人。系统自动处理实例设置,并提供了云可移植性、更高的 GPU 可用性和成本降低。

LLaMA 聊天机器人只是一个示例应用。要将这些优势应用于您自己的云上 ML 项目,我们推荐快速入门指南

有反馈或问题?想运行其他 LLM 模型吗?请随时通过 GitHubSlack 联系 SkyPilot 团队,我们很乐意与您交流!