モデルのガバナンスは簡単ではありません。モデルの安全なオンボーディングやスキャン、継続的なアクセス コントロールといったデプロイや管理における懸念など、モデルを管理するうえでの課題は数多くあります。そこで VMware Explore 2024 では、VMware Private AI Foundation with NVIDIA の新しい重要な機能として Model Gallery を紹介しました。
この記事では、Llama-3-8b-instruct の Model Gallery への安全なオンボーディング、およびプライベートクラウドにおけるガバナンス戦略とデプロイについて解説します。ただし Model Gallery ではほかにも多くのことを行えます。Open Container Initiative (OCI) と互換性のある形式でモデルを保存すると、CI/CD プロセスを追加して、生成 AI アプリケーションとともにモデル ランタイムの統合とデプロイを自動化できるようになります。
ワークフローの概要
Model Gallery にモデルを安全にオンボーディングするために、DMZ として動作する AI ワークステーションをデプロイします。これは、インフラストラクチャにオンボーディングするモデルの安全性とパフォーマンスを確保するためです。 ワークステーションをデプロイしたらモデルをダウンロードし、静的セキュリティ スキャンを実行して正常に動作することを確認します。ランタイム セキュリティ スキャンとパフォーマンスの評価が完了したら、後で DMZ 外で使用できるようにモデルを Model Gallery にアップロードします。
Model Gallery にアップロード後、モデルのガバナンス、アクセス コントロールの調整や修正を行えます。
これで開発者は自身の環境で CLI を使用してモデルを簡単にデプロイできるようになります。
2024 年のブレイクアウト セッションでの、このワークフローのデモはこちらからご覧いただけます。
前提条件
このガイドを理解するには、以下が必要になります。
- VMware Cloud Foundation 5.2.1 以降
- VMware Private AI Foundation with NVIDIA アドオン
- Private AI 向けの VCF の準備
- VCF にデプロイした Harbor
- Deep Learning VM イメージを含むコンテンツ ライブラリ
インフラストラクチャ構成
まず初めに Deep Learning VM をプロビジョニングする必要があります。Deep Learning VM は VMware Private AI Foundation with NVIDIA の一部として提供される仮想マシン イメージです。一般的な ML ツールを使用して事前構成され、VMware Cloud Foundation で GPU の活用を加速するために NVIDIA および VMware によって最適化および検証が行われています。Private AI クイック スタート を使用して環境を構築します。
ここではエア ギャップとクラウド接続のいずれかを選択できます。Deep Learning VM のデプロイに必要なそれぞれの手順に従います。
ここからは、VCF Automation カタログ セットアップ ウィザードの Private AI クイック スタート ウィザードを実行し、デプロイ用の 5 つのテンプレートを作成します。ただしその前に、大規模言語モデルの推論ワークロード向けに仮想マシン クラスが構成されていることを確認します。
このガイドでは、Triton TensorRT-LLM バックエンドを使用して、Llama3-8b-instruct を実行します。このバックエンドを使用するには、PCI デバイスとして接続された vGPU プロファイルを使用して新たな仮想マシン クラスを作成する必要があります。
次に [Advanced Parameters] で UVM パラメーターを設定します。
これで、先ほど作成した仮想マシン クラスを使用してクイック スタートを開始できます。
クイック スタート ウィザードが完了したら、[Service Broker] に 5 つの新しいカタログ アイテムが表示されます。
AI ワークステーションのデプロイ
AI ワークステーションのカタログ アイテムを使用して、モデルのオンボーディングに使用できる仮想マシンをデプロイします。この AI ワークステーションをデプロイする際は、先ほど構成したのと同じ仮想マシン クラスを選択します。
デプロイには最大 30 分かかる場合があります。
前提条件の確認
Deep Learning VM をデプロイし正常に起動したら、VCF Automation で設定したパスワードを使用してこれに SSH 接続できます。
すべてが適切に実行され、必要なツールがそろっていることを確認します。
まず、以下を実行して GPU が適切にインストールされていることを確認します。
1 |
nvidia-smi |
ここで vGPU プロファイルとそのドライバが正常にインストールされていることを確認します。
次に、VCF 5.2.1 から Deep Learning VM に事前インストールされている Private AI ソリューション用の CLI を使用します。以下を実行して、インストールされていることを確認します。
1 |
pais --help |
ここでは以下のような出力が予想されます。この CLI コマンドが見つからない場合は、Deep Learning VM の適切なバージョンがインストールされていません。 これに対処するには、コンテンツ ライブラリで Deep Learning VM イメージを最新のバージョンにアップデートします。
モデルのダウンロード
モデルをダウンロードして実行するには、Triton Inference Server をインストールして実行する必要があります。
1 |
docker run -itd --gpus all --rm -p 8000:8000 -p 8001:80001 -p 8002:8002 -v /opt/data:/models nvcr.io/nvidia/tritonserver:24.05-trtllm-python-py3 |
このコマンドは、インストール済みの triton-trtllm エンジンを使用して Triton コンテナをダウンロードし、実行します。上記のコマンドが Nvidia のパブリック レジストリを活用しているのが確認できます。エア ギャップ環境では、これはプライベート レジストリに置き換えられます。また、このコマンドがデータ ディスクをコンテナにバインドしていることも確認できます。これは、仮想マシンからコンテナへのモデルの転送を容易にするためです。
コンテナ イメージのダウンロードが完了しコンテナが実行されたら、コンテナ内でコンソールを開いて、必要な他のコンポーネントをすべてインストールします。
まず、以下を実行してコンテナ ID を取得します。
1 |
docker ps |
次に、以下のコマンドを実行してコンテナ内にコンソールを開きます。
1 |
docker exec -it <containerID> bash |
コンテナ内での作業
triton CLI をダウンロードします。
1 |
Llama3 をダウンロードする際、Llama3 は利用規約への同意とダウンロードの承認を必要とするモデルであるため、Hugging Face Hub にログインする必要があります。
1 |
huggingface-cli login |
Git の認証情報としてトークンを追加しないでください。
これで、モデルをダウンロードして構築する準備ができました。他の推論サーバーと異なり、Triton では LLM を実行可能にするためにエンジン ファイルの構築が必要です。選択したモデルの規模によって、これには時間がかかる場合があります。小規模なモデルでこのガイドの手順を実行したい場合は、llama3 を gpt2 で置き換えても構いません。
1 |
triton import -m llama-3-8b-instruct --backend tensorrtllm --model-store=/models |
モデルのインポートが完了したら、後で自動的に実行できるよう、エンジンにファイルがパッケージ化されていることを確認します。
1 2 3 4 5 6 7 8 9 |
# モデル リポジトリに llama3 のエンジン ディレクトリを作成します mkdir /models/llama3-3-8b-instruct/1/engine cd /models/llama-3-8b-instruct/1/engine # エンジン ファイルを同じディレクトリに移動します mv /tmp/engines/llama-3-8b-instruct/* ./ # 移動したファイルへの参照をアップデートします sed -i -e 's#"/tmp/engines/llama-3-8b-instruct#"/models/llama-3-8b-instruct/1/engine#' $(rgrep -l llama-3-8b-instruct /models) |
これでモデルを実行してテストできるようになりました。
1 |
triton start --mode=local --model-store=/models |
Deep Learning VM の別のターミナルで、簡単な POST リクエストを実行すれば作業は完了です。
1 |
curl -X POST localhost:8000/v2/models/llama-3-8b-instruct/generate -d '{"parameters": {"temperature": 0.3,"stream":false}, "text_input": "Write python code to generate prime numbers.", "max_tokens": 250}' |
セキュリティとパフォーマンスの評価
次に、ダウンロードしたモデルが安全かつ高性能で、ユースケースに適合することを確認する必要があります。これらのテストは、実行するモデルの仕様や作成予定のアプリケーションによって異なります。このセクションでは取り掛かりとなる推奨事項をいくつか挙げます。
- triton のインポート コマンドを使用してダウンロードしたモデルのハッシュを検証する必要があります。ダウンロード中にハッシュが破損していないことを確認します。
- 静的ファイル スキャン ツール。標準的なエンタープライズ向けアンチウイルス(AV)スキャナーを使用して、モデルの一部としてパッケージ化されている可能性がある実行可能ファイル内の既知の脅威をスキャンできます。また、デシリアライゼーション攻撃の検出には modelscan など、ほかの新しい OSS 静的スキャン ツールを使用できます。
- ランタイム検証スキャンを使用すると、モデルが不適切なコンテンツを作成していないことを確認できます。Explore 2024 のデモでは Giskard を使用し、このようなスキャンの一部を自動化しています。
Giskard に関しては、最初に Giskard モデル タイプでモデルへの呼び出しをラッピングする簡単なスクリプトを作成しました。このスクリプトでは OpenAI を使用してモデルのパフォーマンスを評価しています。ただし、これはオンプレミスの適切なオープンソース モデルで置き換えることができます。
これはごく基本的なスキャンであり、セキュリティとパフォーマンスの両方についてユーザー独自のテストを使用して補強することができます。スキャンが完了すると、検出された問題のレポートが作成されます。レポートには有害性、ハルシネーション、機密情報の開示、プロンプト インジェクション、ステレオタイプの拡散に関する報告が含まれます。デモでは相当数の誤検知が見つかりましたが、アプリケーションのどこに LLM ガードレールを追加すべきかを示す有益な事例が得られました。
LLM ガードレールと RAG を追加後にもう一度このテストを実行すれば、完成したエージェントを一連の問題に照らして検証することができます。この段階では、開発者が使用するためのモデルをオンボーディングしているだけだということに留意してください。LLM ガードレールなしでは、モデルが Giskard のランタイム テストのすべてに合格する可能性はほぼありません。モデルのオンボーディング段階では、このモデルを開発チームが内部にデプロイしても安全かどうか、マルウェアやモデルのパフォーマンスを変更するサプライ チェーン攻撃の可能性がないかどうかを検証する必要があります。この段階では、モデルのベースライン機能と保護すべき弱点について把握する必要があります。
Model Gallery へのアップロード
環境にオンボーディングできる程度にモデルが問題なく動作することを十分確信できたら、モデルを Model Gallery にアップロードします。
Model Gallery をシステムのトラストストアに追加
Harbor レジストリの証明書をダウンロードします。
1 |
openssl s_client -connect harbor-repo-paih.vmware.com:443 2>/dev/null </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > harbor-repo-paih.vmware.com.pem |
注:上記の方法は中間者攻撃の影響を受けやすく、デモ用としてのみ提示しています。この記事では証明書の安全な管理については取り上げません。
証明書を変換し、CA証明書ストアにコピーします。
1 |
openssl x509 -outform der -in harbor-repo-paih.vmware.com.pem -out harbor-repo-paih.vmware.com.crt |
1 |
sudo cp harbor-repo-paih.vmware.com.crt /usr/local/share/ca-certificates/harbor-repo-paih.vmware.com.crt |
次に、システムの証明書ストアをアップデートします。
1 |
sudo update-ca-certificates |
ローカルの Docker システムを Harbor に対して認証
次のコマンドを実行して、CLI で Harbor レジストリにログインします。
1 |
docker login harbor-repo-paih.vmware.com |
モデルのプッシュ
モデルをプッシュするには、Harbor で新しい Model Gallery を作成する必要があります。これは新しい Harbor プロジェクトを作成することで可能です。
これで構築したモデルをプッシュする準備ができました。
次のコマンドを使用すると、/opt/data ディレクトリのコンテンツが meta/llama-3-8b-instruct という新しいリポジトリにプッシュされます。
1 2 3 |
cd /opt/data pais models push --modelName meta/llama-3-8b-instruct --modelStore harbor-repo paih.vmware.com/model-gallery --tag approved |
同じモデル名に再度プッシュすると、希望に応じてタグ付けできるモデルの新しいリビジョンが作成されます。各リビジョンは完全性を維持するために、一意のダイジェストを付与されます。
次のコマンドを使用すると、モデルのリストを作成できます。
1 |
pais models list --modelStore harbor-repo-paih.vmware.com/model-gallery |
モデルのリビジョンもリストアップできます。
Harbor でこの Model Gallery と制御アクセス、イメージへの署名、CI/CD との統合などを確認できます。
新しい Deep Learning VM で Llama3 を自動実行
いくつかのモデルを設定した Model Gallery で、開発者または ML 運用チームにアクセス権を直接付与できます。ここで開発者または ML 運用チームは、VCF Automation で Triton Inference Server のセルフサービス タイルを使用して、すでに Triton を実行中の Deep Learning VM をリクエストできます。
このデモでは基本の triton テンプレートを編集し、デフォルトで実行されている trtllm エンジンで Triton イメージを使用しました。これは、黄色にハイライトされた行をアップデートすることで行えます。
デプロイが完了すると以下を実行することで、Triton がすでに実行中で GPU を使用していることを確認できます。
1 2 3 4 5 |
# GPU がそれを使用するプロセスを含めどのように実行されているか確認 nvidia-smi # 実行中のコンテナを調査 docker ps |
次に、開発者は Deep Learning VM が Model Gallery を信頼していることを確認する必要があります。上のセクションと同じ手順を実行し、レジストリの証明書を追加して Docker にログインします。 ただしこれは、デプロイ時に cloud-init の一部として証明書を設定することで自動化できます。
そして、model-repository ディレクトリを vmware ユーザーによって所有されるようにします。
1 |
sudo chown vmware /home/vmware/model_repository |
最後にモデルを直接プルします。
1 |
pais models pull --modelStore harbor-repo-paih.vmware.com/model-gallery --modelName meta/llama-3-8b-instruct --tag approved |
Triton が Poll Mode で実行しているため、モデルがロードされたことを確認できます。
1 |
docker logs <container-id> |
これで、開発者は triton API を使用して POST リクエストを実行することができ、一連の作業は無事終了です。
以上で 2024 年の VMware Explore で行ったデモの解説を終わりますが、Model Gallery で行えることはほかにも多くあります。モデルを OCI と互換性のある形式で保存したら、CI/CD プロセスを追加して、生成 AI アプリケーションとともにモデル ランタイムの統合とデプロイを自動化することができます。