使用 Dataflow GPU 的最佳做法

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

如要瞭解如何在 Dataflow 工作中啟用 GPU,請參閱「使用 GPU 執行管道」和「使用 GPU 處理 Landsat 衛星影像」一文中的資訊和範例。

在 Dataflow 中使用 GPU 的先決條件

  • 如要在 Dataflow 工作中使用 GPU,您必須使用可攜式 Runner (先前稱為 Runner v2)。
  • Dataflow 會在 Docker 容器內的 worker VM 中執行使用者程式碼。 這些工作站 VM 會執行 Container-Optimized OS。 如要讓 Dataflow 工作使用 GPU,您必須符合下列先決條件:
  • 由於 GPU 容器通常很大,為避免磁碟空間不足,請將預設開機磁碟大小增加至 50 GB 以上。

注意事項

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

本機開發

搭配使用 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 資源提示,為批次管道自訂 worker 資源。啟用適當調整功能後,Dataflow 只會針對管道中需要 GPU 的階段使用 GPU。因此,這項功能可提升管道彈性和功能,同時可能降低成本。

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

GPU 和 worker 平行處理

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

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

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

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

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

    • --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/
    

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

後續步驟