Простая программа чата из командной строки для моделей GPT-J, LLaMA и MPT, написанная на C++. Основан на llama.cpp и использует gpt4all-backend для полной совместимости.
Предупреждение Очень ранний прогресс, могут быть ошибки.
Поскольку программа создана с использованием C++, ее следует собирать и запускать в большинстве систем Linux, MacOS и Windows. По ссылке «Релизы» есть готовые бинарники. AVX2 быстрее и работает на большинстве новых компьютеров. Если вы запустите программу, она проверит и распечатает, поддерживает ли ваш компьютер AVX2.
git clone --recurse-submodules https://github.com/kuvaus/LlamaGPTJ-chat
cd LlamaGPTJ-chat
Вам также необходимо загрузить файл модели. Подробную информацию и ссылки см. в разделе поддерживаемые модели.
Поскольку программа создана с использованием C++, ее следует собирать и запускать в большинстве систем Linux, MacOS и Windows. В большинстве систем это нужно только для сборки:
mkdir build
cd build
cmake ..
cmake --build . --parallel
Примечание
Если у вас старый процессор, вы можете отключить инструкции AVX2 на этапе сборки с помощью флага
-DAVX2=OFF
.Если у вас новый процессор, вы можете включить инструкции AVX512 на этапе сборки с помощью флага
-DAVX512=ON
.В старой macOS установите
-DBUILD_UNIVERSAL=OFF
, чтобы создать сборку только x86 вместо универсального двоичного файла Intel/ARM64. В очень старой macOS установите-DOLD_MACOS=ON
. Это отключает/save
и/load
но компилируется в старом Xcode.В Windows теперь вы можете использовать Visual Studio (MSVC) или MinGW. Если вместо этого вы хотите собрать MinGW, установите
-G "MinGW Makefiles"
.В ARM64 Linux нет готовых двоичных файлов, но теперь вы можете собрать его из исходников.
После компиляции двоичный файл находится по адресу:
build/bin/chat
Но вы можете переместить его куда угодно. Простая команда для 4 потоков для начала работы:
./chat -m " /path/to/modelfile/ggml-vicuna-13b-1.1-q4_2.bin " -t 4
или
./chat -m " /path/to/modelfile/ggml-gpt4all-j-v1.3-groovy.bin " -t 4
Приятного общения!
Текущий бэкэнд поддерживает модели GPT-J, LLaMA и MPT.
Сначала вам необходимо загрузить модель GPT-J. Вот прямые ссылки на модели:
- Версия по умолчанию — v1.0 : ggml-gpt4all-j.bin.
- На момент написания последней версии является 1.3-groovy : ggml-gpt4all-j-v1.3-groovy.bin.
Они весят около 3,8 ГБ каждый. Программа чата сохраняет модель в оперативной памяти во время выполнения, поэтому для ее запуска вам потребуется достаточно памяти. Более подробную информацию о моделях GPT-J можно получить на gpt4all.io или на GitHub nomic-ai/gpt4all.
Альтернативно вам необходимо сначала загрузить модель LLaMA. Исходные веса предназначены для исследовательских целей, и вы можете подать заявку на доступ здесь. Ниже приведены прямые ссылки на производные модели:
- Викунья 7b v1.1 : ggml-vicuna-7b-1.1-q4_2.bin
- Викунья 13b v1.1 : ggml-vicuna-13b-1.1-q4_2.bin
- GPT-4-All l13b-snoozy : ggml-gpt4all-l13b-snoozy.bin
Модели LLaMA довольно большие: версии с параметром 7B имеют размер около 4,2 Гб, а параметры 13B — по 8,2 Гб каждая. Программа чата сохраняет модель в оперативной памяти во время выполнения, поэтому для ее запуска вам потребуется достаточно памяти. Более подробную информацию о моделях LLaMA можно получить в официальном документе или на веб-сайте META AI.
Вместо этого вы также можете загрузить и использовать модель MPT. Вот прямые ссылки на модели MPT-7B:
- Базовая модель MPT-7B, предварительно обученная Mosaic ML: ggml-mpt-7b-base.bin
- Модель инструкций MPT-7B, обученная Mosaic ML: ggml-mpt-7b-instruct.bin
- Некоммерческая модель чата MPT-7B, обученная Mosaic ML: ggml-mpt-7b-chat.bin
Они весят около 4,9 ГБ каждый. Программа чата сохраняет модель в оперативной памяти во время выполнения, поэтому для ее запуска вам потребуется достаточно памяти. Более подробную информацию о моделях MPT можно получить на веб-сайте MosaicML или на GitHub мозаики/llm-foundry.
Вы можете просмотреть справку и полный список параметров с помощью: ./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)
Вот некоторые удобные функции и подробности о том, как их достичь с помощью параметров командной строки.
По умолчанию программа выводит чат на стандартный вывод (stdout), поэтому, если вы включаете программу в свое приложение, ей нужно только прочитать стандартный вывод. Вы также можете сохранить весь журнал чата в текстовый файл с помощью опции --save_log
. Существует элементарный способ запомнить ваш прошлый разговор, просто загрузив сохраненный журнал чата с опцией --load_log
при запуске нового сеанса.
Если вам нужно, чтобы программа запускалась только один раз без какого-либо взаимодействия с пользователем, один из способов — установить приглашение с помощью -p "prompt"
и использовать флаги --no-interactive
и --no-animation
. Программа прочитает подсказку, распечатает ответ и закроется.
Если вам нужна индивидуальность для вашего ИИ, вы можете изменить prompt_template_sample.txt
и использовать --load_template
для загрузки измененного файла. Единственная константа заключается в том, что ваш ввод во время чата будет помещен в строку %1
. Инструкции, подсказки, ответы и все остальное можно заменить как угодно. Наличие разных файлов personality_template.txt
— это простой способ добавить разных персонажей AI. В некоторых моделях указание имен ИИ и пользователей вместо Prompt:
и Response:
может сделать разговор более естественным, поскольку ИИ пытается имитировать разговор между двумя людьми.
Вы можете сбросить чат в любой момент во время общения, набрав /reset
в поле ввода. Это очистит память ИИ о прошлых разговорах, логитах и токенах. После этого вы сможете начать чат с чистого листа без необходимости повторной загрузки всей модели.
Вы также можете получить параметры из файла json с помощью флага --load_json "/path/to/file.json"
. Разные модели могут работать лучше или хуже с разными входными параметрами, поэтому использование файлов JSON — это удобный способ сохранить и загрузить все настройки одновременно. Загрузчик файлов JSON спроектирован так, чтобы быть простым, чтобы предотвратить любые внешние зависимости, и, как следствие, файл JSON должен соответствовать определенному формату. Вот простой пример:
{ "top_p" : 1.0 , "top_k" : 50400 , "temp" : 0.9 , "n_batch" : 9 }
Это полезно, если вы хотите сохранить различные настройки температуры и отбора проб.
И более подробный:
{
"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"
}
Он загружает приглашение из json, использует определенный шаблон и запускает программу один раз в неинтерактивном режиме, поэтому пользователю не нужно нажимать какие-либо данные.
Этот проект лицензируется по лицензии MIT.