Basaran es una alternativa de código abierto a la API de finalización de texto OpenAI. Proporciona una API de transmisión compatible para sus modelos de generación de texto basados en Hugging Face Transformers.
La comunidad de código abierto eventualmente será testigo del momento de Difusión Estable para modelos de lenguajes grandes (LLM), y Basaran le permite reemplazar el servicio de OpenAI con el último modelo de código abierto para impulsar su aplicación sin modificar una sola línea de código.
Las características clave de Basaran son:
Reemplace user/repo
con su modelo seleccionado y XYZ
con la última versión, luego ejecute:
docker run -p 80:80 -e MODEL=user/repo hyperonym/basaran:X.Y.Z
¡Y listo!
Playground: http://127.0.0.1/
API: http://127.0.0.1/v1/completions
Las imágenes de Docker están disponibles en los paquetes Docker Hub y GitHub.
Para la aceleración de GPU, también necesita instalar el controlador NVIDIA y NVIDIA Container Runtime. La imagen de Basaran ya viene con bibliotecas relacionadas como CUDA y cuDNN, por lo que no es necesario instalarlas manualmente.
La imagen de Basaran se puede utilizar de tres formas:
MODEL="user/repo"
, el modelo correspondiente se puede descargar desde Hugging Face Hub durante el primer inicio.MODEL
a la ruta correspondiente.Para los casos de uso anteriores, puede encontrar archivos Dockerfiles y archivos docker-compose de muestra en el directorio de implementaciones.
Basaran se prueba en Python 3.8+ y PyTorch 1.13+. Debes crear un entorno virtual con la versión de Python que deseas utilizar y activarlo antes de continuar.
pip
: pip install basaran
pip install accelerate bitsandbytes
user/repo
con el modelo seleccionado y ejecute Basaran: MODEL=user/repo PORT=80 python -m basaran
Para obtener una lista completa de variables de entorno, consulte __init__.py
.
Si desea acceder a las funciones más recientes o piratearlas usted mismo, puede optar por ejecutar desde la fuente usando git
.
git clone https://github.com/hyperonym/basaran.git && cd basaran
pip install -r requirements.txt
user/repo
con el modelo seleccionado y ejecute Basaran: MODEL=user/repo PORT=80 python -m basaran
Los formatos de solicitud y respuesta HTTP de Basaran son consistentes con la API OpenAI.
Tomando como ejemplo la finalización de texto:
curl http://127.0.0.1/v1/completions
-H ' Content-Type: application/json '
-d ' { "prompt": "once upon a time,", "echo": true } '
{
"id" : " cmpl-e08c701b4ba032c09ef080e1 " ,
"object" : " text_completion " ,
"created" : 1678003509 ,
"model" : " bigscience/bloomz-560m " ,
"choices" : [
{
"text" : " once upon a time, the human being faces a complicated situation and he needs to find a new life. " ,
"index" : 0 ,
"logprobs" : null ,
"finish_reason" : " length "
}
],
"usage" : {
"prompt_tokens" : 5 ,
"completion_tokens" : 21 ,
"total_tokens" : 26
}
}
Si su aplicación utiliza bibliotecas cliente proporcionadas por OpenAI, solo necesita modificar la variable de entorno OPENAI_API_BASE
para que coincida con el punto final de Basaran:
OPENAI_API_BASE= " http://127.0.0.1/v1 " python your_app.py
El directorio de ejemplos contiene ejemplos del uso de la biblioteca OpenAI Python.
Basaran también está disponible como biblioteca en PyPI. Se puede utilizar directamente en Python sin la necesidad de iniciar un servidor API independiente.
pip
: pip install basaran
load_model
para cargar un modelo: from basaran . model import load_model
model = load_model ( "user/repo" )
for choice in model ( "once upon a time" ):
print ( choice )
El directorio de ejemplos contiene ejemplos del uso de Basaran como biblioteca.
El formato API de Basaran es consistente con el de OpenAI, con diferencias en compatibilidad principalmente en términos de soporte de parámetros y campos de respuesta. Las siguientes secciones proporcionan información detallada sobre la compatibilidad de cada punto final.
Cada proceso de Basaran sirve solo a un modelo, por lo que el resultado solo contendrá ese modelo.
Aunque Basaran no admite el parámetro model
, la biblioteca cliente OpenAI requiere que esté presente. Por lo tanto, puede ingresar cualquier nombre de modelo aleatorio.
Parámetro | Basaran | Abierto AI | Valor predeterminado | Valor máximo |
---|---|---|---|---|
model | ○ | ● | - | - |
prompt | ● | ● | "" | COMPLETION_MAX_PROMPT |
suffix | ○ | ● | - | - |
min_tokens | ● | ○ | 0 | COMPLETION_MAX_TOKENS |
max_tokens | ● | ● | 16 | COMPLETION_MAX_TOKENS |
temperature | ● | ● | 1.0 | - |
top_p | ● | ● | 1.0 | - |
n | ● | ● | 1 | COMPLETION_MAX_N |
stream | ● | ● | false | - |
logprobs | ● | ● | 0 | COMPLETION_MAX_LOGPROBS |
echo | ● | ● | false | - |
stop | ○ | ● | - | - |
presence_penalty | ○ | ● | - | - |
frequency_penalty | ○ | ● | - | - |
best_of | ○ | ● | - | - |
logit_bias | ○ | ● | - | - |
user | ○ | ● | - | - |
Actualmente, proporcionar una API de chat unificada es difícil porque cada modelo tiene un formato diferente para el historial de chat.
Por lo tanto, se recomienda formatear previamente el historial de chat según los requisitos del modelo específico y utilizarlo como mensaje para la API de finalización.
**Summarize a long document into a single sentence and ...**
<human>: Last year, the travel industry saw a big ...
<bot>: If you're traveling this spring break, ...
<human>: But ...
<bot>:
[Round 0]
问:你好
答:你好!有什么我可以帮助你的吗?
[Round 1]
问:你是谁?
答:
Consulte los números abiertos para obtener una lista completa de las características propuestas.
Este proyecto es de código abierto. Si tiene alguna idea o pregunta, no dude en comunicarse creando un problema.
Se agradecen mucho las contribuciones; consulte CONTRIBUTING.md para obtener más información.
Basaran está disponible bajo la licencia MIT.
© 2023 Hiperónimo