使用 GPU 處理 Landsat 衛星影像

本教學課程說明如何在 Dataflow 上使用 GPU 處理 Landsat 8 衛星圖像,並將其算繪為 JPEG 檔案。本教學課程以「使用 GPU 處理 Landsat 衛星影像」範例為基礎。

目標

  • 為 Dataflow 建構 Docker 映像檔,其中包含支援 GPU 的 TensorFlow。
  • 使用 GPU 執行 Dataflow 工作。

費用

本教學課程使用 Google Cloud的計費元件,包括:

  • Cloud Storage
  • Dataflow
  • Artifact Registry

您可以使用 Pricing Calculator 來根據預測使用量產生預估費用。

事前準備

  1. 登入 Google Cloud 帳戶。如果您是 Google Cloud新手,歡迎 建立帳戶,親自評估產品在實際工作環境中的成效。新客戶還能獲得價值 $300 美元的免費抵免額,可用於執行、測試及部署工作負載。
  2. 安裝 Google Cloud CLI。

  3. 若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

  4. 執行下列指令,初始化 gcloud CLI:

    gcloud init
  5. 建立或選取 Google Cloud 專案

    選取或建立專案所需的角色

    • 選取專案:選取專案時,不需要具備特定 IAM 角色,只要您已獲授角色,即可選取任何專案。
    • 建立專案:如要建立專案,您需要具備專案建立者角色 (roles/resourcemanager.projectCreator),其中包含 resourcemanager.projects.create 權限。瞭解如何授予角色
    • 建立 Google Cloud 專案:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替換為您要建立的 Google Cloud 專案名稱。

    • 選取您建立的 Google Cloud 專案:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替換為 Google Cloud 專案名稱。

  6. 確認專案已啟用計費功能 Google Cloud

  7. 啟用 Dataflow、Cloud Build 和 Artifact Registry API:

    啟用 API 時所需的角色

    如要啟用 API,您需要具備服務使用情形管理員 IAM 角色 (roles/serviceusage.serviceUsageAdmin),其中包含 serviceusage.services.enable 權限。瞭解如何授予角色

    gcloud services enable dataflow cloudbuild.googleapis.com artifactregistry.googleapis.com
  8. 如果您使用本機殼層,請為使用者帳戶建立本機驗證憑證:

    gcloud auth application-default login

    如果您使用 Cloud Shell,則不需要執行這項操作。

    如果系統傳回驗證錯誤,且您使用外部識別資訊提供者 (IdP),請確認您已 使用聯合身分登入 gcloud CLI

  9. 將角色授予使用者帳戶。針對下列每個 IAM 角色,執行一次下列指令: roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    更改下列內容:

    • PROJECT_ID:專案 ID。
    • USER_IDENTIFIER:使用者帳戶的 ID。 例如:myemail@example.com
    • ROLE:授予使用者帳戶的 IAM 角色。
  10. 安裝 Google Cloud CLI。

  11. 若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

  12. 執行下列指令,初始化 gcloud CLI:

    gcloud init
  13. 建立或選取 Google Cloud 專案

    選取或建立專案所需的角色

    • 選取專案:選取專案時,不需要具備特定 IAM 角色,只要您已獲授角色,即可選取任何專案。
    • 建立專案:如要建立專案,您需要具備專案建立者角色 (roles/resourcemanager.projectCreator),其中包含 resourcemanager.projects.create 權限。瞭解如何授予角色
    • 建立 Google Cloud 專案:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替換為您要建立的 Google Cloud 專案名稱。

    • 選取您建立的 Google Cloud 專案:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替換為 Google Cloud 專案名稱。

  14. 確認專案已啟用計費功能 Google Cloud

  15. 啟用 Dataflow、Cloud Build 和 Artifact Registry API:

    啟用 API 時所需的角色

    如要啟用 API,您需要具備服務使用情形管理員 IAM 角色 (roles/serviceusage.serviceUsageAdmin),其中包含 serviceusage.services.enable 權限。瞭解如何授予角色

    gcloud services enable dataflow cloudbuild.googleapis.com artifactregistry.googleapis.com
  16. 如果您使用本機殼層,請為使用者帳戶建立本機驗證憑證:

    gcloud auth application-default login

    如果您使用 Cloud Shell,則不需要執行這項操作。

    如果系統傳回驗證錯誤,且您使用外部識別資訊提供者 (IdP),請確認您已 使用聯合身分登入 gcloud CLI

  17. 將角色授予使用者帳戶。針對下列每個 IAM 角色,執行一次下列指令: roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    更改下列內容:

    • PROJECT_ID:專案 ID。
    • USER_IDENTIFIER:使用者帳戶的 ID。 例如:myemail@example.com
    • ROLE:授予使用者帳戶的 IAM 角色。
  18. 將角色授予 Compute Engine 預設服務帳戶。針對下列每個 IAM 角色,執行一次下列指令:roles/dataflow.adminroles/dataflow.workerroles/bigquery.dataEditorroles/pubsub.editorroles/storage.objectAdminroles/artifactregistry.reader

    gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" --role=SERVICE_ACCOUNT_ROLE
    • PROJECT_ID 替換為專案 ID。
    • PROJECT_NUMBER 替換為專案編號。 如要找出專案編號,請參閱「識別專案」。
    • SERVICE_ACCOUNT_ROLE 替換為各個角色。
  19. 如要儲存本教學課程的輸出 JPEG 圖片檔,請建立 Cloud Storage bucket:
    1. 前往 Google Cloud 控制台的 Cloud Storage「Buckets」(值區) 頁面。

      前往「Buckets」(值區) 頁面

    2. 點選 「Create」(建立)
    3. 在「建立 bucket」頁面中,輸入 bucket 資訊。如要前往下一個步驟,請按「繼續」
      1. 在「Name your bucket」(為 bucket 命名) 欄位中,輸入 bucket 的專屬名稱。請勿在 bucket 名稱中加入任何機密資訊,因為 bucket 命名空間全域通用並會公開顯示。
      2. 在「Choose where to store your data」(選擇資料的儲存位置) 專區中,執行下列操作:
        1. 選取「位置類型」
        2. 從「位置類型」下拉式選單中,選擇要永久儲存 bucket 資料的位置。
          • 如果您選取「雙區域」位置類型,也可以使用相關核取方塊啟用強化型複製
        3. 如要設定跨值區複製,請選取「透過 Storage 移轉服務新增跨值區複製作業」,然後按照下列步驟操作:

          設定跨 bucket 複製作業

          1. 在「Bucket」選單中選取 bucket。
          2. 在「複製設定」部分,按一下「設定」,設定複製作業的設定。

            系統隨即會顯示「設定跨 bucket 複製作業」窗格。

            • 如要依物件名稱前置字串篩選要複製的物件,請輸入要納入或排除物件的前置字串,然後按一下「新增前置字串」
            • 如要為複製的物件設定儲存空間級別,請從「儲存空間級別」選單中選取儲存空間級別。如果略過這個步驟,複製的物件預設會使用目標值區的儲存空間級別。
            • 按一下 [完成]
      3. 在「選擇資料儲存方式」部分,執行下列操作:
        1. 在「設定預設類別」部分,選取「Standard」
        2. 如要啟用階層命名空間,請在「為資料密集型工作負載提供最理想的儲存空間」部分,選取「為這個值區啟用階層命名空間」
      4. 在「選取如何控制物件的存取權」部分,選取 bucket 是否要強制執行禁止公開存取,並為 bucket 的物件選取存取權控管方法
      5. 在「選擇保護物件資料的方式」部分,執行下列操作:
        • 在「資料保護」下方,選取要為 bucket 設定的選項。
          • 如要啟用虛刪除,請按一下「虛刪除政策 (用於資料復原)」核取方塊,並指定要保留物件的天數 (刪除後)。
          • 如要設定「物件版本管理」,請按一下「物件版本管理 (用於版本管控)」核取方塊,並指定每個物件的版本數量上限,以及非現行版本失效的天數。
          • 如要為物件和 bucket 啟用保留政策,請勾選「保留 (符合法規)」核取方塊,然後執行下列操作:
            • 如要啟用 Object Retention Lock,請按一下「啟用物件保留功能」核取方塊。
            • 如要啟用「Bucket Lock」,請勾選「Set bucket retention policy」(設定值區保留政策) 核取方塊,然後選擇保留期限的時間單位和長度。
        • 如要選擇物件資料的加密方式,請展開「資料加密」部分 (),然後選取「資料加密」方法
    4. 點選「建立」

準備工作環境

下載入門檔案,然後建立 Artifact Registry 存放區。

下載範例檔案

下載範例檔案,然後變更目錄。

  1. 複製 python-docs-samples 存放區。

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    
  2. 前往範例程式碼目錄

    cd python-docs-samples/dataflow/gpu-examples/tensorflow-landsat
    

設定 Artifact Registry

建立 Artifact Registry 存放區,以便上傳構件。每個存放區只能包含單一支援格式的構件。

所有存放區內容都會使用 Google-owned and Google-managed encryption keys 或客戶自行管理的加密金鑰加密。Artifact Registry 預設使用Google-owned and Google-managed encryption keys ,不需要為這個選項進行任何設定。

您必須至少具備存放區的 Artifact Registry 寫入者存取權

執行下列指令來建立新的存放區。這個指令會使用 --async 旗標並立即傳回,不會等待執行中的作業完成。

gcloud artifacts repositories create REPOSITORY \
    --repository-format=docker \
    --location=LOCATION \
    --async

REPOSITORY 替換為存放區名稱。專案中每個存放區位置的存放區名稱不得重複。

在推送或提取映像檔前,請先設定 Docker,驗證傳送至 Artifact Registry 的要求。如要為 Docker 存放區設定驗證機制,請執行下列指令:

gcloud auth configure-docker LOCATION-docker.pkg.dev

這個指令會更新 Docker 設定。您現在可以在 Google Cloud 專案中連結 Artifact Registry,以推送映像檔。

建構 Docker 映像檔

Cloud Build 可讓您使用 Dockerfile 建構 Docker 映像檔,並儲存到 Artifact Registry,供其他Google Cloud 產品存取。

使用 build.yaml 設定檔建構容器映像檔。

gcloud builds submit --config build.yaml

使用 GPU 執行 Dataflow 工作

以下程式碼區塊示範如何使用 GPU 啟動這個 Dataflow 管道。

我們使用 run.yaml 設定檔執行 Dataflow 管道。

export PROJECT=PROJECT_NAME
export BUCKET=BUCKET_NAME

export JOB_NAME="satellite-images-$(date +%Y%m%d-%H%M%S)"
export OUTPUT_PATH="gs://$BUCKET/samples/dataflow/landsat/output-images/"
export REGION="us-central1"
export GPU_TYPE="nvidia-tesla-t4"

gcloud builds submit \
    --config run.yaml \
    --substitutions _JOB_NAME=$JOB_NAME,_OUTPUT_PATH=$OUTPUT_PATH,_REGION=$REGION,_GPU_TYPE=$GPU_TYPE \
    --no-source

更改下列內容:

  • PROJECT_NAME: Google Cloud 專案名稱
  • BUCKET_NAME:Cloud Storage bucket 名稱 (不含 gs:// 前置字元)

執行這個管道後,請等待指令執行完畢。如果退出殼層,您設定的環境變數可能會遺失。

為避免多個工作站程序共用 GPU,這個範例使用 1 個 vCPU 的機器類型。使用 13 GB 的擴充記憶體,即可滿足管道的記憶體需求。詳情請參閱「GPU 和 worker 平行處理」。

查看結果

管道會處理 Landsat 8 衛星影像,並將其算繪為 JPEG 檔案。tensorflow-landsat/main.py請按照下列步驟查看這些檔案。

  1. 使用 Google Cloud CLI 列出輸出 JPEG 檔案的詳細資料。

    gcloud storage ls "gs://$BUCKET/samples/dataflow/landsat/" --long --readable-sizes
    
  2. 將檔案複製到本機目錄。

    mkdir outputs
    gcloud storage cp "gs://$BUCKET/samples/dataflow/landsat/*" outputs/
    
  3. 使用您選擇的圖片檢視器開啟這些圖片檔案。

清除所用資源

為避免因為本教學課程所用資源,導致系統向 Google Cloud 收取費用,請刪除含有相關資源的專案,或者保留專案但刪除個別資源。

刪除專案

如要避免付費,最簡單的方法就是刪除您為了本教學課程所建立的專案。

刪除專案的方法如下:

  1. 前往 Google Cloud 控制台的「Manage resources」(管理資源) 頁面。

    前往「Manage resources」(管理資源)

  2. 在專案清單中選取要刪除的專案,然後點選「Delete」(刪除)
  3. 在對話方塊中輸入專案 ID,然後按一下 [Shut down] (關閉) 以刪除專案。

後續步驟