옵션
집집 Skill DevOps 및 CI/CD holoscan-install-container

holoscan-install-container

NVIDIA/skills NVIDIA/skills

NGC에서 공식 Holoscan SDK 컨테이너를 가져와 호스트 GPU에 적합한 CUDA/아키텍처 태그를 선택한 후, 함께 제공되는 Python 및 C++ 예제 코드를 통해 정상 작동 여부를 확인하십시오.

...모든 것을 확장하십시오
2
업데이트 된 시간 2026년 9월 27일

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-smi CUDA 버전 접미사
13.x+ cuda13
12.x, Ampere/Ada dGPU cuda12-dgpu
12.x, ARM64 iGPU (nvgpu) cuda12-igpu

컨테이너가 호스트 드라이버가 지원하는 것보다 더 새로운 CUDA 마이너 버전을 배포할 경우, "CUDA 전방 호환 모드 활성화(CUDA Forward Compatibility mode ENABLED)" 배너가 표시되는 것은 오류가 아닌 정상적인 현상입니다. 전방 호환 심(shim)을 통해 컨테이너의 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, 헤드리스. `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에 하드코딩된 경로를 재정의할 수 있습니다.
GitHub에서 보기
---
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

복사 복사
빠른 설정: 스킬 폴더를 .claude/skills/로 복사하세요. Claude가 해당 스킬을 자동으로 감지하여 사용할 것입니다.
저장소 NVIDIA/skills

관련 스킬

klingai-upgrade-migration
업데이트 된 시간 2026년 7월 3일
Verification &amp; Quality Assurance
업데이트 된 시간 2026년 6월 29일
base44-cli
업데이트 된 시간 2026년 6월 29일
Railway CLI Management
업데이트 된 시간 2026년 7월 2일
OR