使用 Dataflow GPU 的最佳做法

本頁說明使用 GPU 建構管道的最佳做法。

如要瞭解如何在 Dataflow 工作中啟用 GPU,請參閱使用 GPU 執行管道使用 GPU 處理 Landsat 衛星影像,當中提供相關資訊和範例。

在 Dataflow 中使用 GPU 的先決條件

注意事項

設計測試和生產環境時,請考慮下列因素。

本機開發

搭配使用 Apache Beam 和 NVIDIA GPU,即可建立大規模資料處理管道,處理預先處理和推論作業。使用 GPU 進行本機開發時,請注意下列資訊:

  • 資料處理工作流程通常會使用其他程式庫,您需要在啟動環境和 Dataflow 工作站的執行環境中安裝這些程式庫。這項設定會在開發工作流程中新增步驟,用於設定管道需求在 Dataflow 中使用自訂容器。盡可能模擬實際工作環境的本機開發環境,對您很有幫助。

  • 如果您的工作流程符合下列兩項條件,就不需要建構自訂容器或變更開發工作流程,即可設定管道需求:

    • 您使用的程式庫會隱含使用 NVIDIA GPU。
    • 您的程式碼不需要任何變更,即可支援 GPU。
  • 部分程式庫不會在 CPU 和 GPU 使用率之間透明切換,因此需要特定建構作業和不同的程式碼路徑。如要複製這個情境的程式碼執行程式碼開發生命週期,必須執行額外步驟。

  • 執行本機實驗時,請盡可能複製 Dataflow 工作人員的環境。視程式庫而定,您可能需要具備 GPU 的機器,並安裝必要的 GPU 程式庫。您可能無法在本地環境中使用這類機器。您可以使用在配備 GPU 的虛擬機器上執行的容器,模擬 Dataflow 執行器環境。 Google Cloud

機器類型規格

如要瞭解各 GPU 型號支援的機器類型,請參閱 GPU 平台。 支援 N1 機器類型的 GPU 也支援自訂 N1 機器類型

GPU 類型和數量會決定工作人員可用的 vCPU 和記憶體數量上限。如要瞭解相關限制,請參閱適用情形

指定較多的 CPU 或記憶體時,可能需要指定較多的 GPU。

詳情請參閱「Compute Engine 上的 GPU」一文。

充分善用資源

大多數管道並非完全由需要 GPU 的轉換組成。典型的管道會包含擷取階段,並使用 Apache Beam 提供的眾多來源之一。接著是資料操控或成形轉換階段,然後動態饋給至 GPU 轉換。

適當調整大小功能會使用 Apache Beam 資源提示,為批次管道自訂工作站資源。啟用適當調整功能後,Dataflow 只會針對管道中需要 GPU 的階段使用 GPU。因此,這項功能可提升管道的彈性和功能,同時可能降低成本。

詳情請參閱「正確佩戴」一節。

GPU 和工作站平行處理量

對於使用 Dataflow Runner v2 架構的 Python 管道,Dataflow 會為每個 VM 核心啟動一個 Apache Beam SDK 程序。每個 SDK 程序都會在自己的 Docker 容器中執行,並產生許多執行緒,每個執行緒都會處理傳入的資料。

GPU 使用多個程序架構,Dataflow 工作站中的 GPU 可供所有程序和執行緒使用。

如果您在共用 GPU 上執行多個 SDK 程序,可以啟用 NVIDIA 多程序服務 (MPS),提升 GPU 效率和使用率。MPS 可提升工作人員的平行處理能力,以及 GPU 管道的整體總處理量,特別是 GPU 資源用量較低的工作負載。詳情請參閱「使用 NVIDIA MPS 提升共用 GPU 的效能」。

為避免 GPU 記憶體過度訂閱,您可能需要管理 GPU 存取權。如果您使用 TensorFlow,可以參考下列任一建議,避免 GPU 記憶體過度訂閱:

  • 設定 Dataflow 工作站,使其只啟動一個容器化 Python 程序,無論工作站的 vCPU 數量為何。如要進行這項設定,請在啟動工作時使用下列管道選項

    • --experiments=no_use_multiple_sdk_containers
    • --number_of_worker_harness_threads

    如要進一步瞭解要使用多少個執行緒,請參閱「減少執行緒數量」。

  • 啟用 MPS

推論工作負載

使用機器學習模型執行本機和遠端推論時,請使用內建的 Apache Beam RunInference 轉換RunInference API PTransform 專為機器學習推論最佳化,在管道中使用 ML 模型時,RunInference 轉換可提升效率。

工作流程

下列兩階段工作流程說明如何使用 GPU 建構管道。這個流程會分別處理 GPU 和非 GPU 相關問題,縮短意見回饋迴路。

  1. 建立管道

    建立可在 Dataflow 上執行的管道。將需要 GPU 的轉換作業,替換為不使用 GPU 但功能相同的轉換作業:

    1. 建立所有與 GPU 使用量相關的轉換,例如資料擷取和操控。

    2. 建立 GPU 轉換的存根,並進行傳遞或架構變更。

  2. 在本機測試

    在模擬 Dataflow 工作站執行環境的環境中,測試管道程式碼的 GPU 部分。下列步驟說明其中一種執行這項測試的方法:

    1. 建立包含所有必要程式庫的 Docker 映像檔。

    2. 開始開發 GPU 程式碼。

    3. 使用 Docker 映像檔啟動虛擬機器,開始執行程式碼的循環。 Google Cloud 如要排除程式庫不相容的問題,請在與 Apache Beam 管道分開的本機 Python 程序中執行 GPU 程式碼。接著,在直接執行器上執行整個管道,或在 Dataflow 上啟動管道。

使用執行容器最佳化作業系統的 VM

如要使用最低環境,請使用容器最佳化的虛擬機器 (VM)。詳情請參閱「建立連接 GPU 的 VM」。

一般流程如下:

  1. 建立 VM。

  2. 連線至 VM 並執行下列指令:

    sudo cos-extensions install gpu -- -version latest
    sudo mount --bind /var/lib/nvidia /var/lib/nvidia
    sudo mount -o remount,exec /var/lib/nvidia
    
  3. 確認 GPU 是否可用:

    ./nvidia-smi
    
  4. 啟動 Docker 容器,並將 VM 掛接為磁碟區,以取得 GPU 驅動程式。例如:

    sudo docker run --rm -it --entrypoint /bin/bash
    --volume /var/lib/nvidia/lib64:/usr/local/nvidia/lib64
    --volume /var/lib/nvidia/bin:/usr/local/nvidia/bin
    --privileged gcr.io/bigdatapivot/image_process_example:latest
    

如需 Dockerfile 範例,請參閱「建構自訂容器映像檔」。將管道所需的所有依附元件新增至 Dockerfile。

如要進一步瞭解如何使用預先設定為使用 GPU 的 Docker 映像檔,請參閱使用已設定為使用 GPU 的現有映像檔

使用容器最佳化系統的工具

  • 如要將 Docker CLI 設定為使用 docker-credential-gcr 做為預設 Google Container Registry (GCR) 集的憑證輔助程式,請使用:

    sudo docker-credential-gcr configure-docker
    

    如要進一步瞭解如何設定 Docker 憑證,請參閱 docker-credential-gcr

  • 如要將管道程式碼等檔案複製到 VM 或從 VM 複製檔案,請使用 toolbox。 使用自訂最佳化映像檔時,這種做法很有用。 例如:

    toolbox /google-cloud-sdk/bin/gsutil cp gs://bucket/gpu/image_process/* /media/root/home/<userid>/opencv/
    

    詳情請參閱「使用工具箱偵錯節點問題」。

後續步驟