Programa de chat de línea de comandos simple para modelos GPT-J, LLaMA y MPT escrito en C++. Basado en llama.cpp y utiliza gpt4all-backend para una compatibilidad total.
Advertencia Progreso muy temprano, puede tener errores.
Dado que el programa está creado en C++, debería compilarse y ejecutarse en la mayoría de los sistemas Linux, MacOS y Windows. El enlace Lanzamientos tiene binarios listos para usar. AVX2 es más rápido y funciona en la mayoría de las computadoras más nuevas. Si ejecuta el programa, comprobará e imprimirá si su computadora es compatible con AVX2.
git clone --recurse-submodules https://github.com/kuvaus/LlamaGPTJ-chat
cd LlamaGPTJ-chat
También debe descargar un archivo de modelo; consulte los modelos compatibles para obtener detalles y enlaces.
Dado que el programa está creado en C++, debería compilarse y ejecutarse en la mayoría de los sistemas Linux, MacOS y Windows. En la mayoría de los sistemas, sólo necesitas esto para construir:
mkdir build
cd build
cmake ..
cmake --build . --parallel
Nota
Si tiene un procesador antiguo, puede desactivar las instrucciones AVX2 en el paso de compilación con el indicador
-DAVX2=OFF
.Si tiene un procesador nuevo, puede activar las instrucciones AVX512 en el paso de compilación con el indicador
-DAVX512=ON
.En macOS antiguo, configure
-DBUILD_UNIVERSAL=OFF
para que la compilación sea solo x86 en lugar del binario universal Intel/ARM64. En macOS muy antiguo, configure-DOLD_MACOS=ON
. Esto deshabilita/save
y/load
pero compila en Xcode antiguo.En Windows ahora puedes usar Visual Studio (MSVC) o MinGW. Si desea compilar MinGW, configure
-G "MinGW Makefiles"
.En ARM64 Linux no hay archivos binarios listos para usar, pero ahora puede compilarlos desde el código fuente.
Después de compilar, el binario se encuentra en:
build/bin/chat
Pero eres libre de moverlo a cualquier lugar. Comando simple para 4 subprocesos para comenzar:
./chat -m " /path/to/modelfile/ggml-vicuna-13b-1.1-q4_2.bin " -t 4
o
./chat -m " /path/to/modelfile/ggml-gpt4all-j-v1.3-groovy.bin " -t 4
¡Feliz charla!
El backend actual es compatible con los modelos GPT-J, LLaMA y MPT.
Primero debe descargar un modelo GPT-J. Aquí tenéis enlaces directos a los modelos:
- La versión predeterminada es v1.0 : ggml-gpt4all-j.bin
- Al momento de escribir este artículo, el más nuevo es 1.3-groovy : ggml-gpt4all-j-v1.3-groovy.bin
Son alrededor de 3,8 Gb cada uno. El programa de chat almacena el modelo en la RAM en tiempo de ejecución, por lo que necesita suficiente memoria para ejecutarlo. Puede obtener más detalles sobre los modelos GPT-J en gpt4all.io o nomic-ai/gpt4all github.
Alternativamente, primero debe descargar un modelo LLaMA. Los pesos originales son para fines de investigación y puede solicitar acceso aquí. A continuación se muestran enlaces directos a modelos derivados:
- Vicuña 7b v1.1 : ggml-vicuña-7b-1.1-q4_2.bin
- Vicuña 13b v1.1 : ggml-vicuña-13b-1.1-q4_2.bin
- GPT-4-Todos l13b-snoozy : ggml-gpt4all-l13b-snoozy.bin
Los modelos LLaMA son bastante grandes: las versiones de parámetros 7B rondan los 4,2 Gb y las de parámetros 13B 8,2 Gb cada una. El programa de chat almacena el modelo en la RAM en tiempo de ejecución, por lo que necesita suficiente memoria para ejecutarlo. Puede obtener más detalles sobre los modelos LLaMA en el documento técnico o en el sitio web de META AI.
También puedes descargar y utilizar un modelo MPT. Aquí hay enlaces directos a los modelos MPT-7B:
- Modelo base MPT-7B previamente entrenado por Mosaic ML: ggml-mpt-7b-base.bin
- Modelo de instrucción MPT-7B entrenado por Mosaic ML: ggml-mpt-7b-instruct.bin
- Modelo de chat MPT-7B no comercial entrenado por Mosaic ML: ggml-mpt-7b-chat.bin
Tienen alrededor de 4,9 Gb cada uno. El programa de chat almacena el modelo en la RAM en tiempo de ejecución, por lo que necesita suficiente memoria para ejecutarlo. Puede obtener más detalles sobre los modelos MPT en el sitio web de MosaicML o en el github de mosaicml/llm-foundry.
Puede ver la ayuda y la lista completa de parámetros con: ./chat -h
usage: ./bin/chat [options]
A simple chat program for GPT-J, LLaMA, and MPT models.
You can set specific initial prompt with the -p flag.
Runs default in interactive and continuous mode.
Type ' /reset ' to reset the chat context.
Type ' /save ' , ' /load ' to save network state into a binary file.
Type ' /save NAME ' , ' /load NAME ' to rename saves. Default: --save_name NAME.
Type ' /help ' to show this help dialog.
Type ' quit ' , ' exit ' or, ' Ctrl+C ' to quit.
options:
-h, --help show this help message and exit
-v, --version show version and license information
--run-once disable continuous mode
--no-interactive disable interactive mode altogether (uses given prompt only)
--no-animation disable chat animation
--no-saves disable ' /save ' , ' /load ' functionality
-s SEED, --seed SEED RNG seed for --random-prompt (default: -1)
-t N, --threads N number of threads to use during computation (default: 4)
-p PROMPT, --prompt PROMPT
prompt to start generation with (default: empty)
--random-prompt start with a randomized prompt.
-n N, --n_predict N number of tokens to predict (default: 200)
--top_k N top-k sampling (default: 40)
--top_p N top-p sampling (default: 0.9)
--temp N temperature (default: 0.9)
--n_ctx N number of tokens in context window (default: 0)
-b N, --batch_size N batch size for prompt processing (default: 20)
--repeat_penalty N repeat_penalty (default: 1.1)
--repeat_last_n N last n tokens to penalize (default: 64)
--context_erase N percent of context to erase (default: 0.8)
--b_token optional beginning wrap token for response (default: empty)
--e_token optional end wrap token for response (default: empty)
-j, --load_json FNAME
load options instead from json at FNAME (default: empty/no)
--load_template FNAME
load prompt template from a txt file at FNAME (default: empty/no)
--save_log FNAME
save chat log to a file at FNAME (default: empty/no)
--load_log FNAME
load chat log from a file at FNAME (default: empty/no)
--save_dir DIR
directory for saves (default: ./saves)
--save_name NAME
save/load model state binary at save_dir/NAME.bin (current: model_state)
context is saved to save_dir/NAME.ctx (current: model_state)
-m FNAME, --model FNAME
model path (current: ./models/ggml-vicuna-13b-1.1-q4_2.bin)
A continuación se muestran algunas funciones útiles y detalles sobre cómo lograrlas utilizando las opciones de la línea de comandos.
De forma predeterminada, el programa imprime el chat en la salida estándar (stdout), por lo que si incluye el programa en su aplicación, solo necesita leer la salida estándar. También puedes guardar todo el registro de chat en un archivo de texto con la opción --save_log
. Existe una forma elemental de recordar su conversación pasada simplemente cargando el registro de chat guardado con la opción --load_log
cuando inicia una nueva sesión.
Si solo necesita que el programa se ejecute una vez sin interacción del usuario, una forma es configurar el mensaje con -p "prompt"
y usar los indicadores --no-interactive
y --no-animation
. El programa leerá el mensaje, imprimirá la respuesta y se cerrará.
Si desea una personalidad para su IA, puede cambiar prompt_template_sample.txt
y usar --load_template
para cargar el archivo modificado. La única constante es que su entrada durante el chat se colocará en la línea %1
. Las instrucciones, las indicaciones, las respuestas y todo lo demás se pueden reemplazar de la forma que desee. Tener diferentes archivos personality_template.txt
es una manera fácil de agregar diferentes personajes de IA. Con algunos modelos, dar tanto la IA como los nombres de usuario en lugar de Prompt:
y Response:
puede hacer que la conversación fluya de forma más natural a medida que la IA intenta imitar una conversación entre dos personas.
Puede restablecer el chat en cualquier momento durante el chat escribiendo /reset
en el campo de entrada. Esto borrará la memoria de la IA de conversaciones, logits y tokens pasados. Luego podrás iniciar el chat desde cero sin tener que volver a cargar todo el modelo.
También puede recuperar parámetros de un archivo json con el indicador --load_json "/path/to/file.json"
. Diferentes modelos pueden funcionar mejor o peor con diferentes parámetros de entrada, por lo que usar archivos json es una forma práctica de almacenar y cargar todas las configuraciones a la vez. El cargador de archivos JSON está diseñado para ser simple a fin de evitar dependencias externas y, como resultado, el archivo JSON debe seguir un formato específico. Aquí hay un ejemplo simple:
{ "top_p" : 1.0 , "top_k" : 50400 , "temp" : 0.9 , "n_batch" : 9 }
Esto es útil cuando desea almacenar diferentes configuraciones de temperatura y muestreo.
Y uno más detallado:
{
"top_p" : 1.0 ,
"top_k" : 50400 ,
"temp" : 0.9 ,
"n_batch" : 20 ,
"threads" : 12 ,
"prompt" : "Once upon a time" ,
"load_template" : "/path/to/prompt_template_sample.txt" ,
"model" : "/path/to/ggml-gpt4all-j-v1.3-groovy.bin" ,
"no-interactive" : "true"
}
Este carga el mensaje desde el json, usa una plantilla específica y ejecuta el programa una vez en modo no interactivo para que el usuario no tenga que presionar ninguna entrada.
Este proyecto está bajo la licencia MIT.