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


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

목표

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

비용

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

  • Cloud Storage
  • Dataflow
  • Artifact Registry

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

시작하기 전에

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  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. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  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. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  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. Google Cloud Console에서 Cloud Storage 버킷 페이지로 이동합니다.

      버킷 페이지로 이동

    2. 버킷 만들기를 클릭합니다.
    3. 버킷 만들기 페이지에서 버킷 정보를 입력합니다. 다음 단계로 이동하려면 계속을 클릭합니다.
      • 버킷 이름 지정에서 고유한 버킷 이름을 입력합니다. 버킷 네임스페이스는 전역적이며 공개로 표시되므로 버킷 이름에 민감한 정보를 포함해서는 안 됩니다.
      • 데이터를 저장할 위치 선택에서 다음을 수행합니다.
        • 위치 유형 옵션을 선택합니다.
        • 위치 옵션을 선택합니다.
      • 데이터의 기본 스토리지 클래스 선택에서 다음을 선택합니다. 표준.
      • 객체 액세스를 제어하는 방식 선택에서 액세스 제어 옵션을 선택합니다.
      • 고급 설정(선택사항)에서 암호화 방법, 보관 정책 또는 버킷 라벨을 지정합니다.
    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 소유 및 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.

다음 단계