本頁說明如何使用互動式殼層檢查執行訓練程式碼的容器。您可以在 Vertex AI 上執行的每個預建容器或自訂容器中,瀏覽檔案系統並執行偵錯公用程式。
使用互動式殼層檢查訓練容器,有助於偵錯訓練程式碼或 Vertex AI 設定的問題。舉例來說,您可以使用互動式殼層執行下列操作:
- 執行追蹤和剖析工具。
- 分析 GPU 使用率。
- 檢查容器可用的權限 Google Cloud 。
您也可以使用 Cloud Profiler,針對自訂訓練工作偵錯模型訓練成效。詳情請參閱「使用分析器分析模型訓練成效」。
事前準備
使用 CustomJob
資源、HyperparameterTuningJob
資源或自訂 TrainingPipeline
資源執行自訂訓練時,可以使用互動式殼層。準備訓練程式碼並設定所選的自訂訓練資源時,請務必符合下列規定:
確認訓練容器已安裝
bash
。所有預先建構的訓練容器都已安裝
bash
。如果您建立自訂容器進行訓練,請使用包含bash
的基本容器,或在 Dockerfile 中安裝bash
。在支援互動式殼層的區域中執行自訂訓練。
請確認要存取互動式殼層的使用者,具備下列 Google Cloud 專案的權限,才能執行自訂訓練作業:
aiplatform.customJobs.create
aiplatform.customJobs.get
aiplatform.customJobs.cancel
如果您自行啟動自訂訓練,代表您很可能已具備這些權限,並可存取互動式殼層。不過,如要使用互動式殼層檢查貴機構中其他人建立的自訂訓練資源,您可能需要取得這些權限。
如要取得這些權限,其中一種方法是請貴機構的管理員授予您 Vertex AI 使用者角色 (
roles/aiplatform.user
)。
進階案件的規定
如果您使用特定進階功能,請符合下列額外規定:
如果您將自訂服務帳戶附加至自訂訓練資源,請確保所有想存取互動式殼層的使用者,都具備附加服務帳戶的
iam.serviceAccounts.actAs
權限。自訂服務帳戶指南指出,您必須具備這項權限才能附加服務帳戶。此外,您也需要這項權限,才能在自訂訓練期間查看互動式殼層。
舉例來說,如要建立已繫結服務帳戶的
CustomJob
,您必須具備該服務帳戶的iam.serviceAccounts.actAs
權限。如果同事想查看這個CustomJob
的互動式殼層,也必須具備相同的iam.serviceAccounts.actAs
權限。如果已將專案設定為搭配使用 VPC Service Controls 與 Vertex AI,請注意下列額外限制:
您無法使用私人 IP 進行自訂訓練。如果您需要搭配 VPC 對等互連使用 VPC-SC,則必須完成額外設定,才能使用互動式殼層。請按照「Ray 資訊主頁和互動式殼層 (搭配 VPC-SC + VPC 對等互連)」一文的操作說明,在使用者專案中設定互動式殼層,並搭配 VPC-SC 和 VPC 對等互連。
在互動式殼層中,您無法存取公開網際網路或Google Cloud 服務範圍外的資源。
如要確保互動式殼層的存取安全,除了
aiplatform.googleapis.com
之外,您還必須在服務範圍中新增notebooks.googleapis.com
做為受限服務。如果您只限制aiplatform.googleapis.com
而未限制notebooks.googleapis.com
,使用者就能從服務範圍外的機器存取互動式殼層,這會降低使用 VPC Service Controls 的安全性優勢。
啟用互動式殼層
如要為自訂訓練資源啟用互動式殼層,請在建立 CustomJob
、HyperparameterTuningJob
或自訂 TrainingPipeline
時,將 enableWebAccess
API 欄位設為 true
。
以下範例說明如何使用幾種不同的工具執行這項操作:
控制台
請按照指南在 Google Cloud 控制台建立自訂 TrainingPipeline
。在「Train new model」(訓練新模型) 窗格中,當您到達「Model details」(模型詳細資料) 步驟時,請執行下列操作:
點選「進階選項」。
勾選「Enable training debugging」(啟用訓練偵錯) 核取方塊。
接著,完成其餘的「訓練新模型」工作流程。
gcloud
如要建立
CustomJob
,請執行gcloud ai custom-jobs create
指令,並在此指令中指定--enable-web-access
標記。如要建立
HyperparameterTuningJob
,請執行gcloud ai hp-tuning-jobs create
指令,並在此指令中指定--enable-web-access
標記。
如要瞭解如何使用這些指令,請參閱建立 CustomJob
的指南和建立 HyperparameterTuningJob
的指南。
API
下列部分 REST 要求主體顯示各類自訂訓練資源的 enableWebAccess
欄位指定位置:
CustomJob
以下範例是 projects.locations.customJobs.create
API 方法的部分要求內文:
{
...
"jobSpec": {
...
"enableWebAccess": true
}
...
}
如要查看傳送 API 要求來建立 CustomJob
的範例,請參閱建立自訂訓練工作。
HyperparameterTuningJob
以下範例是 projects.locations.hyperparameterTuningJobs.create
API 方法的部分要求內文:
{
...
"trialJobSpec": {
...
"enableWebAccess": true
}
...
}
如要查看傳送 API 要求來建立 HyperparameterTuningJob
的範例,請參閱「使用超參數調整」。
自訂 TrainingPipeline
下列範例顯示 projects.locations.trainingPipelines.create
API 方法的部分要求主體。根據您是否使用超參數調整功能,選取下列其中一個分頁:
不進行超參數調整
{
...
"trainingTaskInputs": {
...
"enableWebAccess": true
}
...
}
使用超參數調整
{
...
"trainingTaskInputs": {
...
"trialJobSpec": {
...
"enableWebAccess": true
}
}
...
}
如要查看傳送 API 要求來建立自訂 TrainingPipeline
的範例,請參閱建立訓練管道。
Python
如要瞭解如何安裝或更新 Python 適用的 Vertex AI SDK,請參閱「安裝 Python 適用的 Vertex AI SDK」。 詳情請參閱 Python API 參考說明文件。
執行下列任一方法時,請將 enable_web_access
參數設為 true
:
如要建立
CustomJob
,請使用CustomJob.run
方法。如要建立
HyperparameterTuningJob
,請使用HyperparameterTuningJob.run
方法。如要建立自訂
TrainingPipeline
,請使用下列其中一種方法:
前往互動式殼層
根據前一節的指引啟動自訂訓練後,Vertex AI 會產生一或多個 URI,您可以使用這些 URI 存取互動式殼層。Vertex AI 會為工作中的每個訓練節點產生專屬 URI。
您可以透過下列任一方式前往互動式殼層:
- 按一下 Google Cloud 控制台中的連結
- 使用 Vertex AI API 取得 Shell 的網頁存取 URI
從 Google Cloud 控制台前往
在 Google Cloud 控制台的「Vertex AI」部分,前往下列任一頁面:
如果未使用超參數調整功能,請前往「自訂工作」頁面:
如果您使用超參數調整功能,請前往「超參數調整工作」頁面:
按一下自訂訓練資源的名稱。
如果您為自訂訓練建立
TrainingPipeline
,請按一下TrainingPipeline
建立的CustomJob
或HyperparameterTuningJob
名稱。舉例來說,如果管道名稱為PIPELINE_NAME
,這可能會稱為PIPELINE_NAME-custom-job
或PIPELINE_NAME-hyperparameter-tuning-job
。在工作頁面中,按一下「啟動網頁終端機」。如果您的工作使用多個節點,請按一下要取得互動式殼層的節點旁邊的「啟動網頁終端機」。
請注意,只有在作業執行期間,您才能存取互動式殼層。 如果沒有看到「啟動網頁終端機」,可能是因為 Vertex AI 尚未開始執行工作,或是工作已完成或失敗。如果工作「狀態」為
Queued
或Pending
,請稍候片刻,然後嘗試重新整理頁面。如果您使用超參數調整功能,每個試驗都有各自的「啟動網頁終端機」連結。
從 API 取得網頁存取 URI
使用 projects.locations.customJobs.get
API 方法或 projects.locations.hyperparameterTuningJobs.get
API 方法,查看可用來存取互動式殼層的 URI。
HyperparameterTuningJob
請根據您使用的自訂訓練資源類型,選取下列其中一個分頁,查看如何找出 webAccessUris
API 欄位,其中包含您工作中每個節點的互動式殼層 URI:
CustomJob
以下分頁說明傳送 projects.locations.customJobs.get
要求的方式:
gcloud
執行 gcloud ai custom-jobs describe
指令:
gcloud ai custom-jobs describe JOB_ID \
--region=LOCATION \
--format=json
更改下列內容:
JOB_ID:您的工作數值 ID。這個 ID 是工作
name
欄位的最後一部分。您可能在建立工作時看過這組 ID。 (如果不知道工作 ID,可以執行gcloud ai custom-jobs list
指令,找出適當的工作)。LOCATION:您建立作業的區域。
REST
使用任何要求資料之前,請先替換以下項目:
LOCATION:您建立作業的區域。
PROJECT_ID:您的專案 ID。
JOB_ID:您的工作數值 ID。這個 ID 是工作
name
欄位的最後一部分。您可能在建立工作時看過這組 ID。
HTTP 方法和網址:
GET https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs/JOB_ID
如要傳送要求,請展開以下其中一個選項:
在輸出內容中,尋找下列項目:
{
...
"state": "JOB_STATE_RUNNING",
...
"webAccessUris": {
"workerpool0-0": "INTERACTIVE_SHELL_URI"
}
}
如果沒有看到 webAccessUris
欄位,可能是因為 Vertex AI 尚未開始執行工作。確認 state
欄位中顯示 JOB_STATE_RUNNING
。如果狀態為 JOB_STATE_QUEUED
或 JOB_STATE_PENDING
,請稍候片刻,然後再次嘗試取得專案資訊。
HyperparameterTuningJob
以下分頁說明傳送 projects.locations.hyperparameterTuningJobs.get
要求的方式:
gcloud
執行 gcloud ai hp-tuning-jobs describe
指令:
gcloud ai hp-tuning-jobs describe JOB_ID \
--region=LOCATION \
--format=json
更改下列內容:
JOB_ID:您的工作數值 ID。這個 ID 是工作
name
欄位的最後一部分。您可能在建立工作時看過這組 ID。 (如果不知道工作 ID,可以執行gcloud ai hp-tuning-jobs list
指令,找出適當的工作)。LOCATION:您建立作業的區域。
REST
使用任何要求資料之前,請先替換以下項目:
LOCATION:您建立作業的區域。
PROJECT_ID:您的專案 ID。
JOB_ID:您的工作數值 ID。這個 ID 是工作
name
欄位的最後一部分。您可能在建立工作時看過這組 ID。
HTTP 方法和網址:
GET https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/hyperparameterTuningJobs/JOB_ID
如要傳送要求,請展開以下其中一個選項:
在輸出內容中,尋找下列項目:
{
...
"state": "JOB_STATE_RUNNING",
...
"trials": [
...
{
...
"state": "ACTIVE",
...
"webAccessUris": {
"workerpool0-0": "INTERACTIVE_SHELL_URI"
}
}
],
}
如果沒有看到 webAccessUris
欄位,可能是因為 Vertex AI 尚未開始執行工作。確認 state
欄位中顯示 JOB_STATE_RUNNING
。如果狀態為 JOB_STATE_QUEUED
或 JOB_STATE_PENDING
,請稍候片刻,然後再次嘗試取得專案資訊。
當超參數調整試驗進入 ACTIVE
狀態時,Vertex AI 會為每項試驗提供一組互動式殼層 URI。如要在後續試用中取得互動式 Shell URI,請在試用開始後再次取得工作資訊。
上例顯示單一副本訓練的預期輸出內容:主要訓練節點的一個 URI。如果您執行分散式訓練,輸出內容會包含每個訓練節點的 URI,並以工作站集區識別。
舉例來說,如果您的工作有一個備用資源的主要工作站集區,以及兩個備用資源的次要工作站集區,則 webAccessUris
欄位看起來會類似下列內容:
{
"workerpool0-0": "URI_FOR_PRIMARY",
"workerpool1-0": "URI_FOR_FIRST_SECONDARY",
"workerpool1-1": "URI_FOR_SECOND_SECONDARY"
}
使用互動式殼層
如要使用訓練節點的互動式殼層,請前往前一節中找到的其中一個 URI。瀏覽器會顯示 Bash 殼層,讓您存取容器的檔案系統,Vertex AI 會在該容器中執行訓練程式碼。
以下各節將說明使用殼層時應注意的事項,並提供一些可在殼層中使用的監控工具範例。
防止工作結束
Vertex AI 執行完工作或試驗後,您會立即失去互動式殼層的存取權。如果發生這種情況,您可能會看到 command terminated with exit code 137
訊息,或是殼層停止回應。如果您在容器的檔案系統中建立任何檔案,這些檔案在工作結束後不會保留。
在某些情況下,您可能會想刻意延長工作執行時間,以便使用互動式殼層進行偵錯。舉例來說,您可以在訓練程式碼中加入下列程式碼,確保作業在發生例外狀況後至少會持續執行一小時:
import time
import traceback
try:
# Replace with a function that runs your training code
train_model()
except Exception as e:
traceback.print_exc()
time.sleep(60 * 60) # 1 hour
但請注意,只要工作持續執行,系統就會向您收取 Vertex AI Training 費用。
檢查權限問題
互動式殼層環境會使用應用程式預設憑證 (ADC) 進行驗證,適用於 Vertex AI 用來執行訓練程式碼的服務帳戶。如需更多詳細資料,請在殼層中執行 gcloud auth list
。
在殼層中,您可以使用 bq
和其他支援 ADC 的工具。這有助於確認工作是否能存取特定 Cloud Storage 值區、BigQuery 資料表或其他訓練程式碼需要的Google Cloud 資源。
使用 py-spy
以圖表呈現 Python 執行作業
py-spy
可讓您分析執行中的 Python 程式,而不需修改程式。如要在互動式殼層中使用 py-spy
,請執行下列操作:
安裝
py-spy
:pip3 install py-spy
在殼層中執行
ps aux
,然後找出 Python 訓練程式的 PID。使用您在上一個步驟中找到的 PID,執行
py-spy
說明文件中說明的任何子指令。如果您使用
py-spy record
建立 SVG 檔案,請將該檔案複製到 Cloud Storage 值區,以便稍後在本機電腦上查看。例如:gcloud storage cp profile.svg gs://BUCKET
將 BUCKET 替換成您有權存取的值區名稱。
使用 perf
分析成效
perf
可用於分析訓練節點的效能。如要安裝適用於節點 Linux 核心的 perf
版本,請執行下列指令:
apt-get update
apt-get install -y linux-tools-generic
rm /usr/bin/perf
LINUX_TOOLS_VERSION=$(ls /usr/lib/linux-tools | tail -n 1)
ln -s "/usr/lib/linux-tools/${LINUX_TOOLS_VERSION}/perf" /usr/bin/perf
完成後,您就可以執行perf
說明文件中說明的任何子指令。
擷取 GPU 使用率相關資訊
在搭載 GPU 的節點上執行的 GPU 啟用容器,通常會預先安裝多種指令列工具,協助您監控 GPU 使用情形。例如:
使用
nvidia-smi
監控各種程序的 GPU 使用率。使用
nvprof
收集各種 GPU 剖析資訊。由於nvprof
無法附加至現有程序,您可能需要使用這項工具啟動額外程序,執行訓練程式碼。(也就是說,訓練程式碼會在節點上執行兩次)。例如:nvprof -o prof.nvvp python3 -m MODULE_NAME
將 MODULE_NAME 替換為訓練應用程式進入點模組的完整名稱;例如
trainer.task
。然後將輸出檔案轉移至 Cloud Storage bucket,以便稍後在本機電腦上進行分析。例如:
gcloud storage cp prof.nvvp gs://BUCKET
將 BUCKET 替換成您有權存取的值區名稱。
如果遇到 GPU 錯誤 (不是設定或 Vertex AI 的問題),請使用
nvidia-bug-report.sh
建立錯誤報告。然後將報表轉移至 Cloud Storage 值區,以便稍後在本機電腦上分析報表,或傳送給 NVIDIA。例如:
gcloud storage cp nvidia-bug-report.log.gz gs://BUCKET
將 BUCKET 替換成您有權存取的值區名稱。
如果 bash
找不到任何 NVIDIA 指令,請嘗試將 /usr/local/nvidia/bin
和 /usr/local/cuda/bin
新增至殼層的 PATH
:
export PATH="/usr/local/nvidia/bin:/usr/local/cuda/bin:${PATH}"
搭配 VPC-SC + 虛擬私有雲對等互連的 Ray 資訊主頁和互動式 Shell
-
設定「
peered-dns-domains
」。{ VPC_NAME=NETWORK_NAME REGION=LOCATION gcloud services peered-dns-domains create training-cloud \ --network=$VPC_NAME \ --dns-suffix=$REGION.aiplatform-training.cloud.google.com. # Verify gcloud beta services peered-dns-domains list --network $VPC_NAME; }
-
NETWORK_NAME:變更為對等互連網路。
-
LOCATION:所需位置 (例如
us-central1
)。
-
-
設定「
DNS managed zone
」。{ PROJECT_ID=PROJECT_ID ZONE_NAME=$PROJECT_ID-aiplatform-training-cloud-google-com DNS_NAME=aiplatform-training.cloud.google.com DESCRIPTION=aiplatform-training.cloud.google.com gcloud dns managed-zones create $ZONE_NAME \ --visibility=private \ --networks=https://www.googleapis.com/compute/v1/projects/$PROJECT_ID/global/networks/$VPC_NAME \ --dns-name=$DNS_NAME \ --description="Training $DESCRIPTION" }
-
PROJECT_ID:您的專案 ID。您可以在 Google Cloud 控制台 歡迎頁面中找到這些 ID。
-
-
記錄 DNS 交易。
{ gcloud dns record-sets transaction start --zone=$ZONE_NAME gcloud dns record-sets transaction add \ --name=$DNS_NAME. \ --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \ --zone=$ZONE_NAME \ --ttl=300 gcloud dns record-sets transaction add \ --name=*.$DNS_NAME. \ --type=CNAME $DNS_NAME. \ --zone=$ZONE_NAME \ --ttl=300 gcloud dns record-sets transaction execute --zone=$ZONE_NAME }
-
提交訓練工作,並啟用互動式殼層 + VPC-SC + 虛擬私有雲對等互連。
後續步驟
- 瞭解如何使用 Profiler 改善自訂訓練工作的效能。
- 進一步瞭解 Vertex AI 如何協調自訂訓練。
- 請參閱訓練工作的程式碼需求。