TurboPilot é um clone de copiloto auto-hospedado que usa a biblioteca por trás de llama.cpp para executar o modelo Salesforce Codegen de 6 bilhões de parâmetros em 4 GiB de RAM. É fortemente baseado e inspirado no projeto fauxpilot.
NB: Esta é uma prova de conceito no momento, em vez de uma ferramenta estável. O preenchimento automático é bastante lento nesta versão do projeto. Sinta-se à vontade para brincar com ele, mas sua milhagem pode variar.
Agora suporta StableCode 3B Instruct, basta usar os modelos GGML quantizados do TheBloke e definir -m stablecode
.
Novo: Refatorado + Simplificado : O código-fonte foi melhorado para facilitar a extensão e adição de novos modelos ao Turbopilot. O sistema agora oferece suporte a vários tipos de modelos
Novo: suporte Wizardcoder, Starcoder, Santacoder - Turbopilot agora suporta modelos de conclusão de código local de última geração que fornecem mais linguagens de programação e suporte "preencher o meio".
PRs para este projeto e o fork GGML correspondente são muito bem-vindos.
Faça um fork, faça suas alterações e depois abra um PR.
A maneira mais fácil de testar o projeto é pegar os modelos pré-processados e executar o servidor no docker.
Você tem 2 opções para obter o modelo
Você pode baixar os modelos pré-convertidos e pré-quantizados em Huggingface.
Para usuários com pouca RAM (4-8 GiB), recomendo StableCode e para usuários de alta potência (16+ GiB RAM, GPU discreta ou Apple Silicon), recomendo WizardCoder.
O Turbopilot ainda oferece suporte aos modelos codegen de primeira geração da v0.0.5
e versões anteriores. Embora os modelos antigos precisem ser requantizados.
Você pode encontrar um catálogo completo de modelos em MODELS.md.
Siga este guia se quiser experimentar você mesmo a quantização dos modelos.
Baixe o binário mais recente e extraia-o para a pasta raiz do projeto. Se um binário não for fornecido para o seu sistema operacional ou você preferir construí-lo sozinho, siga as instruções de construção
Correr:
./turbopilot -m starcoder -f ./models/santacoder-q4_0.bin
O aplicativo deve iniciar um servidor na porta 18080
, você pode alterar isso com a opção -p
, mas esta é a porta padrão à qual o vscode-fauxpilot tenta se conectar, então você provavelmente desejará deixar isso como está, a menos que tenha certeza de que sabe o que está fazendo. estou fazendo.
Se você possui um sistema multi-core, você pode controlar quantas CPUs são usadas com a opção -t
- por exemplo, no meu AMD Ryzen 5000 que tem 6 núcleos/12 threads que eu uso:
./codegen-serve -t 6 -m starcoder -f ./models/santacoder-q4_0.bin
Para executar os modelos codegen herdados. Basta alterar o sinalizador de tipo de modelo -m
para codegen
.
NOTA: Turbopilot 0.1.0 e mais recentes requantizam seus modelos codegen, modelos antigos de v0.0.5 e anteriores. Estou trabalhando para fornecer modelos de codegen quantizados atualizados
Você também pode executar o Turbopilot a partir da imagem docker pré-construída fornecida aqui
Você ainda precisará baixar os modelos separadamente e então poderá executar:
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
A partir da versão v0.0.5, o turbocode agora suporta inferência CUDA. Para executar o contêiner habilitado para cuda, você precisará ter o nvidia-docker habilitado, usar as versões marcadas com cuda e passar --gpus=all
para o docker com acesso à sua GPU da seguinte forma:
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
Se você tiver uma GPU grande o suficiente, definir GPU_LAYERS
permitirá que o turbopilot transfira totalmente a computação para sua GPU, em vez de copiar dados para frente e para trás, acelerando drasticamente a inferência.
Troque ghcr.io/ravenscroftj/turbopilot:v0.1.0-cuda11
por ghcr.io/ravenscroftj/turbopilot:v0.2.0-cuda12-0
ou ghcr.io/ravenscroftj/turbopilot:v0.2.0-cuda12-2
se você estiver usando CUDA 12.0 ou 12.2 respectivamente.
Você precisará do CUDA 11 ou CUDA 12 posteriormente para executar este contêiner. Você poderá ver /app/turbopilot
listado ao executar nvidia-smi
.
A partir da v0.0.5, uma versão CUDA do executável Linux está disponível - requer que o libcublas 11 esteja instalado na máquina - posso construir debs do Ubuntu em algum momento, mas por enquanto rodar no docker pode ser mais conveniente se você quiser usar um GPUCUDA.
Você pode usar o descarregamento de GPU por meio da opção --ngl
.
O suporte para o plugin oficial do copiloto do VS Code está em andamento (consulte o ticket nº 11). A API agora deve ser amplamente compatível com OpenAI.
Para usar a API do VSCode, recomendo o plugin vscode-fauxpilot. Depois de instalá-lo, você precisará alterar algumas configurações em seu arquivo settings.json.
Preferences: Open User Settings (JSON)
{
... // other settings
"fauxpilot.enabled" : true ,
"fauxpilot.server" : " http://localhost:18080/v1/engines " ,
}
Agora você pode habilitar o fauxpilot com CTRL + SHIFT + P
e selecionar Enable Fauxpilot
O plug-in enviará chamadas de API para o processo codegen-serve
em execução quando você pressionar uma tecla. Em seguida, ele aguardará a conclusão de cada solicitação antes de enviar outras solicitações.
Você pode fazer solicitações para http://localhost:18080/v1/engines/codegen/completions
que se comportarão exatamente como o mesmo endpoint do Copilot.
Por exemplo:
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
} '
Você deve conseguir algo assim:
{
"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 "
}