TurboPilot 🚀
Turbopilot 已在2023年9月30日弃用/存档。已经有其他更成熟的解决方案能够更好地满足社区需求。请阅读我的博客帖子了解我停用工具的决策以及推荐的替代方案。
TurboPilot 是一个自托管的 copilot 克隆版本,使用 llama.cpp 库在 4GiB RAM 上运行 6 Billion Parameter Salesforce Codegen model。它主要基于和受到 fauxpilot 项目的启发。
注意:目前这只是一个概念验证工具,而不是一个稳定的工具。此版本的自动补全速度较慢。欢迎尝试,但可能会有反馈差异。
✨ 支持 StableCode 3B Instruct,只需使用 TheBloke 的 Quantized GGML 模型 并设置 -m stablecode
。
✨ 新增:重构并简化:源代码已经改进,现在更易于扩展和添加新模型到 Turbopilot 系统。现在支持多种模型类型。
✨ 新增:支持 Wizardcoder、Starcoder、Santacoder - Turbopilot 现在支持最新的本地代码补全模型,提供更多编程语言和“填充中间”支持。
🤝 贡献
项目和对应的 GGML 分叉 的PR非常欢迎。
创建一个分叉,进行更改,然后开启一个 PR。
👋 入门
尝试该项目最简单的方法是获取预处理的模型,然后在 Docker 中运行服务器。
获取模型
你有两种选择获取模型
选项A:直接下载 - 简单,快速入门
你可以从 Huggingface 下载预转换、预量化的模型。
对于低内存用户(4-8 GiB),我推荐 StableCode,对于高性能用户(16+ GiB RAM,独立 GPU 或 Apple Silicon),我推荐 WizardCoder。
Turbopilot 仍然支持 v0.0.5
和更早版本的第一代 codegen 模型,尽管旧模型需要重新量化。
你可以在 MODELS.md 中找到完整的模型目录。
选项B:自己转换模型 - 硬,灵活
如果你想自己量化模型,可以按照本指南。
⚙️ 运行 TurboPilot 服务器
下载 最新的二进制文件 并将其解压到根项目文件夹。如果没有提供适合你的操作系统的二进制文件,或者你更喜欢自己构建,可以按照构建说明。
运行:
./turbopilot -m starcoder -f ./models/santacoder-q4_0.bin
应用程序应在端口 18080
上启动服务器,你可以使用 -p
选项更改端口,但这是默认端口,vscode-fauxpilot 会尝试连接到该端口,除非你确定自己在做什么,否则建议不要更改。
如果你有多核系统,可以使用 -t
选项控制使用的 CPU 数量 - 例如,我在 6 核/12 线程的 AMD Ryzen 5000 上使用:
./codegen-serve -t 6 -m starcoder -f ./models/santacoder-q4_0.bin
要运行旧版 codegen 模型,只需将模型类型标记 -m
改为 codegen
。
注意:Turbopilot 0.1.0 及更新版本会重新量化旧版 codegen 模型。我正在努力提供更新的量化 codegen 模型。
📦 使用 Docker 运行
你也可以从预构建的 Docker 镜像运行 Turbopilot,详见此处。
你仍需要单独下载模型,然后你可以运行:
docker run --rm -it \
-v ./models:/models \
-e THREADS=6 \
-e MODEL_TYPE=starcoder \
-e MODEL="/models/santacoder-q4_0.bin" \
-p 18080:18080 \
ghcr.io/ravenscroftj/turbopilot:latest
Docker 和 CUDA
从 v0.0.5 版开始,turbocode 现在支持 CUDA 推理。为了运行启用 CUDA 的容器,你需要启用 nvidia-docker,使用带 cuda 标签的版本,并通过 --gpus=all
将 GPU 访问权限传递给 Docker,如下所示:
docker run --gpus=all --rm -it \
-v ./models:/models \
-e THREADS=6 \
-e MODEL_TYPE=starcoder \
-e MODEL="/models/santacoder-q4_0.bin" \
-e GPU_LAYERS=32 \
-p 18080:18080 \
ghcr.io/ravenscroftj/turbopilot:v0.2.0-cuda11-7
如果你有足够大的 GPU,设置 GPU_LAYERS
将允许 Turbopilot 将计算完全卸载到 GPU 上,而不是反复传输数据,从而显著加速推理。
如果使用 CUDA 12.0 或 12.2,请将 ghcr.io/ravenscroftj/turbopilot:v0.1.0-cuda11
替换为 ghcr.io/ravenscroftj/turbopilot:v0.2.0-cuda12-0
或 ghcr.io/ravenscroftj/turbopilot:v0.2.0-cuda12-2
。
你需要 CUDA 11 或 CUDA 12 及更新版本来运行该容器。运行 nvidia-smi
时你应该能看到 /app/turbopilot
列出。
可执行文件和 CUDA
从 v0.0.5 版开始,提供了支持 CUDA 的 Linux 可执行文件版本 - 需要在机器上安装 libcublas 11 - 我可能会在某个时候构建 Ubuntu deb 包,但如果你想使用 CUDA GPU,现在在 Docker 中运行可能更方便。
你可以通过 --ngl
选项使用 GPU 卸载。
🌐 使用 API
支持官方 Copilot 插件
官方 VS Code copilot 插件的支持正在进行中(参见 ticket #11)。API 现在应该大致兼容 OpenAI。
使用 FauxPilot 插件调用 API
要从 VSCode 使用 API,我推荐 vscode-fauxpilot 插件。安装后,你需要在 settings.json 文件中修改一些设置。
- 打开设置(CTRL/CMD + SHIFT + P),选择
Preferences: Open User Settings (JSON)
- 添加以下值:
{
... // other settings
"fauxpilot.enabled": true,
"fauxpilot.server": "http://localhost:18080/v1/engines",
}
现在你可以通过 CTRL + SHIFT + P
启用 fauxpilot,并选择 Enable Fauxpilot
插件会在你键击时发送 API 请求到运行的 codegen-serve
进程。它会等待每个请求完成后再发送进一步的请求。
直接调用 API
你可以请求 http://localhost:18080/v1/engines/codegen/completions
,它的行为与 Copilot 的相同端点一样。
例如:
curl --request POST \
--url http://localhost:18080/v1/engines/codegen/completions \
--header 'Content-Type: application/json' \
--data '{
"model": "codegen",
"prompt": "def main():",
"max_tokens": 100
}'
你应能得到如下结果:
{
"choices": [
{
"logprobs": null,
"index": 0,
"finish_reason": "length",
"text": "\n \"\"\"Main entry point for this script.\"\"\"\n logging.getLogger().setLevel(logging.INFO)\n logging.basicConfig(format=('%(levelname)s: %(message)s'))\n\n parser = argparse.ArgumentParser(\n description=__doc__,\n formatter_class=argparse.RawDescriptionHelpFormatter,\n epilog=__doc__)\n "
}
],
"created": 1681113078,
"usage": {
"total_tokens": 105,
"prompt_tokens": 3,
"completion_tokens": 102
},
"object": "text_completion",
"model": "codegen",
"id": "01d7a11b-f87c-4261-8c03-8c78cbe4b067"
}
👉 已知限制
- 目前 Turbopilot 仅支持一个 GPU 设备(不会尝试利用多个设备)。
👏 鸣谢
- 没有 Georgi Gerganov 在 GGML 和 llama.cpp 上的工作,本项目将无法实现。
- 本项目完全受到 fauxpilot 的启发,我也曾尝试过一段时间,但想尝试在没有 GPU 的情况下运行模型。
- 项目的前端由 Venthe 的 vscode-fauxpilot 插件 提供支持。
- 本项目使用了 Salesforce Codegen 模型。
- 感谢 Moyix 是他的工作将 Salesforce 模型转换为在 GPT-J 架构中运行。不仅提升了部分速度还使我更容易通过 现有的 gpt-j 示例代码 移植到 GGML。
- 模型服务器使用 CrowCPP 提供建议。
- 查看 原始科学论文 了解 CodeGen 的更多信息。