Llama2 によるローカル GPT の使用手順

Llama2 モデルを使用してインテル® Gaudi® 2 AI アクセラレーターにローカル GPT を実装し、ユーザーが自分のローカル・ドキュメントからチャット形式で情報を取得

GitHub でソースを表示する
https://github.com/HabanaAI/Gaudi-tutorials/blob/main/PyTorch/localGPT_inference/LocalGPT_Inference.ipynb

＜Llama2 を使用したローカル GPT＞
このチュートリアルでは、インテル® Gaudi® 2 AI アクセラレーターに実装する、ローカル GPT オープンソース・イニシアチブの使用方法を説明します。ローカル GPT を使用すると、ユーザー独自のドキュメントが読み込まれ、その内容についてインタラクティブなチャット形式で対話することができます。.pdf や .txt のドキュメントを SOURCE DOCUMENTS フォルダーにロードしておけば、ingest.py スクリプトを実行してコンテンツをトークン化した後、run_localGPT.py スクリプトで対話を開始して、チャット形式でドキュメント内容の確認や要約ができるようになります。
https://github.com/PromtEngineer/localGPT

この例では、Meta の Llama2-chat 13B モデル (meta-llama/Llama-2-13b-chat-hf) をリファレンス・モデルとして使用し、インテル® Gaudi® 2 AI アクセラレーターで推論を実行します。

ローカル GPT のインスタンス化を最適化するために、以下を含めた既存の Hugging Face ベースの「テキスト生成」推論タスクとパイプラインをもとに、新規コンテンツを作成しました。

1.	Hugging Face Optimum Habana ライブラリーをインテル® Gaudi® 2 AI アクセラレーターに最適化済みの Llama2-13B モデルと組み合わせて使用

2.	ソース・ドキュメントのインポートに、LangChain フレームワークと、HuggingFaceEmbeddings ベースのGaudiHuggingFaceEmbeddings クラスを使用したカスタムの埋め込みモデルを採用

3.	静的形状のパディングとインデックス付与によってテキスト生成タスクを最適化し、パフォーマンス向上を図る、カスタムのパイプライン・クラス GaudiTextGenerationPipeline を使用

インテル® Gaudi® 2 AI アクセラレーター上でローカル GPT を最適化するために、テキスト埋め込みとテキスト生成用のカスタムクラスが開発されました。このアプリケーションではカスタムクラス ‘GaudiHuggingFaceEmbeddings’ を使用して、テキストデータをベクトル埋め込みに変換します。このクラスは LangChain の ‘HuggingFaceEmbeddings’ クラスを拡張し、インテル® Gaudi® 2 AI アクセラレーターに最適化された SentenceTransformer を実装します。

トークン化のプロセスは静的形状を取り入れるように修正されているため、大幅なスピードアップが可能になりました。さらに、‘GaudiTextGenerationPipeline’ クラスは、Optimum Habana ライブラリーと LangChain 間のリンクを確立します。このクラスは、Hugging Face Transformers モデルのパイプラインと同様に、kv キャッシング、静的形状、hpu グラフなどの最適化を適用したテキスト生成が可能です。また、ユーザーがテキスト生成パラメーター (temperature、top_p、do_sample など) を修正することができ、インテル® Gaudi® 2 AI アクセラレーター上で演算グラフをコンパイルするメソッドも含まれています。このクラスのインスタンスは、Langchain クラスの入力として直接渡すことができます。

モデルのセットアップと実行は、以下の手順で行います。

【フォルダーの場所と環境変数を設定する】
![１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/1a29d69c-e182-fbaf-6c23-b01a7a2d2531.png)

【ローカル GPT の要件をインストールする】
![２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/e1fcce3c-ba8a-d413-7d21-ff2b7c9e6ce1.png)

【Hugging Face から Optimum Habana ライブラリーをインストールする】
![３.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/58417fe0-de75-9bda-8dbd-fc3ce07667e6.png)

＜ユーザーのローカルコンテンツをロードする＞
対象のファイルすべてを SOURCE_DOCUMENTS ディレクトリーにコピーします。この例の場合、アメリカ合衆国憲法のコピーがフォルダー内に含まれています。このフォルダーに自分のコンテンツを追加することで、さらにコンテンツを取り込むことが可能です。

現時点でデフォルトのファイル形式は、.txt、.pdf、.csv、.xlsx となっています。ほかのファイル形式を使いたい場合は、デフォルトのファイル形式いずれかへの変換が必要です。

以下のコマンドを実行し、すべてのデータを取り込みます。ingest.py は LangChain ツールを使用してドキュメントを解析し、GaudiHuggingFaceEmbeddings クラスでローカルの埋め込みを作成してから、Chroma ベクトル型データストアを使用して出力結果をローカルのベクトル型データベース (DB) に格納します。

空のデータベースから開始したいならば、DB フォルダーを削除してから、再度 ingest script を実行します。

![４.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/a22c596e-cbf7-fc50-6185-ad2c239a24eb.png)

＜Llama2 モデルへのアクセスと使用方法＞
事前学習済みモデルの使用は、「Llama 2 Community License Agreement (LLAMA2)」を含め、サードパーティー・ライセンスの遵守が求められます。LLAMA2 モデルの意図されている使用方法、誤用や適用範囲外と考えられる使い方、想定されるユーザー、その他の条件に関するガイダンスは、こちらのリンク先 https://ai.meta.com/llama/license/ に記載されている指示をご確認ください。ユーザーはサードパーティーのライセンスに従いこれを遵守することについて単独の責任および義務を負うものとします。また、ユーザーによるサードパーティー・ライセンスの使用または遵守に関して、Habana Labs はいかなる責任も負いません。
この Llama-2-13b-chat-hf のようなゲート付きモデルを実行するには、以下のアカウントおよび同意が必要となります。

•	HuggingFace アカウント
•	HF Hub のモデルカードに記載されているモデル利用規約への同意
•	読み込みトークンの設定
•	スクリプト開始前に、HF CLI を使用した huggingface-cli login の実行による登録済みアカウントへのログイン

![５.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/7351d302-61c6-b94a-5bb6-9951bb5fe271.png)

＜Llama2 13B Chat によるローカル GPT モデルの実行＞
モデルの用途を設定する
モデルを変更するには、constants.py ファイルの “LLM_ID = ” を修正します。この例では、デフォルトは meta-llama/Llama-2-13b-chat-hf です。

インタラクティブに連動するため、Terminal からの起動をおすすめします。この run_localGPT.py スクリプトは、質問の解釈と回答の生成にローカル LLM (この例では Llama2) を使用します。回答コンテキストは、ドキュメントのコンテキスト位置を割り出す類似性検索によって、ローカルのベクトル型データストアから抽出されます。

![６.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/f8519694-e6b2-1e10-08f0-6598999cf417.png)

注: 推論はサンプリング・モードで実行されているため、ユーザーはオプションで run_localGPT.py の 84 行目にある temperature と top_p の設定を変更して出力を調整することができます。

現在の設定は、temperature=0.5、top_p=0.5 です。プロンプトで “exit” と入力すると、実行は停止します。Terminal から`python run_localGPT.py –device_type hpu` を実行し、チャットを開始します。以下の例は、出力の冒頭部分です。

![７.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/d6041710-1d1c-87c0-d2c2-eb126d50ec58.png)

![８.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/0a648cf6-d7a4-d38f-b080-371c3cdd4c95.png)

【次のステップ】
自分のコンテンツを SOURCE DOCUMENTS フォルダーに追加すれば、独自のコンテンツを使用してクエリーとチャットを実行できます。また、run_localGPT.py ファイルの 84 行目にある `temperature` と `top_p` の値を変更することも可能です。

![９.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/7471a303-7a25-e76d-826c-0943c792909d.png)

ほかの値を試して、異なる出力を得ることができます。トークン化とパディングの詳細については、/gaudi_utils/pipeline.py の最新版 GaudiTextGenerationPipeline クラスを確認してください。

Copyright© 2023 Habana Labs, Ltd. an Intel Company.

＜Apache License Version 2.0 (以下「ライセンス」) の下に使用許諾条件が適用されます。＞

本ライセンスを遵守しない限り、このファイルを使用することはできません。本ライセンスのコピーは、https://www.apache.org/licenses/LICENSE-2.0 から入手できます。該当する法律で義務付けられている場合または書面で合意した場合を除いて、本ライセンスの下で頒布されるソフトウェアは、明示されているか否かにかかわらず、いかなる種類の保証あるいは条件なしに「現状のまま」提供されるものとします。本ライセンスの下での許可および制限を規定する特定の文言については、本ライセンスを参照してください。