
こんにちは。SB C&S の村上です。
この記事ではNVIDIA社が提供しているNeMo Guardrailsの展開の流れを紹介します。
以下URLのNeMo Guardrailsの紹介をお読みでない方は、ぜひ先にそちらを閲覧ください。
NVIDIA NeMo Guardrailsの紹介
環境準備
本記事で紹介する展開方法では、環境の前提として以下4つの準備が必要です。
- Kubernetes Cluster (GPU無し)
- 作業用Linux (kubectlとhelmをインストール済み)
- Postgre SQL サーバー
- 評価対象とするLLMエンドポイント
Kubernetes Cluster
まずKubernetes Clusterは、NeMo Guardrailsのコンポーネント群の展開先となります。
NeMo Guardrailsは、NeMo Microservicesと呼ばれるAI向けマイクロサービス群の一部として提供されています。
NeMo Microservicesは利用したい機能に応じて必要なマイクロサービスが自動で展開されるようになっており、NeMo Guardrailsを利用する場合は以下4つが自動で展開されます。
- NeMo Guardrails
- NeMo Guardrailsの本体
- NIM Proxy
- 複数LLMに対する統一のエンドポイント
- NeMo Deployment Management
- 外部LLMをNIM Proxyに登録
- 新しいNIMの展開も可能
- NIM Operator
- Guardrailsのデプロイメントやエンドポイントの作成
Kubernetes Clusterで必要なリソース要件は以下メーカードキュメントをご確認ください。
https://docs.nvidia.com/nemo/microservices/latest/requirements.html#nemo-guardrails
作業用Linux
作業用LinuxはNeMo Guardrails展開の操作用です。必要な最低限の準備としては、kubectlで前述のKubernetes Clusterへ接続できることと、Helmがインストール済みで実行可能なことです。
※NeMo Microservicesは、Guardrailsに限らずHelmと呼ばれるKubernetesのパッケージマネージャーを用いてインストールします
PostgreSQLサーバー
PostgreSQLサーバーは、前述のNeMo Guardrailsの各コンポーネントが、データの保存先として利用されます。名称は任意ですが、最低限1つDBを作成しておく必要があります。
本記事では以下のDBを作成済みとして進めます。
- nemo-gr
LLMエンドポイント
LLMエンドポイントは、評価対象としたいLLMの推論サーバーのURLです。
本記事ではNVIDIA NIMでSwallow8B (tokyotech-llm/llama-3.1-swallow-8b-instruct) を事前に展開済みです。
NVIDIA NIMについては以下記事をご参照ください。
展開の実行
それでは展開を進めていきます。
まずKubernetes上に、展開先の名前空間を作成します。
本記事ではnemo-evという名称で作成します。
kubectl create namespace nemo-gr
続いて、必要な認証情報として以下2つの環境変数を設定します。
- NGC_API_KEY
- POSTGRES_PASS
NGCのAPIキーはNVIDIAのNGCのサイトから発行可能です
https://org.ngc.nvidia.com/setup/api-keys
また、利用するPostgreSQLのユーザーの認証情報も必要となります。権限としては対象のDBに対してのテーブルやインデックスの作成ができる状態であれば問題ないです。
コマンド例は以下です。
export NGC_API_KEY={NGCのAPIキー}
export POSTGRES_PASS={PostgreSQLのユーザーパスワード}
続いて先ほど用意した環境変数を用いて、以下コマンドでKubernetes上のコンテナが認証情報を扱えるようにSecretの作成を行います。
※usernameは、$oauthtokenで固定となります
kubectl create secret -n nemo-gr docker-registry nvcrimagepullsecret \
--docker-server=nvcr.io \
--docker-username='$oauthtoken' \
--docker-password=$NGC_API_KEY
kubectl create secret -n nemo-gr generic nemo-ext-pg \
--from-literal=password=$POSTGRES_PASS
続いて、HelmのリポジトリにNeMo Microservicesの登録を行います。ここで用いられる認証情報もNGCのものとなるため、パスワードはNGCのAPIキーを環境変数から利用します。
helm repo add nmp https://helm.ngc.nvidia.com/nvidia/nemo-microservices \
--username='$oauthtoken' \
--password=$NGC_API_KEY
helm repo update
続いて、インストール用のvalueファイルを作成します。
Helmではvalueというyaml形式のファイル内のパラメータに準拠して各コンポーネントの設定や展開が行われます。固有の設定を入れ込む場合は、helm installコマンドの「-f」オプションでこのファイルを指定する必要があります。
本記事では以下のような構成で、values-guardrails.yamlという名称でファイルを作成して進めます。
※PostgreSQLの情報やNeMo Guardrailsに絞って展開するといった情報を指定しています。
※PostgreSQLのIPアドレスやポート番号、ユーザー名は環境に合わせて記載します。
なお、注意点としてGuardrailsには外部からのアクセスが必要となります。本記事上ではServiceのタイプをLoadBalancerにしていますが、Ingressなどをお使いの場合はLoadBalancerの記載は不要となります。
existingSecret: ngc-api
existingImagePullSecret: nvcrimagepullsecret
tags:
platform: false
guardrails: true
guardrails:
postgresql:
enabled: false
externalDatabase:
host: "{PostgreSQLのIPアドレス}"
port: "{PostgreSQLのポート番号}"
user: "{PostgreSQLのユーザー名}"
database: "nemo-gr"
sslMode: "disable"
existingSecret: "nemo-ext-pg"
existingSecretPasswordKey: "password"
service:
type: LoadBalancer
deployment-management:
service:
type: LoadBalancer
これにて展開の準備は完了です。
最後に以下コマンドを実行して展開を実施します。
※versionのパラメータは利用したいNeMo Microservicesのバージョンとなり、本手順では25.10.0を利用しています
helm install guardrails nmp/nemo-microservices-helm-chart \
--version 25.10.0 \
-f values-guardrails.yaml \
-n nemo-gr
実行が完了したら、以下コマンドで無事にPodが展開されていることが確認できれば完了です。
kubectl get pods -n nemo-gr
NAME READY STATUS
guardrails-5cb7766769-cfs8g 1/1 Running
guardrails-deployment-management-797878cf58-gm6fn 1/1 Running
guardrails-nim-operator-7df8c78f9f-4tvjm 1/1 Running
guardrails-nim-proxy-8b88d588b-jgzhp 1/1 Running
以上がNeMo Guardrailsの展開の流れとなります。
まとめ
本記事ではNeMo Guardrailsの展開の流れを紹介しました。
必要な準備物が多く、Kubernetesが出てくる関係上、見慣れないコマンドも多々あったかと思います。ただし事前の環境準備さえしてあれば手順としては少なく、スムーズに展開できます。
次回は展開した後の話として、NeMo Guardrailsを用いて回答制御する様子を見ていきます。
他のおすすめ記事はこちら
著者紹介
SB C&S株式会社
ICT事業本部 技術本部 技術統括部
第2技術部 1課
村上 正弥 - Seiya.Murakami -
VMware vExpert
