(source : GCP qwiklabs)

 

AI Platform Notebooks 생성

 

1. Navigation Menu > AI Platform > Notebooks 클릭

 

2. 인스턴스 생성 : NEW INSTANCE 클릭 

- Tensorflow Enterprise 1.15 > Without GPUs 선택

 

3. 팝업창이 뜨면 딥러닝 VM 이름을 입력/확인 하고 Create 클릭

 

(VM 생성까지 2~3분 정도 소요될 수 있음)

 

4. Open JupyterLab 클릭 > JupyterLab Window가 새창으로 열림

 

Datalab instance에 학습용 repo 복제

- training-data-analyst 를 내 JupyterLab 인스턴스에 복제

 

1. JupyterLab 에서 터미널 아이콘(Terminal icon) 클릭하여 새 터미널 창을 오픈

 

2. 커맨드라인에서 아래 명령어를 입력하고 Enter

git clone https://github.com/GoogleCloudPlatform/training-data-analyst

 

실행 결과 : 

 

3. training-data-anlyst 디렉토리를 더블 클릭하여 컨텐츠가 제대로 복제되었는지 확인

 

 

tf.estimator 를 이용한 머신러닝

 

1. 노트북 패널에서 training-data-analyst > courses > machine_learning > deepdive > 03_tensorflow > labs > b_estimator.ipynb 선택

 

- Jupyter Notebook 실습 코드 : 모델

b_estimator.html
0.28MB

 

- Jupyter Notebook 실습 코드 : 정답 포함

b_estimator_solution.html
0.39MB

 

2. Train and eval 입력 기능 : Pandas Dataframe 읽기

def make_train_input_fn(df, num_epochs):
  return tf.estimator.inputs.pandas_input_fn(
    x = df,
    y = df[LABEL],
    batch_size = 128,
    num_epochs = num_epochs,
    shuffle = True,
    queue_capacity = 1000
  )
def make_eval_input_fn(df):
  return tf.estimator.inputs.pandas_input_fn(
    x = df,
    y = df[LABEL],
    batch_size = 128,
    shuffle = False,
    queue_capacity = 1000
  )
def make_prediction_input_fn(df):
  return tf.estimator.inputs.pandas_input_fn(
    x = df,
    y = None,
    batch_size = 128,
    shuffle = False,
    queue_capacity = 1000
  )

 

 

3. estimator 를 위한 feature columns 생성 

def make_feature_cols():
  input_columns = [tf.feature_column.numeric_column(k) for k in FEATURES]
  return input_columns

 

 

 

4. Linear Regression (선형회귀) with tf.Estimator framework 

tf.logging.set_verbosity(tf.logging.INFO)

OUTDIR = 'taxi_trained'
shutil.rmtree(OUTDIR, ignore_errors = True) # start fresh each time

model = tf.estimator.LinearRegressor(
      feature_columns = make_feature_cols(), model_dir = OUTDIR)

model.train(input_fn = make_train_input_fn(df_train, num_epochs = 10))
predictions = model.predict(input_fn = make_prediction_input_fn(df_test))
for items in predictions:
  print(items)

 

5. Deep Neural Network regression 

tf.logging.set_verbosity(tf.logging.INFO)
shutil.rmtree(OUTDIR, ignore_errors = True) # start fresh each time
model = tf.estimator.DNNRegressor(hidden_units = [32, 8, 2],
      feature_columns = make_feature_cols(), model_dir = OUTDIR)
model.train(input_fn = make_train_input_fn(df_train, num_epochs = 100));
print_rmse(model, df_valid)

 

실행 결과 : 

INFO:tensorflow:Using default config.
INFO:tensorflow:Using config: {'_experimental_distribute': None, '_session_config': allow_soft_placement: true
graph_options {
  rewrite_options {
    meta_optimizer_iterations: ONE
  }
}
, '_global_id_in_cluster': 0, '_tf_random_seed': None, '_service': None, '_num_ps_replicas': 0, '_evaluation_master': '', '_log_step_count_steps': 100, '_save_checkpoints_steps': None, '_task_id': 0, '_device_fn': None, '_cluster_spec': <tensorflow.python.training.server_lib.ClusterSpec object at 0x7f15d7d567f0>, '_eval_distribute': None, '_keep_checkpoint_max': 5, '_master': '', '_keep_checkpoint_every_n_hours': 10000, '_save_summary_steps': 100, '_protocol': None, '_task_type': 'worker', '_is_chief': True, '_save_checkpoints_secs': 600, '_model_dir': 'taxi_trained', '_num_worker_replicas': 1, '_train_distribute': None}
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Saving checkpoints for 0 into taxi_trained/model.ckpt.
INFO:tensorflow:loss = 467570.2, step = 1
INFO:tensorflow:global_step/sec: 100.82
INFO:tensorflow:loss = 20871.418, step = 101 (0.994 sec)
INFO:tensorflow:global_step/sec: 108.186
INFO:tensorflow:loss = 19313.43, step = 201 (0.926 sec)
INFO:tensorflow:global_step/sec: 112.618
INFO:tensorflow:loss = 26053.674, step = 301 (0.890 sec)
INFO:tensorflow:global_step/sec: 94.7783
INFO:tensorflow:loss = 24630.527, step = 401 (1.054 sec)
INFO:tensorflow:global_step/sec: 123.391
INFO:tensorflow:loss = 20816.373, step = 501 (0.811 sec)
INFO:tensorflow:global_step/sec: 125.027
INFO:tensorflow:loss = 19305.867, step = 601 (0.800 sec)
INFO:tensorflow:global_step/sec: 100.336
INFO:tensorflow:loss = 17916.236, step = 701 (0.997 sec)
INFO:tensorflow:global_step/sec: 123.813
INFO:tensorflow:loss = 16324.613, step = 801 (0.808 sec)
INFO:tensorflow:global_step/sec: 96.5849
INFO:tensorflow:loss = 25742.564, step = 901 (1.034 sec)
INFO:tensorflow:global_step/sec: 126.786
INFO:tensorflow:loss = 20716.746, step = 1001 (0.789 sec)
INFO:tensorflow:global_step/sec: 102.184
INFO:tensorflow:loss = 17350.438, step = 1101 (0.979 sec)
INFO:tensorflow:global_step/sec: 129.286
INFO:tensorflow:loss = 23090.242, step = 1201 (0.773 sec)
INFO:tensorflow:global_step/sec: 119.124
INFO:tensorflow:loss = 14777.045, step = 1301 (0.840 sec)
INFO:tensorflow:global_step/sec: 96.1406
INFO:tensorflow:loss = 20134.01, step = 1401 (1.040 sec)
INFO:tensorflow:global_step/sec: 112.909
INFO:tensorflow:loss = 15141.786, step = 1501 (0.882 sec)
INFO:tensorflow:global_step/sec: 102.4
INFO:tensorflow:loss = 17473.344, step = 1601 (0.980 sec)
INFO:tensorflow:global_step/sec: 127.155
INFO:tensorflow:loss = 20703.318, step = 1701 (0.787 sec)
INFO:tensorflow:global_step/sec: 118.505
INFO:tensorflow:loss = 20141.992, step = 1801 (0.844 sec)
INFO:tensorflow:global_step/sec: 104.505
INFO:tensorflow:loss = 18941.66, step = 1901 (0.957 sec)
INFO:tensorflow:global_step/sec: 121.39
INFO:tensorflow:loss = 10826.924, step = 2001 (0.820 sec)
INFO:tensorflow:global_step/sec: 103.776
INFO:tensorflow:loss = 15104.154, step = 2101 (0.967 sec)
INFO:tensorflow:global_step/sec: 117.015
INFO:tensorflow:loss = 16825.898, step = 2201 (0.855 sec)
INFO:tensorflow:global_step/sec: 125.782
INFO:tensorflow:loss = 17469.46, step = 2301 (0.794 sec)
INFO:tensorflow:global_step/sec: 106.035
INFO:tensorflow:loss = 15310.082, step = 2401 (0.944 sec)
INFO:tensorflow:global_step/sec: 121.658
INFO:tensorflow:loss = 22304.357, step = 2501 (0.818 sec)
INFO:tensorflow:global_step/sec: 99.4088
INFO:tensorflow:loss = 19509.504, step = 2601 (1.006 sec)
INFO:tensorflow:global_step/sec: 114.029
INFO:tensorflow:loss = 24601.023, step = 2701 (0.877 sec)
INFO:tensorflow:global_step/sec: 55.0054
INFO:tensorflow:loss = 21849.145, step = 2801 (1.817 sec)
INFO:tensorflow:global_step/sec: 128.72
INFO:tensorflow:loss = 11309.27, step = 2901 (0.777 sec)
INFO:tensorflow:global_step/sec: 93.5308
INFO:tensorflow:loss = 21104.457, step = 3001 (1.069 sec)
INFO:tensorflow:global_step/sec: 96.7103
INFO:tensorflow:loss = 16993.004, step = 3101 (1.034 sec)
INFO:tensorflow:global_step/sec: 91.3205
INFO:tensorflow:loss = 18189.752, step = 3201 (1.098 sec)
INFO:tensorflow:global_step/sec: 112.614
INFO:tensorflow:loss = 14859.451, step = 3301 (0.888 sec)
INFO:tensorflow:global_step/sec: 90.5019
INFO:tensorflow:loss = 12333.189, step = 3401 (1.105 sec)
INFO:tensorflow:global_step/sec: 104.302
INFO:tensorflow:loss = 5995.971, step = 3501 (0.959 sec)
INFO:tensorflow:global_step/sec: 92.9583
INFO:tensorflow:loss = 10282.813, step = 3601 (1.075 sec)
INFO:tensorflow:global_step/sec: 104.575
INFO:tensorflow:loss = 9950.309, step = 3701 (0.957 sec)
INFO:tensorflow:global_step/sec: 88.9567
INFO:tensorflow:loss = 16426.35, step = 3801 (1.124 sec)
INFO:tensorflow:global_step/sec: 100.309
INFO:tensorflow:loss = 22024.291, step = 3901 (0.997 sec)
INFO:tensorflow:global_step/sec: 105.657
INFO:tensorflow:loss = 14616.185, step = 4001 (0.947 sec)
INFO:tensorflow:global_step/sec: 100.456
INFO:tensorflow:loss = 13213.275, step = 4101 (0.996 sec)
INFO:tensorflow:global_step/sec: 113.571
INFO:tensorflow:loss = 12385.185, step = 4201 (0.877 sec)
INFO:tensorflow:global_step/sec: 93.7462
INFO:tensorflow:loss = 9375.332, step = 4301 (1.067 sec)
INFO:tensorflow:global_step/sec: 112.179
INFO:tensorflow:loss = 14900.719, step = 4401 (0.894 sec)
INFO:tensorflow:global_step/sec: 93.2297
INFO:tensorflow:loss = 12472.631, step = 4501 (1.071 sec)
INFO:tensorflow:global_step/sec: 106.669
INFO:tensorflow:loss = 15485.025, step = 4601 (0.937 sec)
INFO:tensorflow:global_step/sec: 92.3307
INFO:tensorflow:loss = 18741.918, step = 4701 (1.083 sec)
INFO:tensorflow:global_step/sec: 106.823
INFO:tensorflow:loss = 13244.169, step = 4801 (0.936 sec)
INFO:tensorflow:global_step/sec: 87.4236
INFO:tensorflow:loss = 10333.318, step = 4901 (1.147 sec)
INFO:tensorflow:global_step/sec: 127.855
INFO:tensorflow:loss = 15173.955, step = 5001 (0.782 sec)
INFO:tensorflow:global_step/sec: 112.028
INFO:tensorflow:loss = 12940.822, step = 5101 (0.890 sec)
INFO:tensorflow:global_step/sec: 100.607
INFO:tensorflow:loss = 10854.685, step = 5201 (0.997 sec)
INFO:tensorflow:global_step/sec: 121.355
INFO:tensorflow:loss = 14676.209, step = 5301 (0.822 sec)
INFO:tensorflow:global_step/sec: 95.9606
INFO:tensorflow:loss = 13156.73, step = 5401 (1.043 sec)
INFO:tensorflow:global_step/sec: 118.042
INFO:tensorflow:loss = 17359.934, step = 5501 (0.847 sec)
INFO:tensorflow:global_step/sec: 109.939
INFO:tensorflow:loss = 8592.682, step = 5601 (0.910 sec)
INFO:tensorflow:global_step/sec: 104.666
INFO:tensorflow:loss = 11916.723, step = 5701 (0.956 sec)
INFO:tensorflow:global_step/sec: 110.305
INFO:tensorflow:loss = 17452.98, step = 5801 (0.906 sec)
INFO:tensorflow:global_step/sec: 91.3437
INFO:tensorflow:loss = 20825.383, step = 5901 (1.095 sec)
INFO:tensorflow:global_step/sec: 121.12
INFO:tensorflow:loss = 4669.6084, step = 6001 (0.825 sec)
INFO:tensorflow:Saving checkpoints for 6071 into taxi_trained/model.ckpt.
INFO:tensorflow:Loss for final step: 4455.771.
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Starting evaluation at 2019-07-01T20:22:40Z
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from taxi_trained/model.ckpt-6071
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Finished evaluation at 2019-07-01-20:22:41
INFO:tensorflow:Saving dict for global step 6071: average_loss = 139.01192, global_step = 6071, label/mean = 11.666427, loss = 16532.488, prediction/mean = 6.1680436
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 6071: taxi_trained/model.ckpt-6071
RMSE on dataset = 11.790331840515137

 

(source : GCP qiwklabs)

 

AI Platform Notebooks 생성

 

1. Navigation Menu > AI Platform > Notebooks 클릭

 

2. 인스턴스 생성 : NEW INSTANCE 클릭 

- Tensorflow Enterprise 1.15 > Without GPUs 선택

 

3. 팝업창이 뜨면 딥러닝 VM 이름을 입력/확인 하고 Create 클릭

 

(VM 생성까지 2~3분 정도 소요될 수 있음)

 

4. Open JupyterLab 클릭 > JupyterLab Window가 새창으로 열림

 

Datalab instance에 학습용 repo 복제

- training-data-analyst 를 내 JupyterLab 인스턴스에 복제

 

1. JupyterLab 에서 터미널 아이콘(Terminal icon) 클릭하여 새 터미널 창을 오픈

 

2. 커맨드라인에서 아래 명령어를 입력하고 Enter

git clone https://github.com/GoogleCloudPlatform/training-data-analyst

 

실행 결과 : 

 

3. training-data-anlyst 디렉토리를 더블 클릭하여 컨텐츠가 제대로 복제되었는지 확인

 

 

API key 받기

 

1. GCP console > APIs and services > Library 클릭

 

2. 검색창(search box)에서 > "vision" 을 타이핑 > Google Cloud Vision API 클릭

 

- 활성화 되어 있지 않다면 Enable 클릭

 

3. 같은 방법으로 Translate API, Speech API, and Natural Language APIs 를 활성화

 

4. GCP console menu > APIs and services > Credentials 선택

 

5. Create credentials > API key 클릭 (API Key 사용을 위해 생성된 키 값을 복사해 둠)

 

 

AI Platform Notebooks 에서 ML API 호출

1. notebook 인터페이스에서 training-data-analyst > courses > machine_learning > deepdive > 01_googleml > mlapis.ipynb 선택

 

 

2. 주석을 확인하며 파이썬 코드 실행 (Shift+Enter)

- 첫번째 코드셀에서 API Key를 발급받은 API Key로 대체 

 

 2-1) Jupyter Notebook 실습 코드 : 실행 전

mlapis.html
0.30MB

 

 2-2) Jupyter Notebook 실습 코드 : 실행 후

mlapis_result.html
0.30MB

 

 

3. 반복 분할 (Repeatable Splitting)

- 머신 러닝 데이터 셋을 생성하는 다양한 방법

- notebook 인터페이스에서 training-data-analyst > courses > machine_learning > deepdive > 02_generalization > repeatable_splitting.ipynb 선택

 

 3-1) Jupyter Notebook 코드 : 실행 전

repeatable_splitting.html
0.28MB

 3-2) Jupyter Notebook 코드 : 실행 후

repeatable_splitting_result.html
0.28MB

 

 

4. ML 데이터 세트 탐색 및 생성

- 뉴욕시의 택시 승차에 해당하는 데이터를 탐색하여 요금 추정 도구를 지원하는 기계 학습 모델 샘플

- notebook 인터페이스에서 training-data-analyst > courses > machine_learning > deepdive > 02_generalization > labs > create_datasets.ipynb 선택

 

(Jupyter Notebook 실습 코드)

create_datasets.html
0.37MB

 

 

5. TensorFlow 활용 기초

- notebook 인터페이스에서 training-data-analyst > courses > machine_learning > deepdive > 03_tensorflow > labs > a_tfstart.ipynb 선택

 

5-1) Jupyter Notebook 실습 코드 : 모델

a_tfstart.html
0.28MB

#TODO: Using your non-placeholder solution, 
#  try it now using tf.eager by removing the session

 

5-2) Jupyter Notebook 실습 코드 : 정답 포함

a_tfstart_solution.html
0.28MB

 

 

6. Feature Engineering

- notebook 인터페이스에서 training-data > analyst > courses > machine_learning > feateng > feateng.ipynb 선택

(Jupyter Notebook 실습 코드)

feateng.html
0.30MB

 

 

7. tf.transform 살펴보기

- notebook 인터페이스에서 training-data-analyst > courses > machine_learning > deepdive > 11_taxifeateng > tftransform.ipynb 선택

 

(Jupyter Notebook 실습 코드)

tftransform.html
0.31MB

 

 

8. Hand-tuning hyperparameters

- notebook 인터페이스에서 training-data-analyst > courses > machine_learning > deepdive > 05_artandscience > labs > a_handtuning.ipynb  선택

 

(Jupyter Notebook 실습 코드)

a_handtuning.html
0.29MB

 

 

9. Hyperparameters 튜닝

- notebook 인터페이스에서 training-data-analyst > courses > machine_learning > deepdive > 05_artandscience > labs > b_hyperparam.ipynb  선택

 

(Jupyter Notebook 실습 코드)

b_hyperparam.html
0.29MB

 

 

10. 뉴럴 네트워크 (Neural Networks)

- notebook 인터페이스에서 "Clone a repo" 버튼 클릭

 

Repository URL 입력 : https://github.com/GoogleCloudPlatform/training-data-analyst

 

- notebook 인터페이스에서 training-data-analyst > courses > machine_learning > deepdive > 05_artandscience > labs > c_neuralnetwork.ipynb  선택

 

(Jupyter Notebook 실습 코드)

c_neuralnetwork.html
0.29MB

 

 

11. Custom Estimator

- notebook 인터페이스에서 training-data-analyst > courses > machine_learning > deepdive > 05_artandscience > labs > d_customestimator.ipynb  선택

 

(Jupyter Notebook 실습 코드)

d_customestimator.html
0.35MB

 

 

 

실습 노트(Jupyter Notebooks) 샘플 첨부 : 

sample_notebooks.html
0.32MB

 

(source : GCP qwiklabs)

 

BigQuery 호출

BigQuery Console 열기

1. Navigation menu > BigQuery 클릭

 

2. Done 클릭

 

3. Query 텍스트 박스에서 아래 내용 입력 후, Run 클릭

#standardSQL 
SELECT
   departure_delay, 
   COUNT(1) AS num_flights, 
   APPROX_QUANTILES(arrival_delay, 5) AS arrival_delay_quantiles
FROM 
   `bigquery-samples.airline_ontime_data.flights`
GROUP BY 
   departure_delay 
HAVING 
   num_flights > 100
RDER BY 
   departure_delay ASC

 

- 35분 일찍 출발한 항공편의 평균 도착 지연 시간은?

- 결과 : 28 분

 

4. 최대 항공편 수를 가진 공항페어(출발공항-도착공항)을 찾기위한 SQL 작성

#standardSQL 
SELECT 
   departure_airport, 
   arrival_airport, 
   COUNT(1) AS num_flights 
FROM
   `bigquery-samples.airline_ontime_data.flights` 
GROUP BY
   departure_airport, arrival_airport 
ORDER BY 
   num_flights DESC
LIMIT 10

 

AI Platform Notebooks 에서 그래프 그리기

 

1. Navigation Menu > AI Platform >Notebooks 클릭

 

2. [New Instance] 버튼 클릭

- Tensorflow Enterprise 1.15 > Without GPUs 선택

 

3. 팝업창이 뜨면 딥러닝 VM 이름을 입력/확인하고 Create 클릭

 

(VM 생성까지 2~3분 정도 소요될 수 있음)

 

4. Open JupyterLab 클릭 > JupyterLab window가 새창으로 열림

 

5. JupyterLab에서 노트북 생성 : Notebook > Python 3 클릭

 

6. 아래 파이썬 코드를 입력하고 Run (Ctrl + Enter)

query="""
SELECT 
   departure_delay,
   COUNT(1) AS num_flights,
   APPROX_QUANTILES(arrival_delay, 10) AS arrival_delay_deciles
FROM 
   `bigquery-samples.airline_ontime_data.flights`
GROUP BY
   departure_delay HAVING num_flights > 100
ORDER BY
   departure_delay ASC
""" 

from google.cloud import bigquery
df = bigquery.Client().query(query).to_dataframe()
df.head()

 

실행결과 : (BigQuery 에서 pandas dataframe으로 결과 확인 가능)

 

7. 새 코드 Cell을 생성한 후, 아래 파이썬 코드를 입력하고 Run (Ctrl + Enter)

import pandas as pd
percentiles = df['arrival_delay_deciles'].apply(pd.Series)
percentiles = percentiles.rename(columns = lambda x : str(x*10) + "%")
df = pd.concat([df['departure_delay'], percentiles], axis=1)
df.head()

 

실행 결과 :

 

8. 새 코드 Cell을 생성한 후, 아래 파이썬 코드를 입력하고 Run (Ctrl + Enter)

without_extremes = df.drop(['0%', '100%'], 1)
without_extremes.plot(x='departure_delay', xlim=(-30,50), ylim=(-50,50));

실행 결과 : 

 

- 비행기의 도착 지연을 예측하기 위한 ML(기계학습) 모델을 만든다고 가정했을 때, 출발 지연(departure delay)이 좋은 입력 feature 일까?

> 플로팅(plotting) 명령에서 xlim 과 ylim 을 제거해보면 확인 가능

 

 

 

AI Platform 문서

https://cloud.google.com/ml-engine/docs/

 

AI Platform 문서  |  Google Cloud

머신러닝 모델을 위한 관리형 서비스입니다.

cloud.google.com

 

AI Platform으로 머신러닝 기능 활용

 

Harness the Power of Machine Learning with Cloud ML Engine | Google Cloud Labs

 

source : GCP qwiklabs

 

Google Cloud Shell 활성화하기

1. GCP Console의 오른쪽 상단 툴바에서 Cloud Shell 열기 버튼 클릭

 

2. 계속(Continue) 클릭

 

결과 화면 : 

 

 

가상 환경을 만들기

1. 패키지 목록 다운로드 & 업데이트

sudo apt-get update

 

2. Python 가상 환경 설치 (가상환경은 시스템 기본 패키지와 분리된 패키지 설치 가능)

sudo apt-get install virtualenv

- [Y / n] 프롬프트가 표시되면 Enter 클릭

.virtualenv -p python3 venv

 

3. 가상 환경 활성화

source venv/bin/activate

 

예제 repo 클로닝

1. cloudml-samples repo 클론

git clone https://github.com/GoogleCloudPlatform/cloudml-samples.git

 

2. cloudml-samples > census > estimator 디렉터리로 이동 (estimator 디렉터리에서 실행)

cd cloudml-samples/census/estimator

 

> 현재 디렉터리는 ~/cloudml-samples/census/estimator

 

 

로컬에서 학습 애플리케이션 개발 및 검증

학습 애플리케이션을 로컬에서 실행. 로컬 환경에서 제공하는  개발 및 검증 워크플로를 통해 빠르게 반복 가능.

** 애플리케이션을 로컬에서 디버깅하면 클라우드 리소스 관련 비용이 발생하지 않음

 

학습 데이터 가져오기

- 관련 데이터 파일인 adult.data  adult.test는 공개 Google Cloud Storage 버킷에서 호스팅됨

- 로컬 학습을 위해 샘플을 다운로드한 다음 나중에 클라우드 학습을 위해 자체 Cloud Storage 버킷에 업로드 예정

 

1. 데이터를 로컬 파일 디렉터리에 다운로드하고 다운로드한 데이터 파일을 가리키는 변수 설정

mkdir data gsutil -m cp gs://cloud-samples-data/ml-engine/census/data/* data/

 

2. TRAIN_DATA  EVAL_DATA 변수를 로컬 파일 경로로 설정

export TRAIN_DATA=$(pwd)/data/adult.data.csv export EVAL_DATA=$(pwd)/data/adult.test.csv

 

3. adult.data.csv 파일 오픈

head data/adult.data.csv

 

4. 데이터 확인 : 쉼표로 구분된 값 형식

39, State-gov, 77516, Bachelors, 13, Never-married, Adm-clerical, 
Not-in-family, White, Male, 2174, 0, 40, United-States, 
<=50K 50, Self-emp-not-inc, 83311, Bachelors, 13, Married-civ-spouse, Exec-managerial, 
Husband, White, Male, 0, 0, 13, United-States, 
<=50K 38, Private, 215646, HS-grad, 9, Divorced, Handlers-cleaners, 
Not-in-family, White, Male, 0, 0, 40, United-States, 
<=50K 53, Private, 234721, 11th, 7, Married-civ-spouse, Handlers-cleaners, 
Husband, Black, Male, 0, 0, 40, United-States, <=50K ...

 

 

 

종속 항목 설치

- Cloud Shell에는 TensorFlow가 설치되어 있지만 샘플에 필요한 버전과 동일한 TensorFlow 버전인지 확인 필요

1. 샘플의 requirements.txt 파일 실행 

pip install -r ../requirements.txt

 

출력 결과 예시 :

Successfully installed Keras-2.3.1 
absl-py-0.8.0 astor-0.8.0 future-0.16.0 gast-0.3.2 google-pasta-0.1.7
grpcio-1.24.1 h5py-2.10.0 keras-applications-1.0.8 keras-preprocessing-1.1.0 
markdown-3.1.1 numexpr-2.7.0 numpy-1.17.2 pandas-0.25.1 
protobuf-3.10.0 python-dateutil-2.8.0 pytz-2019.3 pyyaml-5.1.2 
scipy-1.3.1 six-1.12.0 tensorboard-1.14.0 tensorflow-1.14.0 
tensorflow-estimator-1.14.0 termcolor-1.1.0 werkzeug-0.16.0 wrapt-1.11.2

 

2. pandas 설치 : 버전 <0.25이어야 함

pip install pandas==0.24.2

 

3. 설치 확인

python -c "import tensorflow as tf; print('TensorFlow version {} is installed.'.format(tf.__version__))"

 

※ TensorFlow 라이브러리가 특정 명령어를 사용하도록 컴파일되지 않았다는 경고 무시

 

로컬 학습 작업 실행

- 로컬 학습 작업은 Python 학습 프로그램을 로드하고 실제 AI Platform클라우드 학습 작업과 비슷한 환경에서 학습 프로세스 시작

 

1. 출력 디렉터리를 지정하고 MODEL_DIR 변수 설정

export MODEL_DIR=output

 

2. 학습 작업을 로컬에서 실행

gcloud ai-platform local train \ 
  --module-name trainer.task \ 
  --package-path trainer/ \ 
  --job-dir $MODEL_DIR \ 
  -- \ 
  --train-files $TRAIN_DATA \ 
  --eval-files $EVAL_DATA \ 
  --train-steps 1000 \ 
  --eval-steps 100

 

※ 상세 로깅은 기본적으로 해제되어 있음 --verbosity 태그를 DEBUG로 설정 가능

 

 

텐서보드로 요약 로그 검사

텐서보드라는 시각화 도구를 사용하여 평가 결과를 확인할 수 있음.

- 텐서보드로 TensorFlow 그래프를 시각화하고, 그래프 실행에 대한 측정항목을 수치로 나타내고, 그래프를 통과하는 이미지와 같은 추가 데이터를 표시 가능

- 텐서보드는 TensorFlow를 설치할 때 함께 설치됨

 

1. 텐서보드 실행

tensorboard --logdir=$MODEL_DIR --port=8080

 

2. 웹 미리보기 아이콘을 클릭한 다음 포트 8080에서 미리보기를 클릭. 텐서보드가 실행 중인 상태로 새 탭이 열림

 

3. Accuracy를 클릭하여 작업 진행에 따른 정확성의 변화를 그래프로 확인합니다.

4. Cloud Shell에서 Ctrl+C를 입력하여 텐서보드 종료

 

5. output/export/census 디렉터리에는 로컬에서 학습을 실행한 결과로 내보낸 모델이 저장됨

- 해당 디렉터리를 나열하여 생성된 타임스탬프 하위 디렉터리 확인

ls output/export/census/

 

결과 예시 :

1547669983

 

(생성된 타임스탬프를 복사)

 

6. Cloud Shell에서 다음 명령어 실행 <timestamp>는 위에서 복사한 타임스탬프로 변경

gcloud ai-platform local predict \ 
  --model-dir output/export/census/<timestamp> \ 
  --json-instances ../test.json

 

RuntimeError: Bad magic number in .pyc file가 표시되는 경우에는 아래 명령을 실행하고 위의 명령어를 재실행

sudo rm -rf /google/google-cloud-sdk/lib/googlecloudsdk/command_lib/ml_engine/*.pyc

 

결과 예시 :

CLASS_IDS CLASSES LOGISTIC LOGITS PROBABILITIES [0] [u'0'] 
[0.0583675391972065] [-2.780855178833008] [0.9416324496269226, 0.0583675354719162]

 

여기서 클래스 0은 소득 <= 50k이고 클래스 1은 소득 > 50k를 의미

 

학습된 모델을 사용하여 예측

TensorFlow 모델을 학습시킨 후에는 이 모델을 사용하여 새로운 데이터를 예측할 수 있음

- 예제 : 인구조사 모델을 학습하여 몇 가지 정보가 주어진 한 개인에 대한 소득 범주 예측 (test.json 사용 : GitHub 저장소의 census 디렉터리)

 

클라우드에서 학습 작업 실행

로컬에서 모델을 실행하여 검증 → AI Platform을 사용

 

Google Cloud Storage 버킷 설정

AI Platform 서비스는 모델 학습 및 일괄 예측 중에 데이터를 읽고 쓸 수 있도록 GCS(Google Cloud Storage)에 액세스할 수 있어야 함

 

1. 변수 설정

PROJECT_ID=$(gcloud config list project --format "value(core.project)") 
BUCKET_NAME=${PROJECT_ID}-mlengine echo $BUCKET_NAME REGION=us-central1

 

2. 새 버킷을 생성

gsutil mb -l $REGION gs://$BUCKET_NAME

 

3. Cloud Storage 버킷에 데이터 파일 업로드

 

4. gsutil을 사용하여 Cloud Storage 버킷에 두 파일을 복사

gsutil cp -r data gs://$BUCKET_NAME/data

 

5. TRAIN_DATA 및 EVAL_DATA 변수가 해당 파일을 가리키도록 설정

TRAIN_DATA=gs://$BUCKET_NAME/data/adult.data.csv 
EVAL_DATA=gs://$BUCKET_NAME/data/adult.test.csv

 

6. gsutil을 다시 사용하여 Cloud Storage 버킷에 JSON 테스트 파일 test.json을 복사

gsutil cp ../test.json gs://$BUCKET_NAME/data/test.json

 

7. TEST_JSON 변수가 해당 파일을 가리키도록 설정

TEST_JSON=gs://$BUCKET_NAME/data/test.json

 

 

클라우드에서 단일 인스턴스 트레이너 실행

 

1. 최초 학습 실행의 이름을 이후의 학습 실행과 구분할 수 있는 이름으로 선택

JOB_NAME=census_single_1

 

2. AI Platform이 생성하는 출력에 대한 디렉터리를 지정

- 학습 및 예측 작업을 요청할 때 포함할 OUTPUT_PATH 변수를 설정하면 됨

- OUTPUT_PATH는 모델 체크포인트, 요약, 내보내기에 대한 정규화된 Cloud Storage 위치를 나타냄

- 이전 단계에서 정의한 BUCKET_NAME 변수를 사용할 수 있음 (job name을 출력 디렉터리로 사용하는 것이 좋음)

OUTPUT_PATH=gs://$BUCKET_NAME/$JOB_NAME

 

3. 클라우드에서 단일 프로세스를 사용하는 학습

- 전체 로깅 출력을 검사하고 정확성, 손실, 기타 측정항목을 검사할 수 있도록 --verbosity 태그를 DEBUG로 설정

- 출력에 경고 메시지가 포함되지만 이 샘플에서는 무시해도 무방함

gcloud ai-platform jobs submit training $JOB_NAME \ 
  --job-dir $OUTPUT_PATH \ 
  --runtime-version 1.14 \ 
  --python-version 3.5 \ 
  --module-name trainer.task \ 
  --package-path trainer/ \ 
  --region $REGION \ 
  -- \ 
  --train-files $TRAIN_DATA \ 
  --eval-files $EVAL_DATA \ 
  --train-steps 1000 \ 
  --eval-steps 100 \ 
  --verbosity DEBUG

 

4. 명령줄에서 로그를 보고 학습 작업의 진행 상황을 모니터링할 수 있음.

gcloud ai-platform jobs stream-logs $JOB_NAME

 

- 또는 콘솔의 AI Platform > 작업에서도 모니터링 가능

 

 

출력 검사

1. Cloud Shell에서 작업을 모니터링한 경우 다음과 같은 출력이 나타나면 작업이 완료된 것

INFO 2019-01-16 12:58:34 -0800 master-replica-0 Task completed successfully.

 

2. 클라우드 학습에서는 출력이 Cloud Storage에 생성됨

- 이 샘플에서는 출력이 OUTPUT_PATH에 저장되며, 출력을 나열하려면 다음을 실행

gsutil ls -r $OUTPUT_PATH

 

(로컬 학습 출력과 비슷한 출력이 표시됨)

 

3. 선택사항: 텐서보드가 이 디렉터리를 가리키게 하고 학습 중 또는 학습 후에 Cloud Shell 상단의 웹 미리보기 메뉴를 사용하여 포트 8080에서 미리보기를 다시 선택할 수 있음

tensorboard --logdir=$OUTPUT_PATH --port=8080

 

4. 명령줄에서 ctrl+c를 입력하면 텐서보드 종료

 

 

모델을 배포하여 예측 지원

- 학습된 모델을 AI Platform에 배포하여 온라인 예측 요청에 응답하게 함으로써 확장 가능한 서비스 제공의 이점을 누릴 수 있음 (이 방법은 학습된 모델이 짧은 시간 내에 많은 예측 요청에 직면할 것으로 예상될 경우 유용)

- AI Platform 학습이 끝날 때까지 대기. Cloud Console의 작업 이름 옆에 녹색 확인 표시가 나타나거나 Cloud Shell 명령줄에 Job completed successfully 메시지가 표시되면 작업이 완료된 것

 

1. AI Platform 모델 생성

MODEL_NAME=census

 

 

gcloud ai-platform models create $MODEL_NAME --regions=$REGION

 

 

2. 학습된 모델 바이너리 내보내기의 전체 경로를 찾아 사용할 내보낸 모델을 선택

gsutil ls -r $OUTPUT_PATH/export

 

3. 출력을 스크롤하여 $OUTPUT_PATH/export/census/<timestamp>/ 값을 찾아

- 타임스탬프를 복사하고 다음 명령어에 추가하여 환경 변수 MODEL_BINARIES를 해당 값으로 설정

MODEL_BINARIES=$OUTPUT_PATH/export/census/<timestamp>/

 

참고: 타임스탬프는 위의 로컬 학습 실행 중에 생성된 타임스탬프와 동일하지 않음. ( gsutil ls 출력을 스크롤하여 이 타임스탬프 찾기)

 

학습 모델 배포

4. 다음 명령어를 실행하여 모델 버전 v1을 만듬

gcloud ai-platform versions create v1 \ 
  --model $MODEL_NAME \ 
  --origin $MODEL_BINARIES \ 
  --runtime-version 1.14 \ 
  --python-version 3.5

 

- 학습된 모델을 배포하는 데는 몇 분 정도 걸릴 수 있음

 

5. 완료되면 models list 명령어를 사용하여 모델 목록 확인 가능

gcloud ai-platform models list

 

 

배포된 모델에 온라인 예측 요청 보내기

 

1. 다음 명령어는 GitHub 저장소에 포함된 test.json 파일을 사용하여 예측 요청을 보냄

gcloud ai-platform predict \ 
  --model $MODEL_NAME \ 
  --version v1 \ 
  --json-instances ../test.json

 

2. 응답에는 test.json 파일에 있는 데이터 항목을 기반으로 각 라벨(>50K  <=50K)의 확률이 포함되므로 예상 소득이 50,000달러보다 높은지 아니면 낮은지를 알 수 있음

CLASS_IDS CLASSES LOGISTIC LOGITS PROBABILITIES [0] [u'0'] 
[0.06142739951610565] [-2.726504325866699] [0.9385725855827332, 0.061427392065525055]

 

여기서 클래스 0은 소득 <= 50k이고 클래스 1은 소득 > 50k를 의미합니다.

 

강화 학습(Reinforcement Learning) 개념

에이전트(Agend)가 일련의 단계(State)에서 주어진 목표/보상(Objective/Reward)를 최대화하기 위해 환경(Environment)에서 동작(Action)하는 기계학습(Machine Learning)의 한 종류

강화학습 프로세스 (source : GCP Qwiklabs)

 

구글 클라우드 플랫폼에서 강화학습(Reinforcement Learning) Job을 동작하기 위해 아래의 소스파일과 셸 커맨드를 참고하여 실습할 수 있음

구글 클라우드 플랫폼 기반 강화학습 (source : GCP Qicklabs)

 

GCP 에서 강화학습 실습하기

 

1. 탐색 메뉴에서 > AI Platform > Notebooks 를 선택

 

2. 상단 메뉴바에서 + 새 인스턴스 만들기 (New Instance) > 텐서플로우 2.1 (Tensorflow 2.1) > GPU 없는 버전(Without GPUs) 선택

 

3. 생성된 노트북 확인 후, 주피터 랩 열기 (OPEN JUPYTERLAB) 버튼 클릭

 

4. 터미널 (Terminal) 아이콘 클릭 하여 터미널 창에서 아래 명령어를 실행하여 Git으로부터 자원, 소스코드 복제(clone) 하기

git clone https://github.com/GoogleCloudPlatform/training-data-analyst.git

 

 

5. 좌측 탐색창에서 training-data-analyst > quests > rl > early_rl > early_rl.ipynb 순서로 선택

early_rl.html
0.35MB

 

 

6. 새창에 표시된 노트북 확인 가능. 각 코드 블럭에서 Shift + Enter 를 클릭하여 실행 가능

  ※ 주의사항 : 라이브러리 설치를 위한 첫번째 코드 블럭 실행 후 설치 완료를 위해, 커널 재시작 (Restart the kernel) 필요

early_rl_run.html
0.37MB

 

구글 클라우드 플랫폼에서 강화학습 예제 노트북 실행화면 

 

+ Recent posts