想在您选择的任何云上托管您自己的 LLM 聊天机器人吗?是否担心云上的 GPU 不可用、高昂的云账单、手动学习如何在不同区域/云中启动实例,或者费力设置云实例?
本文将展示如何使用 SkyPilot 通过一个命令行命令来托管一个基于 LLaMA 的基础聊天机器人。
它将自动执行以下操作
- 在 AWS、GCP、Azure 或 Lambda 上获取一个性能强大的 GPU 实例
- 设置实例(下载权重、在 Conda 环境中安装依赖项等)
- 启动一个聊天机器人界面,我们可以通过笔记本电脑的浏览器连接到它
...同时它会抽象掉所有上述基础设施负担并最大限度地降低成本。

背景
LLaMA 是 Meta 最近发布的一系列大型语言模型(LLM)。LLaMA 使用来自公共数据集的超过 1 万亿个 token 进行训练,质量高且空间效率高。您可以填写表格向 Meta 申请访问权限以下载开放模型权重。在下面的步骤中,我们假设 (1) 您有一个未过期的下载 URL,或者 (2) 权重已下载并存储在本地计算机上。
SkyPilot 是加州大学伯克利分校开发的一个开源框架,用于在任何云上无缝运行机器学习。用户可以通过简单的 CLI 轻松启动许多集群和作业,同时显著降低其云账单。目前支持 Lambda(低成本 GPU 云)、AWS、GCP 和 Azure。请参阅文档以了解更多信息。
步骤
下面使用的所有 YAML 文件都位于SkyPilot 仓库中,聊天机器人代码在此处。
- 安装 SkyPilot 并检查云凭据是否存在
pip install "skypilot[aws,gcp,azure,lambda]" # pick your clouds
sky check

- 获取示例文件夹
git clone https://github.com/skypilot-org/skypilot.git
cd skypilot/llm/llama-chatbots
- 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 模型上传到云实例。
无论哪种方式,您都会看到如下确认提示

请参阅下文以获取更多可运行的命令!
- 打开另一个终端并运行
ssh -L 7681:localhost:7681 llama
- 在浏览器中打开 http://localhost:7681 并开始聊天!
与天上的 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 的 sky launch
命令使这一切完全自动化。它在后台执行自动故障转移。对于每个请求,系统会遍历所有启用的区域(甚至云)以寻找可用的 GPU,并按最便宜的价格顺序进行。
降低云账单:GPU 在云上可能非常昂贵。SkyPilot 通过支持以下功能来降低 ML 团队的成本
- 低成本 GPU 云(Lambda;比 AWS/Azure/GCP 便宜 3 倍以上)
- Spot 实例(比按需实例便宜 3 倍以上)
- 自动选择最便宜的云/区域/可用区
- 实例的自动停止和自动终止(文档)
总结
恭喜!您已经使用 SkyPilot 通过一个命令在云上启动了一个基于 LLaMA 的聊天机器人。系统自动处理实例设置,并提供了云可移植性、更高的 GPU 可用性和成本降低。
LLaMA 聊天机器人只是一个示例应用。要将这些优势应用于您自己的云上 ML 项目,我们推荐快速入门指南。
有反馈或问题?想运行其他 LLM 模型吗?请随时通过 GitHub 或 Slack 联系 SkyPilot 团队,我们很乐意与您交流!