はじめに
本記事では、社内で開催したMLコンテストの計算環境の準備や権限管理に関する話をします。
コンテストの概要や問題設定に関しては以下の記事を参考にしてください。
目次
計算環境の選定
これまでのハッカソンでは、分析やモデルの学習のために計算環境を参加者に提供していました。 その手軽さからGoogle Colab1を計算環境として採用していました(詳細は こちら )。 Google Colabは、環境構築の必要なくnotebookを利用することができます。 また、無料でGPUやTPUも使うことができます。
一方で、Google Colabは使えるメモリの上限や利用時間によってセッションが途切れるなど、用途に対しての限界を感じる部分もありました。
具体的には、「大きな行列を扱いたい際やテキストデータの解析時にメモリが足りない」、「並列処理で計算を高速したいのでコア・スレッドがもっと欲しい」などです。
用途にあった計算環境提供のため、以下三つの選択肢を比較検討しました。
検討の観点は、以下です。
- 構築容易性
- スペック充足
- 料金(高すぎないか)
- BigQueryとの接続容易性
コンテストでは、数十人の参加者が見込まれるため環境の構築が容易であることが求められます。 また、トラブルシューティングのため参加者と同等の環境を瞬時に準備できるとなお良いでしょう。
スペックの充足は、前述の通りメモリの上限など必要に応じてスペックをあげることができる必要があります。 料金は高すぎず、コンテストの実施予算に収まる必要があります。 また、コンテストは決められた日程で実施するため月額課金ではなく、時間課金であるとなお良いでしょう。 データセットはBigQueryで管理され、採点もBigQueryを用いて行われるため、BigQueryと接続が容易であることが求められます。
Colab Pro/Colab Pro+は、月額課金によってColabで利用できるメモリやGPUのスペックをあげることができます。 金額も同スペックのCompute Engineと比べても安く、リーズナブルです5。
まさに求めていたものですが、「決済」が壁となりました。 Colab Proの決済はアカウント単位であり、利用するアカウントにBillingの権限が必要となります。 アカウントにクレジットカードが結びつくので、アカウントごとにカード情報入れて決済となります。 Googleに問い合わせたところ一括支払いは可能ではありませんでした(2021年8月25日当時)。 コンテストの参加者にコーポレートカード情報を共有して決済してもらうのは現実的ではないため、この選択肢は諦めました。
次に調査したのは、Vertex AI Workbenchです。 Vertex AI Workbenchは、データサイエンスのワークフローを支援する開発環境です。 その機能の一つとしてマネージドnotebookを提供しており、容易にnotebook環境を構築することができます。
Vertex AI WorkbenchをGUIから構築する際の設定画面を掲載します。
Vertex AI Workbenchでは、Compute Engineの上にnotebookが自動的に立ち上がり、notebookのログ各種リソースモニタリングをGCPコンソール上で確認することができます。 この時Compute EngineのマシンタイプやGPUの種類はカスタマイズすることができます。
また、「ユーザー管理のノートブック」では、より柔軟にOSやCompute Engine上で動くコンテナイメージを指定することができます。
さらに、Terraform6が、Vertex AI Workbench notebookの構築に対応しており7、同スペックのnotebookを複数構築することも容易です。
Vertex AI Workbenchの料金は、notebookのバックグラウンドに指定した Compute EngineやGPUの料金の合計となり、追加の料金は発生しません8。
また、BigQueryとの接続容易性ですが、同一GCPプロジェクト内では、特別な設定をすることなく、接続することができました。
この時点で、前述の比較観点では、Compute Engine4 などを用いて独自に環境構築するメリットはほぼ考えられなかったため、Vertex AI Workbenchを採用することにしました。
権限管理
コンテストで求められる権限管理は、以下の要件です。
- Vertex AI Workbench
- 主催者
- 構築、変更、削除可能
- 全アカウント共通
- notebookへのアクセス可能
- 主催者
- BigQuery
- 全アカウント共通
- データセット、テーブルを作成可能
- 訓練データが入ったテーブルにクエリできる
- テストデータの説明変数が入ったテーブルにクエリできる
- 参加者
- テストデータの目的変数が入ったテーブルにクエリできない
- 全アカウント共通
また、権限の付与・削除は、コンテストやハッカソンをエンジニアやデータサイエンティスト以外の観点から支援いただく方々でも容易に実施できるようにGCPコンソール以外のより単純な方法が良いと考えました。
その結果Google GroupにGCPの権限を割り当て、Google Group単位で権限の管理を行うことにしました。 Google Groupへの追加は、画像のようなGUIから簡単に行うことができます。
具体的には、参加者のGoogle Groupと主催者のGoogle Groupを作成し、それぞれにIAMの管理から必要な権限を付与しました。 これにより参加者と主催者はBigQueryへのView権限が付与されます。
しかしIAMの管理からBigQueryデータセット・テーブルへの権限を付与・剥奪することはできません。このままでは回答である「テストデータの目的変数が入ったテーブル」へのアクセスが可能になってしまいます。
そこで「テストデータの目的変数が入ったテーブルにクエリできない」はBigQueryのデータセット権限から制御しました。
コンテスト当日の様子
コンテスト当日は約40名の参加があり、Vertex AI Workbenchもその数だけ構築し、notebookを配布する必要がありました。 前述の通り、Terraformで構築可能なためコマンド一つで全ての準備が整います。
また、以下の画像のように各インスタンスのログやリソースの使用状況などもGCPコンソールから閲覧することが可能です。
コンテスト中に以下のようなエラーページが表示されてnotebookにアクセスできなくなったという意見がいくつか寄せられました。
このようなエラーの多くはOut of memory: Kill process *** (python)
というログが出力されており、 Workbench内の処理でOOMが発生したことを示していました。
探索的データ分析を行う際、メモリを多く使う処理を行うことは往々にしてありOOMもまま発生します。 このようなエラー画面が表示された場合、 Workbenchの再起動が必要となりますが、参加者にはVertex AI Workbenchに関する権限はnotebookのアクセス以外付与していなかったため、参加者が個々で再起動することはできませんでした。 そのため上記の画面になったと連絡を受けるたびに再起動を実施するという想定していないフローが発生することとなりました。
notebookへのアクセス制限は行えるものの、特定のnotebookインスタンスの再起動を可能にするパーミッションはありません。 再起動の権限を参加者に付与すると、他の参加者のnotebookインスタンスも再起動できることになってしまいます9。
社内イベントのため性善説に立ったとしてもヒューマンエラーにより他の参加者のnotebookインスタンスを再起動してしまうことは考えられるので、これは将来に残された課題です。
We are Hiring!!
弊社では、様々な職種のエンジニアを募集しています。興味のある方は、以下の採用ページをご覧ください。
===========================
株式会社リクルート 中途採用サイト リクルート 学生向けキャリアサイト
===========================
-
Colab Proのスペック参考:https://atmarkit.itmedia.co.jp/ait/articles/2106/07/news025.html ↩︎
-
https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/notebooks_instance ↩︎
-
ユーザー管理のノートブックを指定した場合、別途管理手数料がかかります。詳細は:https://cloud.google.com/vertex-ai/pricing#managed-notebooks ↩︎
-
参加者全員に同じ権限が付与されることでコンテストとして不都合があることを意味しており、権限昇格・想定しない機微情報へのアクセス、そのほかセキュリティ的に意図しない動作を示唆するものではありません。 ↩︎
検索エンジニア
河野 晋策
バイクに乗ってます