GCP를 사용한 대용량 데이터셋 처리
데이터 수집량이 많아질수록 데이터 검증 단계에서 소요되는 시간은 더 커진다. 이때, 노드에의 병렬 배포를 수행하는 클라우드 솔루션을 활용하면 이러한 소요시간을 단축시킬 수 있다.
TFDV는 아파치 빔에서 실행되기 때문에 구글 클라우드 데이터플로로의 전환이 쉽다. 구글 클라우드 데이터플로(Dataflow)에서 TFDV를 실행하는 방법을 알아보자.
Google Cloud 서비스 계정 생성
로컬 머신 또는 Cloud Shell에서 Cloud SDK를 사용하여 다음 명령어를 실행하여 서비스 계정을 만들고 권한을 부여한 후 키 파일을 JSON 형태로 받을 수 있다.
1. 서비스 계정 생성
SERVICE_ACCOUNT_NAME에 설정하고자 하는 서비스 계정명을 입력한다.
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
2. 서비스 계정 권한 부여
PROJECT_ID를 선택하고자 하는 프로젝트 ID로 변경한다.
gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role="roles/owner"
NOTE
--role플래그는 서비스 계정이 프로젝트에서 액세스할 수 있는 리소스에 영향을 준다. 프로덕션 환경에서는 owner, editor 또는 viewer 역할을 부여하지 않도록 해야 한다.
3. 키 파일 생성
FILE_NAME을 키 파일 이름으로 변경한다. 키 파일이 만들어지면 JSON 형태로 컴퓨터에 다운로드된다.
gcloud iam service-accounts keys create FILE_NAME.json --iam-account=SERVICE_ACCONT_NAME@PROJECT_ID.iam.gserviceaccount.com
환경변수 설정
Cloud SDK를 통해 서비스 계정을 사용하려면 코드가 실행되는 환경변수를 설정해야 한다.
GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정함으로써, 애플리케이션 코드에 사용자 인증 정보를 제공한다. 이러한 변수 설정은 현재 셸 세션에만 적용되는데, 이후 셸 세션에서도 변수를 적용하려면 셸 시작 파일(예: ~/.bashrc 또는 ~/.profile 파일)에서 변수를 설정해야 한다.
* 하단 내용은 Linux 혹은 Mac OS 기준으로 작성되었습니다.
export GOOGLE_APPLICATION_CREDENTIALS="KEY_PATH"
KEY_PATH에는 위에서 다운로드한 서비스 계정 키 파일의 위치를 입력하면 된다. 환경변수를 설정하면 배포할 때 애플리케이션 코드를 변경하지 않고도 애플리케이션과 별도로 사용자 인증 정보를 제공할 수 있다. 변수를 설정하지 않고도 코드에서 서비스 계정 키 파일 경로를 명시적으로 지정할 수 있다.
인증 확인
환경변수를 설정하면 Google Cloud 클라이언트 라이브러리를 사용할 때 코드에 사용자 인증 정보를 명시적으로 지정하지 않고도 사용할 수 있다. 환경 변수를 설정한 후 다음 예시와 같은 클라이언트 라이브러리 코드를 실행하여 인증 작동을 확인할 수 있다. 요청이 성공한다면 인증이 작동함을 의미한다.
def implicit():
from google.cloud import storage
# 클라이언트 생성 시 인증정보를 명시하지 않았을 경우
# 클라이언트 라이브러리는 환경변수에서 인증정보를 탐색한다
storage_client = storage.Client()
# authentificated API request 생성
buckets = list(storage_client.list_buckets())
print(buckets)
데이터 검증 작업 배포
위 과정을 모두 마친 후에는 데이터플로를 사용하여 데이터 검증을 수행할 수 있다. 여기서 tfdv.generate_statistics_from_record를 사용하려면 GCP에서 데이터 검증을 실행할 수 있는 GCP 세부 정보를 모도 포함하는 객체인 pipeline_options와, 데이터 검증 결과를 기록하는 GCP 버킷 위치를 나타내는 output_path 인자가 추가로 필요하다.
from apache_beam.options.pipeline_options import PipelineOptions, GoogleCloudOptions, StandardOptions
options = PipelineOptions()
google_cloud_options = options.view_as(GoogleCloudOptions)
# 프로젝트 ID 설정
google_cloud_options.project = 'YOUR_GCP_PROJECT_ID'
# 작업 이름 지정
google_cloud_options.job_name = 'YOUR_JOB_NAME'
# 스테이징 및 임시 파일의 저장소 버킷 지정
google_cloud_options.staging_location = 'gs://YOUR_GCP_BUCKET/staging'
google_cloud_options.temp_location = 'gs://YOUR_GCP_BUCKET/tmp'
options.view_as(StandardOptions).runner = 'DataflowRunner'
구글 클라우드 옵션을 구성한 후에는 데이터플로 워커(worker) 설정을 구성해야 한다. 모든 태스크는 태스크를 실행하는 데 필요한 패키지로 프로비저닝 해야 하는 워커에서 실행된다.
여기서는 TFDV 패키지(binary형태. whl 파일)를 로컬 시스템에 다운로드하여 이를 이용해 TFDV를 setup_options.extra_package로 지정해 설치해야 한다.
from apache_beam.options.pipeline_options import SetupOptions
setup_options = options.view_as(SetupOptions)
setup_options.extra_packages = [
'PATH_TO_TFDV',
'tensorflow_data_validation-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl'
]
옵션 구성이 모두 준비되면 로컬 시스템에서 데이터 검증 작업을 시작할 수 있다. 검증 작업은 구글 클라우드 데이터플로 인스턴스에서 실행된다.
import tensorflow_data_validation as tfdv
dataset_path = 'gs://YOUR_GCP_BUCKET/train_reviews.tfrecord'
output_path = 'gs://YOUR_GCP_BUCKET/'
tfdv.generate_statistics_from_tfrecord(dataset_path,
output_path=output_path,
pipeline_options=options)
구글 클라우드 Jobs 콘솔에서 태스크 목록과 실행 중인 작업의 상세 내역 및 상태 등 상세 내역을 확인할 수 있다.
댓글