はじめに
こんにちは。マイクロアドで機械学習エンジニアをしている天野です。
マイクロアドの機械学習チームでは、機械学習関連のバッチ実行にVertex AI PipelinesというGoogle Cloud Platformが提供するマネージドのワークフロー実行サービスを利用しています。
利用を始めたのは昨年からで準備バッチのリプレースを進めている段階なのですが、componentsやpipelinesが正常に動作するかの検証、componentsを実行するDocker imageのBuildやPushなどの処理を効率的に行えていなく、移行に時間がかかっているという課題がありました。
これらの課題を解決するためにVS CodeのDev Containerを試したところ好印象な部分が多かったので、今回の記事ではDev Containerを用いたVertex AI Pipelinesの開発環境構築についてご紹介しようと思います。
また、Vertex AI Pipelinesを用いたMLバッチのディレクトリ設計についての記事も公開しているので、こちらも合わせてご一読ください。 developers.microad.co.jp
Vertex AI Pipelinesとは
Vertex AI Pipelinesは、GCPが提供するワークフロー実行サービスです。 Kubeflow Pipelinesのドメイン固有言語で処理の最小単位でコンポーネントを記述し、それを組み合わせることでパイプラインと呼ばれるMLワークフローを定義します。 定義したパイプラインの実行結果はGUIから確認でき、コンポーネント間の依存関係を視覚的に把握できます。
詳細なcomponentsやpipelines、ディレクトリ構成については前述の記事を確認してください。
Dev Containerとは
Dev Containerは、開発環境をコンテナ技術を使って構築・管理する手法のことです。 Microsoftによって開発され、Visual Studio Code(VS Code)に統合されています。 VS CodeのDev Container(Remote Containers)拡張機能を使用することで、開発者はローカル環境やクラウド上のコンテナ内でコードを編集し、デバッグすることができます。
これにより、開発者は一貫した環境で開発を進めることができ開発環境を再現するコストを最小限にすることができます。 機械学習チームでは以下の点にメリットを感じ Dev Container を使用しています。
- 開発環境の共通化:すべての開発者が同じ環境で作業できるため、環境間の違いによる問題が発生しにくい
- ロジック部分の検証の簡易化:コンテナ内で直接ロジック部分を検証できるため、アドホックに開発を進められる
- 効率的なビルドとデプロイ:DockerのBuildとPushをコンテナ内から直接行えるため、効率的に開発・検証を行える
開発環境
Vertex AI Pipelinesは、GCP認証された環境から実行することができます。具体的に、機械学習チームではGoogle Cloud Engine(GCE)上にインスタンスを作成し開発しています。GCEのインスタンスを使用することで、必要に応じてリソースを柔軟にスケールさせることができ、信頼性の高い環境を提供できます。
また、実行環境の依存関係やライブラリのバージョン管理などの問題を解決するために Docker を活用しています。Dockerを使用することで、コンテナ内でプログラムを実行し、一貫した開発環境を維持できます。これにより、異なる開発環境間での設定の違いによる問題を最小限に抑えることができます。
さらに、Docker コンテナ内で Vertex AI Pipelines を開発・検証するために、Dev Container を利用しています。 これにより、GCP環境下での開発を効率よくすることができます。このようにDev Containerを活用することで一貫性のある開発環境を保ちながら効率的に開発を進めることができていると感じています。
Dev Containerの準備
次にDev Containerの設定について説明します。
Dev Container は .devcontainer ディレクトリを作成し、その中に devcontainer.json を配置するだけで設定できます。 構成のイメージとしては以下の通りになります。
├── .devcontainer │ └── devcontainer.json ├── components ├── pipelines ├── src ├── tests ├── cloudbuild.yaml ├── Dockerfile ├── Jenkinsfile └── requirements.txt
Dev containerとして利用したいDockerコンテナを指定する方法は、compose.yml 内に記述しているコンテナを指定、直接Dockerfileを指定する方法などがあります。
例1) compose.yml内に記述されているコンテナを指定する場合のdevcontainer.json
{ "name": "python", "dockerComposeFile": [ "../compose.yml" ], "workspaceFolder": "/workspace", "features": { "ghcr.io/devcontainers/features/docker-outside-of-docker:1": {}, "ghcr.io/dhoeric/features/google-cloud-cli:1": {} }, "customizations": { "vscode": { "extensions": [ ], } } }
featuresの部分で docker-outside-of-docker と google-cloud-cli を追加することによって、Dockerコンテナ内からVertex AIで利用するDockerイメージのBuildとPush、Google Cloudへのアクセスが可能になります。 また、customizationsのextensionsでDev Containerを起動した際に自動でインストールして欲しい拡張機能も指定できます。
例2) Dockerfileを指定する場合のdevcontainer.json
以下の方法でDockerfileを指定することもできます。 本番環境で動作させる予定のDockerfileを指定することで、正常に処理できるかを調査することも出来そうですね。
{ "name": "python", "build": { "dockerfile": "../Dockerfile", } (以下省略) }
例3) Docker imageを指定する場合のdevcontainer.json
以下の方法でDocker Imageを直接指定することも出来ます。これは単純にデータを分析する環境を構築するときにサクッと構築できるので便利です。 MicrosoftからDev Container用のDocker imageというものが公開されています。このDocker imageを使えば安定してDev Containerを構築できるのでおすすめです。
{ "name": "python", "image": "mcr.microsoft.com/devcontainers/base:ubuntu" (以下省略) }
Dev Containerの起動
Dev Containerの起動手順は以下の通りです。
- コマンドパレット(⌘ or Ctrl + Shift + P)を開く
- Dev Containers: Reopen in Container を入力して、コンテナーで再度開くを選択
- (初回起動時は、Buildなどがあるため少し待機)
- Dev Container内で作業を開始
おわりに
Vertex AI PipelinesはGoogle Cloud上で実行されるため、Pipelineの動作確認には実際に実行してみる必要があります。これまではCIかVertex AI Workbenchを使ってデバッグを行っていましたが、Dev Containerを使用することで効率的に開発・検証を進められるようになりました。
この記事がVertex AI Pipelinesの導入を検討している方の参考になれば幸いです。