huawei-cloud-sac-yolo について
Huawei Cloud に YOLO 画像モデルのトレーニング基盤をデプロイするスキルです。GPU トレーニング環境が必要なユーザー向けに、Terraform で GPU ECS、ネットワーク、ストレージ、バックアップを構築し、YOLO コンテナを起動します。
主な機能
- 01Terraform によるクラウド基盤の構築
- 02GPU ECS と YOLO コンテナのデプロイ
- 03ネットワーク、EIP、ストレージの設定
- 04バックアップボールトとポリシーの設定
活用シーン
- 01Huawei Cloud での YOLO トレーニング環境の構築
- 02YOLO コンテナ向け GPU コンピューティングの確保
- 03プラットフォームとバックアップリソースのデプロイ・検証
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ huaweicloud/ huaweicloud-skills --skill huawei-cloud-sac-yoloインストール後、Claude Code で/huawei-cloud-sac-yoloを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
demo/example-input.jsonreferences/acceptance-criteria.mdcli-installation-guide.mdiam-policies.mdrelated-commands.mdverification-method.mdscripts/download_tf_template_file.pyextract_sac_deploy_info.pylist_tf_variables.pynormalize_tf_providers.pyplaywright_utils.pyscripts/templates/extract_sac_deploy_info.jstemplates/terraform.tfvars.template詳細
Huawei Cloud YOLO Training Platform
概要
「Quickly Build YOLO Visual Model Training Platform」ソリューションをHuawei Cloud上にエンドツーエンドでデプロイします。このプラットフォームでは、GPUアクセラレーション対応のECSを使用してYOLOモデルをトレーニングでき、Terraformによってインフラ全体をプロビジョニングします。
アーキテクチャ: ECS(GPU、P2s/Pi2)、VPC、サブネット、セキュリティグループ(ICMP/SSH/HTTP)、EIP(300 Mbit/s)、EVS(システム用100 GB+データ用500 GB)、CBR(バックアップボールト+ポリシー)。Cloud-initがDockerをインストールし、GPU上でYOLOコンテナを起動します。
ツールチェーン: Playwright CLI(ソリューション情報の抽出)+ Python 3.8+(ヘルパースクリプト)+ Terraform 1.15.4+(宣言型デプロイ)。KooCLIは使用しません。すべてのリソース操作はTerraformを通じて行います。
前提条件
- Python 3.8+、Playwright CLI、Terraform 1.15.4+ — CLI Installation Guideを参照してください
- 環境変数(
HW_ACCESS_KEY、HW_SECRET_KEY)で設定したHuawei CloudのAK/SK。設定されていない場合は、ユーザーにterraform.auto.tfvars.jsonを手動で編集してAK/SKを入力するよう促してください - 十分な権限を持つIAMユーザー、または
rf_admin_trust代理 — IAM Policiesを参照してください
セキュリティ
- 🚫 会話や出力にAK/SKを決して表示しないでください
- 🚫 ユーザーにチャットでAK/SKを入力するよう求めないでください
- ✅ プライマリアカウントよりIAMユーザーを優先してください
- ✅ 変更操作(
apply、destroy)には、ユーザーの明示的な確認が必要です
コアコマンド
プレースホルダー値(OSごとの解決方法については「パラメーター」を参照してください):
| プレースホルダー | Linux / macOS | Windows |
|---|---|---|
<python> | python3 | python |
<script_dir> | ./scripts | ./scripts |
<temp_dir> | /tmp | $env:TEMP |
# 1. Extract solution info
<python> <script_dir>/extract_sac_deploy_info.py \
--url "https://www.huaweicloud.com/solution/implementations/quickly-build-a-yolo-training-platform.html" \
--out <temp_dir>/sac_selected.json
# 2. Download and normalize template
<python> <script_dir>/download_tf_template_file.py \
--url "https://documentation-samples.obs.cn-north-4.myhuaweicloud.com/solution-as-code-publicbucket/solution-as-code-moudle/quickly-build-a-yolo-training-platform/quickly-build-a-yolo-training-platform.tf" \
--out-dir <temp_dir>/yolo-workdir
<python> <script_dir>/normalize_tf_providers.py <temp_dir>/yolo-workdir \
--region "cn-north-4"
# 3. List variables for review
<python> <script_dir>/list_tf_variables.py <temp_dir>/yolo-workdir
# 4. Deploy
terraform init
terraform plan
# ⛔ STOP — Review the plan output above. Do NOT auto-apply.
# Confirm with the user (AskUserQuestion or equivalent) before proceeding.
# Only after explicit user confirmation:
terraform apply
# 5. Add YOLO UI security group rule
# Prompt user to manually add an ingress rule for TCP port 8001
# via Huawei Cloud console (VPC > Security Groups > Add Rule).
# Use restricted CIDR — do NOT open to all addresses.
# Wait for user confirmation before continuing.
# 6. Verify
terraform state list
terraform output -json
# 7. Cleanup
terraform destroy
ワークフロー
1. ソリューション情報を抽出する
<python> <script_dir>/extract_sac_deploy_info.py \
--url "<solution_detail_page_url>" \
--out <temp_dir>/sac_selected.json
抽出後、結果をユーザーに表示してください:
- ソリューション名:出力JSONの
titleフィールド - 推定価格:
estimated_price_textフィールド - デプロイリンク:
deploy_links配列に含まれる各textとurlを一覧表示します titleまたはestimated_price_textが空の場合は、ユーザーに警告し、ソリューションページで手動確認するよう提案してください
2. テンプレートをダウンロードして正規化する
<python> <script_dir>/download_tf_template_file.py \
--url "<tf_template_url>" \
--out-dir <temp_dir>/yolo-workdir
<python> <script_dir>/normalize_tf_providers.py <temp_dir>/yolo-workdir \
--region "cn-north-4"
normalize_tf_providers.pyは、リージョンなどのパラメーターを含むterraform.auto.tfvars.jsonを書き込みます。環境変数HW_ACCESS_KEY/HW_SECRET_KEYが設定されていない場合、AK/SKフィールドは空のままになります。ユーザーにファイルを手動で編集してAK/SKを入力するよう促してから、次のステップに進んでください。
3. 変数を確認する
<python> <script_dir>/list_tf_variables.py <temp_dir>/yolo-workdir
ユーザーと一緒に確認してください。機密性の高い変数が空、または強度が不十分な場合は、applyを実行しないでください。
4. デプロイする
⛔ 停止 — terraform applyを実行する前に、terraform planの出力を確認し、ユーザーの承認を得てください(AskUserQuestionまたは同等の方法を使用)。自動的にapplyを実行しないでください。ユーザーが明示的に確認した後にのみ続行してください。
5. YOLO UIのセキュリティグループルールを追加する
Terraformテンプレートには、YOLOトレーニングプラットフォームのWeb UIに必要なTCPポート8001のインバウンドルールが含まれていません。デプロイ後、Huawei Cloudコンソール(VPC > Security Groups > Add Rule)からTCPポート8001のインバウンドルールを手動で追加するよう、ユーザーに促してください。自分のIPアドレスまたは制限付きCIDRを指定し、すべてのアドレスに公開しないでください。
6. 検証する
Verification MethodとAcceptance Criteriaを参照してください。
7. クリーンアップする
パラメーター
| パラメーター | 必須 | デフォルト | 制約 |
|---|---|---|---|
region | はい | cn-north-4 | サポート対象のリージョンのみ |
| AK/SK | はい | — | 環境変数HW_ACCESS_KEY/HW_SECRET_KEY。設定されていない場合は、ユーザーにtfvars.jsonの編集を促してください |
ecs_password | はい | — | 8~26文字。大文字・小文字・数字・特殊文字を組み合わせます |
ecs_flavor | いいえ | p2s.2xlarge.8 | — |
system_disk_size | いいえ | 100 | 40~1024 GB |
data_disk_size | いいえ | 500 | 40~1024 GB |
bandwidth_size | いいえ | 300 | 1~300 Mbit/s |
charging_unit | いいえ | month | monthまたはyear |
charging_period | いいえ | 1 | — |
デプロイ後の出力
terraform output -json— YOLO プラットフォームの URL を含むaccess_instructionsが含まれます- YOLO UI:
http://<EIP>:8001(cloud-init の完了まで約 10 分かかります) - 確認:
ssh root@<EIP> "docker ps"およびssh root@<EIP> "nvidia-smi"
出力形式
terraform output -json は、以下の主なフィールドを含む JSON を返します。
{
"access_instructions": { "value": "http://<EIP>:8001" },
"ecs_eip": { "value": "<Elastic IP>" },
"ecs_id": { "value": "<ECS Instance ID>" },
"vpc_id": { "value": "<VPC ID>" }
}
すべてのスクリプト出力は JSON 形式です。extract_sac_deploy_info.py はソリューション情報の JSON を出力し、list_tf_variables.py は変数一覧の JSON を出力します。
検証
デプロイ結果を次の手順で検証します。
- テンプレートの抽出 —
<temp_dir>/sac_selected.jsonにsolution_name、priceフィールドが含まれていることを確認します - テンプレートのダウンロード —
<temp_dir>/yolo-workdirの下に.tfファイルが存在し、terraform validateが成功することを確認します - 変数の確認 —
list_tf_variables.pyの出力で、機密変数(AK/SK、パスワード)が空でないことを確認します - デプロイ —
terraform planでエラーが表示されないことを確認します。ユーザーがデプロイを承認し、apply後にterraform state listで想定されるすべてのリソースが表示されることを確認します - サービスへの接続 — cloud-init の完了まで 10~15 分待ってから、
curl -s http://<EIP>:8001が 200 を返すことを確認します - GPU —
ssh root@<EIP> "nvidia-smi"で GPU デバイスが表示され、ssh root@<EIP> "docker ps"で YOLO コンテナーが実行中であることを確認します
詳細については、検証方法および 受け入れ基準を参照してください。
ベストプラクティス
applyの前に必ずterraform planを実行します- まず
charging_unit=monthで開始し、検証後にyearに切り替えます - デプロイ後、cloud-init の完了まで 10~15 分待ちます
nvidia-smiで GPU を監視し、使用率が低い場合はecs_flavorを調整します
参考ドキュメント
| ドキュメント | 説明 |
|---|---|
| CLI インストールガイド | Python、Playwright CLI、Terraform のインストール |
| IAM ポリシー | 権限、委任設定、障害への対応 |
| 検証方法 | ワークフローの各手順における検証方法 |
| 受け入れ基準 | デプロイ全体の受け入れチェックリスト |
| 関連コマンド | Terraform、スクリプト、リモートアクセスのリファレンス |
注意事項
- 対応リージョンは
cn-north-4のみです terraform.auto.tfvars.jsonには機密情報が含まれるため、VCS にコミットしないでくださいnormalize_tf_providers.pyは tfvars にリージョンを書き込みます。環境変数が設定されていない場合、AK/SK は空のままとなるため、ユーザーが手動で入力する必要があります- ツールチェーン:Playwright CLI + Python + Terraform — KooCLI は使用しません