Flame.cpp Mac版flame

キャメル.cpp

キャメル

行動の状態 ライセンス: MIT

ロードマップ/マニフェストggml

Pure C/C++ でのLLaMAモデルの推論

ホットな話題:

目次

説明

主な目標llama.cppは、4 ビット整数量子化を使用して MacBook 上で LLaMA モデルを実行することです。

  • 依存関係のない純粋な C/C++ 実装
  • Apple Silicon First Class Citizen - ARM NEON 、Accelerate、および Metal フレームワークで最適化
  • x86 アーキテクチャの AVX、AVX2、および AVX512 のサポート
  • ハイブリッドF16/F32 精度
  • 4 ビット、5 ビット、8 ビットの整数量子化をサポート
  • BLAS は、OpenBLAS/Apple BLAS/ARM Performance Lib/ATLAS/BLIS/Intel MKL/NVHPC/ACML/SCSL/SGIMATHなどをサポートします。
  • cuBLAS および CLBlast のサポート

元の実装は一晩でハッキングされましたllama.cppそれ以来、プロジェクトは多くの貢献のおかげで大幅に改善されました。このプロジェクトは、教育目的およびggmlライブラリの新機能を開発するための主要なプラットフォームとして使用されます

サポートされているプラ​​ットフォーム:

  • アップルシステム
  • Linux
  • Windows (CMake経由)
  • ルスタバウ

サポートされているモデル:

バインディング:

ユーザーインターフェース:


以下は、LLaMA-7B を使用した一般的な実行です。

make -j && ./main -m ./models/7B/ggml-model-q4_0.bin -p "Web サイトの構築は 10 の簡単な手順で行うことができます:" -n 512
llama.cpp のビルド情報:
私 UNAME_S: ダーウィン
私 UNAME_P: 腕
私 UNAME_M: arm64
I CFLAGS: -I. -O3 -DNDEBUG -std=c11 -fPIC -pthread -DGGML_USE_ACCELERATE
I CXXFLAGS: -I. -I./examples -O3 -DNDEBUG -std=c++11 -fPIC -pthread
I LDFLAGS: -framework Accelerate
I CC: Apple Clang バージョン 14.0.0 (clang-1400.0.29.202)
I CXX: Apple Clang バージョン 14.0.0 (clang-1400.0.29.202)

make: 「デフォルト」の場合は何もする必要はありません。
メイン: シード = 1678486056
llama_model_load: './models/7B/ggml-model-q4_0.bin' からモデルをロードしています - お待ちください ...
ラマモデルロード: n_vocab = 32000
ラマモデルロード: n_ctx = 512
ラマモデルロード: n_embd = 4096
ラマモデルロード: n_mult = 256
ラマモデルロード: n_head = 32
ラマモデルロード: n_layer = 32
ラマモデルロード: n_rot = 128
ラマモデルロード: f16 = 2
ラマモデルロード: n_ff = 11008
llama_model_load: ggml ctx サイズ = 4529.34 MB
llama_model_load: メモリサイズ = 512.00 MB、n_mem = 16384
llama_model_load: ...................................完了
llama_model_load: モデル サイズ = 4017.27 MB / テンソル数 = 291

main: プロンプト: 'Web サイトの構築は 10 の簡単なステップで実行できます:'
main: プロンプト内のトークンの数 = 15
     1 -> ''
  8893 -> 'ビルド'
   292 -> 'ing'
   263 -> 「あ」
  4700 -> 「ウェブサイト」
   508 -> 「できる」
   367 -> 「ある」
  2309 -> 「完了」
   297 -> 'で'
 29871 -> 「 」
 29896 -> '1'
 29900 -> '0'
  2560 -> 「シンプル」
  6576 -> ' ステップ'
 29901 -> ':'

サンプリングパラメータ: temp = 0.800000、top_k = 40、top_p = 0.950000


Web サイトの構築は 10 の簡単なステップで行うことができます。
1) ドメイン名とウェブホスティングプランを選択します
2) サイトマップを完成させる
3) 製品をリストする
4) 商品説明を書く
5) ユーザーアカウントを作成する
6) テンプレートを構築する
7) ウェブサイトの構築を開始する
8) ウェブサイトの宣伝
9) 電子メールサポートを提供する
10) ウェブサイトを検索エンジンに送信する
Web サイトは、HTML でフォーマットされた Web ページの集合です。HTML は、Web サイトの外観と動作を定義するコードです。
HTML コードは、テンプレートまたはフォーマットにフォーマットされます。これが完了すると、ユーザーのブラウザに表示されます。
Web ページは Web サーバーに保存されます。Web サーバーはホストとも呼ばれます。Web サイトにアクセスすると、サーバーから Web サイトが取得され、ユーザーのコンピュータに表示されます。
Web サイトは、ホストされているときは Web サイトと呼ばれます。これは、ホスト上に表示されることを意味します。通常、ホストは Web サーバーです。
Web サイトはさまざまなブラウザーで表示できます。ブラウザは基本的に、ユーザーの画面上に Web サイトを表示するソフトウェアです。
ウェブサイトはデスクトップ、タブレット、スマートフォンなどのさまざまなデバイスでも表示できます。
したがって、Web サイトをブラウザーに表示するには、Web サイトをホストする必要があります。
ドメイン名は Web サイトのアドレスです。ウェブサイトの名前です。
Web サイトは、ホストされている場合は Web サイトと呼ばれます。これは、ホスト上に表示されることを意味します。通常、ホストは Web サーバーです。
Web サイトはさまざまなブラウザーで表示できます。ブラウザは基本的に、ユーザーの画面上に Web サイトを表示するソフトウェアです。
ウェブサイトはデスクトップ、タブレット、スマートフォンなどのさまざまなデバイスでも表示できます。したがって、Web サイトをブラウザーに表示するには、Web サイトをホストする必要があります。
ドメイン名は Web サイトのアドレスです。ウェブサイトの名前です。
Web サイトは Web サイトのアドレスです。HTML でフォーマットされた Web ページのコレクションです。HTML は、Web サイトの外観と動作を定義するコードです。
HTML コードは、テンプレートまたはフォーマットにフォーマットされます。これが完了すると、ユーザーのブラウザに表示されます。
Web サイトは、ホストされているときに Web サイトとして認識されます

main: トークンあたりのメモリ = 14434244 バイト
メイン: ロード時間 = 1332.48 ミリ秒
メイン: サンプル時間 = 1081.40 ミリ秒
main: 予測時間 = 31378.77 ミリ秒 / トークンあたり 61.41 ミリ秒
メイン: 合計時間 = 34036.74 ミリ秒

これは、単一の M1 Pro MacBook で LLaMA-7B と tweet.cpp を実行する別のデモです。

 ささやきラクダ-lq.mp4 

使用法

以下は、LLaMA-7B モデルの手順です。

コードを取得

git clone https://github.com/ggerganov/llama.cpp
cd ラマ.cpp

我慢する

llama.cpp をビルドするには、3 つの異なるオプションがあります。

  • 使用make:

    • Linux または MacOS の場合:

      作る
    • Windows の場合:

      1. w64devkitの最新の Fortran バージョンをダウンロードします。
      2. w64devkitコンピューター上で抽出します。
      3. 実行しますw64devkit.exe
      4. cdコマンドを使用してllama.cppフォルダーにアクセスします。
      5. ここから次を実行できます。
        作る
  • 使用CMake:

    mkdir ビルド
    CD ビルド
    cmake ..
    cmake --build 。--config リリース
  • 使用Zig:

    zig build -Doptimize=ReleaseFast

金属構造

Metal を使用すると、Apple デバイスの GPU で計算を実行できます。

  • 使用make:

    LLAMA_METAL=1 製
  • 使用CMake:

    mkdir ビルドメタル
    CDビルドメタル
    cmake -DLLAMA_METAL=ON ..
    cmake --build 。--config リリース

--gpu-layers|-nglMetal サポートを使用してビルドする場合、コマンド ライン引数を使用して GPU 推論を有効にすることができます。0 より大きい値を指定すると、計算が GPU にオフロードされます。例えば:

./main -m ./models/7B/ggml-model-q4_0.bin -n 128 -ngl 1

MPI ビルド

MPI を使用すると、マシンのクラスター全体に計算を分散できますLLM 予測のシリアルな性質により、エンドツーエンドの高速化は実現しませんが、単一マシンの RAM で実行できるよりもはるかに大きなモデルを実行できるようになります

まず、MPI ライブラリをシステムにインストールする必要があります。最も人気のある (そして唯一?) 2 つのオプションはMPICHOpenMPIです。どちらもパッケージ マネージャー ( 、Homebrew、MacPorts など) を使用してaptインストールできます。

LLAMA_MPI次に、すべてのマシンでプロジェクトをビルドして true に設定する必要があります。 CMake でビルドする場合はmake、MPI 対応コンパイラも指定する必要があります (これは CMake でビルドするときに自動的に構成されます)。

  • 使用make:

    CC=mpicc CXX=mpicxx LLAMA_MPI=1 にする
  • 使用CMake:

    cmake -S 。-B ビルド -DLLAMA_MPI=ON

プログラムが構築されたら、クラスター内のすべてのマシンに重みをダウンロード/変換しますウェイトとプログラムへのパスはすべてのマシンで同じである必要があります。

次に、マスター ホストから各マシンへのパスワードなしの SSH アクセスを確保し、hostfileホスト名とその相対的な「重み」 (スロット) のリストを作成します。計算に localhost を使用する場合は、ループバック アドレスまたは「localhost」ではなく、そのローカル サブネット IP アドレスを使用します。

hosts ファイルの例を次に示します。

<span style="color:#1f2328"><span style="background-color:#ffffff"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>192.168.0.1:2
malvolio.local:1
</code></span></span></span></span>

上記のコードは、計算を最初のホスト上の 2 つのプロセスと 2 番目のホスト上の 1 つのプロセスに分散します。各プロセスはほぼ同じ量の RAM を使用します。プロセス間 (ホスト内) 通信にはコストがかかるため、これらの数値を小さく保つようにしてください。

最後に、次を使用して計算を実行する準備が整いましたmpirun

mpirun - ホストファイル ホストファイル -n 3 ./main -m ./models/7B/ggml-model-q4_0.bin -n 128

BLAS ビルド

BLAS サポートを使用してプログラムをビルドすると、ヒント処理に 32 (デフォルトは 512) を超えるバッチ サイズを使用すると、パフォーマンスが多少向上する可能性があります。BLAS は通常の発電性能には影響しません。現在、3 つの異なる実装があります。

  • 加速フレームワーク:

    この機能は Mac PC でのみ利用でき、デフォルトで有効になっています。通常の手順に従ってビルドできます。

  • BLAS を開く:

    これにより、CPU のみを使用して BLAS アクセラレーションが提供されます。OpenBLAS がコンピューターにインストールされていることを確認してください。

    • 使用make:

      • Linux の場合:

        LLAMA_OPENBLAS=1 にする
      • Windows の場合:

        1. w64devkitの最新の Fortran バージョンをダウンロードします。

        2. Windows 用のOpenBLASの最新バージョンをダウンロードします。

        3. w64devkitコンピューター上で抽出します。

        4. フォルダー内にlibopenblas.aある、ダウンロードしたばかりの OpenBLAS zip のコピーからlibw64devkit\x86_64-w64-mingw32\lib

        5. include同じ OpenBLAS zip 内のフォルダーの内容をコピーしますw64devkit\x86_64-w64-mingw32\include

        6. 実行しますw64devkit.exe

        7. cdコマンドを使用してllama.cppフォルダーにアクセスします。

        8. ここから次を実行できます。

          LLAMA_OPENBLAS=1 にする
    • CMakeLinux では次を使用します。

      mkdir ビルド
      CD ビルド
      cmake .. -DLLAMA_BLAS=ON -DLLAMA_BLAS_VENDOR=OpenBLAS
      cmake --build 。--config リリース
  • 閃光

    詳細については、BLIS.md を確認してください。

  • インテル MKL

    デフォルトでは、LLAMA_BLAS_VENDORこれは set になっているGenericため、Intel 環境スクリプトを入手して-DLLAMA_BLAS=ONcmake で配布している場合は、Blas の mkl バージョンが自動的に選択されます。次のように指定することもできます。

    mkdir ビルド
    CD ビルド
    cmake .. -DLLAMA_BLAS=ON -DLLAMA_BLAS_VENDOR=Intel10_64lp -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx
    cmake --build 。--config リリース
  • CuBLASカブラス

    これにより、Nvidia GPU の CUDA コアを使用した BLAS アクセラレーションが提供されます。CUDA ツールキットがインストールされていることを確認してください。Linux ディストリビューションのパッケージ マネージャー、またはここからダウンロードできます: CUDA Toolkit

    • 使用make:

      FLAME_CUBLAS=1 にする
    • 使用CMake:

      mkdir ビルド
      CD ビルド
      cmake .. -DLLAMA_CUBLAS=ON
      cmake --build 。--config リリース

    環境変数CUDA_VISIBLE_DEVICESを使用して、使用する GPU を指定できます。次のコンパイル オプションもパフォーマンスを調整するために使用できます。

    オプション 法定価値 デフォルト 説明
    LLAMA_CUDA_FORCE_DMMV ブール値 正しくない 量子化されたデータに対して行列ベクトル乗算を行うカーネルの代わりに、逆量子化 + 行列ベクトル乗算カーネルの使用を強制します。デフォルトでは、計算能力 (7.0/Turing/RTX 2000 以降の MMVQ) に基づいて決定が行われます。k量子には影響しません。
    LLAMA_CUDA_DMMV_X 正の整数 >= 32 32 反復ごとに CUDA 逆量子化 + 行列ベクトル乗算カーネルによって処理される x 方向の値の数。この値を増やすと、高速 GPU でのパフォーマンスが向上する可能性があります。2 のべき乗を強くお勧めします。k量子には影響しません。
    LLAMA_CUDA_MMV_Y 正整数 1 CUDA は、y 方向のカーネル ブロック サイズを決定します。この値を増やすと、高速 GPU でのパフォーマンスが向上する可能性があります。2 のべき乗が推奨されます。k量子には影響しません。
    LLAMA_CUDA_DMMV_F16 ブール値 正しくない 有効にすると、CUDA 逆量子化 + mul mat vec カーネルに半精度浮動小数点演算が使用されます。比較的新しい GPU のパフォーマンスを向上させることができます。
    LAMA_CUDA_KQUANTS_ITER 1 または 2 2 Q2_K および Q6_K 量子化形式の反復ごとおよび CUDA スレッドごとに処理される値の数。この値を 1 に設定すると、低速な GPU でのパフォーマンスが向上します。
  • CLB爆発

    OpenCL アクセラレーションは、 CLBlast プロジェクトの行列乗算カーネルと、GPU 上でトークンを生成する ggml カスタム カーネルによって提供されます。

    OpenCL SDK が必要になります

    • Ubuntu または Debian の場合、これらのopencl-headersパッケージが必要になる場合がありますocl-icd

    • ソースから OpenCL SDK をインストールする

    CLBlast をインストールします。CLBlast はオペレーティング システムのパッケージ内にあります。

    • そうでない場合は、ソースからインストールします。

    建築:

    • make でビルドします。
      LLAMA_CLBLAST=1にする
    • CMake:
      mkdir ビルド
      CD ビルド
      cmake .. -DLLAMA_CLBLAST=ON -DCLBlast_dir=/some/path
      cmake --build 。--config リリース

    ランニング:

    CLBlast バージョンは、--gpu-layers|-nglCUDA バージョンと同じ機能をサポートします。

    正しいプラットフォーム (ドライバー) とデバイス (GPU) を選択するには、環境変数GGML_OPENCL_PLATFORMと を使用GGML_OPENCL_DEVICEできます。選択には、番号 (0 から始まります) または検索するテキスト文字列を指定できます。

    GGML_OPENCL_PLATFORM=1 ./main ...
    GGML_OPENCL_DEVICE=2 ./main ...
    GGML_OPENCL_PLATFORM=インテル ./main ...
    GGML_OPENCL_PLATFORM=AMD GGML_OPENCL_DEVICE=1 ./main ...

    デフォルトの動作では最初の GPU デバイスが検索されますが、このセレクターは、たとえばラップトップ上の統合 GPU である場合に便利です。必要に応じて、これらの変数を使用して CPU ベースのドライバーを選択することもできます。

    clinfo -lコマンドなどでプラットフォームやデバイスの一覧を取得できます。

データを準備して実行する

# 元の LLaMA モデルの重みを取得し、./models に配置します。
ls ./モデル
65B 30B 13B 7B tokenizer_checklist.chk tokenizer.model

# Python の依存関係をインストールする
python3 -m pip install -rrequirements.txt

# 7B モデルを ggml FP16 形式に変換します
python3 変換.py モデル/7B/

# モデルを 4 ビットに量子化します (q4_0 メソッドを使用)
./quantize ./models/7B/ggml-model-f16.bin ./models/7B/ggml-model-q4_0.bin q4_0

# 推論を実行する
./main -m ./models/7B/ggml-model-q4_0.bin -n 128

より大きなモデルを実行する場合は、すべての中間ファイルを保存するのに十分なディスク領域があることを確認してください。

メモリ/ディスク要件

モデルは現在メモリに完全にロードされているため、モデルを保存するのに十分なディスク容量と、ロードするのに十分な RAM が必要です。現時点では、メモリとディスクの要件は同じです。

モデル オリジナルサイズ 量子化サイズ(4ビット)
7b 13GB 3.9GB
13b 24GB 7.8GB
30B 60GB 19.5GB
65b 120GB 38.5GB

定量化する

複数の量子化方法がサポートされています。それらは、結果として得られるモデルのディスク サイズと推論速度が異なります。

モデル 測定 F16 Q4_0 Q4_1 Q5_0 Q5_1 Q8_0
7b 困惑した 5.9066 6.1565 6.0912 5.9862 5.9481 5.9070
7b ファイルサイズ 13.0G 3.5G 3.9G 4.3G 4.7g 6.7g
7b ms/tok @ 4 番目 127 55 54 76 83 72
7b ms/tok @ 8日 122 43 45 52 56 67
7b 桁数・重み 16.0 4.5 5.0 5.5 6.0 8.5
13b 困惑した 5.2543 5.3860 5.3608 5.2856 5.2706 5.2548
13b ファイルサイズ 25.0G 6.8G 7.6G 8.3G 9.1G 13G
13b ms/tok @ 4 番目 - 103 105 148 160 131
13b ms/tok @ 8日 - 73 82 98 105 128
13b 桁数・重み 16.0 4.5 5.0 5.5 6.0 8.5

複雑さ (モデルの品質の尺度)

このperplexity例を使用して、特定のプロンプトの複雑度を測定できます (複雑度が低いほど優れています)。詳細については、「固定長モデルの複雑性」を参照してください

上の表のパープレキシティの測定は、コンテキスト長 512 のwikitext2テスト データセット (  WikiText-2 Dataset | Papers With Code ) で 実行されます。トークンあたりの時間は、MacBook M1 Pro 32GB RAM で 4 スレッドと 8 スレッドを使用しています。

インタラクティブモード

より ChatGPT に似たエクスペリエンスが必要な場合は、-iパラメータを渡すことで対話モードで実行できます。このモードでは、Ctrl+C を押して 1 行以上のテキストを入力すると、いつでもビルドを中断できます。テキストはトークンに変換され、現在のコンテキストに追加されます。パラメーターを使用して逆ヒント-r "reverse prompt string"を指定することもできます。これにより、生成中に逆ヒント文字列の正確なトークンが検出されるたびに、ユーザーに入力を求めるプロンプトが表示されます。一般的な使用法は、LLaMa にヒントを使用して複数のユーザー (アリスとボブなど) 間のチャットをシミュレートさせ、それを渡すことです-r "Alice:"

以下は、コマンドを使用して呼び出されるいくつかのインタラクションの例です。

# 7B モデルを使用したデフォルトの引数
./examples/chat.sh

# 13B モデルとの高度なチャット
./examples/chat-13B.sh

# 13B モデルを使用したカスタム引数
./main -m ./models/13B/ggml-model-q4_0.bin -n 256 --repeat_penalty 1.0 --color -i -r "ユーザー:" -f プロンプト/chat-with-bob.txt

ユーザー入力と生成されたテキストを区別するために を使用していることに注意してください--colorその他のパラメータについてはサンプルプログラムのREADMEで詳しく説明されていますmain

画像

継続的なインタラクション

./mainプロンプト、ユーザー入力、--prompt-cacheおよびモデル生成は、と を利用することで、呼び出しの間に保存および復元できます--prompt-cache-allこの./examples/chat-persistent.shスクリプトは、長時間実行され再開可能なチャット セッションをサポートすることでこれを示しています。この例を使用するには、最初のチャット プロンプトをキャッシュするファイルとチャット セッションを保存するディレクトリを提供し、オプションで を提供する必要があります。chat-13B.sh新しいチャット セッションは同じプロンプト キャッシュを再利用できます。ヒント キャッシュとチャット ディレクトリの両方が、 PROMPT_TEMPLATE初期ヒント ( ) とモデル ファイルに関連付けられていることに注意してください。

# 新しいチャットを開始する
PROMPT_CACHE_FILE=chat.prompt.bin CHAT_SAVE_DIR=./chat/default ./examples/chat-persistent.sh

# チャットを再開する
PROMPT_CACHE_FILE=chat.prompt.bin CHAT_SAVE_DIR=./chat/default ./examples/chat-persistent.sh

# 同じプロンプト/モデルで別のチャットを開始します
PROMPT_CACHE_FILE=chat.prompt.bin CHAT_SAVE_DIR=./chat/another ./examples/chat-persistent.sh

# 異なるプロンプト/モデルの異なるプロンプト キャッシュ
PROMPT_TEMPLATE=./prompts/chat-with-bob.txt PROMPT_CACHE_FILE=bob.prompt.bin \
    CHAT_SAVE_DIR=./chat/bob ./examples/chat-persistent.sh

アルパカティーチングモード

  1. まずアルパカモデルをggmlフォルダーにダウンロードします./models
  2. main次のようにツールを実行します。
<span style="color:#1f2328"><span style="background-color:#ffffff"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>./examples/alpaca.sh
</code></span></span></span></span>

実行例:

<span style="color:#1f2328"><span style="background-color:#ffffff"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>== Running in interactive mode. ==
 - Press Ctrl+C to interject at any time.
 - Press Return to return control to LLaMa.
 - If you want to submit another line, end your input in '\'.

 Below is an instruction that describes a task. Write a response that appropriately completes the request.

> How many letters are there in the English alphabet?
There 26 letters in the English Alphabet
> What is the most common way of transportation in Amsterdam?
The majority (54%) are using public transit. This includes buses, trams and metros with over 100 lines throughout the city which make it very accessible for tourists to navigate around town as well as locals who commute by tram or metro on a daily basis
> List 5 words that start with "ca".
cadaver, cauliflower, cabbage (vegetable), catalpa (tree) and Cailleach.
>
</code></span></span></span></span>

OpenLLaMAを使用する

OpenLLaMA は、Meta のオリジナル LLaMA モデルの公的にライセンスされたレプリカです。これは同じアーキテクチャを使用しており、元の LLaMA 重みのドロップイン代替品です。

  • Hugging Face から3B7Bまたは13B モデルをダウンロードします
  • 次のコマンドを使用して、モデルを ggml FP16 形式に変換します。python convert.py <path to OpenLLaMA directory>

GPT4Allを使用する

  • LLaMA モデルからファイルを取得しtokenizer.modelて配置します。models
  • アルパカモデルからファイルを取得しadded_tokens.jsonて入れますmodels
  • GPT4All モデルからファイルを取得しgpt4all-lora-quantized.binて配置します。models/gpt4all-7B
  • ggml現在は廃止された古い形式で配布されています
  • 次のようにして新しい形式に変換する必要がありますconvert.py
python3 Convert.py models/gpt4all-7B/gpt4all-lora-quantized.bin
  • models/gpt4all-7B/ggml-model-q4_0.bin新しく生成されたモデルを他のモデルと同様に使用できるようになりました。

  • 新しい GPT4All-J モデルはまだサポートされていません。

ピグマリオン 7B とメタルメ 7B の使用

python3 Convert.py pygmalion-7b/ --outtype q4_1

Pygmalion 7B および Metharme 7B の重みはbfloat16精度で保存されます。量子化せずにに変換したい場合はggml代わりに--outtypeas を指定しますf32f16

Facebook LLaMAオリジナルモデルとStanford Alpacaモデルデータを取得

  • いかなる状況でも、IPFS、マグネット リンク、またはその他のモデルのダウンロード リンクを、問題、ディスカッション、プル リクエストなど、このリポジトリ内のどこでも共有してはなりません。それらはすぐに削除されます。
  • LLaMA モデルは Facebook によって公式に配布されており、このリポジトリからは決して入手できません。
  • モデル データへのアクセスをリクエストする必要がある場合は、Facebook の LLaMA リポジトリを参照してください。

モデルファイルを検証する

モデル ファイルに関する問題を作成する前に、ダウンロードしたすべてのモデル ファイルのsha256 チェックサムを検証して、正しいモデル データ ファイルがあることを確認してください。

  • 次の Python スクリプトは、自己インストールのサブディレクトリ./modelsに最新のファイルがすべて存在することを確認します。
# 検証スクリプトを実行する
python3 .\scripts\verify-checksum-models.py
  • Linux または macOS では、次のコマンドを実行して、自己インストールのサブディレクトリ./modelsに最新のファイルがすべて存在することを 確認することもできます。
    • Linux の場合:sha256sum --ignore-missing -c SHA256SUMS
    • macOS の場合:shasum -a 256 --ignore-missing -c SHA256SUMS

画期的な論文とモデルの背景

問題がモデル生成の品質にある場合は、少なくとも次のリンクと論文を読んで、LLaMA モデルの制限を理解してください。これは、適切なモデル サイズを選択し、LLaMA モデルと ChatGPT 間の重大かつ微妙な違いを理解する場合に特に重要です。

走り方

  1. ダウンロード/解凍: https://s3.amazonaws.com/research.metamind.io/wikitext/wikitext-2-raw-v1.zip ?ref=salesforce-research
  2. ランニング./perplexity -m models/7B/ggml-model-q4_0.bin -f wiki.test.raw
  3. 出力:
<span style="color:#1f2328"><span style="background-color:#ffffff"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>perplexity : calculating perplexity over 655 chunks
24.43 seconds per pass - ETA 4.45 hours
[1]4.5970,[2]5.1807,[3]6.0382,...
</code></span></span></span></span>

4.45 時間後、最後のパズルに直面します。

アンドロイド

Android NDK を使用してプロジェクトをビルドする

termux をllama.cpp使用すると、 Android デバイス上で簡単に実行できます。

まず、termux に必要なパッケージをインストールします。

<span style="color:#1f2328"><span style="background-color:#ffffff"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>pkg install clang wget git cmake
</code></span></span></span></span>

次に、Android NDK を取得し、CMake を使用してビルドします。

<span style="color:#1f2328"><span style="background-color:#ffffff"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>$ mkdir build-android
$ cd build-android
$ export NDK=<your_ndk_directory>
$ cmake -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-23 -DCMAKE_C_FLAGS=-march=armv8.4a+dotprod ..
$ make
</code></span></span></span></span>

termux をデバイスにインストールし、実行してtermux-setup-storageSD カードにアクセスします。最後に、llamaバイナリとモデル ファイルをデバイスのストレージにコピーします。こちらは、Pixel 5 スマートフォンで実行されるインタラクティブ セッションのデモです。

 ラクダのインタラクション 2.mp4 

Termux (F-Droid) を使用してプロジェクトをビルドする

F-Droid の Termux は、Android デバイス上でプロジェクトを実行するための代替方法を提供します。このアプローチにより、root 化されたデバイスや SD カードを必要とせず、ターミナル内でプロジェクトを直接ビルドできます。

OpenBLAS および CLBlast を使用してプロジェクトをインストールする手順の概要を以下に示します。この組み合わせは、GPU を搭載した最新のデバイスで最高のパフォーマンスを提供するように設計されています。

OpenBLAS の使用を選択した場合は、対応するパッケージをインストールする必要があります。

<span style="color:#1f2328"><span style="background-color:#ffffff"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>apt install libopenblas
</code></span></span></span></span>

その後、CLBlast を組み込むことにした場合は、まず必要な OpenCL パッケージをインストールする必要があります。

<span style="color:#1f2328"><span style="background-color:#ffffff"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>apt install ocl-icd opencl-headers opencl-clhpp clinfo
</code></span></span></span></span>

CLBlast をコンパイルするには、まず対応する Git リポジトリのクローンを作成する必要があります。このリポジトリは、URL:  https://github.com/CNugteren/CLBlastにあります。さらに、このリポジトリのクローンをホーム ディレクトリに作成します。これが完了したら、CLBlast フォルダーに移動し、以下で説明するコマンドを実行します。

<span style="color:#1f2328"><span style="background-color:#ffffff"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>cmake .
make
cp libclblast.so* $PREFIX/lib
cp ./include/clblast.h ../llama.cpp
</code></span></span></span></span>

前の手順に従って、LlamaCpp ディレクトリに移動します。OpenBLAS および CLBlast を使用してコンパイルするには、次のコマンドを実行します。

<span style="color:#1f2328"><span style="background-color:#ffffff"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>cp /data/data/com.termux/files/usr/include/openblas/cblas.h .
cp /data/data/com.termux/files/usr/include/openblas/openblas_config.h .
make LLAMA_CLBLAST=1 //(sometimes you need to run this command twice)
</code></span></span></span></span>

上記の手順を完了すると、プロジェクトが正常にコンパイルされます。CLBlast で実行するには、いくつかの小さな調整が必要です。仮想 GPU ではなく、デバイスの物理 GPU に操作を指示するコマンドを発行する必要があります。必要なコマンドについては以下で詳しく説明します。

<span style="color:#1f2328"><span style="background-color:#ffffff"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>GGML_OPENCL_PLATFORM=0
GGML_OPENCL_DEVICE=0
export LD_LIBRARY_PATH=/vendor/lib64:$LD_LIBRARY_PATH
</code></span></span></span></span>

(注: Zenfone 8 などの一部の Android デバイスでは、「export LD_LIBRARY_PATH=/system/vendor/lib64:$LD_LIBRARY_PATH」というコマンドが必要です。出典:  https://www.reddit.com/r/termux/comments/kc3ynp /opencl_working_in_termux_more_in_comments/ )

簡単かつ迅速に再実行するには、最後の部分を .sh スクリプト ファイルに記録することを検討してください。これにより、最小限の手間でプロセスを再実行できるようになります。

必要なモデルを~/llama.cpp/models/ディレクトリに配置し、./main (...)スクリプトを実行します。

ルスタバウ

前提条件

  • Docker がシステムにインストールされ、実行されている必要があります。
  • 大きなモデルと中間ファイルを保存するフォルダーを作成します (例: /llama/models)

写真

このプロジェクトで利用できる 2 つの Docker イメージがあります。

  1. ghcr.io/ggerganov/llama.cpp:full: このイメージには、LLaMA モデルを ggml および 4 ビット量子化に変換するための主要な実行可能ファイルとツールが含まれています。
  2. ghcr.io/ggerganov/llama.cpp:light: イメージにはメインの実行可能ファイルのみが含まれています。

使用法

モデルをダウンロードし、ggml に変換し、最適化する最も簡単な方法は、完全な Docker イメージが含まれる --all-in-one コマンドを使用することです。

以下の内容を、/path/to/modelsモデルをダウンロードした実際のパスに置き換えます。

docker run -v /path/to/models:/models ghcr.io/ggerganov/llama.cpp:full --all-in-one "/models/" 7B

完了したら、プレイする準備は完了です。

docker run -v /path/to/models:/models ghcr.io/ggerganov/llama.cpp:full --run -m /models/7B/ggml-model-q4_0.bin -p "Web サイトの構築が可能10 の簡単なステップで:" -n 512

または明るい画像を使用します。

docker run -v /path/to/models:/models ghcr.io/ggerganov/llama.cpp:light -m /models/7B/ggml-model-q4_0.bin -p "ウェブサイトの構築は 10 の簡単な手順で実行できますステップ:" -n 512

ドッカーとCUDA

Linux にnvidia-container-toolkit を適切にインストールしているか、GPU サポートを備えたクラウドを使用していると仮定すると、cuBLASコンテナ内でアクセスできるはずです。

現地建設

docker build -t local/llama.cpp:full-cuda -f .devops/full-cuda.Dockerfile 。
docker build -t local/llama.cpp:light-cuda -f .devops/main-cuda.Dockerfile 。

ARGSコンテナー ホストと GPU アーキテクチャによってサポートされている CUDA 環境に応じて、別のものを渡す必要がある場合があります。

デフォルト値は次のとおりです。

  • CUDA_VERSION設定11.7.1
  • CUDA_DOCKER_ARCH設定all

結果として得られるイメージは、非 CUDA イメージと基本的に同じです。

  1. local/llama.cpp:full-cuda: このイメージには、LLaMA モデルを ggml および 4 ビット量子化に変換するための主要な実行可能ファイルとツールが含まれています。
  2. local/llama.cpp:light-cuda: イメージにはメインの実行可能ファイルのみが含まれています。

使用法

ローカルでビルドする場合、使用法は非 CUDA の例と似ていますが、--gpusフラグを追加する必要があります。フラグも使用する必要があります--n-gpu-layers

docker run --gpus all -v /path/to/models:/models local/llama.cpp:full-cuda --run -m /models/7B/ggml-model-q4_0.bin -p "Web サイトを構築すると、 10 の簡単なステップで実行できます:" -n 512 --n-gpu-layers 1
docker run --gpus all -v /path/to/models:/models local/llama.cpp:light-cuda -m /models/7B/ggml-model-q4_0.bin -p "Web サイトの構築は、 10 の簡単なステップ:" -n 512 --n-gpu-layers 1

助ける

  • 寄稿者は PR を開くことができます
  • llama.cppコラボレーターはリポジトリ内のブランチにプッシュし、PR をmasterブランチにマージできます。
  • 貢献に基づいて協力者が招待されます
  • 管理上の問題や PR に関するサポートは大歓迎です。
  • 必ずお読みください:エッジでの推論
  • 興味のある方向けのバックストーリー: Changelog ポッドキャスト

コーディングガイドライン

  • サードパーティの依存関係、余分なファイル、余分なヘッダーなどを追加しないでください。
  • 他のオペレーティング システムやアーキテクチャとの相互互換性を常に考慮する
  • 派手な最新の STL 構造を避け、基本的なforループを使用し、テンプレートを避け、シンプルに保ちます
  • コーディング スタイルに厳格なルールはありませんが、コード内のパターン (インデント、空白など) に従うようにしてください。垂直方向の配置によりコンテンツが読みやすくなり、一括編集が容易になります
  • 末尾のスペースをすべてクリーンアップし、インデントに 4 つのスペースを使用し、同じ行に括弧を使用しますvoid * ptrint & a
  • 初めての投稿に適したタスクについては、「Good First Issue」を参照してください。

書類

おすすめ

転載: blog.csdn.net/sinat_37574187/article/details/131734707