こんにちは、今日は Windows での llama2 大規模モデルのローカルデプロイについて話します。
このレッスンでは、Windows 環境で GPU を使用せずに CPU のみを使用して、llama.cpp ライブラリに基づいて llama2 大規模モデルをデプロイして実行します。
デプロイが完了したら、Python インターフェースを使用してテキスト生成を行います。
- llama2 大規模モデルとは何ですか?
2023 年 7 月 19 日、Meta は無料で商用利用可能な大規模言語モデル Llama 2 をリリースしました。
この取り組みにより、大規模モデルの領域の構図が大きく変わることが予想されます。
Llama 2 シリーズのモデルには、70 億、130 億、700 億という 3 つの異なるスケールのパラメータがあります。
Llama2 の実際の効果を評価した結果、GPT3 を超え、GPT3.5 に近づいています。
Llama 2 自体については、特に国内の AI 領域に与える深い影響について多くの議論があります。将来的には、専門のビデオで議論する予定です。
それでは、次に手元のパソコンを使用して Llama2 を体験してみましょう。
- llama-cpp と llama-cpp-python
大規模言語モデルは、数百億のパラメータを持つことが一般的であり、単一のマシン環境では使用できません。
Llama シリーズでさえ、最小のモデルでも 70 億のパラメータがあり、NVIDIA RTX4090 または A10 が必要です。
しかし、あるスーパーエキスパートが Meta の LLaMA モデルを基に、llama モデルを実行するための llama.cpp モジュールを開発しました。
このプロジェクトは、C++ で完全に手作業で作成されており、第三者のコンパイル依存関係はありません。そのため、CPU 条件で大規模モデルの推論を行うことができます。
さらに、llama.cpp は llama2 モデルだけでなく、Alpaca、chiness-llama、WizardLM などの他のモデルもサポートしており、Python、Go、Node.js など他の言語のインターフェースも提供しています。
次に、llama-cpp の Python 環境を段階的に構築し、大規模言語モデルを単一のマシンで実行します。
- Anaconda を使用した環境の構築
環境を構築する前に、事前に Visual Studio をインストールする必要があります。llama-cpp-python のインストール中に llama-cpp をコンパイルするために使用されます。
公式の VS ウェブサイトから VS 2022 Community Edition をダウンロードしてインストールできます。
VS のインストールが完了したら、anaconda を使用して新しい Python 環境を作成します。Python のバージョンは 3.10 を選択します。
次に、環境を開き、pip install llama-cpp-python コマンドを使用して Python インターフェースの llama-cpp をインストールします。
- Huggingface からモデルをダウンロードする
Huggingface で量子化された llama2 モデルをダウンロードできます。
具体的には、Huggingface にログインし、TheBloke プロジェクトを見つけ、その中から Llama-2-7B-Chat-GGML モデルを見つけます。
ここで説明する必要があるのは、Llama-2-7B は元の 7B バージョンを意味し、Chat はチャットファインチューニングバージョンを意味し、GGML は量子化モデルを意味します。
モデルの量子化は、モデルの圧縮技術の一種です。
ダウンロードリストから、q4_0 バージョンを選択します。
他にも多くのバージョンがあります。
簡単に言えば、q4_0 は 4 ビットごとに 1 つの重みを意味し、q5_0 は 5 ビットごとに 1 つの重みを意味します。
数値が大きいほど精度が高くなりますので、適切なものを選択します。
- Python プログラムを作成してテキスト生成を行う
環境の構築とモデルのダウンロードが完了したら、Python コードを書くことができます。
プログラムは llama-cpp-python モジュールに依存します。そのインターフェースの使用方法は、プロジェクトのドキュメントで見つけることができます。
プロジェクトのドキュメントを開くと、各パラメータの使用方法がわかります。ここでは詳細な説明は省略しますが、具体的な使用方法は各自でデバッグする必要があります。
それでは、簡単なサンプルプログラムを書いてみましょう。
まず、llama_cpp をインポートします。
main 関数では、まず Llama モデルを作成し、q4_0 モデルを使用します。
次に、モデルに hello、who are you、how old are you という入力情報を与え、モデルの反応を確認します。
ここでは generate_text という機能関数を実装します。関数にはモデルと入力情報が渡され、モデルの出力結果が返されます。
関数内では、まずメッセージをプロンプトに変換し、プロンプトをモデルに入力して出力を取得します。
出力結果の形式はドキュメントを参考にし、choices の text 文字列を取り出して answer に保存し、answer を返します。
プログラムを実行すると、3 つのテスト結果が得られます。
hello を送信すると、llama2 から友好的な返答が返ってきます。
who are you を送信すると、llama2 が自己紹介します。
how old are you を送信すると、llama2 も適切な結果を返します。