이 튜토리얼에서는 BigQuery ML 모델을 내보낸 다음 Vertex AI 또는 로컬 머신에 배포하는 방법을 보여줍니다. BigQuery 공개 데이터 세트의 iris
테이블을 사용하고 다음과 같은 3개의 엔드 투 엔드 시나리오를 살펴봅니다.
- 로지스틱 회귀 모델을 학습하고 배포합니다. 또한 DNN 분류, DNN 회귀, k-평균, 선형 회귀, 행렬 분해 모델에도 적용됩니다.
- 부스티드 트리 분류 모델을 학습하고 배포합니다. 또한 부스티드 트리 회귀 모델에도 적용됩니다.
- AutoML 분류 모델을 학습하고 배포합니다. 또한 AutoML 회귀 모델에도 적용됩니다.
데이터 세트 만들기
ML 모델을 저장할 BigQuery 데이터 세트를 만듭니다.
콘솔
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
탐색기 창에서 프로젝트 이름을 클릭합니다.
작업 보기 > 데이터 세트 만들기를 클릭합니다.
데이터 세트 만들기 페이지에서 다음을 수행합니다.
데이터 세트 ID에
bqml_tutorial
를 입력합니다.위치 유형에 대해 멀티 리전을 선택한 다음 US(미국 내 여러 리전)를 선택합니다.
나머지 기본 설정은 그대로 두고 데이터 세트 만들기를 클릭합니다.
bq
새 데이터 세트를 만들려면 --location
플래그와 함께 bq mk
명령어를 실행합니다. 사용할 수 있는 전체 파라미터 목록은 bq mk --dataset
명령어 참조를 확인하세요.
데이터 위치가
US
로 설정되고 설명이BigQuery ML tutorial dataset
인bqml_tutorial
데이터 세트를 만듭니다.bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
--dataset
플래그를 사용하는 대신 이 명령어는-d
단축키를 사용합니다.-d
와--dataset
를 생략하면 이 명령어는 기본적으로 데이터 세트를 만듭니다.데이터 세트가 생성되었는지 확인합니다.
bq ls
API
데이터 세트 리소스가 정의된 datasets.insert
메서드를 호출합니다.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
BigQuery DataFrames
이 샘플을 사용해 보기 전에 BigQuery DataFrames를 사용하여 BigQuery 빠른 시작의 BigQuery DataFrames 설정 안내를 따르세요. 자세한 내용은 BigQuery DataFrames 참고 문서를 확인하세요.
BigQuery에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 ADC 설정을 참조하세요.
로지스틱 회귀 모델 학습 및 배포
다음 섹션에서 로지스틱 회귀 모델을 학습하고 배포하는 방법을 알아보세요.
모델 학습
BigQuery ML CREATE MODEL
문을 사용하여 iris 유형을 예측하는 로지스틱 회귀 모델을 학습시킵니다. 이 학습 작업은 완료하는 데 약 1분이 소요됩니다.
bq query --use_legacy_sql=false \ 'CREATE MODEL `bqml_tutorial.iris_model` OPTIONS (model_type="logistic_reg", max_iterations=10, input_label_cols=["species"]) AS SELECT * FROM `bigquery-public-data.ml_datasets.iris`;'
모델 내보내기
bq 명령줄 도구를 사용하여 모델을 Cloud Storage 버킷으로 내보냅니다. 모델을 내보내는 다른 방법은 BigQuery ML 모델 내보내기를 참조하세요. 이 추출 작업은 완료하는 데 1분 미만이 소요됩니다.
bq extract -m bqml_tutorial.iris_model gs://some/gcs/path/iris_model
로컬 배포 및 제공
TensorFlow Serving Docker 컨테이너를 사용하여 내보낸 TensorFlow 모델을 배포할 수 있습니다. 다음 단계에서는 Docker를 설치해야 합니다.
내보낸 모델 파일을 임시 디렉터리에 다운로드
mkdir tmp_dir
gcloud storage cp gs://some/gcs/path/iris_model tmp_dir --recursive
버전 하위 디렉터리 만들기
이 단계에서는 모델의 버전 번호(이 경우 1)를 설정합니다.
mkdir -p serving_dir/iris_model/1
cp -r tmp_dir/iris_model/* serving_dir/iris_model/1
rm -r tmp_dir
Docker 이미지 가져오기
docker pull tensorflow/serving
Docker 컨테이너 실행
docker run -p 8500:8500 --network="host" --mount type=bind,source=`pwd`/serving_dir/iris_model,target=/models/iris_model -e MODEL_NAME=iris_model -t tensorflow/serving &
예측 실행
curl -d '{"instances": [{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0}]}' -X POST http://localhost:8501/v1/models/iris_model:predict
온라인 배포 및 제공
이 섹션에서는 Google Cloud CLI를 사용하여 내보낸 모델에 대한 예측을 배포하고 실행합니다.
온라인 또는 일괄 예측을 위해 Vertex AI에 모델을 배포하는 방법에 대한 자세한 내용은 엔드포인트에 모델 배포를 참고하세요.
모델 리소스 만들기
MODEL_NAME="IRIS_MODEL"
gcloud ai-platform models create $MODEL_NAME
모델 버전 만들기
1) 환경 변수를 설정합니다.
MODEL_DIR="gs://some/gcs/path/iris_model"
// Select a suitable version for this model
VERSION_NAME="v1"
FRAMEWORK="TENSORFLOW"
2) 버전을 만듭니다.
gcloud ai-platform versions create $VERSION_NAME --model=$MODEL_NAME --origin=$MODEL_DIR --runtime-version=1.15 --framework=$FRAMEWORK
이 단계를 완료하는 데 몇 분이 걸릴 수 있습니다. Creating version (this might take a few minutes)......
메시지가 표시됩니다.
3) (선택사항) 새 버전에 대한 정보를 가져옵니다.
gcloud ai-platform versions describe $VERSION_NAME --model $MODEL_NAME
다음과 비슷한 출력이 표시됩니다.
createTime: '2020-02-28T16:30:45Z'
deploymentUri: gs://your_bucket_name
framework: TENSORFLOW
machineType: mls1-c1-m2
name: projects/[YOUR-PROJECT-ID]/models/IRIS_MODEL/versions/v1
pythonVersion: '2.7'
runtimeVersion: '1.15'
state: READY
온라인 예측
배포된 모델에 대해 온라인 예측을 실행하는 방법에 대한 자세한 내용은 커스텀 학습 모델에서 온라인 추론 가져오기를 참고하세요.
1) 입력을 위해 줄바꿈으로 구분된 JSON 파일을 만듭니다(예: 다음 콘텐츠가 포함된 instances.json
파일).
{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0}
{"sepal_length":5.3, "sepal_width":3.7, "petal_length":1.5, "petal_width":0.2}
2) 예측을 위한 환경 변수를 설정합니다.
INPUT_DATA_FILE="instances.json"
3) 예측을 실행합니다.
gcloud ai-platform predict --model $MODEL_NAME --version $VERSION_NAME --json-instances $INPUT_DATA_FILE
부스티드 트리 분류 모델 학습 및 배포
다음 섹션에서 부스팅 트리 분류기 모델을 학습시키고 배포하는 방법을 알아보세요.
모델 학습
CREATE MODEL
문을 사용하여 iris 유형을 예측하는 부스티드 트리 분류 모델을 학습시킵니다. 이 학습 작업은 완료하는 데 약 7분 정도 걸립니다.
bq query --use_legacy_sql=false \ 'CREATE MODEL `bqml_tutorial.boosted_tree_iris_model` OPTIONS (model_type="boosted_tree_classifier", max_iterations=10, input_label_cols=["species"]) AS SELECT * FROM `bigquery-public-data.ml_datasets.iris`;'
모델 내보내기
bq 명령줄 도구를 사용하여 모델을 Cloud Storage 버킷으로 내보냅니다. 모델을 내보내는 다른 방법은 BigQuery ML 모델 내보내기를 참조하세요.
bq extract --destination_format ML_XGBOOST_BOOSTER -m bqml_tutorial.boosted_tree_iris_model gs://some/gcs/path/boosted_tree_iris_model
로컬 배포 및 제공
내보낸 파일에는 로컬 실행을 위한 main.py
파일이 있습니다.
내보낸 모델 파일을 로컬 디렉터리로 다운로드
mkdir serving_dir
gcloud storage cp gs://some/gcs/path/boosted_tree_iris_model serving_dir --recursive
예측자 추출
tar -xvf serving_dir/boosted_tree_iris_model/xgboost_predictor-0.1.tar.gz -C serving_dir/boosted_tree_iris_model/
XGBoost 라이브러리 설치
XGBoost 라이브러리 - 버전 0.82 이상을 설치합니다.
예측 실행
cd serving_dir/boosted_tree_iris_model/
python main.py '[{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0}]'
온라인 배포 및 제공
이 섹션에서는 Google Cloud CLI를 사용하여 내보낸 모델에 대한 예측을 배포하고 실행합니다. 자세한 내용은 커스텀 학습 모델에서 온라인 추론 가져오기를 참고하세요.
커스텀 루틴을 사용하여 온라인 또는 일괄 예측을 위해 Vertex AI에 모델을 배포하는 방법에 대한 자세한 내용은 엔드포인트에 모델 배포를 참고하세요.
모델 리소스 만들기
MODEL_NAME="BOOSTED_TREE_IRIS_MODEL"
gcloud ai-platform models create $MODEL_NAME
모델 버전 만들기
1) 환경 변수를 설정합니다.
MODEL_DIR="gs://some/gcs/path/boosted_tree_iris_model"
VERSION_NAME="v1"
2) 버전을 만듭니다.
gcloud beta ai-platform versions create $VERSION_NAME --model=$MODEL_NAME --origin=$MODEL_DIR --package-uris=${MODEL_DIR}/xgboost_predictor-0.1.tar.gz --prediction-class=predictor.Predictor --runtime-version=1.15
이 단계를 완료하는 데 몇 분이 걸릴 수 있습니다. Creating version (this might take a few minutes)......
메시지가 표시됩니다.
3) (선택사항) 새 버전에 대한 정보를 가져옵니다.
gcloud ai-platform versions describe $VERSION_NAME --model $MODEL_NAME
다음과 비슷한 출력이 표시됩니다.
createTime: '2020-02-07T00:35:42Z'
deploymentUri: gs://some/gcs/path/boosted_tree_iris_model
etag: rp090ebEnQk=
machineType: mls1-c1-m2
name: projects/[YOUR-PROJECT-ID]/models/BOOSTED_TREE_IRIS_MODEL/versions/v1
packageUris:
- gs://some/gcs/path/boosted_tree_iris_model/xgboost_predictor-0.1.tar.gz
predictionClass: predictor.Predictor
pythonVersion: '2.7'
runtimeVersion: '1.15'
state: READY
온라인 예측
배포된 모델에 대해 온라인 예측을 실행하는 방법에 대한 자세한 내용은 커스텀 학습 모델에서 온라인 추론 가져오기를 참고하세요.
1) 입력을 위해 줄바꿈으로 구분된 JSON 파일을 만듭니다. 예를 들어 다음 콘텐츠가 포함된 instances.json
파일입니다.
{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0}
{"sepal_length":5.3, "sepal_width":3.7, "petal_length":1.5, "petal_width":0.2}
2) 예측을 위해 환경 변수를 설정합니다.
INPUT_DATA_FILE="instances.json"
3) 예측을 실행합니다.
gcloud ai-platform predict --model $MODEL_NAME --version $VERSION_NAME --json-instances $INPUT_DATA_FILE
AutoML 분류 모델 학습 및 배포
다음 섹션에서 AutoML 분류기 모델을 학습시키고 배포하는 방법을 알아보세요.
모델 학습
CREATE MODEL
문을 사용하여 iris 유형을 예측하는 AutoML 분류 모델을 학습시킵니다. AutoML 모델에는 최소 1,000개의 입력 데이터 행이 필요합니다. ml_datasets.iris
에 행이 150개 뿐이므로 데이터를 10배로 복제합니다. 이 학습 작업은 완료하는 데 2시간 정도 걸립니다.
bq query --use_legacy_sql=false \ 'CREATE MODEL `bqml_tutorial.automl_iris_model` OPTIONS (model_type="automl_classifier", budget_hours=1, input_label_cols=["species"]) AS SELECT * EXCEPT(multiplier) FROM `bigquery-public-data.ml_datasets.iris`, unnest(GENERATE_ARRAY(1, 10)) as multiplier;'
모델 내보내기
bq 명령줄 도구를 사용하여 모델을 Cloud Storage 버킷으로 내보냅니다. 모델을 내보내는 다른 방법은 BigQuery ML 모델 내보내기를 참조하세요.
bq extract -m bqml_tutorial.automl_iris_model gs://some/gcs/path/automl_iris_model
로컬 배포 및 제공
AutoML 컨테이너 빌드에 대한 자세한 내용은 모델 내보내기를 참조하세요. 다음 단계에서는 Docker를 설치해야 합니다.
내보낸 모델 파일을 로컬 디렉터리에 복사
mkdir automl_serving_dir
gcloud storage cp gs://some/gcs/path/automl_iris_model/* automl_serving_dir/ --recursive
AutoML Docker 이미지 가져오기
docker pull gcr.io/cloud-automl-tables-public/model_server
Docker 컨테이너 시작
docker run -v `pwd`/automl_serving_dir:/models/default/0000001 -p 8080:8080 -it gcr.io/cloud-automl-tables-public/model_server
예측 실행
1) 입력을 위해 줄바꿈으로 구분된 JSON 파일을 만듭니다. 예를 들어 다음 콘텐츠가 포함된 input.json
파일입니다.
{"instances": [{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0},
{"sepal_length":5.3, "sepal_width":3.7, "petal_length":1.5, "petal_width":0.2}]}
2) 예측 호출을 수행합니다.
curl -X POST --data @input.json http://localhost:8080/predict
온라인 배포 및 제공
AutoML 회귀 및 AutoML 분류 모델에 대한 온라인 예측은 Vertex AI에서 지원되지 않습니다.