環境を設定する

Vertex AI Neural Architecture Search のテストを開始する前に、以下のセクションに従って環境を設定します。

始める前に

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. Vertex AI API を有効にします。

    API を有効にする

  5. Google Cloud CLI をインストールします。
  6. gcloud CLI を初期化するには:

    gcloud init
  7. gcloud コンポーネントを更新してインストールします。
    gcloud components update
    gcloud components install beta
  8. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  9. Google Cloud プロジェクトで課金が有効になっていることを確認します

  10. Vertex AI API を有効にします。

    API を有効にする

  11. Google Cloud CLI をインストールします。
  12. gcloud CLI を初期化するには:

    gcloud init
  13. gcloud コンポーネントを更新してインストールします。
    gcloud components update
    gcloud components install beta
  14. すべての Neural Architecture Search ユーザーに Vertex AI ユーザーロール(roles/aiplatform.user)を付与する場合は、プロジェクト管理者にお問い合わせください。
  15. Docker をインストールします

    Ubuntu や Debian などの Linux ベースのオペレーティングシステムを使用している場合は、ユーザー名を docker グループに追加して、sudo を使わずに Docker を実行できるようにします。

    sudo usermod -a -G docker ${USER}
    

    docker グループにユーザー名を追加した後に、システムの再起動が必要となる場合があります。

  16. Docker を開きます。Docker が稼働中であることを確認するには、次の Docker コマンドを実行します。このコマンドにより、現在の時刻と日付が返されることを確認します。
    docker run busybox date
  17. Docker 認証ヘルパーとして gcloud を使用します。
    gcloud auth configure-docker
  18. (省略可)GPU をローカルで使用してコンテナを実行する場合は、nvidia-docker をインストールします。

Cloud Storage バケットを設定する

このセクションでは、新しいバケットの作成方法を説明します。既存のバケットを使用することもできますが、AI Platform ジョブを実行するリージョンと同じリージョンにある必要があります。また、Neural Architecture Search を実行するプロジェクトに含まれていない場合は、Neural Architecture Search サービス アカウントにアクセス権を明示的に付与する必要があります。

  1. 新しいバケットに名前を指定します。名前は Cloud Storage のすべてのバケット全体で重複しないようにする必要があります。

    BUCKET_NAME="YOUR_BUCKET_NAME"

    たとえば、プロジェクト名に -vertexai-nas を追加したものを使います。

    PROJECT_ID="YOUR_PROJECT_ID"
    BUCKET_NAME=${PROJECT_ID}-vertexai-nas
  2. 作成したバケット名を確認します。

    echo $BUCKET_NAME
  3. バケットのリージョンを選択して、REGION 環境変数を設定します。

    Neural Architecture Search ジョブを実行するリージョンと同じリージョンを使用してください。

    たとえば、次のコードは REGION を作成し、us-central1 に設定します。

    REGION=us-central1
  4. 新しいバケットを作成します。

    gsutil mb -l $REGION gs://$BUCKET_NAME

プロジェクトの追加デバイス割り当てをリクエストする

チュートリアルで使用する CPU マシンは約 5 台で、追加の割り当ては必要ありません。チュートリアルを実行したら、Neural Architecture Search ジョブを実行します。

Neural Architecture Search ジョブは、モデルのバッチを並行してトレーニングします。各トレーニング済みモデルは 1 つのトライアルに対応しています。検索ジョブに必要な CPU と GPU の量を見積もる方法については、number-of-parallel-trials の設定のセクションをご覧ください。たとえば、各トライアルで 2 T4 GPU を使用し、number-of-parallel-trials を 20 に設定した場合、検索ジョブには合計 40 T4 GPU の割り当てが必要です。さらに、各トライアルで highmem-16 CPU を使用している場合は、トライアルごとに 16 個の CPU ユニットが必要です。つまり、20 回の並列トライアルの場合は 320 CPU ユニットです。ただし、少なくとも 10 回の並列トライアルの割り当て(または 20 個の GPU の割り当て)が必要です。GPU のデフォルトの初期割り当ては、リージョンと GPU タイプによって異なり、通常は、Tesla_T4 の場合は 0、6、12、Tesla_V100 の場合は 0 または 6 になります。CPU のデフォルトの初期割り当てはリージョンによって異なり、通常は 20、450、または 2,200 です。

省略可: 複数の検索ジョブを並行して実行する場合は、割り当て要件をスケーリングします。割り当てをリクエストしても、すぐには課金されません。ジョブを実行すると課金されます。

十分な割り当てがなく、割り当てを超えるリソースを必要とするジョブを起動しようとすると、ジョブは起動せず、次のようなエラーが表示されます。

Exception: Starting job failed: {'code': 429, 'message': 'The following quota metrics exceed quota limits: aiplatform.googleapis.com/custom_model_training_cpus,aiplatform.googleapis.com/custom_model_training_nvidia_v100_gpus,aiplatform.googleapis.com/custom_model_training_pd_ssd', 'status': 'RESOURCE_EXHAUSTED', 'details': [{'@type': 'type.googleapis.com/google.rpc.DebugInfo', 'detail': '[ORIGINAL ERROR] generic::resource_exhausted: com.google.cloud.ai.platform.common.errors.AiPlatformException: code=RESOURCE_EXHAUSTED, message=The following quota metrics exceed quota limits: aiplatform.googleapis.com/custom_model_training_cpus,aiplatform.googleapis.com/custom_model_training_nvidia_v100_gpus,aiplatform.googleapis.com/custom_model_training_pd_ssd, cause=null [google.rpc.error_details_ext] { code: 8 message: "The following quota metrics exceed quota limits: aiplatform.googleapis.com/custom_model_training_cpus,aiplatform.googleapis.com/custom_model_training_nvidia_v100_gpus,aiplatform.googleapis.com/custom_model_training_pd_ssd" }'}]}

同じプロジェクトの複数のジョブが同時に開始され、そのすべてに対して割り当てが不十分な場合、いずれかのジョブがキュー待機状態のままになり、トレーニングが開始されないことがあります。この場合、キューに入れられたジョブをキャンセルし、割り当ての増加をリクエストするか、または前のジョブが完了するまで待機します。

[割り当て] ページからデバイスの追加割り当てをリクエストできます。フィルタを適用して、編集する割り当てを見つけることができます。 割り当てのフィルタ

  1. [サービス] で [Vertex AI API] を選択します。
  2. [リージョン] で、フィルタリングするリージョンを選択します。
  3. [割り当て] で、接頭辞が「Custom model training」のアクセラレータ名を選択します。
    • V100 GPU の場合、値は Custom model training Nvidia V100 GPUs per region になります。
    • CPU の場合、値は Custom model training CPUs for N1/E2 machine types per region になります。CPU の数は、CPU の単位を表します。8 個の highmem-16 CPU が必要な場合は、割り当てリクエストを 8 × 16 = 128 CPU 単位で作成します。[リージョン] に目的の値を入力します。

割り当てリクエストを作成すると、Case number を受け取り、リクエストのステータスについてフォローアップ メールを送信します。GPU 割り当ての承認には、約 2~5 営業日かかることがあります。一般に、約 20~30 の GPU の割り当てを取得するのに要する時間は約 2~3 日で、約 100 GPU の承認には 5 営業日ほどかかります。CPU 割り当ての承認には、最大で 2 営業日かかることがあります。ただし、あるリージョンで GPU タイプが著しく不足している場合は、少量の割り当ての要求でさえも保証されません。この場合、別のリージョンまたは別の GPU タイプを選択するように求められることがあります。一般に、T4 GPU は V100 よりも簡単です。T4 GPU は実経過時間が長くなりますが、費用対効果に優れています。

詳細については、割り当て上限の引き上げをリクエストするをご覧ください。

プロジェクトの Artifact Registry を設定する

Docker イメージを push するプロジェクトとリージョンに Artifact Registry を設定する必要があります。

プロジェクトの [Artifact Registry] ページに移動します。まだ有効にしていない場合は、まずプロジェクトに対して Artifact Registry API を有効にします。

Artifact Registry を有効にする

有効にしたら、[リポジトリを作成] をクリックして、新しいリポジトリの作成を開始します。

Artifact Registry を作成する

名前として nasフォーマットとして DockerRegion としてロケーション タイプを選択します。[リージョン] で、ジョブを実行するロケーションを選択し、[作成] をクリックします。

Artifact Registry の設定

これで、以下のように、必要な Docker リポジトリが作成されるはずです。

Artifact Registry が作成されました

このリポジトリに Docker を push するための認証も設定する必要があります。この手順は、以下のローカル環境の設定セクションに含まれています。

ローカル環境を設定する

以下の手順は、ローカル環境の Bash シェルまたは Vertex AI Workbench ユーザー管理のノートブック インスタンスで行うことができます。

  1. 基本的な環境変数を設定します。

    gcloud config set project PROJECT_ID
    gcloud auth login
    gcloud auth application-default login
    
  2. Artifact Registry に Docker 認証を設定します。

    # example: REGION=europe-west4
    gcloud auth configure-docker REGION-docker.pkg.dev
    
  3. (省略可)Python 3 仮想環境を構成します。Python 3 の使用をおすすめしますが、必須ではありません。

    sudo apt install python3-pip && \
    pip3 install virtualenv && \
    python3 -m venv --system-site-packages ~/./nas_venv && \
    source ~/./nas_venv/bin/activate
    
  4. その他のライブラリをインストールします。

    pip install google-cloud-storage==2.6.0
    pip install pyglove==0.1.0
    

サービス アカウントを設定する

NAS ジョブを実行する前に、サービス アカウントを設定する必要があります。以下の手順は、ローカル環境の Bash シェルまたは Vertex AI Workbench ユーザー管理のノートブック インスタンスで行うことができます。

  1. サービス アカウントを作成します。

    gcloud iam service-accounts create NAME \
        --description=DESCRIPTION \
        --display-name=DISPLAY_NAME
    
  2. サービス アカウントに aiplatform.user ロールと storage.objectAdmin ロールを付与します。

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/aiplatform.user
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/storage.objectAdmin
    

たとえば、次のコマンドは、プロジェクト my-nas-project の下に、aiplatform.user ロールと storage.objectAdmin ロールを持つ my-nas-sa という名前のサービス アカウントを作成します。

  gcloud iam service-accounts create my-nas-sa \
      --description="Service account for NAS" \
      --display-name="NAS service account"
  gcloud projects add-iam-policy-binding my-nas-project \
      --member=serviceAccount:my-nas-sa@my-nas-project.iam.gserviceaccount.com \
      --role=roles/aiplatform.user
  gcloud projects add-iam-policy-binding my-nas-project \
      --member=serviceAccount:my-nas-sa@my-nas-project.iam.gserviceaccount.com \
      --role=roles/storage.objectAdmin

コードをダウンロードする

Neural Architecture Search のテストを開始するには、サンプルの Python コードをダウンロードする必要があります。これには、事前構築されたトレーナー、検索空間の定義、関連するクライアント ライブラリが含まれます。

次の手順でソースコードをダウンロードします。

  1. 新しい Shell ターミナルを開きます。

  2. Git clone コマンドを実行します。

    git clone https://github.com/google/vertex-ai-nas.git