npu-docker-launcher について
npu-docker-launcherは、Ascend NPUサーバーでDockerコンテナを起動するスキルです。環境確認からイメージ選択、設定、実行確認、起動検証までを案内します。
主な機能
- 01Ascendドライバー、NPUデバイス、Dockerの確認
- 02ローカルDockerイメージの一覧表示
- 03コンテナとNPUアクセス方法の設定
- 04docker runコマンドの生成と確認
- 05起動状態の検証とアクセス方法の案内
活用シーン
- 01Ascend NPU開発コンテナの起動
- 02単一カード学習用コンテナの準備
- 03マルチカード学習環境の起動
- 04ポートマッピング付き推論コンテナの実行
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ ascend-ai-coding/ awesome-ascend-skills --skill npu-docker-launcherインストール後、Claude Code で/npu-docker-launcherを入力して読み込まれたか確認します。
同梱ファイルreferences/examples.mdreferences/npu-devices.md
詳細
NPU Docker コンテナランチャー
概要
このスキルは、Ascend NPU サーバー上で Docker コンテナを直接起動します。呼び出されたら、起動前のチェックを行い、ユーザーの要件を確認して、適切な docker run コマンドを実行してください。
ワークフロー
1. 起動前の環境チェック
先に進む前に、必ず次のチェックを実施してください:
1.1 NPU ドライバーの有無を確認する
# Check if Ascend driver is installed
ls -l /usr/local/Ascend/driver/
# Check driver version (optional)
cat /usr/local/Ascend/driver/version.info 2>/dev/null || echo "Driver version info not found"
ドライバーディレクトリが存在しない場合は、停止してユーザーに「Ascend ドライバーが /usr/local/Ascend/driver/ に見つかりません。先にドライバーをインストールしてください。」と伝えてください。
1.2 NPU デバイスの有無を確認する
# List NPU devices
ls -l /dev/davinci* 2>/dev/null
# Check NPU status using npu-smi
npu-smi info 2>/dev/null || echo "npu-smi not available"
/dev/davinci* デバイスが見つからない場合は、停止してユーザーに「NPU デバイスが検出されません。ハードウェアとドライバーのインストールを確認してください。」と伝えてください。
1.3 Docker サービスを確認する
# Check if Docker is running
docker info > /dev/null 2>&1 && echo "Docker is running" || echo "Docker is not running"
Docker が起動していない場合は、停止してユーザーに伝えてください。
2. 利用可能な Docker イメージを確認する
ユーザーに尋ねる前に、利用可能なイメージを確認して表示してください:
# List all local Docker images
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}\t{{.CreatedAt}}"
イメージを整形された表でユーザーに表示してください。その後、ユーザーのタスクについて尋ね、次の条件に基づいて適切なイメージを推奨してください:
- PyTorch/TensorFlow のトレーニング:「pytorch」「tensorflow」「ascend-pytorch」「ascend-tf」を含むイメージを探します
- MindSpore のトレーニング:「mindspore」を含むイメージを探します
- 推論:「inference」「serving」「vllm」「mindie」を含むイメージを探します
- 開発:「dev」「devel」を含むイメージ、または汎用的なフレームワークのイメージを探します
3. 要件を確認する
利用可能なイメージを表示してユーザーのタスクを確認した後、次のように尋ねてください:
## Docker Container Configuration
1. Container name: (e.g., my-pytorch-env)
2. Privileged mode: (default: yes) - Grants full device access [yes/no]
3. Network mode: (default: host) or specify port mappings [host/custom]
4. NPU cards: Which cards to use? (default: all, or specific like "0,1,2") [all/specific]
5. Mount directories: (format: host:container, comma-separated)
Example: /home/user:/home/user,/data:/data
6. Work directory inside container: (e.g., /home/user)
7. Environment variables: (space-separated, e.g., "VAR1=value1 VAR2=value2")
8. Additional options: (e.g., auto-remove --rm, shm-size)
4. Docker run コマンドを作成する
デフォルトのコマンド構成:
docker run -it -d \
--name <container-name> \
--privileged \
--network host \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/sbin:/usr/local/sbin \
-v <user-mounts> \
-w <work-dir> \
[-e ENV_VARS...] \
<image> \
/bin/bash
主なデフォルト設定:
-it -d:対話型ターミナル+デタッチモード(必ず両方を使用)/bin/bash:実行するデフォルトのコマンド(必ず末尾に含める)--privileged:NPU アクセスのデフォルト設定--network host:ネットワークモードのデフォルト設定
コマンドの構成要素:
必須引数:
| 引数 | デフォルト | 説明 |
|---|---|---|
-it -d | 常に使用 | 対話型+デタッチ |
--name | 必須 | コンテナ名 |
--privileged | yes | NPU のデバイスへのフルアクセス |
--network host | host | ネットワークモード |
ドライバーのマウント(必ず含める):
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/sbin:/usr/local/sbin
任意の引数:
| 引数 | 使用する場面 |
|---|---|
--device=/dev/davinci0 | 特定の NPU カード(--privileged の代わり) |
-p host:container | ポートマッピング(--network host の代わり) |
--shm-size=16g | 分散トレーニング用の大きな共有メモリ |
--rm | 終了時にコンテナを自動削除 |
-e VAR=value | 環境変数 |
5. コマンドを表示して確認する
コマンド全体を表示して、実行してよいか確認してください:
📋 Generated Docker Run Command:
docker run -it -d \
--name my-container \
--privileged \
--network host \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/sbin:/usr/local/sbin \
-v /home/user:/home/user \
-w /home/user \
pytorch/pytorch:latest \
/bin/bash
Proceed with container launch? [yes/no]
6. 実行して検証する
ユーザーの確認後:
- Bash ツールを使ってコマンドを実行する
- コンテナが実行中であることを確認する:
docker ps | grep <container-name> - アクセス方法とともにステータスを報告する
7. ステータスを報告する
✅ Container started successfully
- Container ID: abc123def456
- Container name: my-container
- Image: pytorch/pytorch:latest
- Status: Running
📌 Access Instructions:
- Enter container: docker exec -it my-container bash
- View logs: docker logs -f my-container
- Stop container: docker stop my-container
- Remove container: docker rm my-container
判断ルール
特権モードとデバイスマウントの比較
| 方法 | 使用する場面 | コマンド |
|---|---|---|
| 特権モード(デフォルト) | 開発、複数の NPU カード、簡単なセットアップ | --privileged |
| デバイスマウント | 本番環境、特定のカード、セキュリティが必要な場合 | --device=/dev/davinci0 |
ルール: ユーザーからデバイスマウントを明示的に求められない限り、デフォルトで --privileged を使用してください。
ネットワークモード
| モード | 使用する場面 | コマンド |
|---|---|---|
| ホスト(デフォルト) | 開発、ローカルアクセス、ポートの競合がない場合 | --network host |
| ブリッジ | 本番環境、ポートの分離が必要な場合、サービスのデプロイ | --network bridge -p 8080:80 |
ルール: NPU サーバーでは、デフォルトで --network host を使用してください。
NPU カードの選択
- すべて(デフォルト):すべての NPU にアクセスするため、
--privilegedを使用します - 特定のカード:カードごとに
--device=/dev/davinci{i}を使用します
よくあるシナリオ
シナリオ 1:開発環境(最も一般的)
ユーザーのリクエスト:「帮我启动一个开发容器」または「開発用コンテナが欲しいです」
手順:
- 環境を確認します(ドライバー、NPU、Docker)
- 利用可能なイメージを一覧表示します
- タスクに基づいて適切なイメージを推奨します
- デフォルト設定を使用します(特権モード、ホストネットワーク、すべての NPU)
- ホームディレクトリをマウントします
コマンド:
docker run -it -d \
--name pytorch-dev \
--privileged \
--network host \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/sbin:/usr/local/sbin \
-v /home/user:/home/user \
-w /home/user \
pytorch/pytorch:latest \
/bin/bash
シナリオ 2:NPU カード 1 枚でのトレーニング
ユーザーのリクエスト:「卡0だけを使ってトレーニングします」
コマンド:
docker run -it -d \
--name train-card0 \
--network host \
--device=/dev/davinci0 \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/sbin:/usr/local/sbin \
-v /data:/data \
-w /data \
-e ASCEND_DEVICE_ID=0 \
ascend-pytorch:latest \
/bin/bash
シナリオ 3:複数カードでの分散トレーニング
ユーザーのリクエスト:「すべてのカードを使って分散トレーニングを行います」
コマンド:
docker run -it -d \
--name distributed-train \
--privileged \
--network host \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/sbin:/usr/local/sbin \
-v /home/user:/workspace \
-w /workspace \
--shm-size=16g \
-e ASCEND_VISIBLE_DEVICES=0,1,2,3 \
-e RANK_SIZE=4 \
ascend-mindspore:latest \
/bin/bash
シナリオ 4:ポートマッピングを使用した推論サービス
ユーザーのリクエスト:「ポート 8080 で推論サービスを起動する必要があります」
コマンド:
docker run -it -d \
--name inference-svc \
--network bridge \
-p 8080:8000 \
--device=/dev/davinci0 \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/sbin:/usr/local/sbin \
-v /models:/models \
-w /models \
ascend-inference:latest \
/bin/bash
起動前のチェックリスト
docker run を実行する前に、次の項目を確認してください。
- Ascend ドライバーが
/usr/local/Ascend/driver/に存在する - NPU デバイスが利用可能である(
/dev/davinci*) - Docker サービスが実行中である
- イメージがローカルに存在するか、プルできる
- コンテナ名が既存のコンテナと競合しない
- ユーザーがコマンドを確認した
エラー処理
| エラー | 解決方法 |
|---|---|
| "driver not found" | Ascend ドライバーをインストールするようユーザーに依頼します |
| "No NPU devices" | ハードウェアの接続とドライバーを確認します |
| "Docker not running" | Docker を起動します:systemctl start docker |
| "Image not found" | イメージをプルするか、別のイメージを使用します |
| "Container name exists" | 古いコンテナを削除します:docker rm -f <name>、または新しい名前を使用します |
| "Permission denied" | ユーザーが docker グループに属しているか確認するか、sudo を使用します |
参考ファイル
- npu-devices.md - NPU デバイスの照会とマウントの詳細
- examples.md - より詳しい例
コマンド早見表
# List local images
docker images
# Check NPU devices
ls -l /dev/davinci* && npu-smi info
# List running containers
docker ps
# Enter container
docker exec -it <name> bash
# View logs
docker logs -f <name>
# Stop container
docker stop <name>
# Remove container
docker rm <name>
# Force remove container
docker rm -f <name>