如果使用 TPU 執行 Dataflow 工作時發生問題,請按照下列疑難排解步驟解決問題。
排解容器映像檔問題
在獨立 VM 上偵錯容器和 TPU 軟體,有助於解決問題。您可以透過 GKE 節點集區建立的 VM 進行偵錯,也可以在執行中的 Dataflow 工作站 VM 上偵錯。
使用獨立 VM 進行偵錯
如要在獨立 VM 上偵錯容器,您可以建立使用相同 TPU VM 的 GKE 節點集區,進行本機實驗。舉例來說,在 us-west1-c
中建立一個含有 TPU V5 Lite 裝置的 GKE 節點集區,看起來會像這樣:
建立 GKE 叢集。
gcloud container clusters create TPU_CLUSTER_NAME \ --project PROJECT_ID \ --release-channel=stable \ --scopes=cloud-platform \ --enable-ip-alias \ --location us-west1-c
建立 GKE 節點集區。
gcloud container node-pools create TPU_NODE_POOL_NAME \ --project PROJECT_ID \ --location=us-west1-c \ --cluster=TPU_CLUSTER_NAME \ --node-locations=us-west1-c \ --machine-type=ct5lp-hightpu-1t \ --num-nodes=1 \ [ --reservation RESERVATION_NAME \ --reservation-affinity=specific ]
在 GKE UI 中或使用下列指令,找出節點集區中 TPU 節點的 VM 名稱。
gcloud compute instances list --filter='metadata.kube-labels:"cloud.google.com/gke-nodepool=TPU_NODEPOOL_NAME"'
使用 SSH 連線至 GKE 節點集區建立的 VM:
gcloud compute ssh --zone "us-west1-c" "VM_NAME" --project PROJECT_ID
使用 SSH 連線至 VM 後,請為您使用的 Artifact Registry 設定 Docker。
docker-credential-gcr configure-docker --registries=us-west1-docker.pkg.dev
然後從您使用的映像檔啟動容器。
docker run --privileged --network=host -it --rm --entrypoint=/bin/bash IMAGE_NAME
在容器內,測試是否可存取 TPU。
舉例來說,如果您有使用 PyTorch 來運用 TPU 的映像檔,請開啟 Python 解譯器:
python3
接著,在 TPU 裝置上執行運算:
import torch import torch_xla.core.xla_model as xm dev = xm.xla_device() t1 = torch.randn(3,3,device=dev) t2 = torch.randn(3,3,device=dev) print(t1 + t2)
輸出內容範例:
>>> tensor([[ 0.3355, -1.4628, -3.2610], >>> [-1.4656, 0.3196, -2.8766], >>> [ 0.8667, -1.5060, 0.7125]], device='xla:0')
如果計算失敗,表示圖片設定可能有誤。
舉例來說,您可能需要在映像檔 Dockerfile 中設定必要的環境變數。如要確認,請手動設定下列環境變數,然後重試運算:
export TPU_SKIP_MDS_QUERY=1 # Don't query metadata export TPU_HOST_BOUNDS=1,1,1 # There's only one host export TPU_CHIPS_PER_HOST_BOUNDS=1,1,1 # 1 chips per host export TPU_WORKER_HOSTNAMES=localhost export TPU_WORKER_ID=0 # Always 0 for single-host TPUs export TPU_ACCELERATOR_TYPE=v5litepod-1 # Since we use v5e 1x1 accelerator.
如果缺少 PyTorch 或 LibTPU 依附元件,請使用下列指令安裝這些元件,然後重試運算:
# Install PyTorch with TPU support pip install torch torch_xla[tpu] torchvision -f https://storage.googleapis.com/libtpu-releases/index.html
使用 Dataflow VM 進行偵錯
或者,您也可以在作業執行期間,使用 SSH 連線至 Dataflow 工作站 VM 執行個體。由於 Dataflow 工作站 VM 會在管道完成後關閉,您可能需要執行長時間等待的運算,人為增加執行時間。
由於 TPU 裝置無法在多個程序之間共用,您可能需要執行管道,但管道不會在 TPU 上進行任何運算。
在 Google Cloud 控制台搜尋列中搜尋 Dataflow 工作 ID,或使用下列
gcloud
指令,找出執行 TPU 工作的 VM:gcloud compute instances list --project PROJECT_ID --filter "STATUS='RUNNING' AND description ~ 'Created for Dataflow job: JOB_ID'"
使用 SSH 連線至搭載 TPU 的 VM 後,請從您使用的映像檔啟動容器。如需範例,請參閱「使用獨立 VM 進行偵錯」。
在容器內重新設定 TPU,並安裝必要程式庫來測試設定。如需範例,請參閱使用獨立 VM 進行偵錯。
工作人員未啟動
排解問題前,請確認下列管道選項設定正確:
--dataflow_service_option=worker_accelerator
選項--worker_zone
選項--machine_type
選項
檢查控制台記錄是否顯示工作站正在啟動,但工作失敗並顯示類似下列內容的訊息:
Workflow failed. Causes: The Dataflow job appears to be stuck because no worker
activity has been seen in the last 25m.
這些問題的原因可能與容量或工作站啟動問題有關。
容量:如果您使用隨選 TPU 容量或已用盡的預留容量,可能要等到容量可用,新的管道才會啟動。如果您使用預留項目,請在Google Cloud 主控台的「Compute Reservations」(Compute 預留項目) 頁面中,或使用下列指令,檢查預留項目的剩餘容量:
gcloud compute reservations describe RESERVATION_NAME --zone ZONE
檢查工作是否已啟動任何工作站 VM。作業啟動工作站時,記錄器 (例如
worker
、worker_startup
、kubelet
等) 通常會提供輸出內容。此外,在 Google Cloud 控制台的「Job metrics」(工作指標) 頁面中,目前工作站數量應大於零。工作站啟動:檢查
job-message
和launcher
記錄。如果管道啟動工作站,但工作站無法啟動,可能是自訂容器發生錯誤。磁碟空間:確認作業有足夠的磁碟空間。 如要增加磁碟空間,請使用
--disk_size_gb
選項。
工作失敗並發生錯誤
如果作業失敗並顯示錯誤訊息,請參考下列疑難排解建議。
無法啟動工作站集區
如果看到下列錯誤,請確認管道指定 --worker_zone
,且可用區與預訂的可用區相符。
JOB_MESSAGE_ERROR: Startup of the worker pool in zone ZONE failed to bring up any of the desired 1 workers. [...] INVALID_FIELD_VALUE: Instance 'INSTANCE_NAME' creation failed: Invalid value for field 'resource.reservationAffinity': '{ "consumeReservationType": "SPECIFIC_ALLOCATION", "key": "compute.googleapis.com/RESERVATION_NAME...'. Specified reservations [RESERVATION_NAME] do not exist.
代管執行個體群組不支援 Cloud TPU
如果看到下列錯誤,請與帳戶團隊聯絡,確認專案是否已註冊使用 TPU,或使用 Google 問題追蹤工具回報錯誤。
apache_beam.runners.dataflow.dataflow_runner.DataflowRuntimeException: Dataflow pipeline failed. State: FAILED, Error: Workflow failed. Causes: One or more operations had an error [...]: [INVALID_FIELD_VALUE] 'Invalid value for field 'resource.instanceTemplate': Managed Instance Groups do not support Cloud TPUs. '.
欄位值無效
如果看到下列錯誤,請確認管道呼叫是否設定 worker_accelerator
Dataflow 服務選項。
JOB_MESSAGE_ERROR: Workflow failed. Causes: One or more operations had an error: 'operation-[...]': [INVALID_FIELD_VALUE] 'Invalid value for field 'resource.instanceTemplate': 'projects/[...]-harness'. Regional Managed Instance Groups do not support Cloud TPUs.'
裝置或資源忙碌中
如果看到下列錯誤,表示處理管道的 Dataflow 工作站可能同時執行多個存取 TPU 的程序。系統不支援這項操作。詳情請參閱「TPU 和工作站平行處理」。
RuntimeError: TPU initialization failed: open(/dev/vfio/0): Device or resource busy: Device or resource busy; Couldn't open iommu group /dev/vfio/0
如果在 VM 上偵錯管道時看到上述錯誤,可以使用下列指令檢查並終止佔用 TPU 的程序:
apt update ; apt install lsof
lsof -w /dev/vfio/0
kill -9 PROCESS_ID # to terminate the process.
搭載客層加速器的執行個體不支援即時遷移
如果看到下列錯誤,可能是因為您啟動管道時明確設定了含有加速器的機器類型,但未正確指定加速器設定。確認管道呼叫會設定 worker_accelerator
Dataflow 服務選項,並確保選項名稱沒有拼寫錯誤。
JOB_MESSAGE_ERROR: Startup of the worker pool in zone ZONE failed to bring up any of the desired 1 workers. [...] UNSUPPORTED_OPERATION: Instance INSTANCE_ID creation failed: Instances with guest accelerators do not support live migration.
服務自動拒絕工作流程
如果缺少或錯誤設定部分必要管道選項,也可能會出現下列錯誤:
The workflow was automatically rejected by the service. The requested accelerator type tpu-v5-lite-podslice;topology:1x1 requires setting the worker machine type to ct5lp-hightpu-1t. Learn more at: https://cloud.google.com/dataflow/docs/guides/configure-worker-vm
等待工作人員更新時逾時
如果您在具有大量 vCPU 的 TPU VM 上啟動管道,但未減少預設的工作站執行緒數量,工作可能會遇到下列錯誤:
Workflow failed. Causes WORK_ITEM failed. The job failed because a work item has failed 4 times. Root cause: Timed out waiting for an update from the worker.
如要避免這項錯誤,請減少執行緒數量。舉例來說,你可以設定:
--number_of_worker_harness_threads=50
。
沒有 TPU 用量
如果管道順利執行,但未使用或無法存取 TPU 裝置,請確認您使用的架構 (例如 JAX 或 PyTorch) 可以存取所連結的裝置。如要對單一 VM 上的容器映像檔進行疑難排解,請參閱「使用獨立 VM 進行偵錯」。