GenerativeAIExamples は Retrieval Augmented Generation (検索拡張生成もしくは RAG) を用いたチャットボットのサンプルや生成 AI モデルの LoRA を使ったファインチューニングや推論のサンプル等いくつかのサンプルを Github 上で提供しています。この Examples は DockerCompose のコマンドで簡単にデプロイする事が可能です。
LLM 推論を試す際にローカルに GPU を用意し、それを用いる方法がありますが、NVIDIA API カタログを使用することによってローカルに GPU を用意せずに LLM を簡単に試すことができます。ただし Vector Database は GPU を使用しないものを選択する必要があります。
本記事では GenerativeAIExamples と NVIDIA API カタログを用いて LLM と Retrieval Augmented Generation を組み合わせたアプリケーションを簡単にデプロイする方法について記述します。
GenerativeAIExamples
Retrieval Augmented Generation (RAG) に関しては「NeMo Retriever を使って Embedding モデルを簡単デプロイ」に説明があるのでご參照ください。GenerativeAIExamples はこの Retrieval Augmented Generation (RAG) のサンプルを OSS で提供しています。また Triton Inference Server による推論サーバーの立ち上げをサポートしており、モデルによっては TensorRT-LLM による LLM の最適化にも対応しているため、GPU の性能を最大限活用することができます。Vector Database は Milvus、 pgvector、FAISS が使用できます。Milvus、FAISS は GPU サポートがあるため、GPU を活用した Vector DB 検索ができます。
用意されているサンプルの一覧を下記に示します。GenerativeAIExamples (tag v0.6.0) の README の一部を抜粋しています。NVIDIA Endpoints は NVIDIA API カタログでサポートされていることを意味しています。
Model | Embedding | TRT-LLM | NVIDIA Endpoints | Triton | Vector Database |
mixtral_8x7b | ai-embed-qa-4 | No | Yes | Yes | Milvus or pgvector |
llama-2 | e5-large-v2 | Yes | No | Yes | Milvus or pgvector |
llama-2 | ai-embed-qa-4 | No | Yes | Yes | Milvus or pgvector |
mixtral_8x7b | ai-embed-qa-4 | No | Yes | Yes | FAISS |
llama-2 | ai-embed-qa-4 | Yes | No | Yes | Milvus or pgvector |
llama3-70b | none | No | Yes | No | none |
また RAG の評価、モニタリングのサンプルも用意しています。
NVIDIA NIM
NVIDIA NIM は AI 推論を最適化したソフトウェアです。NIM の主要な利點を以下に示します。
どこでもデプロイ可能
NIM は移植性と制御性を重視して設計されており、ローカルのワークステーションからクラウド、オンプレミスのデータ センターまで、さまざまなインフラへのモデルのデプロイに対応しています。デプロイ先には NVIDIA DGX、NVIDIA DGX Cloud、NVIDIA 認定システム、NVIDIA RTX ワークステーションや、PC が含まれます。
業界標準の API を使用した開発
開発者は各ドメインの業界標準に準拠した API を使って AI モデルにアクセスできるため、AI アプリケーションの開発がシンプルになります。これらの API はエコシステム內の標準的なデプロイ プロセスとの互換性が確保されているため、開発者は AI アプリケーションの更新を迅速に行うことができ、ほとんどの場合、更新に必要なコードはわずか 3 行程度です。
ドメイン固有のモデルの活用
NIM はいくつかの主要な機能を通じて、ドメイン固有のソリューションやパフォーマンス最適化のニーズにも対応します。NIM のパッケージには、ドメイン固有の NVIDIA CUDA ライブラリや、言語、音聲、動畫処理、ヘルスケアなどの様々なドメインに合わせたカスタムのコードが含まれます。これらを利用することで、アプリケーションを特定のユース ケースに対応させ、正確に機能させることができます。
最適化された推論エンジンでの実行
NIM はモデルとハードウェア構成ごとに最適化された推論エンジンを活用して、高速なインフラ上で可能な限りの低レイテンシと高いスループットを提供します。これにより、推論ワークロードの実行にかかるコストを抑え、エンド ユーザーの體験を高めることができます。最適化されたコミュニティ モデルがサポートされているほか、開発者はデータ センターの境界から決して出せない獨自のデータ ソースを使ってモデルのアライメントやファインチューニングを行い、さらに高い精度とパフォーマンスを実現することができます。
エンタープライズ グレードの AI のサポート
NVIDIA AI Enterprise は以下の特徴を持った製品ですが、NIM はその一部として提供されます。
- エンタープライズグレードのベースコンテナで構築されており、高い安定性と信頼性
- 長期のライフサイクルを提供する Production Branch (ブロダクション ブランチ) / Long Term Support Branch (長期サポートブランチ)
- サービス レベル契約に基づいたエンタープライズ サポートの提供
- 定期的なセキュリティアップデートで CVE に対応
NVIDIA AI Enterprise を通じて、カスタマイズされた AI アプリケーションを効率的かつ拡張性の高い形で本番環境に導入できます。
NVIDIA API カタログ
NVIDIA API カタログ は LLM や Multimodal モデルから RAG の為の Embedding モデルまで多様なモデルを GUI もしくは API 経由で試せるサービスになります。API は OpenAI の API との互換性があるため 共通の API で使用できます。
巨大な LLM の推論に は高スペックの GPU が必要ですが、NVIDIA API カタログを使用することでローカルに GPU を準備する必要なく、簡単に検証できます。
一般的な SaaS 型のサービスと比べ、Llama3 や Mixtral などオープンなモデルを試せるため、必要な生成 AI モデルを検証してから自社プラットフォーム (オンプレミス、クラウドなど) で使用するための生成 AI モデルを選択できます。
例えば LLM であれば下記のようなモデルが提供されています。2024 年 5 月 1 日時點で Llama3 が追加されています。

NVIDIA API カタログは下記の特徴があります。
- 高速化された AI インフラにアクセスできます。AI インフラの高速化に NVIDIA NIM を活用しています。
- アップロードしたデータはモデルの學習には使用されません。
- 1,000 回まで無料で試すことができます。

GenerativeAIExamples + NVIDIA API カタログ チュートリアル
本記事では GenerativeAIExamples と NVIDIA API カタログを使用して LLM に Retrieval Augmented Generation をデプロイします。
本チュートリアルでの手順は以下の通りです。
- GenerativeAIExamples のダウンロード
- NVIDIA API カタログの API キーの取得
- Retrieval Augmented Generation (RAG) のデプロイ
また、今回のチュートリアルの検証環境は以下の條件で行っています。
ハードウェア
- GPU: NVIDIA RTX A5000 (2 基)1
- CPU: Intel(R) Xeon(R) W-2145 CPU @ 3.70GHz
- システム メモリ: 64GB
ソフトウェア
- OS: Ubuntu 20.04.6
- Docker: 26.1.0
- NVIDIA-Driver:550.54.14
- CUDA: 12.4
- NVIDIA Container Toolkit: 1.15.0
- GenerativeAIExamples: tag v0.6.0
GenerativeAIExamples のハードウェア要件は Support Matrix にあります。本記事は NVIDIA API カタログで LLM と Embedding モデルが動作するので必要なハードウェア要件は異なります。動作確認には NVIDIA Driver と NVIDIA Container Toolkit が必要になるのでインストールしておきます。
GenerativeAIExamples のダウンロード
「NVIDIA API カタログの利用」を參考にセットアップします。
下記のようなアーキテクチャで Retrieval Augmented Generation (RAG) がセットアップされます。

セットアップされるモデル、Vector Database、NVIDIA ソフトウェアは下記です。
Model | Embedding | Framework | Description | Multi-GPU | TRT-LLM | Model Location | Triton | Vector Database |
ai-mixtral-8x7b-instruct | ai-embed-qa-4 | Langchain | QA chatbot | NO | NO | API Catalog | NO | Milvus |
下記コマンドで GenerativeAIExamples をタグ v0.6.0 を指定してダウンロードします。
sudo apt -y install git-lfs
git clone https://github.com/NVIDIA/GenerativeAIExamples.git -b v0.6.0
cd GenerativeAIExamples/
git lfs pull
NVIDIA API カタログの API キーの取得
NVIDIA NIM API にアクセスします。
Mixtral 8x7B Instruct カードをクリックします。

API キーを取得します。

[Generate Key] をクリックします。

[Copy Key] をクリックし、API キーを保存しておきます。 キーは “nvapi” で始まります。

Retrieval Augmented Generation (RAG) のデプロイ
先ほどダウンロードした Generative AI examples リポジトリ上でモデル エンドポイントの API キーを設定します。
export NVIDIA_API_KEY="nvapi-<...>"
デプロイで使用する rag-app-api-catalog-text-chatbot.yaml の一部を確認します。
APP_LLM_MODELENGINE と APP_EMBEDDINGS_MODELENGINE で “nvidia-ai-endpoints” が指定されており、LLM と Embedding モデルが NVIDIA API カタログを使用していることが確認できます。
ローカルでは LLM と Embedding モデルに関するコンテナーは立ち上がらないので、必要な計算リソースが少なくて済みます。
APP_LLM_MODELNAME: ${APP_LLM_MODELNAME:-ai-mixtral-8x7b-instruct}
APP_LLM_MODELENGINE: nvidia-ai-endpoints
APP_LLM_SERVERURL: ${APP_LLM_SERVERURL:-""}
APP_EMBEDDINGS_MODELNAME: ${APP_EMBEDDINGS_MODELNAME:-ai-embed-qa-4}
APP_EMBEDDINGS_MODELENGINE: nvidia-ai-endpoints
APP_EMBEDDINGS_SERVERURL: ${APP_EMBEDDINGS_SERVERURL:-""}
下記コマンドでコンテナーをビルドします。
$ docker compose --env-file deploy/compose/compose.env -f deploy/compose/rag-app-api-catalog-text-chatbot.yaml build
下記コマンドでコンテナーを起動します。
$ docker compose --env-file deploy/compose/compose.env -f deploy/compose/rag-app-api-catalog-text-chatbot.yaml up -d
出力例は下記です。
? Network nvidia-rag Created
? Container chain-server Started
? Container rag-playground Started
Milvus Vector Database を起動します。
$ docker compose --env-file deploy/compose/compose.env -f deploy/compose/docker-compose-vectordb.yaml up -d milvus
出力例は下記です。
? Container milvus-minio Started
? Container milvus-etcd Started
? Container milvus-standalone Started
ブラウザーから http://localhost:8090/ にアクセスします。

DGX B200 について聞きました。”Could you tell me about ‘NVIDIA DGX B200’?” と UI 下部のテキスト入力欄に入力し、[Submit] をクリックします。すると、”推論ワークロードに最適化された NVIDIA T4 GPUを搭載したDGX B200”という回答をし、まとはずれな回答をしていることが確認できます。

Retrieval Augmented Generation (RAG) に使用するためのドキュメントである NVIDIA DGX B200 Datasheet から pdf をダウンロードしておきます。
ページにアクセスし、右上のボタンを押すとダウンロードできます。

[Knowledge Base] をクリックします。

先程、取得した pdf を UI 上部の [Add File] からアップロードします。

右上の [Converse] をクリックし、元の UI に戻り、[Use knowledge base] をチェックすることで先程アップロードした pdf ファイルを使用して回答するようになります。
[Show Context] をクリックするとドキュメントのどの部分を參照しているか確認できます。

先ほどと同じ質問をしてみます。回答は先程より改善されており、[Knowledge Base Context] にドキュメントのどの部分を參照しているかも確認できます。

まとめ
GenerativeAIExamples と NVIDIA API カタログを用いて LLM に Retrieval Augmented Generation をデプロイする方法を紹介しました。Retrieval Augmented Generation (RAG) を試すのに高スペックなハードウェアを必要としないことは利點だと思います。
注意點として API は利用に制限があります。本格的に利用される場合は LLM を動作するのに必要なハードウェアを用意して頂き NVIDIA NIM を使用して頂く必要があります。
NVIDIA API カタログは內部で NVIDIA NIM を利用しています。本記事の內容で検証されたあとに本格的な Retrieval Augmented Generation (RAG) の利用を検討される場合は NVIDIA NIM も組み合わせて使っていただけると幸いです。
- Milvus はローカルに GPU がないとインストールに失敗する為、GPU を用意する必要があります。ただし今回の検証では “ai-mixtral-8x7b-instruct” および “ai-embed-qa-4” は API カタログ経由の実行となっており、ローカルの GPU が使用される訳ではありません。 ??