12
1

なんとなく Vertex AI を触って放置してたら 10万円 課金された話

Last updated at Posted at 2023-12-03

何が起こったか

12月1日 Google から突然メールが届きました

「あぁ、毎月恒例の0円の請求書か」

そう油断していた私に驚愕の数字が飛び込んできました

スクリーンショット 2023-12-02 18.37.06.png

99,028 円!!!!!!!!!!

嘘だろ・・・そう思った私はすぐに Google Cloud Console の支払い画面を開きました

image.png

どうやらこれは夢ではなかったようです

なんと、11月7日から毎日コンスタントに 3,379円課金され続けていたのです

何が起こっていたのか

具体的にプロジェクトの内訳を見ると課金対象のプロジェクトが2つあって、うち一つ(図の青色のプロジェクト)が課金額の8割以上を占めていました(83,354円)

プロジェクトの中に入って詳しく見てみると課金されていたのは Vertex AI でそのうちの Feature Store online serving node というのが課金額の大部分(83,352円)を占めています

image.png

そこで Vertex AI のコンソールを調べてみたところ「特徴量」のセクションに以下の node がデプロイされていました

スクリーンショット 2023-12-02 18.49.51.png

「オンラインサービング」

「固定ノード」

聞き慣れない言葉に私は大きな不安を覚えました

これは一体なんなんだろう?と思って Google のドキュメントを調べたところ以下のような記述が見つかりました

オンラインサービングについての説明

オンライン処理を使用すると、少量のエンティティの特徴値を低レイテンシで処理できます。リクエストごとに、単一のエンティティ タイプからの特徴値のみを処理できます。Vertex AI Feature Store(レガシー)は、各特徴の最新の値(null 以外)のみを返します。

固定ノードについての説明

固定ノード数を割り当てると、Vertex AI Feature Store(従来版)はトラフィック パターンに関係なく一貫したノード数を維持します。ノード数は固定されるため、コストは予測可能です。トラフィックの処理に十分なノード数があれば適切に機能します。トラフィック パターンの変化に対応するため、ノード数を手動で変更できます。

どうやらオンラインサービングとはリクエスト1個単位で機械学習モデルによる予測を動かせる機能で、固定ノードの設定は、オンラインサービングを有効にした際にトラフィック量に関係なくリソースを割り当てる設定のようです。

通常機械学習モデルの予測はある程度のデータをひとまとめにしてバッチ処理的に行うことが多いですが、この機能を使えば、ユーザーからの操作に対してリアルタイムで機械学習による予測結果を提供できるということですね、便利便利

しかしVertex AIをちょっと試したいだけだった私にとっては悪魔のような機能だったみたいで、誰も使わない機械学習モデルに毎日一定のリソースを割り当てた上で、オンライン上で常に待機状態にしてしまったことになります

仮説の検証

ちなみに feature store の料金設定は以下のようになっています

image.png

これによると私が使っていた us-central1 というリージョンでオンラインサービングを固定ノード1で1ヶ月弱動かすと以下のようになります

% python
Python 3.10.13 (main, Sep  9 2023, 17:49:45) [Clang 14.0.0 (clang-1400.0.29.202)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 0.94*24*25
564.0
>>> 564*146
82344

時間単価 \$0.94 なので 24時間 * 25日で \$564

\$1 = 146円で計算すると日本円で 82,344 円になります

「これじゃん!!!!!!!!!」

この計算結果は先月の私の課金額とほぼ一致しました

どうやら今回のトラブルはこの Feature Store の設定ミスによるものだということが仮説から確信に変わった瞬間です

どうすればよかったか

では、このようなトラブルを防ぐために私は何をするべきだったのか

仮説ベースで対策を3つ挙げてみます

1. Feature Store のオンラインサービングの設定を OFF にする

先ほどの料金表を見ても分かるとおり、Feature Store はオンラインサービングを OFF にするだけで使わなければ基本課金額は 0 になります

他のオペレーションの課金は処理するデータ量単位で、オンラインサービングのみが時間単位(かつノード単位)だからです

今回の事件は図のようにオンラインサービングトグルを少し左にずらしておけば完全に防げた問題でした

image.png

ただこのトグルボタン、デフォルトの状態だとおそらく ON になっていて、Google Cloud 初心者がこの設定に気づくのは難しいかもしれません

2. Google Cloud に予算を設定する

Google Cloud の支払画面には「予算とアラート」という項目があり、これを設定しておけば課金額が一定の金額を超えたときにユーザーにメールでアラートが届くようになります

例えば以下のように予算を毎月10,000円に設定しておけば課金額5,000円の時、9,000円の時、10,000円の時の3回ユーザーにアラートのメールを送ってくれるようになります

image.png

いきなり月末にメールが来るのではなく、一定の課金額に達したときにお知らせメールをもらう設定をしていれば、被害が最初限に抑えられた可能性は高いです

3. 使わないリソース・プロジェクトはすぐに削除する

これまでの話で分かる通り、Google Cloud の提供するサービスの中には全く使わなくても時間単位で課金されてしまうサービスがあります

これを防ぐには使わないリソースは即座に削除しておくことが最も根本的な対策です

最近別件で私が使っていた Vertex AI の quickstart にも以下のような一文が書いてあったのでした

IMPORTANT: Cleaning Up

In case you are using your own Cloud project, not a temporary project on Qwiklab, please make sure to delete all the Indexes, Index Endpoints and Cloud Storage buckets after finishing this tutorial. Otherwise the remaining objects would incur unexpected costs.

これを読んでいた時は、「ほーんリソース消し忘れて課金される哀れな人がいるんだなぁ」くらいに思っていたのですが、まさか自分がその筆頭になるとは思いもしませんでした orz

まとめと反省

今までこういったクラウドサービスで万単位の課金をされたことがなかったので完全に油断していました

これまでの請求額が0円でも、ちょっとした操作ミスで簡単に10万円課金されてしまうという意味でクラウドコンピューティングサービスの怖さを身をもって叩き込まれた気がします

今回消えてしまった10万円は高い高い勉強代ということで今後の人生に活かしたいと思います

12
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
1