建立用於訓練的自訂容器映像檔

使用自訂容器映像檔,在 Vertex AI 上訓練時可享有最大彈性。如要瞭解使用自訂容器映像檔與使用預先建立的容器搭配 Python 訓練應用程式有何不同,請參閱「訓練程式碼需求」。

本指南將逐步說明下列步驟:

  1. 建立自訂容器:
    1. 編寫 Dockerfile,這個檔案能將容器設為使用 Vertex AI 進行工作,並且包含訓練應用程式需要的依附元件。
    2. 在本地建構及執行 Docker 容器。
  2. 將容器映像檔推送到 Artifact Registry。

事前準備

如要設定 Artifact Registry API 存放區,並在開發環境中設定 Docker,請按照 Artifact Registry 的 Docker 快速入門指南操作。具體來說,請務必完成快速入門導覽的下列步驟:

  • 事前準備
  • 選擇殼層
  • 建立 Docker 存放區
  • 設定驗證機制

建立自訂容器映像檔

我們建議採用下列兩種工作流程來建立自訂容器映像檔:

  • 編寫訓練程式碼。接著,使用 gcloud CLI 的 local-run 指令,根據訓練程式碼建構及測試自訂容器映像檔,不必自行撰寫 Dockerfile。

    如果您不熟悉 Docker,這個工作流程會比較簡單。如果按照這個工作流程操作,可以略過本節的其餘步驟。

  • 編寫訓練程式碼。接著,撰寫 Dockerfile 並據此建構容器映像檔。最後,在本機測試容器。

    這個工作流程提供更多彈性,因為您可以盡可能自訂容器映像檔。

本節的其餘部分將逐步說明後者工作流程的範例。

訓練程式碼

您可以使用任何程式設計語言的任何依附元件,撰寫訓練程式碼。確認程式碼符合訓練程式碼規定。如果您打算使用超參數調整、GPU 或分散式訓練,請務必詳閱該文件的相關章節,瞭解使用自訂容器時,這些功能有哪些特殊考量。

建立 Dockerfile

建立 Dockerfile,指定建構容器映像檔所需的所有指令。

本節將逐步說明如何建立一般常見的 Dockerfile 範例,以用於自訂訓練。如要進一步瞭解如何建立容器映像檔,請參閱 Docker 說明文件的快速入門導覽課程

如要搭配 Vertex AI 使用,Dockerfile 必須包含涉及以下工作的指令:

  • 選擇基本映像檔
  • 安裝其他依附元件
  • 將訓練程式碼複製到映像檔
  • 設定 Vertex AI 的進入點,以便叫用訓練程式碼

您可以視需求讓 Dockerfile 納入其他邏輯。如要進一步瞭解每個特定指令,請參閱 Dockerfile 參考資料

Dockerfile 指令 說明 範例
FROM image:tag 指定基本映像檔及其標記

含標記的基本映像檔範例

  • pytorch/pytorch:latest
  • tensorflow/tensorflow:nightly
  • python:2.7.15-jessie
  • nvidia/cuda:9.0-cudnn7-runtime
WORKDIR /path/to/directory 指定後續指示要在映像檔上的哪個目錄執行。 /root
RUN pip install pkg1 pkg2 pkg3 使用 pip 安裝其他套件。

附註:如果您的基本映像檔沒有 pip,則必須納入安裝指令進行安裝,接著才能安裝其他套件。

套件範例:

  • google-cloud-storage
  • cloudml-hypertune
  • pandas
COPY src/training-app.py dest/training-app.py 將訓練應用程式的程式碼複製到映像檔中。視您的訓練應用程式結構而定,這有可能包含多個檔案。

訓練應用程式中的檔案名稱範例:

  • model.py
  • task.py
  • data_utils.py
ENTRYPOINT ["exec", "file"] 設定進入點以叫用訓練程式碼開始執行。啟動自訂訓練時,您可以在 ContainerSpec 中指定 command 欄位,覆寫這個進入點。您也可以在 ContainerSpec 中指定 args 欄位,為進入點提供額外引數 (並覆寫容器映像檔的 CMD 指令,如果有的話)。 ["python", "task.py"]

Dockerfile 中採用的邏輯會因您的需求而異,不過大致上應該會如下所示:

# Specifies base image and tag
FROM image:tag
WORKDIR /root

# Installs additional packages
RUN pip install pkg1 pkg2 pkg3

# Downloads training data
RUN curl https://example-url/path-to-data/data-filename --output /root/data-filename

# Copies the trainer code to the docker image.
COPY your-path-to/model.py /root/model.py
COPY your-path-to/task.py /root/task.py

# Sets up the entry point to invoke the trainer.
ENTRYPOINT ["python", "task.py"]

(選用) 調整 TPU VM 的 Dockerfile

如要使用 TPU VM 在 Vertex AI 上訓練模型,必須調整 Dockerfile,安裝特別建構的 tensorflowlibtpu 程式庫版本。進一步瞭解如何調整容器,以便搭配 TPU VM 使用

建構容器映像檔

使用環境變數建立正確的映像檔 URI,然後建構 Docker 映像檔:

export PROJECT_ID=$(gcloud config list project --format "value(core.project)")
export REPO_NAME=REPOSITORY_NAME
export IMAGE_NAME=IMAGE_NAME
export IMAGE_TAG=IMAGE_TAG
export IMAGE_URI=us-central1-docker.pkg.dev/${PROJECT_ID}/${REPO_NAME}/${IMAGE_NAME}:${IMAGE_TAG}

docker build -f Dockerfile -t ${IMAGE_URI} ./

在這些指令中,請替換下列項目:

  • REPOSITORY_NAME:您在「事前準備」一節中建立的 Artifact Registry 存放區名稱。
  • IMAGE_NAME:您為容器映像檔選擇的名稱。
  • IMAGE_TAG:這個容器映像檔版本的自選標記。

進一步瞭解 Artifact Registry 對容器映像檔命名的規定

在本機執行容器 (選用)

在本機將容器映像檔做為容器執行,藉此驗證映像檔。您可能希望在較小的資料集上執行訓練程式碼,或迭代次數較少,而不是在 Vertex AI 上執行。舉例來說,如果容器映像檔中的進入點指令碼接受 --epochs 標記,以控管執行的訓練週期數量,您可能會執行下列指令:

docker run ${IMAGE_URI} --epochs 1

將容器推送至 Artifact Registry

如果本機執行成功,您即可將容器推送至 Artifact Registry。

請先在開發環境中執行 gcloud auth configure-docker us-central1-docker.pkg.dev (如果您尚未執行的話)。然後執行下列指令:

docker push ${IMAGE_URI}

Artifact Registry 權限

如果您使用的 Artifact Registry 映像檔所屬的專案和您要用來執行 Vertex AI 的專案是同一個,就不需要另外設定權限。 Google Cloud 您可以立即建立自訂訓練工作,使用容器映像檔。

不過,如果您已將容器映像檔推送至其他 Google Cloud 專案的 Artifact Registry,而您打算在 Vertex AI 專案中使用該映像檔,則必須授予 Vertex AI 專案的 Vertex AI 服務代理權限,才能從其他專案提取映像檔。進一步瞭解 Vertex AI 服務代理程式,以及如何授予權限

Artifact Registry

如要瞭解如何授予 Vertex AI 服務代理存取 Artifact Registry 存放區的權限,請參閱 Artifact Registry 說明文件,瞭解如何授予存放區專屬權限

後續步驟