Build a TensorFlow model using Watson ML CLI Tutorial

1. Overview

최근 ML(Machine Learning)에 대한 관심이 높아지면서 너도나도 ML에 발을 담그고 있습니다. 하지만 ML은 매우 많은 연산량을 요구하고 보통의 컴퓨터로는 결과를 내려면 굉장히 많은 시간이 소요됩니다.
이번 문서에서는 IBM Cloud와 IBM Watson Studio를 통해 빠르고 쉽게 모델을 training 시키고, deploy하는 과정을 진행하겠습니다.

CLI tutorial: Build a TensorFlow model to recognize handwritten digits using the MNIST data set을 직접 해보고 작성한 튜토리얼입니다.

2. Prerequisites

IBM CloudIBM Watson계정을 만들어주세요.
IBM Cloud : link
IBM Watson : link

3. Set up Cloud, ML plugin

IBM Cloud CLI 설치

현재 사용하고 있는 os에 맞는 cli를 설치합니다.
link : https://console.bluemix.net/docs/cli/reference/ibmcloud/download_cli.html#install_use

설치가 끝난다면 터미널을 열어서 로그인을 진행합니다.

$ ibmcloud login --sso

image
image

이 문서에서 지역은 us-south로 통일하도록 하겠습니다.

Install ML plugin

그 다음으로 ML 플러그인을 설치해줍니다.

$ bx plugin install machine-learning

image
이제 플러그인에서 사용할 환경변수를 세팅해주어야합니다.

Watson Studio로 이동하여 Services > Watson Service에서 ML서비스를 생성합니다.
image

생성한 ML서비스를 선택하고, 서비스 인증정보 탭을 들어가서 credential정보를 추가합니다. 각 항목에 들어가는 정보는 다음 사진과 같습니다.
image

credential 정보를 생성하면 json형식의 데이터를 확인할 수 있습니다.

그다음 터미널을 열어서 환경변수를 세팅해 줍니다.

환경변수 credentials info
ML_ENV url
ML_USERNAME username
ML_PASSWORD password
ML_INSTANCE instance_id

window의 경우

set ML_ENV= https://us-south.ml.cloud.ibm.com
set ML_USERNAME=xxx-xxx-xxx-xxx-xxx 
set ML_PASSWORD=xxx-xxx-xxx-xxx-xxx 
set ML_INSTANCE=xxx-xxx-xxx-xxx-xxx 

linux와 macOS의 경우

export ML_ENV= https://us-south.ml.cloud.ibm.com
export ML_USERNAME=xxx-xxx-xxx-xxx-xxx  
export ML_PASSWORD=xxx-xxx-xxx-xxx-xxx  
export ML_INSTANCE=xxx-xxx-xxx-xxx-xxx 

Test

제대로 설치가 되었는지 확인해보겠습니다.

$ bx login --sso 
$ bx ml version

image

[INFO] 윈도우10의 cmd창으로 이 명령어를 실행하니 일부 화면이 제대로 보이지 않는 오류가 있었습니다.
저는 cmd창말고 git bash를 깔아서 진행하였습니다.

4. Set up Cloud Object Storage

Cloud Object Storage

먼저 cloud object storage(이하 cos) 서비스를 추가시켜야 합니다.
Watson Studio로 이동하여 Services > Data Services > Add Service 로 이동합니다.

cos를 추가합니다.
image

cos서비스로 이동하여 Manage in IBM Cloud를 클릭합니다.

서비스 인증정보 탭에서 credential을 추가합니다. 이는 watson ML에서 cos에 접근하기 위해 필요한 정보들입니다.
각 항목에 들어가는 값은 다음 사진과 같습니다.

Watson ML은 HMAC인증방식을 이용해서 COS와 통신합니다.
HMAC(Hash-based Message Authentication) : 해싱기법을 적용해 메시지의 위변조를 방지하는 기법.

image

생성하고나서 access_key_id와 secret_access_key의 정보는 다른곳에 기입해 둡시다!
ex)
“access_key_id”: “xxxxx”,
“secret_access_key”: “xxxxxx”

Make Bucket

COS세팅이 되었다면 이제 Bucket을 두개 만들어 줄겁니다. 하나는 트레이닝 시킬 데이터들의 셋, 하나는 트레이닝하고 난 결과 데이터셋을 저장할 버킷입니다.
위치는 watson ML의 위치와 똑같이 세팅해 줍니다.
image

bucket을 다 만들고 나면 다음 사진과 같이 리스트를 확인할 수 있습니다.
image

다 만들고 나서, 버킷의 엔드포인트는 다른곳에 적어둡시다!
ex)
private : s3.private.us-south.cloud-object-storage.appdomain.cloud
public : s3.us-south.cloud-object-storage.appdomain.cloud

MNIST Dataset

이 튜토리얼에서 사용할 데이터셋을 다운받습니다.
손글씨 인식을 위한 데이터셋인 MNIST를 다운받습니다.
link : http://yann.lecun.com/exdb/mnist/

MNIST를 이용한 손글씨 인식 모델 :
손글씨로 적혀진 숫자의 이미지 사진을 트레이닝하여 어떤 숫자에 대한 사진(혹은 로우데이터)이 주어졌을때 값을 예측할 수 있는 모델

image
다운받은 4개의 파일

  • Training images
  • Training labels
  • Test images
  • Test labels

모두 트레이닝 시킬 데이터셋 버킷에 저장해 둡니다.

image

5. Train the Model

이제 본격적으로 모델을 트레이닝해보겠습니다.
모델을 빌드할 convolutional_network.py와 MNIST데이터를 다운로드하고 읽을 input_data.py가 담겨있는 tf-model 파일과, 이 파일들을 실행시키고 설정값들을 부여할 tf-train.yaml파일을 다운로드합시다.
파일을 다 받고 나면 yaml파일은 몇군데 수정해줘야할 부분이 있습니다.

model_definition:
  name: tf-mnist-showtest1
  author:
    name: DL Developer
    email: "{IBMid eamil 주소}"
  description: Simple MNIST model implemented in TF
  framework:
    name: tensorflow
    version: "1.5"
    runtimes: 
      name: python
      version: "3.5"
...
training_data_reference:
  name: {cos의 training dataset name}
  connection:
    endpoint_url: "{endpoint}"
    access_key_id: "{access_key}"
    secret_access_key: "{secret_access_key}"
  source:
    bucket: {cos의 training dataset name}
  type: s3
training_results_reference:
  name: {cos의 result dataset name}
  connection:
    endpoint_url: "{endpoint}"
    access_key_id: "{access_key}"
    secret_access_key: "{secret_access_key}"
  target:
    bucket: {cos의 result dataset name}
  type: s3

email주소, cos 버킷들의 이름, cos의 endpoint, 버킷의 access_key 그리고 secret access key까지 추가해줍시다.

다음으로 이 yaml파일과 핵심 코드가 담겨있는 zip파일이 있는 폴더에서 터미널을 띄웁니다.

$ bx ml train tf-model.zip tf-train.yaml

모델이 생성되는 것을 확인할 수 있습니다.
image
모델의 이름을 잘 기억해 둡시다. 여기선 “model-mlfh7a2r”

training되는 과정에서의 로그를 모니터링할 수 있습니다.

$ bx ml monitor training-runs {model-id}

image
중간중간 스코어링할때 Accuracy들이 출력되고,
image
마지막에 최종 Accuracy가 출력되며, 모델이 저장된 위치를 출력하고 트레이닝을 마칩니다.
image

6. Deploy the trained model

모델을 deploy하기 전에 생성한 모델을 watson ML repository에 저장해야 합니다.

$ bx ml store training-runs {model id}

image

repository에 저장된 Model ID를 참조하여 모델을 deploy할 수 있습니다.

$ bx ml deploy {Model-ID} "{deploy-model-name}"

image

7. Test the deployed model

마지막으로, deploy한 모델을 가지고 테스트를 해보겠습니다.

숫자 5와 4의 사진의 raw데이터를 가지고 있는 json파일을 다운로드 받아봅시다.

json파일도 몇군데 수정해야합니다.

{
    "modelId": "{deploy했던 model의 id}", 
    "deploymentId": "{바로 위 사진에서 deploymentId}", 
    "payload": {
       "values": [
           [5 raw데이터],
           [4 raw데이터]
        ]
    }
 }

model ID와 deploymentID를 추가해주고 나서, scoring을 진행합니다.

$ bx ml score tf-mnist-test-payload.json

image
일정 시간이 지난뒤, 제대로 5와 4라고 예측하는 것을 확인할 수 있습니다.

튜토리얼 끝!


댓글남기기