holoscan-install-container
NVIDIA/skills
NGCから公式のHoloscan SDKコンテナを取得・確認し、ホストGPUに適したCUDA/アーキテクチャタグを選択した上で、同梱されているPythonおよびC++のサンプルプログラムを用いて動作確認を行ってください。
...すべて拡張しますHoloscan NGC コンテナの設置
目的
NGC(nvcr.io/nvidia/clara-holoscan/holoscan)から公式のHoloscan SDKコンテナを取得・検証し、ホストGPUに適したCUDA/アーキテクチャタグを選択し、同梱されているPythonおよびC++のサンプルプログラムで動作確認を行います。
前提条件
- NVIDIA GPU と正常に動作するドライバー(
nvidia-smi)が搭載された Linux ホスト。 - Dockerがインストールされており、ユーザーが
dockerグループに所属していること(またはsudo権限を持っていること)。 - NVIDIA Container Toolkit がインストールされていること(`
docker run --gpus all` が実行可能であること)。 - イメージのプル用に約10~20 GBの空きディスク容量。
nvcr.ioおよびdocs.nvidia.comへのネットワークアクセス。
制限事項
- コンテナイメージは、以下のタグマトリックスのみを対象としています。内部には Conda/pip 環境は含まれていません。
- GUI のサンプルでは X11 フォワーディングが必要ですが、このスキルではそれを回避するために Holoviz をヘッドレスで実行します。
- タグのサフィックスは、ホストの GPU/ドライバー(cuda13 / cuda12-dgpu / cuda12-igpu)と一致している必要があります。サフィックスが間違っていると、CUDA の初期化に失敗します。
手順
- コンテナリポジトリ:
nvcr.io/nvidia/clara-holoscan/holoscan。 - https://docs.nvidia.com/holoscan/sdk-user-guide/sdk_installation.html のドキュメントページが公式です。以下の内容と矛盾する場合は、そちらを参照してください。
- 以下の手順を順番に実行してください:タグの選択、GPUパススルーの確認とプル、6つのサンプルによる検証、そして起動コマンドの引き継ぎ。
ステップ 1: タグの選択
タグ = 、例:v4.1.0-cuda13。上記のドキュメントページから現在の SDK バージョンを確認し、nvidia-smi(テーブルヘッダーの右上にある「CUDA Version」フィールド)からサフィックスを選択してください:
nvidia-smiCUDA Version |
サフィックス |
|---|---|
| 13.x+ | cuda13 |
| 12.x、Ampere/Ada dGPU | cuda12-dgpu |
| 12.x、ARM64 iGPU (nvgpu) | cuda12-igpu |
コンテナが、ホストドライバがサポートするバージョンよりも新しい CUDA マイナーバージョンを搭載している場合、「CUDA 前方互換モードが有効」というバナーが表示されますが、これはエラーではありません。前方互換シムにより、コンテナの CUDA ランタイムは、同じメジャーバージョン内の古いホストドライバでも動作するようになります。
ステップ 2: GPU パススルーを確認してからプルする
docker run --rm --gpus all ubuntu:22.04 nvidia-smi 2>&1 | tail -5
Docker がインストールされていない場合 → https://docs.docker.com/engine/install/ からインストールしてください。 GPUパススルーに失敗した場合 → https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html に従って NVIDIA Container Toolkit をインストールしてから、再試行してください。
プル(約10~20 GB — 開始前にユーザーに警告してください):
docker pull nvcr.io/nvidia/clara-holoscan/holoscan:
ステップ 3: 6 つのサンプルで検証
テストの対象:Python バインディングのみ (1a)、C++ ランタイムのみ (1b、2a)、Python + Holoviz/Vulkan (2b、3a)、および C++ + Holoviz/Vulkan (3b)。 Holovizのサンプルは常にヘッドレスで実行されます(YAMLに`headless: true`を指定)。これにより、ディスプレイが接続されているかどうかにかかわらず動作し、SSH経由でのGUIの障害モードを回避できます。
IMG=nvcr.io/nvidia/clara-holoscan/holoscan:
RUN=(docker run --rm --runtime=nvidia --gpus all --cap-add CAP_SYS_PTRACE --ipc=host --ulimit memlock=-1 --ulimit stack=67108864)
# 1a. hello_world (Python) — 「Hello World!」と表示されることを期待
"${RUN[@]}" "$IMG" bash -c \
"ulimit -s 32768 && python3 /opt/nvidia/holoscan/examples/hello_world/python/hello_world.py"
# 1b. hello_world (C++) — 「Hello World!」が出力されることを期待
"${RUN[@]}" "$IMG" bash -c \
"ulimit -s 32768 && /opt/nvidia/holoscan/examples/hello_world/cpp/hello_world"
# 2a. tensor_interop (C++) — 各パスごとにテンソルが倍増すること、および「Graph execution finished.」と表示されることを期待
"${RUN[@]}" "$IMG" bash -c \
"ulimit -s 32768 && /opt/nvidia/holoscan/examples/tensor_interop/cpp/tensor_interop"
# 2b. tensor_interop (Python、10フレーム) — Holoviz、ヘッドレス。YAMLにはデフォルトで
# headlessフィールドがないため、`holoviz:`の下に追加してください。
# "message received (count: 10)" が表示されることを期待します。
"${RUN[@]}" "$IMG" bash -c "
ulimit -s 32768
sed -e 's/count: 0/count: 10/' \
-e 's/repeat: true/repeat: false/' \
-e 's/realtime: true/realtime: false/' \
-e 's/^holoviz:/holoviz:\n headless: true/' \
/opt/nvidia/holoscan/examples/tensor_interop/python/tensor_interop.yaml > /tmp/ti.yaml
cd /opt/nvidia/holoscan/examples/tensor_interop/python
python3 tensor_interop.py --config /tmp/ti.yaml
"
# 3a. video_replayer (Python, 10 フレーム) — Holoviz、headless。`holoviz:` の下(`width: 854` の上)に `headless: true` を挿入してください。
# 3b の C++ YAML に対しても同じ sed コマンドが有効です —
# 両方のファイルは同じ `holoviz:` セクションの構成を持っています。
"${RUN[@]}" "$IMG" bash -c "
ulimit -s 32768
sed -e 's/count: 0/count: 10/' \
-e 's/repeat: true/repeat: false/' \
-e 's/realtime: true/realtime: false/' \
-e 's/^ width: 854/ headless: true\n width: 854/' \
/opt/nvidia/holoscan/examples/video_replayer/python/video_replayer.yaml > /tmp/vr.yaml
cd /opt/nvidia/holoscan/examples/video_replayer/python
HOLOSCAN_INPUT_PATH=/opt/nvidia/holoscan/data python3 video_replayer.py --config /tmp/vr.yaml
"
# 3b. video_replayer (C++, 10 フレーム) — 3a と同じヘッドレスインジェクション。C++
# YAML では `directory: "../data/racerx"` がハードコーディングされていますが、HOLOSCAN_INPUT_PATH
# によって上書きされるため、そのフィールドにパッチを当てる必要はありません。
"${RUN[@]}" "$IMG" bash -c "
ulimit -s 32768
sed -e 's/count: 0/count: 10/' \
-e 's/repeat: true/repeat: false/' \
-e 's/realtime: true/realtime: false/' \
-e 's/^ width: 854/ headless: true\n width: 854/' \
/opt/nvidia/holoscan/examples/video_replayer/cpp/video_replayer.yaml > /tmp/vr_cpp.yaml
cd /opt/nvidia/holoscan/examples/video_replayer/cpp
HOLOSCAN_INPUT_PATH=/opt/nvidia/holoscan/data ./video_replayer --config /tmp/vr_cpp.yaml
"
ステップ 4: コマンドの実行
- https://catalog.ngc.nvidia.com/orgs/nvidia/teams/clara-holoscan/containers/holoscan を参照してください。
- 以下の Docker フラグについてユーザーに説明してください。
- その他のフラグ(例:V4L2 ビデオデバイスのマウント方法など)については、ユーザーにそのリンクを参照するよう案内してください。
docker run -it --rm \
--runtime=nvidia --gpus all --cap-add CAP_SYS_PTRACE \
--ipc=host --ulimit memlock=-1 --ulimit stack=67108864 \
nvcr.io/nvidia/clara-holoscan/holoscan:
# 例: /opt/nvidia/holoscan/examples/
# ファイルのマウント: -v /host/path:/container/path
# GUI の例: -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY を追加
次へ:
- 探索:
ls /opt/nvidia/holoscan/examples/ - 例を一つ試す:
/holoscan-explain-example
トラブルシューティング
docker: デーモンからのエラー応答: デバイスドライバ「nvidia」を選択できませんでした。NVIDIA Container Toolkit が存在しないか、設定されていません。手順 2 のリンクに従ってインストールし、Docker を再起動してください。- コンテナ内で CUDA の初期化に失敗しました。タグのサフィックスがホストと一致しません。
nvidia-smi のCUDA バージョンと、ステップ 1 の表を再確認してください。 - サンプル起動時にセグメンテーションフォールトが発生する。コンテナ内で
ulimit -s 32768 が適用されていませんでした。ステップ3に示されているbash -c "ulimit -s 32768 && ..."という形式を使用してください。 - SSH経由でHolovizのサンプルがハングする/ウィンドウが表示されない。YAMLに「
headless: true」のパッチが適用されていません。ステップ3に示されているsedによる書き換えを使用してください。 video_replayerがデータを見つけられません。HOLOSCAN_INPUT_PATH=/opt/nvidia/holoscan/data を設定してください。これにより、YAMLにハードコードされたパスが上書きされます。
---
name: holoscan-install-container
description: Pull and verify the official Holoscan SDK container from NGC, selecting the correct CUDA/arch tag for the host GPU and validating with bundled Python and C++ examples.
license: Apache-2.0
---
# Holoscan NGC Container Installation
## Purpose
Pull and verify the official Holoscan SDK container from NGC (`nvcr.io/nvidia/clara-holoscan/holoscan`), selecting the right CUDA/arch tag for the host GPU and validating with the bundled Python and C++ examples.
## Prerequisites
- Linux host with an NVIDIA GPU and a working driver (`nvidia-smi`).
- Docker installed and the user in the `docker` group (or `sudo`).
- NVIDIA Container Toolkit installed (`docker run --gpus all` works).
- ~10–20 GB free disk for the image pull.
- Network access to `nvcr.io` and `docs.nvidia.com`.
## Limitations
- Container images cover only the tag matrix below — no Conda/pip env inside.
- GUI examples require X11 forwarding; this skill runs Holoviz headless to avoid that.
- Tag suffix must match the host GPU/driver (cuda13 / cuda12-dgpu / cuda12-igpu) — wrong suffix → CUDA init failures.
## Instructions
- Container repo: `nvcr.io/nvidia/clara-holoscan/holoscan`.
- The doc page at https://docs.nvidia.com/holoscan/sdk-user-guide/sdk_installation.html is canonical — fetch it if anything below disagrees.
- Work through the steps below in order: pick the tag, verify GPU passthrough and pull, verify with the six examples, then hand off the launch command.
## Step 1: Pick the tag
Tag = `<version>-<suffix>`, e.g. `v4.1.0-cuda13`. Get the current SDK version from the doc page above; pick the suffix from `nvidia-smi` (the "CUDA Version" field, top-right of the table header):
| `nvidia-smi` CUDA Version | Suffix |
|---|---|
| 13.x+ | `cuda13` |
| 12.x, Ampere/Ada dGPU | `cuda12-dgpu` |
| 12.x, ARM64 iGPU (nvgpu) | `cuda12-igpu` |
The "CUDA Forward Compatibility mode ENABLED" banner is expected — not an error — when the container ships a newer CUDA minor version than the host driver supports. The forward-compat shim lets the container's CUDA runtime work against the older host driver within the same major version.
## Step 2: Verify GPU passthrough, then pull
```bash
docker run --rm --gpus all ubuntu:22.04 nvidia-smi 2>&1 | tail -5
```
If Docker is missing → install from https://docs.docker.com/engine/install/. If GPU passthrough fails → install the NVIDIA Container Toolkit per https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html, then retry.
Pull (~10–20 GB — warn the user before starting):
```bash
docker pull nvcr.io/nvidia/clara-holoscan/holoscan:<TAG>
```
## Step 3: Verify with six examples
Tests cover: bare Python binding (1a), bare C++ runtime (1b, 2a), Python + Holoviz/Vulkan (2b, 3a), and C++ + Holoviz/Vulkan (3b). Holoviz examples always run headless (inject `headless: true` into the YAML) — this works whether or not a display is attached and avoids GUI failure modes over SSH.
```bash
IMG=nvcr.io/nvidia/clara-holoscan/holoscan:<TAG>
RUN=(docker run --rm --runtime=nvidia --gpus all --cap-add CAP_SYS_PTRACE --ipc=host --ulimit memlock=-1 --ulimit stack=67108864)
# 1a. hello_world (Python) — expect "Hello World!"
"${RUN[@]}" "$IMG" bash -c \
"ulimit -s 32768 && python3 /opt/nvidia/holoscan/examples/hello_world/python/hello_world.py"
# 1b. hello_world (C++) — expect "Hello World!"
"${RUN[@]}" "$IMG" bash -c \
"ulimit -s 32768 && /opt/nvidia/holoscan/examples/hello_world/cpp/hello_world"
# 2a. tensor_interop (C++) — expect tensors doubling each pass, "Graph execution finished."
"${RUN[@]}" "$IMG" bash -c \
"ulimit -s 32768 && /opt/nvidia/holoscan/examples/tensor_interop/cpp/tensor_interop"
# 2b. tensor_interop (Python, 10 frames) — Holoviz, headless. The YAML has no
# headless field by default, so inject one under `holoviz:`. Expect
# "message received (count: 10)".
"${RUN[@]}" "$IMG" bash -c "
ulimit -s 32768
sed -e 's/count: 0/count: 10/' \
-e 's/repeat: true/repeat: false/' \
-e 's/realtime: true/realtime: false/' \
-e 's/^holoviz:/holoviz:\n headless: true/' \
/opt/nvidia/holoscan/examples/tensor_interop/python/tensor_interop.yaml > /tmp/ti.yaml
cd /opt/nvidia/holoscan/examples/tensor_interop/python
python3 tensor_interop.py --config /tmp/ti.yaml
"
# 3a. video_replayer (Python, 10 frames) — Holoviz, headless. Inject `headless: true`
# under `holoviz:` (above `width: 854`). Same sed works for the C++ YAML in 3b —
# both files share the same `holoviz:` section shape.
"${RUN[@]}" "$IMG" bash -c "
ulimit -s 32768
sed -e 's/count: 0/count: 10/' \
-e 's/repeat: true/repeat: false/' \
-e 's/realtime: true/realtime: false/' \
-e 's/^ width: 854/ headless: true\n width: 854/' \
/opt/nvidia/holoscan/examples/video_replayer/python/video_replayer.yaml > /tmp/vr.yaml
cd /opt/nvidia/holoscan/examples/video_replayer/python
HOLOSCAN_INPUT_PATH=/opt/nvidia/holoscan/data python3 video_replayer.py --config /tmp/vr.yaml
"
# 3b. video_replayer (C++, 10 frames) — same headless injection as 3a. The C++
# YAML hard-codes `directory: "../data/racerx"`, but HOLOSCAN_INPUT_PATH
# overrides it, so we don't need to patch that field.
"${RUN[@]}" "$IMG" bash -c "
ulimit -s 32768
sed -e 's/count: 0/count: 10/' \
-e 's/repeat: true/repeat: false/' \
-e 's/realtime: true/realtime: false/' \
-e 's/^ width: 854/ headless: true\n width: 854/' \
/opt/nvidia/holoscan/examples/video_replayer/cpp/video_replayer.yaml > /tmp/vr_cpp.yaml
cd /opt/nvidia/holoscan/examples/video_replayer/cpp
HOLOSCAN_INPUT_PATH=/opt/nvidia/holoscan/data ./video_replayer --config /tmp/vr_cpp.yaml
"
```
## Step 4: Launch command
- Read https://catalog.ngc.nvidia.com/orgs/nvidia/teams/clara-holoscan/containers/holoscan.
- Explain the docker flags below to the user.
- Refer the user to that link for additional flags (e.g., how to mount V4L2 video devices).
```bash
docker run -it --rm \
--runtime=nvidia --gpus all --cap-add CAP_SYS_PTRACE \
--ipc=host --ulimit memlock=-1 --ulimit stack=67108864 \
nvcr.io/nvidia/clara-holoscan/holoscan:<TAG>
# Examples: /opt/nvidia/holoscan/examples/
# Mount files: -v /host/path:/container/path
# GUI examples: add -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY
```
Next:
- Explore: `ls /opt/nvidia/holoscan/examples/`
- Walk through one: `/holoscan-explain-example`
## Troubleshooting
- **`docker: Error response from daemon: could not select device driver "nvidia"`.** NVIDIA Container Toolkit is missing or not configured. Install per the link in Step 2 and restart Docker.
- **CUDA init failure inside the container.** Tag suffix doesn't match the host. Re-check `nvidia-smi` CUDA Version and the table in Step 1.
- **Segmentation fault when launching an example.** `ulimit -s 32768` wasn't applied inside the container. Use the `bash -c "ulimit -s 32768 && ..."` pattern shown in Step 3.
- **Holoviz example hangs / no window over SSH.** YAML wasn't patched to `headless: true`. Use the `sed` injection shown in Step 3.
- **`video_replayer` can't find data.** Set `HOLOSCAN_INPUT_PATH=/opt/nvidia/holoscan/data` — overrides the YAML's hard-coded path.
すべてのファイル
5件のファイルholoscan-install-containerをインストール
スキルファイルをダウンロードし、.claude/skills/ ディレクトリに解凍してください。
ZIPをダウンロードリポジトリをクローンし、スキルファイルをプロジェクトにコピーしてください。
git clone https://github.com/NVIDIA/skills/tree/main/skills/holoscan-install-container # Copy SKILL.md to your .claude/skills/ directory
コピー





家
