ここでライブラリの再実装に取り組み始めました: FastTensors
純粋な Go での GGML 互換の実装を確認したい場合は、スターを付けてください。
私の関連プロジェクトBoosterをチェックしてください
私たちは、ML ハッカー仲間が膨大な$$$を消費する GPU クラスターを持たずに、ホームラボで非常に大きな GPTモデルを理解できる世界を夢見ています。
プロジェクトのコードは、Georgi Gerganov の伝説的なggml.cppフレームワークに基づいており、パフォーマンスと優雅さに対する同じ姿勢で C++ で書かれています。
私たちは、非常に強力だが低レベルすぎる言語の代わりに Golang を使用することで、より多くの採用が可能になることを願っています。
まず、オリジナルの LLaMA モデルを自分で入手して変換するか、すぐに使えるものをダウンロードします。
LLaMA-7B:ラマ-7b-fp32.bin
LLaMA-13B:ラマ-13b-fp32.bin
どちらのモデルも FP32 重みを保存するため、LLaMA-7B には少なくとも 32Gb の RAM (VRAM や GPU RAM ではない) が必要です。 LLaMA-13B では 2 倍の 64Gb になります。
次に、ソースからアプリのバイナリをビルドするか (以下の手順を参照)、すでにビルドされているバイナリをダウンロードします。
Windows:ラマ-go-v1.4.0.exe
MacOS:ラマ-go-v1.4.0-macos
Linux:ラマ-go-v1.4.0-linux
これで、実行可能ファイルとモデルの両方が完成しました。実際に試してみてください。
llama-go-v1.4.0-macos
--model ~ /models/llama-7b-fp32.bin
--prompt " Why Golang is so popular? "
--prompt Text prompt from user to feed the model input
--model Path and file name of converted .bin LLaMA model [ llama-7b-fp32.bin, etc ]
--server Start in Server Mode acting as REST API endpoint
--host Host to allow requests from in Server Mode [ localhost by default ]
--port Port listen to in Server Mode [ 8080 by default ]
--pods Maximum pods or units of parallel execution allowed in Server Mode [ 1 by default ]
--threads Adjust to the number of CPU cores you want to use [ all cores by default ]
--context Context size in tokens [ 1024 by default ]
--predict Number of tokens to predict [ 512 by default ]
--temp Model temperature hyper parameter [ 0.5 by default ]
--silent Hide welcome logo and other output [ shown by default ]
--chat Chat with user in interactive mode instead of compute over static prompt
--profile Profe CPU performance while running and store results to cpu.pprof file
--avx Enable x64 AVX2 optimizations for Intel and AMD machines
--neon Enable ARM NEON optimizations for Apple Macs and ARM server
LLaMA.go には、REST API を公開するスタンドアロン HTTP サーバーが組み込まれています。これを有効にするには、特別なフラグを指定してアプリを実行します。
llama-go-v1.4.0-macos
--model ~ /models/llama-7b-fp32.bin
--server
--host 127.0.0.1
--port 8080
--pods 4
--threads 4
モデルのサイズ、そこで利用可能な CPU コアの数、並列処理するリクエストの数、回答を得るまでの速度に応じて、ポッドとスレッドのパラメーターを賢く選択してください。
ポッドは、並行して実行される可能性のある多数の推論インスタンスです。
Threadsパラメーターは、ポッド内のテンソル計算に使用されるコアの数を設定します。
たとえば、32 のハイパースレッドを並行して実行できる 16 個のハードウェア コアを備えたマシンがある場合、次のような結果になる可能性があります。
--server --pods 4 --threads 8
到着したリクエストを処理するための空きポッドがない場合、そのリクエストは待機キューに入れられ、いずれかのポッドがジョブを完了したときに開始されます。
一意の UUID v4 を含む JSON を使用して POST リクエストを (Postman を使用して) サーバー アドレスに送信し、次のプロンプトを表示します。
{
"id" : " 5fb8ebd0-e0c9-4759-8f7d-35590f6c9fc3 " ,
"prompt" : " Why Golang is so popular? "
}
GET リクエストを (Postman またはブラウザを使用して) http://host:port/jobs/status/:id のような URL に送信します。
GET http://localhost:8080/jobs/status/5fb8ebd0-e0c9-4759-8f7d-35590f6c9fcb
GET リクエストを (Postman またはブラウザを使用して) http://host:port/jobs/:id のような URL に送信します。
GET http://localhost:8080/jobs/5fb8ebd0-e0c9-4759-8f7d-35590f6c9fcb
まず、 Golangとgitをインストールします (Windows の場合はインストーラーをダウンロードする必要があります)。
brew install git
brew install golang
次に、リポジトリのクローンを作成し、プロジェクト フォルダーに入ります。
git clone https://github.com/gotzmann/llama.go.git
cd llama.go
外部依存関係をインストールするための Go マジック:
go mod tidy
go mod vendor
これで、ソース コードからバイナリをビルドする準備が整いました。
go build -o llama-go-v1.exe -ldflags " -s -w " main.go
1) オリジナルの LLaMA モデルはどこから入手できますか?
Meta に直接連絡するか、トレントの代替手段を探してください。
2) 元の LLaMA ファイルをサポートされている形式に変換するにはどうすればよいですか?
元の PyTorch FP16 ファイルをmodelsディレクトリに配置し、次のコマンドで変換します。
python3 ./scripts/convert.py ~ /models/LLaMA/7B/ 0