이 튜토리얼에서는 Dataflow에서 GPU를 사용하여 Landsat 8 위성 이미지를 처리하고 JPEG 파일로 렌더링하는 방법을 보여줍니다. 이 튜토리얼은 GPU를 사용한 Landsat 위성 이미지 처리 예를 기반으로 합니다.
목표
- GPU를 지원하는 TensorFlow가 포함된 Dataflow용 Docker 이미지를 빌드합니다.
- GPU로 Dataflow 작업을 실행합니다.
비용
이 튜토리얼에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.
- Cloud Storage
- Dataflow
- Artifact Registry
가격 계산기를 사용하면 예상 사용량을 기준으로 예상 비용을 산출할 수 있습니다.
시작하기 전에
- 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.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Dataflow, Cloud Build, and Artifact Registry APIs:
gcloud services enable dataflow
cloudbuild.googleapis.com artifactregistry.googleapis.com -
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.
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/iam.serviceAccountUser
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Dataflow, Cloud Build, and Artifact Registry APIs:
gcloud services enable dataflow
cloudbuild.googleapis.com artifactregistry.googleapis.com -
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.
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/iam.serviceAccountUser
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
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
을 각 개별 역할로 바꿉니다.
- 이 튜토리얼의 출력 JPEG 이미지 파일을 저장하려면 Cloud Storage 버킷을 만듭니다.
- In the Google Cloud console, go to the Cloud Storage Buckets page.
- Click Create bucket.
- 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.
- Click Create.
작업 환경 준비
시작 파일을 다운로드한 후 Artifact Registry 저장소를 만듭니다.
시작 파일 다운로드
시작 파일을 다운로드한 후 디렉터리를 변경합니다.
python-docs-samples
저장소를 클론합니다.git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
샘플 코드 디렉터리로 이동합니다.
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 파일로 렌더링합니다. 다음 단계에 따라 파일을 확인하세요.
Google Cloud CLI를 사용하여 출력 JPEG 파일의 세부정보를 나열합니다.
gcloud storage ls "gs://$BUCKET/samples/dataflow/landsat/" --long --readable-sizes
파일을 로컬 디렉터리로 복사합니다.
mkdir outputs gcloud storage cp "gs://$BUCKET/samples/dataflow/landsat/*" outputs/
선택한 이미지 뷰어가 포함된 이미지 파일을 엽니다.
삭제
이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.
프로젝트 삭제
비용이 청구되지 않도록 하는 가장 쉬운 방법은 튜토리얼에서 만든 프로젝트를 삭제하는 것입니다.
프로젝트를 삭제하는 방법은 다음과 같습니다.
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
다음 단계
- 최소한의 GPU를 사용 설정한 TensorFlow 예시 살펴보기
- 최소한의 GPU를 사용 설정한 PyTorch 예시 살펴보기
- Dataflow의 GPU 지원 자세히 알아보기
- GPU 사용 작업을 살펴봅니다.
- Google Cloud에 대한 참조 아키텍처, 다이어그램, 권장사항 살펴보기 Cloud 아키텍처 센터를 살펴보세요.