TurboPilot 是一个自托管的 copilot 克隆,它使用 llama.cpp 背后的库在 4GiB RAM 中运行 60 亿参数的 Salesforce Codegen 模型。它很大程度上基于 fauxpilot 项目并受到其启发。
注意:这是一个概念验证,而不是一个稳定的工具。在此版本的项目中,自动完成速度相当慢。请随意使用它,但您的里程可能会有所不同。
现在支持 StableCode 3B 指示只需使用 TheBloke 的量化 GGML 模型并设置-m stablecode
。
新增内容:重构 + 简化:源代码已得到改进,可以更轻松地向 Turbopilot 扩展和添加新模型。该系统现在支持多种风格的模型
新增功能:Wizardcoder、Starcoder、Santacoder 支持- Turbopilot 现在支持最先进的本地代码完成模型,该模型提供更多编程语言和“中间填充”支持。
非常欢迎对该项目和相应的 GGML 分支提出 PR。
创建一个分支,进行更改,然后打开 PR。
尝试该项目的最简单方法是获取预处理模型,然后在 docker 中运行服务器。
您有 2 个选项来获取模型
您可以从 Huggingface 下载预先转换、预先量化的模型。
对于低 RAM 用户(4-8 GiB),我推荐 StableCode,对于高功率用户(16+ GiB RAM、独立 GPU 或苹果芯片),我推荐 WizardCoder。
Turbopilot 仍然支持v0.0.5
及更早版本的第一代 codegen 模型。尽管旧模型确实需要重新量化。
您可以在 MODELS.md 中找到完整的模型目录。
如果您想亲自尝试量化模型,请遵循本指南。
下载最新的二进制文件并将其解压到项目根文件夹中。如果没有为您的操作系统提供二进制文件,或者您希望自己构建它,请按照构建说明进行操作
跑步:
./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
运行旧的代码生成模型。只需将模型类型标志-m
更改为codegen
即可。
注意:Turbopilot 0.1.0 及更高版本重新量化您的 codegen 模型 v0.0.5 及更早版本的旧模型。我正在努力提供更新的量化代码生成模型
您还可以从此处提供的预构建 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
自 v0.0.5 版本起,turbocode 现在支持 CUDA 推理。为了运行支持 cuda 的容器,您需要启用 nvidia-docker,使用 cuda 标记版本并将--gpus=all
传递给 docker,以便访问您的 GPU,如下所示:
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 上,而不是前后复制数据,从而显着加快推理速度。
将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 12.0 或 12.2。
稍后您将需要 CUDA 11 或 CUDA 12 才能运行此容器。运行nvidia-smi
时,您应该能够看到列出的/app/turbopilot
。
从 v0.0.5 开始,可以使用 CUDA 版本的 linux 可执行文件 - 它需要在计算机上安装 libcublas 11 - 我可能会在某个时候构建 ubuntu debs,但现在如果您想使用CUDA GPU。
您可以通过--ngl
选项使用 GPU 卸载。
对官方 VS Code copilot 插件的支持正在进行中(请参阅票证 #11)。该 API 现在应该与 OpenAI 广泛兼容。
要使用 VSCode 中的 API,我推荐 vscode-fauxpilot 插件。安装后,您将需要更改 settings.json 文件中的一些设置。
Preferences: Open User Settings (JSON)
{
... // other settings
"fauxpilot.enabled" : true ,
"fauxpilot.server" : " http://localhost:18080/v1/engines " ,
}
现在您可以使用CTRL + SHIFT + P
启用 fauxpilot 并选择Enable Fauxpilot
当您击键时,该插件将向正在运行的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')) nn 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 "
}