Deep Dive: サービス別・技術的事故ケース集
各サービスで「実際に踏みやすい事故」を 症状 → 原因 → 対処/予防 → 試験での問われ方 の 4 点セットで整理。 公式 troubleshooting ページの記述、公式 best practice の逆引き、ML プラットフォーム運用の一般的な事故パターンを組み合わせています。
- 各事故 = 🚨 症状 / 🔬 原因 / ✅ 対処・予防 / 📝 試験ポイント の 4 セクション
- Severity を 🔥 (致命) / ⚡ (深刻) / ⚠️ (注意) で表示
- 公式記載のあるものは引用付き
1️⃣ Custom Training — 訓練ジョブ
🔥 事故 1.1:「8 時間学習させたが、突然停止して 0 から再開」
🚨 症状
長時間訓練ジョブ実行中、VM が突然 restart して進捗が 全て失われた。最後のステップから resume できない。
🔬 原因
公式:「The VMs that run your training code restart occasionally. For example, Google Cloud might need to restart a VM for maintenance reasons.」VM のメンテナンス再起動は 避けられない。チェックポイントなしで長時間訓練すると毎回最初から。
✅ 対処・予防
公式推奨:「Frequently export your training progress to Cloud Storage, at least once every four hours」+「at the start of your training code, check whether any training progress already exists in your export location」。
AIP_CHECKPOINT_DIR を使い、起動時に latest checkpoint を読む実装を 必ず 入れる。
📝 試験ポイント
「Spot/Preemptible VM を使ったらコストは下がったが、訓練が完了しない」シナリオ。checkpoint + AIP_CHECKPOINT_DIR + resume ロジック がセットで必須。
⚡ 事故 1.2:「別プロジェクトの BQ table を読もうとして PERMISSION_DENIED」
🚨 症状
訓練コードで BigQuery クエリを実行すると PERMISSION_DENIED。Workbench 上ではうまくいくのに、訓練ジョブだと失敗。
🔬 原因
公式の警告:「don't try to infer a project ID from the environment in your training or inference code; specify project IDs explicitly.」 Vertex AI は「runs code in separate managed projects」のため、env から取った project ID は実環境とは別物。
✅ 対処・予防
環境変数 CLOUD_ML_PROJECT_ID を読む or プロジェクト ID を引数で明示渡し。「Vertex AI Custom Code Service Agent (CCSA)」 または指定したカスタムサービスアカウントに、対象 BQ project への bigquery.dataViewer + bigquery.jobUser を付与。
📝 試験ポイント
サービスアカウント・IAM 権限・project ID の指定方法はセット。「ローカルで動くのに本番で permission error」の問題は典型。
⚡ 事故 1.3:「Cloud Storage に書き込みしたら謎の挙動」
🚨 症状
/gcs/<bucket>/... 経由でモデルファイルを保存したが、リネーム・truncate などが期待通り動かない、または性能が極端に遅い。
🔬 原因
公式:「directories mounted by Cloud Storage FUSE are not POSIX compliant.」リネーム・部分書き込み・ロック・atime 等は POSIX FS の挙動と異なる。
✅ 対処・予防
大事なファイル操作は GCS API(google-cloud-storage)を直接使う。読み込みも、性能が必要なら /gcs ではなく gsutil cp でローカル先読み。データ書き込みは「同一リージョン」のバケット必須。
📝 試験ポイント
パフォーマンス問題が出たら GCS リージョン整合性 + FUSE 非 POSIX をまず疑う。
⚠️ 事故 1.4:「データセットを git に commit してジョブが膨大に」
🚨 症状 / 🔬 原因
訓練コードと一緒に CSV を Docker image に焼き込み → image build が 30 分以上、ジョブ起動が遅く、image rebuild の度に転送料金がかかる。 公式:「Don't store training data together with your code, whether you create a Python training application or a custom container image.」
✅ 対処
データは必ず GCS / BigQuery に分離。コンテナにはコードのみ。Artifact Registry へのプッシュサイズも抑える。
📝 試験ポイント
image build 時間・転送量・再現性のため、データとコードを分けるのは基本。
2️⃣ 分散訓練 / GPU
🔥 事故 2.1:「Reduction Server 追加したのに逆に遅くなった」
🚨 症状
勾配集約高速化のため Reduction Server を 8 ノード追加。コストは増えたが throughput がむしろ低下。
🔬 原因
公式要件:「Total network bandwidth of Reduction Server nodes matching or exceeding combined bandwidth of primary and worker nodes」。RS 側帯域が worker pool 合計より少ないと 新たなボトルネック になる。
✅ 対処・予防
公式例:worker 5 ノード × n1-highmem-96 × V100×8 = 500 Gbps なら、n1-highcpu-16 × 16 ノード = 512 Gbps で揃える。
Horovod は HOROVOD_FUSION_THRESHOLD=134217728 (128MB)、PyTorch DDP は bucket_cap_mb=64 で大きな message にして RS の効率を引き出す。
📝 試験ポイント
「分散訓練が遅い → RS 追加」と短絡しない。RS ノード数と帯域マッチングが論点。
⚡ 事故 2.2:「混合精度導入したら loss が NaN になった」
🚨 症状
FP16 mixed precision を入れて訓練速度を上げようとしたら、数 epoch で loss=NaN になり訓練が破綻。
🔬 原因
FP16 のダイナミックレンジが狭く、勾配が overflow / underflow。loss scaling なしでは小さな勾配が 0 に丸まる。
✅ 対処
- BF16 に切替(A100/H100/TPU はネイティブ対応、レンジが広い)
- FP16 を使うなら dynamic loss scaling(
torch.cuda.amp.GradScaler等) - 学習率を 1/10 に下げて Warmup を追加
- 勾配クリッピング(
torch.nn.utils.clip_grad_norm_)
📝 試験ポイント
「混合精度の高速化」が選択肢にあるとき、BF16 を優先するシナリオが多い。
⚠️ 事故 2.3:「Worker pool の途中を空にしたら job 作成が失敗」
🚨 症状
Primary + Reduction Server だけ使いたく、workerPoolSpecs[0] と workerPoolSpecs[2] を指定して [1] を省略 → job 作成が失敗。
🔬 原因
公式:「The fixed ordering means specifications must be provided for all preceding pools, even if empty, to specify later pools.」
✅ 対処
workerPoolSpecs[1] に空の spec(replica-count=0)を入れて連続性を保つ。または Primary に必要分まとめて押し込む。
3️⃣ TPU
⚡ 事故 3.1:「v4 → v5p に切り替えたら速度落ちた」
🚨 症状
新世代 TPU v5p に移行したのに、想定よりスループットが出ない。コードはそのまま動くが、利用率(MXU usage)が低い。
🔬 原因
公式:「You can run the same code on different versions of TPUs as long as the TPUs have the same number of TensorCores or chips ... However, if you change to a TPU type with a larger or smaller number of TensorCores or chips, you will need to perform significant tuning and optimization.」 世代変更でバッチサイズ・シャーディング戦略・compute/memory ratio が変わる。
✅ 対処
- バッチサイズを TPU chip 数に合わせて再調整
- JAX なら
jax.shardingで分散を見直し - profiler で MXU 利用率を測定
📝 試験ポイント
「世代を上げれば自動で速くなる」は誤り。シャーディング・チューニングのコストを必ず計算する。
⚠️ 事故 3.2:「Multislice で 1 つの slice 障害が全体停止に」
🚨 症状
Multislice 構成で訓練中、1 つの slice の ICI 障害で全 slice の訓練が止まり、checkpoint も中途半端な状態。
🔬 原因
Multislice は DCN 越しに同期で all-reduce を行うため、1 slice の障害が全体に伝播。「ICI resiliency」は OCS 周りの障害を自動再ルーティングするが、その間「temporary degradation in ICI performance」になる。
✅ 対処
Orbax (JAX) / PyTorch DCP でチェックポイント周期を短く(10〜30 分)。非同期チェックポイント で訓練停止時間を最小化。Pathways は障害耐性が高い実装になっているのでフレームワーク選定でも考慮。
4️⃣ Inference Endpoint
🔥 事故 4.1:「新モデルを 100% にしたら p99 レイテンシが 10 倍に」
🚨 症状
カナリア 10% で問題なかった新モデルを 100% に切り替え。途端に p99 レイテンシ激増、エラー率上昇、SLO 違反。
🔬 原因
新モデルがメモリ多消費で oom-killer に killed されながら自動 restart を繰り返している、または min_replicas が足りずスケールアウト中。10% トラフィックでは隠れていた性能特性が 100% で顕在化。
✅ 対処
- 段階拡大:5% → 25% → 50% → 100% で各段階で p99 / error rate を観測
- min_replicas を予測ピーク負荷に設定(オートスケール頼みにしない)
- 同一 Endpoint の旧モデル version を残し、即座に traffic_split で戻せる 体制
- shadow deploy で 本番影響ゼロ でレイテンシ予測
📝 試験ポイント
「新モデルを安全に展開する」シナリオ。カナリア + traffic_split + 旧 version 保持 がセットで正解。
⚡ 事故 4.2:「gRPC でリクエスト送ったら 404」
🚨 症状
Dedicated Public Endpoint に gRPC でリクエストを投げたら 404 Not Found。HTTP では動く。
🔬 原因
公式:「gRPC requests requiring the `x-vertex-ai-endpoint-id` header for proper endpoint identification」。HTTP は URL path で解決、gRPC はヘッダで解決。
✅ 対処
gRPC client で x-vertex-ai-endpoint-id: ENDPOINT_ID を metadata に追加。各種 gRPC client SDK で interceptor 化推奨。
⚡ 事故 4.3:「PyTorch モデルへの predict リクエストが全件 400」
🚨 症状
PyTorch モデルを TorchServe コンテナでデプロイ、{"instances": [{"feature1": 0.1, "feature2": 0.2}]} で送ったら全件 400。
🔬 原因
公式:「TorchServe's default handlers expect each instance to be wrapped in a `data` field」。フォーマットが {"instances": [{"data": <value>}]} 必須。
✅ 対処
クライアント側で data ラッパーを追加。または custom handler を書いて任意フォーマットを受け付ける。
📝 試験ポイント
TF と PyTorch でリクエスト形式が違う。TF は _bytes 終わりの alias、PyTorch は data ラッパー。
⚡ 事故 4.4:「1 件の不正データで batch predict 全件 fail」
🚨 症状
1000 インスタンスを 1 リクエストで送信、1 件のフォーマットエラーで全体が失敗してレスポンスが {"error": "..."} のみ。
🔬 原因
公式:「If inference fails for any instance, the response body contains no inferences. Instead, it contains a single error entry」。部分成功はない仕様。
✅ 対処
- per-instance validation をクライアント側で必須実装
- 大きなバッチを 小さく分割(1 失敗の影響範囲を限定)
- または Batch Prediction Job(こちらは行単位エラーレポートあり)
5️⃣ Feature Store
🔥 事故 5.1:「Optimized Online Serving で構築済みのプロジェクトが 2027 年に壊れる」
🚨 症状
2024 年に Optimized Online Serving で構築した特徴量ストアが、ある日から API エラーを返し始める。新機能も追加されない。
🔬 原因
公式サンセット:「Beginning on May 17, 2026, no new features will be added and only critical patches will be provided. On February 17, 2027, the capability will be fully sunset.」
✅ 対処
- 新規プロジェクトは Bigtable Online Serving 一択
- Embeddings は Vector Search へ分離(Bigtable serving は embeddings 非対応)
- 既存 Optimized 利用プロジェクトは 2026/5 までに移行完了 を計画
📝 試験ポイント
サンセット日付(2026/5/17 と 2027/2/17)と移行先(Bigtable + Vector Search)を覚える。
⚡ 事故 5.2:「BQ で特徴量を更新したのに online で古い値が返る」
🚨 症状
BQ で feature テーブルの値を更新したが、online lookup では 古い値のまま。30 分待っても変わらない。
🔬 原因
新 Feature Store は pull 型。BQ が更新されても FeatureViewSync を起動するまで online store に反映されない。自動同期ではない。
✅ 対処
- Schedule sync を設定(毎時 / 毎日)
- ETL 完了後に明示的に
feature_view.sync()を呼ぶ - Cloud Composer / Workflows で「BQ 更新 → sync → 確認」の DAG
📝 試験ポイント
「Feature Store 値が古い」問題は sync 忘れ が定番原因。
⚡ 事故 5.3:「BQ table と Feature Store が違う region でエラー」
🚨 症状
Feature Group を作成しようとしたら「region mismatch」のエラー。
🔬 原因
公式:「All Vertex AI Feature Store resources must be located in the same region or the same multi-regional location as your BigQuery data source.」
✅ 対処
BQ dataset を Feature Store と同じ region で再作成、または Feature Store を BQ と同じ region で作る。multi-regional の場合は同一 multi-regional 内ならOK。
6️⃣ Vertex AI Pipelines
🔥 事故 6.1:「Pipelines を本番で動かしたら cache が効いて古いデータで予測」
🚨 症状
日次再訓練の Pipeline で、preprocess ステップが cache hit してスキップ。古い前処理結果を使った訓練が成功扱い → 古いモデルが本番デプロイ。
🔬 原因
KFP v2 のキャッシュは 入力ハッシュベース。preprocess の入力(GCS path、parameter)が変わらないと cache hit する。新データが同じ path に追記されるパターンでは入力ハッシュ不変。
✅ 対処
- 本番再訓練 Pipeline では component の
enable_caching=Falseを明示 - または入力にタイムスタンプ / バージョンを必ず入れる(パス変える)
- 開発時のみ cache 有効、本番は無効が安全
📝 試験ポイント
「最新データを使うはずなのに古い結果」は cache を疑う。
⚡ 事故 6.2:「依存性ない 20 タスクを並列実行して quota 超過」
🚨 症状
Pipeline 内に 20 並列の HPT タスクを書いたら、ある時刻にすべて起動 → GPU quota 超過で大半が失敗、課金は走る。
🔬 原因
公式:「By default, pipeline tasks run in parallel.」依存性のないタスクは自動で同時起動。リソース予算超過に注意。
✅ 対処
task1.after(task2)で明示的にシリアル化- または
dsl.ParallelForのparallelism引数で並列度制限 - 事前に GPU/TPU quota を引き上げ申請
- Spot VM + Dynamic Workload Scheduler で確保確実化
⚠️ 事故 6.3:「Schedule で毎時 Pipeline、停止し忘れて月末に大課金」
🚨 症状
検証で Pipeline Schedule を「毎時実行」に設定 → 月末になると数十万円の請求。
🔬 原因
Schedule リソースは「作成 → そのまま」。明示的に pause / delete しない限り永続。失念しがち。
✅ 対処
- Schedule に 有効期限(end_time)を必ず設定
- Cloud Billing Budget Alert で閾値超過時に通知
- 非本番 schedule は「検証完了 → pause」を CI に組み込む
- BigQuery Billing export で run 単位コスト分析
7️⃣ Model Monitoring
🔥 事故 7.1:「Model Monitoring v2 を本番に使ったら SLA なしで困った」
🚨 症状
本番 Endpoint で v2 を採用、ある日 alert が来なくなった。Support に問い合わせるも SLA なし。
🔬 原因
公式:「If you need production-level support and want to monitor a model that's deployed on a Vertex AI endpoint, use Model Monitoring v1.」v2 は依然 Preview。
✅ 対処
- 本番 Endpoint 監視は v1(GA)
- v2 は Batch / 外部モデル / Feature Attribution Drift を使いたいケース
- 並行運用:「maintain both versions concurrently until you have fully migrated」
📝 試験ポイント
v2 が「新しいから常に良い」ではない。Preview と GA の使い分け。
⚡ 事故 7.2:「ベースライン誤設定で false alert 多発」
🚨 症状
本番 1 日目から毎時 drift alert。実際にはモデルは正常稼働。
🔬 原因
ベースラインに 訓練データではなく開発用の小さなサンプル を使った、または 分布が大きく異なる旧バージョンの本番ログ を使った。 JS Divergence の閾値が デフォルトのまま(経験的にデフォルトは保守的)で false positive 続出。
✅ 対処
- ベースラインは 訓練に実際に使ったデータ、または 本番安定期の数日分
- 閾値は 過去ベースライン上で再現性ある値 に調整(PSI で 0.1〜0.3 程度)
- 2 週間「Inspect Only」で運用してから alert を有効化
📝 試験ポイント
Monitoring 導入は「baseline 設定 + 閾値チューニング + warm-up 期間」が必須プロセス。
⚠️ 事故 7.3:「Concept Drift をラベルなしで検知しようとして検知できず」
🚨 症状 / 🔬 原因
Data Drift は出ないがビジネス KPI が劣化。Concept Drift(P(Y|X) の変化)を検知したいが、真のラベルが日次しか取れない ため即時検知できず。
✅ 対処
- Proxy メトリクス を併用(CTR、信頼度の分布、人手レビュー結果)
- ラベル取得を高速化(feedback loop の自動化)
- Feature Attribution Drift で「重要度の入れ替わり」を観測(ラベル不要)
8️⃣ BigQuery ML
🔥 事故 8.1:「ML.GENERATE_TEXT で 1000 万行投げて 100 万円課金」
🚨 症状
レビュー全件感情分析を ML.GENERATE_TEXT で実行、無計画に Gemini Pro を指定して 1 千万行投入 → トークン課金が想定の 100 倍。
🔬 原因
BQML から呼ぶ Gemini も 通常の API 課金と同じ。1 行あたりトークン数 × 1 千万行で爆発。Pro vs Flash で 10 倍差。
✅ 対処
- Flash を使う(精度十分なら)
- Batch API を利用(約 50% 割引、BQML から直接は不可なので Dataflow 経由)
- 小サンプルでコスト試算 → スケール
LIMIT付きで段階実行、cost dry run で見積もり
⚠️ 事故 8.2:「BQML model export で別環境にデプロイしたら精度が違う」
🚨 症状 / 🔬 原因
BQML model を export → 別環境(GKE)にデプロイしたら精度がずれる。原因は BQ 側の暗黙的な前処理(auto encoding / null 処理) が別環境で再現されていない。
✅ 対処
Export 時に TRANSFORM 句の内容も含めて export、推論側でも同じ前処理を実行。または BQML から直接 ML.PREDICT で推論し、結果を別環境に転送。
9️⃣ Gemini API
🔥 事故 9.1:「Context Cache に頼っていたら GCS 更新で silent invalidation」
🚨 症状
Explicit Cache で大量ドキュメントを 24 時間 cache、コスト削減を実現していた。元 GCS ファイルを置き換えたら、cache が無効化された がエラーは出ず、知らない間に毎リクエストが full price に。
🔬 原因
公式:「When caching objects that are stored in a Cloud Storage bucket, don't make changes to objects until the cached contents are expired or deleted ... can cause the associated cached contents to be unusable.」エラー出ず silent。
✅ 対処
- GCS のソースファイルは 不変運用(バージョン付きパス)
- 更新時は新パスを使い、新しい cache を作る
cachedContentTokenCountをモニタリング → 0 が続いたら alert
⚡ 事故 9.2:「VPC SC 境界に cache は入れたが GCS バケットを忘れた」
🚨 症状 / 🔬 原因
機密データを cache に入れたが、ソース GCS バケットを境界に入れ忘れて、結果的に 外部 project から GCS を読める状態。 公式:「include your bucket in your service perimeter as well to protect your cache content.」
✅ 対処
Cache 本体(Vertex AI service)+ GCS バケット + Customer-managed KMS の全てを VPC SC perimeter に含める。アクセスレベルで明示的に許可ユーザーを定義。
⚡ 事故 9.3:「Function Calling で関数 600 個宣言してエラー」
🚨 症状 / 🔬 原因
マイクロサービスの API を全部 Gemini に渡そうとして 600 個の FunctionDeclaration を 1 リクエストで送信 → 上限超過エラー。 公式:「up to 512 FunctionDeclarations」。
✅ 対処
用途別にツールセットを分割(カテゴリで絞り込み)、または 2 段階関数呼び出し(1 段目で「どのカテゴリの関数が必要か」、2 段目で実際の関数)。
⚡ 事故 9.4:「Thinking モデルで thought_signature を捨てて精度低下」
🚨 症状 / 🔬 原因
Function Calling + Thinking モデルで multi-turn 構成。各ターンで response から functionCall だけ抽出して保存 → thought_signature を捨ててしまい 推論コンテキストが切れて精度低下。
公式:「Return the entire response with all parts back to the model in subsequent turns.」
✅ 対処
レスポンス全体を保存し、次ターンの conversation history に「全 parts そのまま」を含める。SDK の sample コードを忠実に踏襲。
🔟 Model Garden
🔥 事故 10.1:「suspicious flag を見落として悪意あるモデルをデプロイ」
🚨 症状
HuggingFace から面白いモデルを Model Garden 経由でデプロイ。実は 悪意あるコード(pickle injection など) を含み、推論時に GCP 認証情報を外部に送信していた。
🔬 原因
公式:「Models deemed suspicious or those that have the ability to potentially execute remote code are indicated in Model Garden but can still be deployed.」フラグは表示されるが deploy 自体は止められない。
✅ 対処
- 「suspicious」フラグは 絶対に無視しない
- OSS モデル選定時は organization policy で vetted モデルのみ allow、それ以外は deny
- デプロイ前に第三者セキュリティスキャン
- サービスアカウントの権限を最小化(ML 推論に必要なものだけ)
- VPC SC で外部送信を遮断
📝 試験ポイント
「OSS モデルは Model Garden 経由なら必ず安全」は嘘。HuggingFace スキャン + Google スキャン + フラグ確認 + 組織ポリシー の 4 段で守る。
1️⃣1️⃣ Model Armor
🔥 事故 11.1:「いきなり Block モードで本番 → ユーザーの 30% がブロックされた」
🚨 症状
Model Armor を「safety filter は High、prompt injection は Low」で Inspect and Block で本番化 → 通常の問い合わせの 30% が false positive で拒否、サポート問い合わせが殺到。
🔬 原因
公式推奨:「start with Inspect only mode to understand potential block rates and efficacy for your specific use case」を無視したパターン。閾値もユースケース調整なし。
✅ 対処
- 最初は必ず Inspect Only で 2〜4 週間運用
- Cloud Logging を分析、false positive と true positive の比率を測定
- 閾値をカテゴリ別に分離:通常は High、prompt injection は Low and above(公式推奨)
- 入出力で別テンプレート(decoupling)
- 段階的に Block 化:軽微カテゴリから順次
⚡ 事故 11.2:「プロンプト末尾に 50 個目以降の URL を仕込まれた」
🚨 症状 / 🔬 原因
攻撃者が 50 個目以降の URL に悪意ある URL を仕込み、Model Armor を回避してフィッシングリンクを生成出力。 公式制限:「Model Armor scans only the first 40 URLs found in prompts and responses.」
✅ 対処
- アプリ側で URL 数を制限(事前に 40 個まで truncate)
- 出力をアプリ側でも再スキャン(Cloud DLP で URL infoType)
- ホワイトリスト方式(信頼ドメインのみ通す)
1️⃣2️⃣ Explainable AI
🔥 事故 12.1:「2027/3 以降アクセスできなくなった」
🚨 症状
Explainable AI を本番システムに組み込んでいたが、2027 年 3 月 16 日 以降 API が呼べなくなる。
🔬 原因
公式:「deprecated as of March 16, 2026」、「access will no longer be available after March 16, 2027」。
✅ 対処
- 2026/3 以降の新規プロジェクトは Agent Platform Inference の Explainability を使う
- 既存 Explainable AI 利用は 2027/3 までに移行完了
⚠️ 事故 12.2:「画像モデルに Sampled Shapley 適用で遅すぎる」
🚨 症状 / 🔬 原因
画像分類モデルに何となく Sampled Shapley を選んで、1 リクエスト 30 秒以上かかる。
公式:「more computationally expensive than necessary」when applied to differentiable models。
✅ 対処
差別可能(DNN)なら Integrated Gradients、画像のリージョン重要度なら XRAI。steps_count を 50〜100 に調整。
1️⃣3️⃣ Sensitive Data Protection (DLP)
⚡ 事故 13.1:「DLP で PII マスクしたが、文脈から復元可能だった」
🚨 症状 / 🔬 原因
「田中太郎さん(45 歳、東京都新宿区在住)」を「***さん(45 歳、東京都新宿区在住)」のように名前だけマスク → 文脈で個人特定可能。k-anonymity を満たさない。
✅ 対処
- DLP の de-identification template で関連属性も同時マスク
- generalization(年齢 → 年齢層、住所 → 区まで)
- k-anonymity / l-diversity / t-closeness の risk analysis 機能を併用
- 機密度が高いケースは differential privacy
⚠️ 事故 13.2:「日本語 infoType の精度が低くて漏洩」
🚨 症状 / 🔬 原因
日本人の名前・住所などは英語ほど DLP の builtin infoType が充実していない。false negative で見落とし。
✅ 対処
- custom infoType(regex / dictionary / hotword)を作成
- 日本語に特化したサードパーティライブラリ・ML モデルと併用
- likelihood を LIKELY 以上(厳しめ)に設定
1️⃣4️⃣ IAM / VPC SC
🔥 事故 14.1:「Workbench に admin ロールを付けて開発者が DB drop」
🚨 症状 / 🔬 原因
「面倒だから Workbench に Owner ロール付与」→ ノートブックから誤って本番 DB をドロップ。
✅ 対処
- 最小権限の原則:Workbench は
notebooks.runner+ 必要な data viewer のみ - 本番 DB は 別プロジェクトに分離
- 監査ログ(Cloud Audit Logs)で予期せぬアクセスを検知
- VPC SC で本番リソースを境界保護
⚡ 事故 14.2:「VPC SC 設定後に Pipeline が全部失敗」
🚨 症状 / 🔬 原因
VPC SC を有効化 → Vertex AI Pipelines のサービスアカウントが perimeter 外 になり、突然全 pipeline が PERMISSION_DENIED。
✅ 対処
- VPC SC の Ingress / Egress Rules で Vertex AI service agent を許可
- Dry-run モード で事前検証(実際にブロックする前にログだけ)
- Service Agent の identity を VPC SC perimeter の access level に追加
1️⃣5️⃣ コスト爆発の典型パターン
| パターン | 典型原因 | 予防策 |
|---|---|---|
| Workbench 起動しっぱなし | Idle shutdown 未設定 | 30 分 idle で自動停止 |
| Pipeline Schedule の永続実行 | end_time なし | 必ず end_time、Budget Alert |
| Endpoint min_replicas 過大 | 「念のため」常時 10 台 | SLA から逆算、min_replicas は最小 |
| BQML ML.GENERATE_TEXT で大量行 | Pro モデル + 1000 万行 | Flash + 小サンプル試算 + Batch |
| Reduction Server 過剰追加 | 「あったほうが良い」 | 事前プロファイル、帯域マッチング |
| Vertex Tensorboard を切り忘れ | 常時起動課金 | 使い終わったら停止 |
| GPU/TPU 永続クラスタを夜間も稼働 | persistent resource で起動しっぱなし | job 終了で auto-stop、または schedule |
| Model Monitoring v2 周辺サービス | v2 自体は無料だが BQ/Logging/Explainable AI が課金 | サンプリング率を 5〜10% に |
| Gemini プロンプトが冗長 | 毎リクエスト数千トークン | system instruction を cache、最短プロンプト |
| Pipelines キャッシュ無効化忘れ | 本番で「最新データ」のはずが前回 cache | 本番 component は enable_caching=False |
- Project ごとに Budget を設定し、80% で alert、100% で notification
- Quota も同時に絞る(請求書ではなくサービス側でも止まる二重防御)
- BQ Billing export で日次・週次の自動分析
- Resource Labels(team, env, model)でコスト分解
📋 サービス × 事故 早見表
| サービス | 致命事故 | 頻発事故 | 必須対策 |
|---|---|---|---|
| Custom Training | VM 再起動で進捗喪失 | permission, FUSE 非 POSIX | AIP_CHECKPOINT_DIR + resume |
| 分散訓練 | RS 帯域不足で逆遅化 | NaN loss、worker pool 順序 | BF16、帯域マッチング |
| TPU | 世代変更で性能低下 | Multislice 障害伝播 | シャーディング再調整、非同期 ckpt |
| Endpoint | 全置換でレイテンシ激増 | gRPC ヘッダ忘れ、PyTorch data ラッパー | カナリア + traffic_split |
| Feature Store | Optimized サンセット | sync 忘れ、region 不一致 | Bigtable serving + Schedule sync |
| Pipelines | cache で古いモデル本番化 | 並列で quota、Schedule 暴走 | 本番 caching=False、end_time |
| Model Monitoring | 本番 SLA なし (v2 Preview) | false alert 多発 | 本番は v1、ベースライン調整 |
| BQML | ML.GENERATE_TEXT 課金爆発 | export 後の前処理ズレ | Flash + 試算、TRANSFORM 句 |
| Gemini API | GCS 更新で cache silent invalidation | function 512 超、thought_signature | 不変ソース、レスポンス全保持 |
| Model Garden | suspicious モデルデプロイ | OSS 認証情報漏洩 | org policy、VPC SC、SA 最小化 |
| Model Armor | いきなり Block で false positive | 40 URL 制限超え | Inspect Only → 段階 Block |
| Explainable AI | 2027/3 sunset | 手法選択ミスで遅延 | Agent Platform 移行、IG/XRAI |
| DLP | 文脈で復元可能 | 日本語 false negative | de-identification、custom infoType |
| IAM / VPC SC | Owner で誤操作 | VPC SC で Pipeline 失敗 | 最小権限、dry-run |
本番事故は「公式が推奨する逆」をやると起きやすい。 試験は 「最もコスト効率・運用負荷・スケール・安全な選択肢」 を選ばせるため、 この事故ケース集の「対処・予防」がほぼそのまま 正解の根拠 になります。 各事故の「📝 試験ポイント」を音読することで、シナリオ問題の「なぜその選択肢が正解か」が即答できます。