はじめに
現在、NVIDIAが提供するNVIDIA AI Blueprint for Video Search and Summarization(以下、VSS)が注目を集めています。VSSは、動画ファイルやカメラ映像をAIの力で“分析・要約・検索”できるようにするプラットフォームで、さまざまな産業・用途での活用が見込めます。また、「オンプレミスでAIビデオ分析が可能」という特徴もあり、この点にも関心が集まっています。
※VSSの概要についてはこちらの記事(NVIDIAの最新AIビデオ分析ソリューション:NVIDIA AI Blueprint for VSS入門)にてご紹介しております。
VSSは複数のデプロイ方法が用意されており、最小のオンプレミスでのデプロイは、NVIDIA RTX PRO™ 6000 Blackwell GPUカード1枚またはNVIDIA H100 GPUカード1枚からサポートしています(以下、シングルGPUデプロイ)。しかし、実際にシングルGPUデプロイでVSSを試すと、違和感のある日本語が出力されるケースがあります。
その一因として、シングルGPUデプロイの際にデフォルトで使用されるLLMのモデルサイズが比較的小さい点が挙げられます。VSSを実運用する際には、自然な日本語の出力が可能なLLMを使用することでユーザビリティの向上が見込めます。
そこで本記事では、オンプレミスで動作するVSSにおいて、より自然な日本語の出力を目的に、複数のGPUを搭載した環境で、デフォルトのLLMをモデルサイズが大きく多言語性能が比較的安定しているLLMに変更する方法について解説します。
この記事のゴールと対象
ゴール
VSSをオンプレミスで動かす際に、デフォルトのLLMを変更し、かつ複数GPUを使ったデプロイの方法が理解できる。
対象
- VSSの導入に興味のある方
- VSSのオンプレミスでのデプロイに興味のある方
- VSSで自然な日本語を扱えるようにしたい方
本記事で扱う範囲
- VSSをオンプレミスでデプロイする方法
- VSSのオンプレミスでのデプロイにおいてデフォルトのLLMを変更する方法
- VSSのオンプレミスでのデプロイで複数GPUを用いる方法
実行環境
ハードウェア
NVIDIA RTX PRO 6000 Blackwell Max-Q Workstation Editionを2枚搭載したワークステーション
※VSSのオンプレミスでのデプロイに必要なプラットフォームの情報は、こちらをご覧ください。:Supported Platforms — Video Search and Summarization Agent
LLMモデル
openai/gpt-oss-120b:gpt-oss-120b Model by OpenAI | NVIDIA NIM
前提条件
- Ubuntu 22.04
- NVIDIA driver:580.65.06以上
- CUDA:13.0以上 (CUDAドライバーはNVIDIAドライバーと同時にインストールされます)
- NVIDIA Container Toolkit:1.13.5以上
- Docker:27.5.1以上
- Docker Compose:2.32.4
- nvidia-smiコマンドで、搭載している全てのGPU(今回は2枚)が確認できている
※VSSバージョン2.4.1時点での情報です。適宜最新バージョンをご確認ください。:Release Notes — Video Search and Summarization Agent
手順
本構成ではGPUの役割分担を以下のようにしています。
・GPU0:Embeddingモデル / Rerankerモデル / VLM / VSSエンジン
・GPU1:変更したLLM(gpt-oss-120b)
※本記事では nvidia-smi の表示順を基準に GPU0 / GPU1 を指定しています。
以下は、GPU2枚を使用してVSSをオンプレミスでデプロイする手順の概要です。
- GithubからVSSのリポジトリをクローン(初回のみ)
- NGCにログイン(初回のみ)
- config.yamlを修正(初回のみ)
- envファイルの追記・修正(初回のみ)
- 環境変数の設定
- LLMをGPU1でデプロイ
- Embedding NIMをGPU0でデプロイ
- Reranker NIMをGPU0でデプロイ
- VSSエージェント(VLMを含む) をGPU0でデプロイ ※VLM = Vision Language Model
- (必要に応じて)コンテナログから起動確認
※さらに詳しい情報・その他のデプロイ方法に関しては、NVIDIA公式のVSSドキュメント(Deploy Using Docker Compose X86 — Video Search and Summarization Agent)をご覧ください。
以下に、手順を1ステップずつ解説していきます。
※初回はモデルのダウンロードが入ります。
※本手順では local_deployment_single_gpuをベースにしていますが、Dockerのオプションにより、実際には複数GPUを使った構成としています。
ステップ①:VSSリポジトリをGitHubからクローン(初回のみ)
まず、VSSの公式リポジトリ(NVIDIA-AI-Blueprints/video-search-and-summarization: Blueprint for Ingesting massive volumes of live or archived videos and extract insights for summarization and interactive Q&A)をローカル環境に取得します。
git clone https://github.com/NVIDIA/video-search-and-summarization.git
ステップ②:NGC にログイン(初回のみ)
NIMのDockerコンテナを使用するために、NGCのAPIキーを設定します。
「Username」には「$oauthtoken」を、「Password」には「NGCのAPIキー」を入力してください。
※NGCのAPIキーをお持ちでない場合は、こちら(GPU-optimized AI, Machine Learning, & HPC Software | NVIDIA NGC)のWebページの右上「Welcome Guest」→「Sign In / Sign Out」からアカウント作成・ログインのうえ、「Setup」 →「Generate API Key」 → 「Generate Personal Key」でキーを作成してください。
※ログアウトしてしまった場合は、再度ログインしてください。
# NGCのAPIキーをパスワードに入れてログイン
docker login nvcr.io
Username: $oauthtoken
Password: <PASTE_API_KEY_HERE>
ステップ③:config.yaml を修正(初回のみ)
VSS全体の構成と依存関係を定義しているconfig.yamlを修正します。
具体的には、デフォルトで設定されているLLMのモデル名(meta/llama-3.1-8b-instruct)の記載がある部分を、openai/gpt-oss-120bに変更します。
# ディレクトリ移動
cd video-search-and-summarization/deploy/docker/local_deployment_single_gpu
# config.yaml内のLLMモデル名記載部分を変更
#変更前
chat_llm:
type: llm
params:
model: meta/llama-3.1-8b-instruct #ここを変更
base_url: "http://host.docker.internal:8007/v1"
max_tokens: 2048
temperature: 0.2
top_p: 0.7
summarization_llm:
type: llm
params:
model: meta/llama-3.1-8b-instruct #ここを変更
base_url: "http://host.docker.internal:8007/v1"
max_tokens: 2048
temperature: 0.2
top_p: 0.7
notification_llm:
type: llm
params:
model: meta/llama-3.1-8b-instruct #ここを変更
base_url: "http://host.docker.internal:8007/v1"
max_tokens: 2048
temperature: 0.2
top_p: 0.7
#変更後
chat_llm:
type: llm
params:
model: openai/gpt-oss-120b #変更済み
base_url: "http://host.docker.internal:8007/v1"
max_tokens: 2048
temperature: 0.2
top_p: 0.7
summarization_llm:
type: llm
params:
model: openai/gpt-oss-120b #変更済み
base_url: "http://host.docker.internal:8007/v1"
max_tokens: 2048
temperature: 0.2
top_p: 0.7
notification_llm:
type: llm
params:
model: openai/gpt-oss-120b #変更済み
base_url: "http://host.docker.internal:8007/v1"
max_tokens: 2048
temperature: 0.2
top_p: 0.7
ステップ④:envファイルの追記・修正(初回のみ)
local_deployment_single_gpuディレクトリ内の.envファイルに以下の内容を追記します。
※VLMとしてCosmos-Reason2を使用する際に Hugging Face のアクセストークンが必要になります。
※Hugging Faceのアクセストークンをお持ちでない場合は、Hugging Faceでアカウント登録のうえ取得してください。
NGC_API_KEY=abc123*** #NGCのAPIキー
HF_TOKEN=hf_*** #Hugging FaceのAPIキー
ステップ⑤:環境変数の設定
以下のコマンドを実行します。
# NGC APIキーを設定
export NGC_API_KEY=<PASTE_API_KEY_HERE>
# NIMキャッシュディレクトリを設定
export LOCAL_NIM_CACHE="$HOME/.cache/nim"
ステップ⑥:LLMをGPU1でデプロイ
--gpus "device=1"のオプションを付けることで、GPU1を使うことを指定します。
docker run -d -u "$(id -u)" -it --gpus "device=1" --shm-size=16GB -e NGC_API_KEY="$NGC_API_KEY" -v "$LOCAL_NIM_CACHE:/opt/nim/.cache" -p 8007:8000 nvcr.io/nim/openai/gpt-oss-120b:latest
ステップ⑦:Embedding NIMをGPU0でデプロイ
--gpus "device=0"のオプションを付けることで、GPU0を使うことを指定します。
docker run -d -u "$(id -u)" -it --gpus "device=0" --shm-size=16GB -e NGC_API_KEY="$NGC_API_KEY" -v "$LOCAL_NIM_CACHE:/opt/nim/.cache" -p 8006:8000 -e NIM_SERVER_PORT=8000 -e NIM_MODEL_PROFILE="f7391ddbcb95b2406853526b8e489fedf20083a2420563ca3e65358ff417b10f" -e NIM_TRT_ENGINE_HOST_CODE_ALLOWED=1 nvcr.io/nim/nvidia/llama-3.2-nv-embedqa-1b-v2:1.9.0
ステップ⑧:Reranker NIMをGPU0でデプロイ
--gpus "device=0"のオプションを付けることで、GPU0を使うことを指定します。
docker run -d -u "$(id -u)" -it --gpus "device=0" --shm-size=16GB -e NGC_API_KEY="$NGC_API_KEY" -v "$LOCAL_NIM_CACHE:/opt/nim/.cache" -p 8005:8000 -e NIM_SERVER_PORT=8000 -e NIM_MODEL_PROFILE="f7391ddbcb95b2406853526b8e489fedf20083a2420563ca3e65358ff417b10f" nvcr.io/nim/nvidia/llama-3.2-nv-rerankqa-1b-v2:1.7.0
ステップ⑨:VSSエージェント(VLMを含む) をGPU0でデプロイ
カレントディレクトリがlocal_deployment_single_gpuであることを確認して、以下のコマンドを実行します。
docker compose up -d
ステップ⑩:(必要に応じて)コンテナログから起動確認
ステップ⑨のコマンドを実行した後、以下のコマンドでコンテナのログを確認できます。
local_deployment_single_gpu-via-server-1のログを見て、Started server processが見えたら、http://<内部IPアドレス>:9100 か、http://localhost:9100 からGUIにアクセスできます。
docker logs -f local_deployment_single_gpu-via-server-1
VSS GUI 起動時の画面イメージ
停止
VSSを停止する際には、以下のコマンドでコンテナを停止/削除します。
# ディレクトリ移動
cd video-search-and-summarization/deploy/docker/local_deployment_single_gpu
# VSSエージェント(VLMを含む) を停止/削除
docker compose down
# LLM、Embedding NIM、Reranker NIMのコンテナを停止
docker stop <コンテナ名 または コンテナID>
# (必要に応じて)LLM、Embedding NIM、Reranker NIMのコンテナを削除
docker rm <コンテナID>
シェルスクリプトにまとめて効率化
前章で解説した各コマンドは、シェルスクリプト形式にしてまとめて実行できるようにしておくと、起動/停止時の手間を省くことができます。
※モデルをダウンロードする必要がある関係で、初回のデプロイはシェルスクリプトの実行ではなく、手順で解説したコマンドを1つずつ実行してください。
おわりに
本記事が、VSS利活用への一助となれば幸いです。
VSSでは、LLMの出力品質がそのままユーザビリティに影響します。
より自然な日本語を扱えるLLMを採用することで、映像検索や要約結果の理解が容易になり、ユーザーとのインタラクション品質が向上します。
さらに、日本語表現の幅が広がることで、プロンプト設計や調整がしやすくなり、用途に応じた改善や運用の柔軟性が高まる点も実運用上のメリットと言えます。
マクニカでは、VSSの導入支援やGPUワークステーションの選定・サポートも行っています。
導入をご検討される際は、下部のお問い合わせボタンよりお問い合わせください。