GPU를 사용하여 Landsat 위성 이미지 처리


이 튜토리얼에서는 Dataflow에서 GPU를 사용하여 Landsat 8 위성 이미지를 처리하고 JPEG 파일로 렌더링하는 방법을 보여줍니다. 이 튜토리얼은 GPU를 사용한 Landsat 위성 이미지 처리 예를 기반으로 합니다.

목표

  • GPU를 지원하는 TensorFlow가 포함된 Dataflow용 Docker 이미지를 빌드합니다.
  • GPU로 Dataflow 작업을 실행합니다.

비용

이 튜토리얼에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.

  • Cloud Storage
  • Dataflow
  • Artifact Registry

가격 계산기를 사용하면 예상 사용량을 기준으로 예상 비용을 산출할 수 있습니다.

시작하기 전에

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the Dataflow, Cloud Build, and Artifact Registry APIs:

    gcloud services enable dataflow cloudbuild.googleapis.com artifactregistry.googleapis.com
  7. If you're using a local shell, then create local authentication credentials for your user account:

    gcloud auth application-default login

    You don't need to do this if you're using Cloud Shell.

  8. Google 계정에 역할을 부여합니다. 다음 각 IAM 역할에 대해 다음 명령어를 한 번씩 실행합니다. roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • PROJECT_ID를 프로젝트 ID로 바꿉니다.
    • EMAIL_ADDRESS를 이메일 주소로 바꿉니다.
    • ROLE을 각 개별 역할로 바꿉니다.
  9. Install the Google Cloud CLI.
  10. To initialize the gcloud CLI, run the following command:

    gcloud init
  11. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  12. Make sure that billing is enabled for your Google Cloud project.

  13. Enable the Dataflow, Cloud Build, and Artifact Registry APIs:

    gcloud services enable dataflow cloudbuild.googleapis.com artifactregistry.googleapis.com
  14. If you're using a local shell, then create local authentication credentials for your user account:

    gcloud auth application-default login

    You don't need to do this if you're using Cloud Shell.

  15. Google 계정에 역할을 부여합니다. 다음 각 IAM 역할에 대해 다음 명령어를 한 번씩 실행합니다. roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • PROJECT_ID를 프로젝트 ID로 바꿉니다.
    • EMAIL_ADDRESS를 이메일 주소로 바꿉니다.
    • ROLE을 각 개별 역할로 바꿉니다.
  16. Compute Engine 기본 서비스 계정에 역할을 부여합니다. 다음 IAM 역할마다 다음 명령어를 1회 실행합니다. roles/dataflow.admin, roles/dataflow.worker, roles/bigquery.dataEditor, roles/pubsub.editor, roles/storage.objectAdmin, roles/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을 각 개별 역할로 바꿉니다.
  17. 이 튜토리얼의 출력 JPEG 이미지 파일을 저장하려면 Cloud Storage 버킷을 만듭니다.
    1. In the Google Cloud console, go to the Cloud Storage Buckets page.

      Go to Buckets page

    2. Click Create bucket.
    3. On the Create a bucket page, enter your bucket information. To go to the next step, click Continue.
      • For Name your bucket, enter a unique bucket name. Don't include sensitive information in the bucket name, because the bucket namespace is global and publicly visible.
      • For Choose where to store your data, do the following:
        • Select a Location type option.
        • Select a Location option.
      • For Choose a default storage class for your data, select the following: Standard.
      • For Choose how to control access to objects, select an Access control option.
      • For Advanced settings (optional), specify an encryption method, a retention policy, or bucket labels.
    4. Click Create.

작업 환경 준비

시작 파일을 다운로드한 후 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 소유 및 Google 관리 키 또는 고객 관리 암호화 키를 통해 암호화됩니다. Artifact Registry는 기본적으로 Google 소유 및 Google 관리 키를 사용하며 이 옵션을 구성할 필요가 없습니다.

저장소에 최소한 Artifact Registry 작성자 액세스 권한이 있어야 합니다.

다음 명령어를 실행하여 새 저장소를 만듭니다. 이 명령어는 진행 중인 작업이 완료될 때까지 기다리지 않고 --async 플래그를 사용하여 즉시 반환합니다.

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

REPOSITORY를 저장소 이름으로 바꿉니다. 프로젝트의 저장소 위치마다 저장소 이름이 고유해야 합니다.

이미지를 내보내거나 가져오려면 먼저 Artifact Registry 요청을 인증하도록 Docker를 구성해야 합니다. Docker 저장소에 인증을 설정하려면 다음 명령어를 실행합니다.

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

이 명령어는 Docker 구성을 업데이트합니다. 이제 Google Cloud 프로젝트의 Artifact Registry와 연결하여 이미지를 내보낼 수 있습니다.

Docker 이미지 빌드

Cloud Build를 사용하면 Dockerfile을 사용하여 Docker 이미지를 빌드하고 다른 Google Cloud 제품에서 이미지에 액세스할 수 있는 Artifact Registry에 저장할 수 있습니다.

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 버킷 이름(gs:// 프리픽스 제외)

이 파이프라인을 실행한 후 명령어가 완료될 때까지 기다립니다. 셸을 종료하면 설정한 환경 변수가 손실될 수 있습니다.

여러 작업자 프로세스 간에 GPU가 공유되지 않도록 하기 위해 이 샘플에서는 vCPU가 1개인 머신 유형을 사용합니다. 파이프라인의 메모리 요구사항은 13GB의 확장 메모리를 사용하여 해결됩니다. 자세한 내용은 GPU 및 작업자 동시 로드를 참조하세요.

결과 보기

tensorflow-landsat/main.py의 파이프라인은 Landsat 8 위성 이미지를 처리하고 JPEG 파일로 렌더링합니다. 다음 단계에 따라 파일을 확인하세요.

  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. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

다음 단계