ノート:
- このチュートリアルでは、Oracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントに例の値を使用します。演習を完了するときは、これらの値をクラウド環境に固有の値に置き換えます。
Oracle Cloud Infrastructure GPUへのLlama2のデプロイ
イントロダクション
LLAMA2は、リソースが制約されたデバイスで機械学習モデルを効率的にスケーリングするように設計された最先端のディープ・ラーニング・アーキテクチャです。このプラットフォームは非常にスケーラブルで適応性が高いため、組織は膨大な量のデータを簡単に処理し、有意義なインサイトを引き出し、変化する市場状況に迅速に対応できます。Llama2の主な機能の1つは、データをほぼリアルタイムで処理する機能です。これにより、企業は環境の変化に迅速に対応できます。さらに、Apache Kafka、Apache Flink、Apache Sparkなど、様々なデータ・ソースおよび処理フレームワークをサポートしています。つまり、開発者は特定のニーズに最適なツールを選択できます。
Llama2には、ストリーミングSQLのサポート、HadoopやYARNなどの一般的なビッグ・データ・ツールとの統合、データのプライバシと整合性を確保するための強力なセキュリティ対策など、他の多くの便利な機能もあります。全体として、Llama2は、組織が大規模なデータセットを効率的に処理して分析するのに役立つ強力なツールであり、ペースの速い今日のデジタル環境で競争力を発揮します。
アーキテクチャは、人間に似た応答を生成するために連携する複数のコンポーネントで構成されます。モデルのコアはトランスフォーマ・エンコーダで、一連の単語またはテキストを取り込み、入力を表す一連のベクトルを出力します。これらのベクトルは、フィードフォワード・ニューラル・ネットワーク(FFNN)および残余接続のレイヤーを介して渡され、最終的な出力が生成されます。
FFNNは、入力シーケンスを処理し、コンテキスト化された埋込みを生成する、完全に接続されたレイヤーで構成されています。残存接続により、モデルはデータ内のより複雑なパターンを学習し、全体的なパフォーマンスを向上させることができます。
これらのコア・コンポーネントに加えて、Llama LLMには、モデルの微調整と精度の向上に役立つ他のモジュールも含まれています。これには、テキスト入力を数値トークンに変換するトークン化子、学習したサブワードを格納する語彙、トレーニング中の露出バイアスを防ぐためのマスクが含まれます。
テキスト生成WebUIは、大規模言語モデルのためのgradio Web UIです。APIおよびコマンドライン・ツールもサポートしています。このWebUIは、トランスフォーマ、llama.cpp、ExLlama、ExLlamaV2、AutoGPTQ、GPTQ-for-Llama、CTransformersおよびAutoAWQを含む複数のモデル・バックエンドをサポートしています。また、LoRAモデル、微調整、QLoRAを使用した新しいLoRAのトレーニングもサポートします。モデルのお気に入りの拡張機能をロードするための拡張機能フレームワークがあります。OpenAI互換APIサーバーがあります。
目的
- WebUIを実行し、Llama2モデルをロードしてテキスト生成を実行するために必要なすべてのものをインストールします。
前提条件
-
A10 GPU制限を持つOracle Cloud Infrastructure (OCI)テナンシ。
-
少なくとも1つのパブリック・サブネットとパブリックIPの制限を持つ既存のOCI Virtual Cloud Network (VCN)。
-
お気に入りのHuggingface CreatorからのLlama2モデル・チェックポイント。モデルが前述のバックエンドをサポートしていることを確認してください。
タスク1: OCIでのGPUコンピュート・インスタンスのプロビジョニング
-
パブリック・サブネットを持つ既存のVCNを使用して、OCIでコンピュート・インスタンスを起動します。詳細は、コンピュート・インスタンスの起動を参照してください。
-
使用可能なGPU.A10シェイプから1つを選択します。
VM.GPU.A10.1 VM.GPU.A10.2 BM.GPU.A10.4
-
コンピュート・インスタンスを起動するときに、シェイプを前述のシェイプのいずれかに変更します。
-
テナンシにGPU.A10のサービス制限が設定されていない場合、これらのシェイプはシェイプ・リストにありません。
-
OCIコンソールでテナンシ制限を確認するには、GPU.A10コンピュート・インスタンスをプロビジョニングするリージョンを設定し、ナビゲーション・メニューを開いて「ガバナンスと管理」をクリックします。
-
「テナンシ管理」で、「制限、割当ておよび使用状況」を選択します。
-
「サービス」で
Compute
を選択し、スコープ・フィールドで可用性ドメインのいずれかを選択し、リソース・フィールドにGPU.A10
と入力します。 -
A10ベースのVMおよびBMインスタンスのGPUを選択します
-
-
コンピュート制限は可用性ドメインごとです。リージョンの可用性ドメインのいずれかに制限が設定されているかどうかを確認します。すべての可用性ドメインのサービス制限が
0
に設定されている場合は、「サービス制限の引上げのリクエスト」リンクをクリックし、このリソースに対する制限の引上げリクエストを送信します。ノート: 制限、割当ておよび使用状況にアクセスするには、テナンシ管理者グループのメンバーであるか、LimitsAndUsageViewersを読み取るためのポリシーが割り当てられている必要があります。
- サービス制限の詳細は、サービス制限を参照してください。
-
現在、OCI GPU.A10コンピュート・シェイプは、Oracle Linux、UbuntuおよびRocky Linuxをサポートしています。Windowsは、VMシェイプでのみサポートされています。
ノート: Rocky Linuxは、NVIDIAでは公式にサポートされていません。
-
OCIでコンピュート・インスタンスをプロビジョニングする場合は、標準のOSイメージまたはGPU対応イメージを使用します。標準のOSイメージを使用する場合は、NVIDIA vGPUドライバをインストールする必要があります。
-
ブート・ボリュームのセクションを展開して、ブート・ボリュームを少なくとも250GBに増やし、VPUを「より高いパフォーマンス」に増やして、適切な読取り/書込みを行い、より適切に推論できるようにします。
前述のパラメータを使用してインスタンスを起動します。
タスク2: Llama2の前提条件のインストール
-
NVIDIAドライバはOracle Linux GPUビルド・イメージに含まれているため、
NVIDIA-smi
コマンドを実行して、その存在と機能を確認できます。これにより、すべてが正しく設定され、GPUドライバが期待どおりに機能するようになります。 -
FileSystemの増加: OCIインスタンスのシステム・メモリーには、デフォルトで46.6GBが付属しています。ブート・ボリュームを300GBに増やしたため、OCIユーティリティから構築されたOCIコマンドでファイル・システムを拡張しましょう。
ブート・ボリュームを300GBに増やした後にOCIインスタンス上のファイル・システムを拡張するには、組込みのOCIコマンドを使用できます。次のステップに従います。
-
現在のディスク使用量の確認: ファイル・システムのサイズを変更する前に、現在のディスク使用量を確認して、増加したブート・ボリューム・サイズを反映させることをお薦めします。この目的のために
df
コマンドを使用できます。使用可能な領域が新しいブート・ボリューム・サイズ(300GB)と一致することを確認します。bash df -h
-
ファイル・システムのサイズ変更: OCIユーティリティ・コマンドを使用して、増加したストレージを使用するようにファイル・システムのサイズを変更します。正確なコマンドは、使用している特定のOSおよびファイルシステムによって異なります。次は、Oracle Linux 8で使用されます。
sudo /usr/libexec/oci-growfs
パーティションの拡張の確認を求められたら、
y
と入力します。 -
ファイル・システムの拡張の確認: サイズ変更コマンドを実行した後、ディスク使用量を再度確認して、ファイル・システムが正常に展開されたことを確認します。
bash df -h
これで、増加したファイル・システム・サイズが反映されます。これらのステップに従うことで、増加したブート・ボリュームによって提供される追加のストレージ領域を利用するために、OCIインスタンス上のファイル・システムを拡張できるようになります。
-
-
次のコマンドを使用して、Oracle Linux 8に
Python 3.10.6
をインストールします。sudo dnf update -y sudo dnf install curl gcc openssl-devel bzip2-devel libffi-devel zlib-devel wget make -y wget https://www.python.org/ftp/python/3.10.6/Python-3.10.6.tar.xz tar -xf Python-3.10.6.tar.xz cd Python-3.10.6/ ./configure --enable-optimizations make -j 2 nproc sudo make altinstall python3.10 -V
-
gitをインストールして、gitリポジトリをクローニングします。
sudo dnf install git
-
次のコマンドを使用して、
conda
をインストールします。mkdir -p ~/miniconda3 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3 rm -rf ~/miniconda3/miniconda.sh ~/miniconda3/bin/conda init bash
-
conda
環境を作成します。conda create -n llama2 python=3.10.9 # llama2 being the conda environment name conda activate llama2
-
次のコマンドを使用して、
PyTorch 2.0
をインストールします。pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
-
text-generation-webui
をクローニングします。クローン・ディレクトリにtext-generation-webui
リポジトリが必要です。git clone https://github.com/oobabooga/text-generation-webui
-
requirements.txt
をインストールし、ディレクトリをtext-generation-webui
に変更して、次のコマンドを実行します。pip3 install -r requirements.txt
-
ポート
7860
トラフィックを許可するようにファイアウォール・ルールを更新します。sudo firewall-cmd --list-all # To check existing added ports sudo firewall-cmd --zone=public --permanent --add-port 7860/tcp sudo firewall-cmd --reload sudo firewall-cmd --list-all # Confirm that port has been added.
タスク3: Llama2の実行
-
前提条件が正常にインストールされると、
text-generation-webui
を実行して前進する準備が整います。text-generation-webui
ディレクトリに移動し、次のコマンドを実行します。python server.py --sdp-attention --listen
このプロセスの結果は、必須モジュールをロードし、ポート
7860
で推論サーバーを起動する必要があります。 -
前述のように、ポート
7860
で実行されているサーバーでの正常なデプロイメントを確認した後、text-generation-webui
アプリケーションへのアクセスに進みます。Webブラウザを開き、http://<PublicIP>:7860
というアドレスを入力し、<PublicIP>
をインスタンスのパブリックIPアドレスに置き換えます。アプリケーションがロードされ、次に示すように表示されます。強調表示されているとおり、上部にあるセクション・モデルにナビゲートします。
-
「モデル」セクションで、目的のLlama2モデルのhuggingfaceリポジトリを入力します。当社では、huggingface repo
TheBloke/Llama-2-13B-chat-GPTQ
からGPTQモデルを選択しました。モデルをダウンロードし、モデル・セクションにロードします。 -
ロードしたら、「チャット」セクションに移動して、Llama2を使用してテキスト生成を開始します。
タスク4: Service Manager systemctl
を介したテキスト生成WebUIのデプロイ
-
パス
/etc/systemd/system
にファイルllama2.service
を作成し、次のテキストを入力します。[Unit] Description=systemd service start llama2 [Service] WorkingDirectory=/home/opc/text-generation-webui ExecStart=bash /home/opc/text-generation-webui/start.sh User=opc [Install] WantedBy=multi-user.target
-
作業ディレクトリは必ず変更してください。ここでは、実行ファイルとして
start.sh
について説明し、text-generation-webui
ディレクトリにそのファイルを作成し、次のテキストを入力します。#!/bin/sh # - the script is ran via anaconda python # - output is not buffered (-u) # - stdout & stderr are stored to a log file # - we're executing the working directory specified in the systemd service file /home/opc/miniconda3/envs/llama2/bin/python server.py --sdp-attention --listen
-
これにより、常にconda環境Llama2が使用されます。systemdサービスからconda環境をアクティブ化することは望ましくありません。したがって、シェル・スクリプトを使用してアプリケーションを起動してから、シェル・スクリプトを使用してアプリケーションを実行します。次のコマンドを実行して、サービスをリロードし、有効化/起動します。
sudo systemctl daemon-reload sudo systemctl enable llama2.service sudo systemctl start llama2.service
-
次のコマンドを実行して、サービスのステータスを確認します。
sudo systemctl start llama2.service
関連リンク
確認
- 著者 - Abhiram Ampabathina (シニア・クラウド・アーキテクト)
その他の学習リソース
docs.oracle.com/learnの他のラボをご覧いただくか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。
製品ドキュメントは、Oracle Help Centerを参照してください。
Deploy Llama2 on Oracle Cloud Infrastructure GPUs
F91994-01
January 2024
Copyright © 2024, Oracle and/or its affiliates.