TurboPilot es un clon copiloto autohospedado que utiliza la biblioteca detrás de llama.cpp para ejecutar el modelo Salesforce Codegen de 6 mil millones de parámetros en 4 GiB de RAM. Está fuertemente basado e inspirado en el proyecto fauxpilot.
NB: Esta es una prueba de concepto en este momento más que una herramienta estable. El autocompletado es bastante lento en esta versión del proyecto. Siéntase libre de jugar con él, pero su kilometraje puede variar.
Ahora es compatible con StableCode 3B. Simplemente use los modelos GGML cuantificados de TheBloke y configure -m stablecode
.
Nuevo: Refactorizado + Simplificado : El código fuente se ha mejorado para que sea más fácil ampliar y agregar nuevos modelos a Turbopilot. El sistema ahora admite múltiples tipos de modelos.
Nuevo: compatibilidad con Wizardcoder, Starcoder y Santacoder : Turbopilot ahora admite modelos de finalización de código local de última generación que proporcionan más lenguajes de programación y compatibilidad con "completar el medio".
Los RP de este proyecto y la bifurcación GGML correspondiente son bienvenidos.
Haga una bifurcación, realice sus cambios y luego abra un PR.
La forma más sencilla de probar el proyecto es tomar los modelos preprocesados y luego ejecutar el servidor en la ventana acoplable.
Tienes 2 opciones para conseguir el modelo.
Puede descargar los modelos preconvertidos y precuantizados desde Huggingface.
Para usuarios de poca RAM (4-8 GiB), recomiendo StableCode y para usuarios de alta potencia (más de 16 GiB de RAM, GPU discreta o Apple Silicon) recomiendo WizardCoder.
Turbopilot todavía admite los modelos codegen de primera generación desde v0.0.5
y versiones anteriores. Aunque es necesario volver a cuantificar los modelos antiguos.
Puede encontrar un catálogo completo de modelos en MODELS.md.
Siga esta guía si desea experimentar usted mismo cuantizando los modelos.
Descargue el binario más reciente y extráigalo a la carpeta raíz del proyecto. Si no se proporciona un binario para su sistema operativo o prefiere compilarlo usted mismo, siga las instrucciones de compilación.
Correr:
./turbopilot -m starcoder -f ./models/santacoder-q4_0.bin
La aplicación debe iniciar un servidor en el puerto 18080
, puede cambiar esto con la opción -p
, pero este es el puerto predeterminado al que vscode-fauxpilot intenta conectarse, por lo que probablemente desee dejar esto solo a menos que esté seguro de saber lo que está haciendo. estás haciendo.
Si tiene un sistema multinúcleo, puede controlar cuántas CPU se usan con la opción -t
; por ejemplo, en mi AMD Ryzen 5000, que tiene 6 núcleos/12 subprocesos, uso:
./codegen-serve -t 6 -m starcoder -f ./models/santacoder-q4_0.bin
Para ejecutar los modelos codegen heredados. Simplemente cambie el indicador de tipo de modelo -m
a codegen
.
NOTA: Turbopilot 0.1.0 y versiones posteriores vuelven a cuantificar los modelos codegen antiguos desde v0.0.5 y anteriores. Estoy trabajando para proporcionar modelos codegen cuantificados actualizados.
También puede ejecutar Turbopilot desde la imagen acoplable prediseñada que se proporciona aquí.
Aún necesitarás descargar los modelos por separado, luego podrás ejecutar:
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 de la versión v0.0.5, el turbocódigo ahora admite la inferencia CUDA. Para ejecutar el contenedor habilitado para cuda, necesitará tener habilitado nvidia-docker, usar las versiones etiquetadas con cuda y pasar --gpus=all
a Docker con acceso a su GPU de esta manera:
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
Si tiene una GPU lo suficientemente grande, configurar GPU_LAYERS
permitirá que turbopilot descargue completamente el cálculo en su GPU en lugar de copiar datos hacia adelante y hacia atrás, lo que acelerará drásticamente la inferencia.
Cambie ghcr.io/ravenscroftj/turbopilot:v0.1.0-cuda11
por ghcr.io/ravenscroftj/turbopilot:v0.2.0-cuda12-0
o ghcr.io/ravenscroftj/turbopilot:v0.2.0-cuda12-2
si está utilizando CUDA 12.0 o 12.2 respectivamente.
Necesitará CUDA 11 o CUDA 12 más adelante para ejecutar este contenedor. Debería poder ver /app/turbopilot
en la lista cuando ejecute nvidia-smi
.
A partir de v0.0.5, está disponible una versión CUDA del ejecutable de Linux; requiere que libcublas 11 esté instalado en la máquina; podría compilar ubuntu debs en algún momento, pero por ahora ejecutarlo en Docker puede ser más conveniente si desea usar un GPU CUDA.
Puede utilizar la descarga de GPU a través de la opción --ngl
.
El soporte para el complemento copiloto oficial de VS Code está en marcha (consulte el ticket n.° 11). La API ahora debería ser ampliamente compatible con OpenAI.
Para utilizar la API de VSCode, recomiendo el complemento vscode-fauxpilot. Una vez que lo instale, deberá cambiar algunas configuraciones en su archivo settings.json.
Preferences: Open User Settings (JSON)
{
... // other settings
"fauxpilot.enabled" : true ,
"fauxpilot.server" : " http://localhost:18080/v1/engines " ,
}
Ahora puede habilitar fauxpilot con CTRL + SHIFT + P
y seleccionar Enable Fauxpilot
El complemento enviará llamadas API al proceso codegen-serve
en ejecución cuando presione una tecla. Luego esperará a que se complete cada solicitud antes de enviar más solicitudes.
Puede realizar solicitudes a http://localhost:18080/v1/engines/codegen/completions
que se comportarán como el mismo punto final de Copilot.
Por ejemplo:
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
} '
Debería conseguirte algo como esto:
{
"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 "
}