C++ で書かれた GPT-J、LLaMA、MPT モデル用のシンプルなコマンド ライン チャット プログラム。 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
注記
古いプロセッサを使用している場合は、ビルド ステップで
-DAVX2=OFF
フラグを使用して AVX2 命令をオフにすることができます。新しいプロセッサーを使用している場合は、ビルドステップで
-DAVX512=ON
フラグを使用して AVX512 命令をオンにすることができます。古い macOS では、
-DBUILD_UNIVERSAL=OFF
を設定して、ユニバーサル Intel/ARM64 バイナリではなく x86 のみのビルドを作成します。本当に古い 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 GB です。チャット プログラムは実行時にモデルを RAM に保存するため、実行するには十分なメモリが必要です。 GPT-J モデルの詳細については、gpt4all.io または nomic-ai/gpt4all github から入手できます。
あるいは、最初に LLaMA モデルをダウンロードする必要があります。元の重みは研究目的であり、ここからアクセスを申請できます。以下は派生モデルへの直接リンクです。
- Vicuna 7b v1.1 : ggml-vicuna-7b-1.1-q4_2.bin
- ビクーニャ 13b v1.1 : ggml-vicuna-13b-1.1-q4_2.bin
- GPT-4-すべてl13b-snoozy : ggml-gpt4all-l13b-snoozy.bin
LLaMA モデルは非常に大きく、7B パラメータのバージョンはそれぞれ約 4.2 Gb、13B パラメータのバージョンは 8.2 Gb です。チャット プログラムは実行時にモデルを RAM に保存するため、実行するには十分なメモリが必要です。 LLaMA モデルの詳細については、ホワイトペーパーまたは META AI Web サイトから入手できます。
代わりに MPT モデルをダウンロードして使用することもできます。 MPT-7B モデルへの直接リンクは次のとおりです。
- Mosaic ML によって事前トレーニングされた MPT-7B ベース モデル: ggml-mpt-7b-base.bin
- Mosaic ML によってトレーニングされた MPT-7B 命令モデル: ggml-mpt-7b-instruct.bin
- Mosaic ML によってトレーニングされた非営利 MPT-7B チャット モデル: ggml-mpt-7b-chat.bin
それぞれ約 4.9 GB です。チャット プログラムは実行時にモデルを RAM に保存するため、実行するには十分なメモリが必要です。 MPT モデルの詳細については、MosaicML Web サイトまたは mosaicml/llm-foundry github から入手できます。
./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) 出力に出力するため、プログラムをアプリに組み込む場合は、stdout を読み取るだけで済みます。 --save_log
オプションを使用して、チャット ログ全体をテキスト ファイルに保存することもできます。新しいセッションを開始するときに--load_log
オプションを使用して保存されたチャット ログをロードするだけで、過去の会話を記憶する基本的な方法があります。
ユーザーの操作なしでプログラムを 1 回だけ実行する必要がある場合、1 つの方法は、 -p "prompt"
で--no-interactive
フラグと--no-animation
フラグを使用してプロンプトを設定することです。プログラムはプロンプトを読み取り、回答を出力して終了します。
AI に個性が必要な場合は、 prompt_template_sample.txt
を変更し、 --load_template
使用して変更したファイルをロードします。唯一変わらないのは、チャット中の入力が%1
行に配置されることです。指示、プロンプト、応答、その他すべてを好きなように置き換えることができます。異なるpersonality_template.txt
ファイルを用意すると、異なるAIキャラクターを簡単に追加できます。一部のモデルでは、 Prompt:
とResponse:
の代わりに AI とユーザーの両方の名前を指定すると、AI が 2 人の間の会話を模倣しようとするため、会話の流れがより自然になります。
入力フィールドに/reset
と入力すると、チャット中にいつでもチャットをリセットできます。これにより、AI の過去の会話、ロジット、トークンの記憶が消去されます。その後、モデル全体を再度リロードすることなく、白紙の状態からチャットを開始できます。
--load_json "/path/to/file.json"
フラグを使用して、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 からプロンプトを読み込み、特定のテンプレートを使用し、非対話モードでプログラムを 1 回実行するため、ユーザーは何も入力する必要がありません。
このプロジェクトは MIT ライセンスに基づいてライセンスされています