使用自訂容器映像檔,可在 Vertex AI 上提供最具彈性的訓練方式。如要瞭解使用自訂容器映像檔與使用預先建立容器的 Python 訓練應用程式的差異,請參閱「訓練程式碼規定」。
本指南將逐步說明以下步驟:
- 建立自訂容器:
- 編寫 Dockerfile,這個檔案能將容器設為使用 Vertex AI 進行工作,並且包含訓練應用程式需要的依附元件。
- 在本機建構及執行 Docker 容器。
- 將容器映像檔推送至 Artifact Registry。
事前準備
如要設定 Artifact Registry API 存放區,並在開發環境中設定 Docker,請按照 Artifact Registry 的 Docker 快速入門操作說明進行。具體來說,請務必完成快速入門的下列步驟:
- 事前準備
- 選擇殼層
- 建立 Docker 存放區
- 設定驗證機制
建立自訂容器映像檔
我們建議您採用兩種可能的工作流程來建立自訂容器映像檔:
編寫訓練程式碼。接著,使用 gcloud CLI 的
local-run
指令,根據訓練程式碼建構及測試自訂容器映像檔,不必自行撰寫 Dockerfile。如果您不熟悉 Docker,這個工作流程會更簡單。如果您按照這個工作流程操作,可以略過本節的其餘內容。
編寫訓練程式碼。接著,請撰寫 Dockerfile,並根據 Dockerfile 建構容器映像檔。最後,請在本機測試容器。
您可以視需要自訂容器映像檔,因此這個工作流程可提供更大的彈性。
本節的其餘部分將逐步說明後者的工作流程。
訓練程式碼
您可以使用任何程式設計語言的任何依附元件編寫訓練程式碼。確認程式碼符合訓練程式碼要求。如果您打算使用超參數調整、GPU 或分散式訓練,請務必詳閱該文件的對應章節,這些章節會說明在自訂容器中使用這些功能時的具體考量。
建立 Dockerfile
建立 Dockerfile,指定建構容器映像檔所需的所有指示。
本節將逐步說明如何建立一般常見的 Dockerfile 範例,以便用於自訂訓練。如要進一步瞭解如何建立容器映像檔,請參閱 Docker 說明文件的快速入門指南。
如要搭配 Vertex AI 使用,Dockerfile 必須包含涉及以下工作的指令:
- 選擇基本映像檔
- 安裝其他依附元件
- 將訓練程式碼複製到映像檔
- 設定 Vertex AI 的進入點,以便叫用訓練程式碼
您可以視需求讓 Dockerfile 納入其他邏輯。如要進一步瞭解每項特定指示,請參閱 Dockerfile 參考資料。
Dockerfile 指令 | 說明 | 範例 |
---|---|---|
FROM image:tag | 指定基本映像檔及其標記 | 含標記的基本映像檔範例
|
WORKDIR /path/to/directory | 指定後續指示要在映像檔上的哪個目錄執行。 | /root |
| 使用 pip 安裝其他套件。附註:如果您的基本映像檔沒有 | 套件範例:
|
COPY src/training-app.py dest/training-app.py | 將訓練應用程式的程式碼複製到映像檔中。視您的訓練應用程式結構而定,這有可能包含多個檔案。 | 訓練應用程式中的檔案名稱範例:
|
| 設定進入點以叫用訓練程式碼開始執行。開始自訂訓練時,您可以在 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,以便安裝特別建構的 tensorflow
和 libtpu
程式庫版本。進一步瞭解如何調整容器,以便與 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
標記,用於控制執行的 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 權限
如果您使用的是 Vertex AI 所在 Google Cloud 專案的 Artifact Registry 映像檔,就不需要再設定權限。您可以立即建立自訂訓練工作,使用容器映像檔。
不過,如果您將容器映像檔推送至與您要使用 Vertex AI 的專案不同的 Google Cloud 專案,則必須授予 Vertex AI 專案的 Vertex AI 服務代理權限,才能從其他專案提取映像檔。進一步瞭解 Vertex AI 服務代理,以及如何授予其權限。
Artifact Registry
如要瞭解如何授予 Vertex AI 服務代理存取 Artifact Registry 存放區的權限,請參閱 Artifact Registry 說明文件,瞭解如何授予存放區專屬權限。