mcpField
N
npu-docker-launcher

npu-docker-launcher

github.com/ascend-ai-codingクラウド・DevOps17844 回インストール2 週間前に更新
リポジトリ

npu-docker-launcher について

npu-docker-launcherは、Ascend NPUサーバーでDockerコンテナを起動するスキルです。環境確認からイメージ選択、設定、実行確認、起動検証までを案内します。

主な機能

  1. 01Ascendドライバー、NPUデバイス、Dockerの確認
  2. 02ローカルDockerイメージの一覧表示
  3. 03コンテナとNPUアクセス方法の設定
  4. 04docker runコマンドの生成と確認
  5. 05起動状態の検証とアクセス方法の案内

活用シーン

  1. 01Ascend NPU開発コンテナの起動
  2. 02単一カード学習用コンテナの準備
  3. 03マルチカード学習環境の起動
  4. 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必須コンテナ名
--privilegedyesNPU のデバイスへのフルアクセス
--network hosthostネットワークモード

ドライバーのマウント(必ず含める):

-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. 実行して検証する

ユーザーの確認後:

  1. Bash ツールを使ってコマンドを実行する
  2. コンテナが実行中であることを確認する:
    docker ps | grep <container-name>
    
  3. アクセス方法とともにステータスを報告する
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:開発環境(最も一般的)

ユーザーのリクエスト:「帮我启动一个开发容器」または「開発用コンテナが欲しいです」

手順:

  1. 環境を確認します(ドライバー、NPU、Docker)
  2. 利用可能なイメージを一覧表示します
  3. タスクに基づいて適切なイメージを推奨します
  4. デフォルト設定を使用します(特権モード、ホストネットワーク、すべての NPU)
  5. ホームディレクトリをマウントします

コマンド:

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 を使用します

参考ファイル

コマンド早見表

# 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>

コメント