来源:llm/tabby
Tabby: 自托管 AI 编程助手#
本文展示了如何仅使用一个 CLI 命令,通过 SkyPilot 托管一个 AI 编程助手。
背景#
Tabby 是一个自托管 AI 编程助手,提供了一个开源的本地替代方案,可替代 GitHub Copilot。它具有以下几个关键特性:
自包含,无需数据库管理系统或云服务。
OpenAPI 接口,易于与现有基础设施集成(例如云 IDE)。
支持消费级 GPU。
SkyPilot 是一个来自加州大学伯克利分校的开源框架,用于在任何云上无缝运行机器学习任务。通过简单的 CLI,用户可以轻松启动许多集群和作业,同时大幅降低云账单。目前,支持 AWS、GCP、Azure、Lambda Cloud、IBM、Oracle Cloud Infrastructure (OCI)、Cloudflare R2 和 Samsung Cloud Platform (SCP)。查看文档了解更多信息。
步骤#
下方使用的所有 YAML 文件都位于SkyPilot 仓库中。
安装 SkyPilot 并检查云凭据是否存在
# pip install skypilot pip install "skypilot[aws,gcp,azure,lambda]" # pick your clouds sky check
获取 Tabby SkyPilot 配置
git clone https://github.com/skypilot-org/skypilot.git cd skypilot/llm/tabby
启动一个 Tabby 集群:您可以通过 docker-compose.cuda.yaml(GPU) 或 docker-compose.yaml(CPU) 文件中
command
字段的--model
参数来选择使用的模型。默认使用TabbyML/SantaCoder-1B
,了解更多模型选项,请查看 Tabby 文档。sky launch -c tabby tabby.yaml
看到
tabby server is ready, enjoy!
后,您可以使用以下命令获取公共 IPsky status --ip tabby 20.92.236.53
您也可以直接使用
ssh
命令将端口映射到 localhost。ssh -L 8080:localhost:8080 tabby
在您的 IDE 中安装 Tabby 扩展。例如,在 VS Code 中,您可以从 marketplace 安装Tabby 扩展。
将您的 IDE 配置为使用
$(sky status --ip tabby):8080
作为 Tabby 的端点。
打开一个 Python 文件并开始编码!Tabby 将在您输入时开始提供代码片段建议。
清理#
完成后,您可以停止或销毁集群
要停止集群,请运行
sky stop tabby # or pass your custom name if you used "-c <other name>"
您可以使用以下命令重启已停止的集群并重新启动 Tabby(YAML 中的
run
部分)sky launch tabby.yaml -c tabby --no-setup
请注意
--no-setup
标志:已停止的集群会保留其磁盘内容,因此我们可以跳过重新执行 setup。要销毁集群(不可重启),请运行
sky down tabby # or pass your custom name if you used "-c <other name>"
要查看您的集群,请运行 sky status
,它可以一览无余地显示您在所有区域/云中的所有集群。
要了解有关 SkyPilot 命令的更多信息,请参阅快速入门。
包含的文件#
docker-compose.cuda.yaml
version: '3.5'
services:
tabby:
restart: always
container_name: tabby
image: tabbyml/tabby
command: serve --model TabbyML/StarCoder-1B --device cuda
volumes:
- "./tabby:/data"
ports:
- 8080:8080
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
docker-compose.yaml
version: '3.5'
services:
tabby:
restart: always
container_name: tabby
image: tabbyml/tabby
command: serve --model TabbyML/StarCoder-1B
volumes:
- "./tabby:/data"
ports:
- 8080:8080
tabby/config.toml
[[repositories]]
git_url = "https://github.com/skypilot-org/skypilot"
tabby.yaml
resources:
# you could change this section to any resources you want, like a CPU VM
accelerators: T4:1
ports: 8080
# tabby base dir
workdir: .
setup: |
# On some cloud providers, docker-compose is not installed by default.
sudo curl -sS -L https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
sudo chmod a+x /usr/local/bin/docker-compose
# On certain cloud providers (e.g lambda cloud), the default user is not added to docker group, so we need sudo here
sudo docker-compose pull > /dev/null 2>&1
# Add current user to docker group, it won't take effect immediately as skypilot job is started by a long-running daemon.
sudo usermod -aG docker $USER
run: |
docker-compose down
if nvidia-smi; then
docker-compose -f docker-compose.yaml -f docker-compose.cuda.yaml up -d
else
docker-compose up -d
fi
while ! curl -s -X POST http://localhost:8080/v1/health; do
echo "server not ready, waiting..."
sleep 5
done
echo "tabby server is ready, enjoy!"