Programa simples de chat de linha de comando para modelos GPT-J, LLaMA e MPT escritos em C++. Baseado em llama.cpp e usa backend gpt4all para compatibilidade total.
Aviso Progresso muito inicial, pode haver bugs
Como o programa é feito em c++, ele deve ser construído e executado na maioria dos sistemas Linux, MacOS e Windows. O link Releases possui binários prontos. AVX2 é mais rápido e funciona na maioria dos computadores mais recentes. Se você executar o programa, ele verificará e imprimirá se o seu computador possui suporte para AVX2.
git clone --recurse-submodules https://github.com/kuvaus/LlamaGPTJ-chat
cd LlamaGPTJ-chat
Você também precisa baixar um arquivo de modelo, consulte os modelos suportados para obter detalhes e links.
Como o programa é feito em c++, ele deve ser construído e executado na maioria dos sistemas Linux, MacOS e Windows. Na maioria dos sistemas, você só precisa disso para construir:
mkdir build
cd build
cmake ..
cmake --build . --parallel
Observação
Se você tiver um processador antigo, poderá DESATIVAR as instruções AVX2 na etapa de construção com o sinalizador
-DAVX2=OFF
.Se você tiver um novo processador, poderá ativar as instruções do AVX512 na etapa de construção com o sinalizador
-DAVX512=ON
.No macOS antigo, defina
-DBUILD_UNIVERSAL=OFF
para tornar a compilação x86 apenas em vez do binário universal Intel/ARM64. Em macOS muito antigos, defina-DOLD_MACOS=ON
. Isso desativa/save
e/load
mas compila no Xcode antigo.No Windows agora você pode usar o Visual Studio (MSVC) ou MinGW. Se você quiser construir o MinGW, defina
-G "MinGW Makefiles"
.No ARM64 Linux não existem binários prontos, mas agora você pode compilá-lo a partir do código-fonte.
Após a compilação, o binário está localizado em:
build/bin/chat
Mas você está livre para movê-lo para qualquer lugar. Comando simples para 4 threads para começar:
./chat -m " /path/to/modelfile/ggml-vicuna-13b-1.1-q4_2.bin " -t 4
ou
./chat -m " /path/to/modelfile/ggml-gpt4all-j-v1.3-groovy.bin " -t 4
Feliz bate-papo!
O backend atual suporta os modelos GPT-J, LLaMA e MPT.
Você precisa baixar um modelo GPT-J primeiro. Aqui estão links diretos para modelos:
- A versão padrão é v1.0 : ggml-gpt4all-j.bin
- No momento em que este artigo foi escrito, o mais novo era 1.3-groovy : ggml-gpt4all-j-v1.3-groovy.bin
Eles têm cerca de 3,8 Gb cada. O programa de bate-papo armazena o modelo na RAM em tempo de execução, portanto, você precisa de memória suficiente para executar. Você pode obter mais detalhes sobre os modelos GPT-J em gpt4all.io ou nomic-ai/gpt4all github.
Alternativamente, você precisa primeiro baixar um modelo LLaMA. Os pesos originais são para fins de pesquisa e você pode solicitar acesso aqui. Abaixo estão links diretos para modelos derivados:
- Vicuna 7b v1.1 : ggml-vicuna-7b-1.1-q4_2.bin
- Vicuna 13b v1.1 : ggml-vicuna-13b-1.1-q4_2.bin
- GPT-4-All l13b-snoozy : ggml-gpt4all-l13b-snoozy.bin
Os modelos LLaMA são bastante grandes: as versões de parâmetro 7B têm cerca de 4,2 Gb e 13B de parâmetro 8,2 Gb cada. O programa de bate-papo armazena o modelo na RAM em tempo de execução, portanto você precisa de memória suficiente para executar. Você pode obter mais detalhes sobre os modelos LLaMA no white paper ou no site META AI.
Você também pode baixar e usar um modelo MPT. Aqui estão links diretos para os modelos MPT-7B:
- Modelo base MPT-7B pré-treinado pelo Mosaic ML: ggml-mpt-7b-base.bin
- Modelo de instrução MPT-7B treinado pelo Mosaic ML: ggml-mpt-7b-instruct.bin
- Modelo de bate-papo MPT-7B não comercial treinado por Mosaic ML: ggml-mpt-7b-chat.bin
Eles têm cerca de 4,9 Gb cada. O programa de bate-papo armazena o modelo na RAM em tempo de execução, portanto, você precisa de memória suficiente para executar. Você pode obter mais detalhes sobre os modelos MPT no site MosaicML ou no github mosaicml/llm-foundry.
Você pode ver a ajuda e a lista completa de parâmetros com: ./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)
Aqui estão alguns recursos úteis e detalhes sobre como alcançá-los usando opções de linha de comando.
Por padrão, o programa imprime o chat na saída padrão (stdout), portanto, se você incluir o programa em seu aplicativo, ele só precisará ler stdout. Você também pode salvar todo o log do bate-papo em um arquivo de texto com a opção --save_log
. Existe uma maneira elementar de lembrar sua conversa anterior, simplesmente carregando o log de bate-papo salvo com a opção --load_log
ao iniciar uma nova sessão.
Se você precisar que o programa seja executado apenas uma vez, sem nenhuma interação do usuário, uma maneira é definir o prompt com -p "prompt"
e usar os sinalizadores --no-interactive
e --no-animation
. O programa lerá o prompt, imprimirá a resposta e fechará.
Se quiser uma personalidade para sua IA, você pode alterar prompt_template_sample.txt
e usar --load_template
para carregar o arquivo modificado. A única constante é que a sua entrada durante o chat será colocada na linha %1
. Instruções, prompt, resposta e tudo mais podem ser substituídos da maneira que você desejar. Ter diferentes personality_template.txt
é uma maneira fácil de adicionar diferentes personagens de IA. Com alguns modelos, fornecer nomes de IA e de usuário em vez de Prompt:
e Response:
, pode fazer com que a conversa flua mais naturalmente à medida que a IA tenta imitar uma conversa entre duas pessoas.
Você pode redefinir o bate-papo a qualquer momento durante o bate-papo, digitando /reset
no campo de entrada. Isso limpará a memória da IA de conversas, logits e tokens anteriores. Você pode então iniciar o bate-papo do zero, sem precisar recarregar o modelo inteiro novamente.
Você também pode buscar parâmetros de um arquivo json com o sinalizador --load_json "/path/to/file.json"
. Modelos diferentes podem ter desempenho melhor ou pior com parâmetros de entrada diferentes, portanto, usar arquivos json é uma maneira prática de armazenar e carregar todas as configurações de uma vez. O carregador de arquivo JSON foi projetado para ser simples, a fim de evitar dependências externas e, como resultado, o arquivo JSON deve seguir um formato específico. Aqui está um exemplo simples:
{ "top_p" : 1.0 , "top_k" : 50400 , "temp" : 0.9 , "n_batch" : 9 }
Isto é útil quando você deseja armazenar diferentes configurações de temperatura e amostragem.
E um mais detalhado:
{
"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 carrega o prompt do json, usa um modelo específico e executa o programa uma vez no modo não interativo para que o usuário não precise pressionar nenhuma entrada.
Este projeto está licenciado sob a licença MIT