교통속도예측 텐서플로우 모델 학습하기 (TrafficTraining)


일정 기간 수집하여 전처리한 시계열 속도 데이터를 이용하여 텐서플로우 기반 딥러닝 모델을 학습하여 서빙용 모델을 만드는 예제를 설명합니다.

입력 데이터 준비하기

교통속도 스트림 데이터 전처리하기 매뉴얼에서 만든 결과 파일(traffic_processing.csv) 이 있다고 가정합니다. 또한 텐서플로우 기반의 15분 뒤 속도를 예측하는 모델이 파이썬 코드로 구현되어 있다고 가정합니다.

입력파일 업로드

traffic_processing.csv 파일을 HDFS repository에 웹툴킷을 이용하여 dataset/input/traffic 위치에 업로드 합니다.

파일 업로드

사용자 파이썬 코드 업로드

Host PC의 /home/csle/ksb-csle/components/src/main/python/kangnam 폴더를 HDFS repository에 웹툴킷을 이용하여 업로드 합니다.
dataset/tensorflowTrainSource 위치에 폴더를 업로드 합니다.

코드 업로드

코드 업로드

tensorflow_train.py 파일은 텐서플로우 기반의 15분 뒤 속도를 예측하는 모델을 학습하는 코드가 구현되어 있는 파일입니다. (본 예제에서는 LSTM 알고리즘을 이용하여 15분 뒤 속도를 예측하는 모델을 사용합니다.) 프레임워크와 연동하여 학습이 되도록 파이썬 코드에 input 과 output 경로 등을 argument 로 받는 부분이 코딩되어야 합니다. 자세한 내용은 KSB 프레임워크와 연동을 위한 tensorflow 학습코드 작성하기 를 참고합니다.
main 함수를 포함한 사용자 파이썬 코드에서 사용하는 라이브러리 파일 등은 동일한 폴더에 위치 시키거나 1 depth의 하위 폴더까지 작성 가능합니다.

워크플로우 생성하기

워크플로우 편집화면에서 워크플로우를 작성합니다. 본 예제에서는 하나의 엔진을 생성합니다.

속성 비고
name TrafficTraining 워크플로우 이름
description 강남 교통 학습 예제 워크플로우를 설명하는 글
isBatch true 배치 처리를 하는 워크플로우 이므로, true 로 지정
verbose false 디버깅을 위해 로그정보를 보고자할 경우, true 로 지정

엔진 생성하기

텐서플로우를 이용하여 배치 형태로 딥러닝 모델을 생성하기 위해 Batch 엔진을 선택합니다.

순번 엔진 Type NickName RunType 설명
1 Batch TrainEngine 즉시실행 딥러닝 모델 학습

Reader

FileReader를 선택하고 아래표와 같은 속성을 지정합니다. filePath 에 입력 파일의 경로 및 파일명을 지정합니다. 이 값은 사용자 파이썬 코드(텐서플로우 모델을 정의하고 학습하는 코드)의 --input 파라미터로 전달됩니다.

field value 설명
filePath dataset/input/traffic/traffic_processing.csv 파일 경로
fileType CSV 파일 타입
delimiter , 구분자
header false header 포함 유무
saveMode 사용 하지 않음

filePath 에는 아래와 같이 3가지 경로가 입력 가능합니다.

  1. 로컬 파일시스템 절대경로
    file:///home/csle/ksb-csle/examples/input/{선택한 경로 및 파일명}
  2. hdfs 절대경로
    hdfs://{host}:{port}/user/{user_id}/dataset/{선택한 경로 및 파일명}
  3. Hdfs 상대경로
    dataset/{선택한 경로 및 파일명}

Writer

FileWriter를 선택하고 아래표와 같은 속성을 지정합니다. filePath 에 학습한 딥러닝 모델이 최종 저장될 폴더를 지정합니다. 해당 폴더에 자동으로 최신버전의 폴더를 생성한 후 모델이 저장됩니다. 모델의 버전은 0000 부터 시작하여 1씩 증가합니다. filePath 에 입력한 값은 사용자 파이썬 코드(텐서플로우 모델을 정의하고 학습하는 코드)의 --output 파라미터로 전달됩니다.

field value 설명
filePath hdfs://csle1:9000/user/ksbuser_etri_re_kr/model/kangnam 저장 경로
fileType CSV 파일 타입
delimiter , 구분자
header false header 포함 유무
saveMode 사용 하지 않음

filePath 에는 아래와 같이 3가지 경로가 입력 가능합니다.

  1. 로컬 파일시스템 절대경로
    file:///home/csle/ksb-csle/{선택한 경로}
  2. hdfs 절대경로
    hdfs://{host}:{port}/user/{user_id}/model/{선택한 경로}
  3. hdfs 상대경로
    model/{선택한 경로}
    위와 같이 입력하는 경우, 자동으로 사용자 기본 파일경로 가 앞에 추가됩니다. 따라서 아래와 같은 위치에 모델이 저장됩니다. hdfs://{host}:{port}/user/{user_id}/applications/{workflow_id}/output/model/{선택한 경로}

그러나, 본 예제에서는 다른 엔진에서 학습한 딥러닝 모델을 사용하도록 하기 위해 HDFS 절대경로를 지정합니다. 상대경로를 지정할 경우, 동적으로 생성한 사용자 기본 파일경로 가 앞에 추가되므로 다른 엔진에서 정확한 파일 경로를 지정하는 것이 어렵습니다.

Controller

Controller는 외부 Tensorflow 호출하기 위해 ExternalAnalysisController을 선택합니다.

Runner

TensorflowRunner를 선택합니다. pyEntryPath 에 main 함수를 포함하는 사용자 파이썬 코드(텐서플로우 모델을 정의하고 학습하는 코드)의 경로 및 파일명을 지정합니다.

field value 설명
pyEntryPath dataset/tensorflowTrainSource/kangnam/tensorflow_train.py 사용자 파이썬 코드 경로
cluster false cluster 환경 실행 여부
inJson false Json 형태 파라미터 전달 유무
tfVersion r1.6 Tensorflow 버전 정보

pyEntryPath 에는 아래와 같이 3가지 경로가 입력 가능합니다.

  1. 로컬 파일시스템 절대경로
    file:///home/csle/ksb-csle/{선택한 경로 및 파일명}
  2. hdfs 절대경로
    hdfs://{host}:{port}/user/{user_id}/{선택한 경로 및 파일명}
  3. hdfs 상대경로
    {선택한 경로 및 파일명}

사용자는 로컬 파일시스템에 원하는 이름(예: kangnam) 폴더를 생성하고 해당 폴더 내에 main 함수를 포함하는 사용자 python 파일(예:tensorflow_train.py)을 작성합니다.
그리고, 관련된 라이브러리 파일 등은 동일한 폴더에 위치 시키거나 1 depth의 하위 폴더까지 작성 가능합니다.

결과적으로 KSB 인공지능 프레임워크는 엔진 실행시, 로컬 파일시스템의 사용자 repository에 있는 kangnam 폴더 및 하위 1 depth 폴더를 file:///home/csle/ksb-csle/components/src/main/python/로 copy 후 tensorflow를 실행합니다.

Operator

DLTrainOperator를 선택하고 아래표와 같은 속성을 지정합니다. modelPath 에 내부적으로 학습된 모델을 저장할 경로를 지정합니다. 이 값은 사용자 파이썬 코드(텐서플로우 모델을 정의하고 학습하는 코드)의 --modelPath 파라미터로 전달됩니다. 로컬 파일시스템 절대경로로 입력합니다.
또한, modelPath를 기준으로 최신버전의 폴더를 자동으로 생성하여 사용자 파이썬 코드의 --model 파라미터로 전달합니다. 모델의 버전은 0000 부터 시작하여 1씩 증가합니다. 따라서 예를 들면:

field value 설명
modelPath file:///home/csle/ksb-csle/examples/output/kangnam/model 내부적으로 학습된 모델을 저장할 경로
반드시 로컬 시스템 경로만 지정
additionalParams 아래의 표 참고

additionalParams 설정은 [+] 버튼을 두 번 클릭하여 다음과 같이 합니다. 사용자가 필요한 파라미터의 이름과 값을 세팅하여 사용자 파이썬 코드로 전달합니다.

field value 설명
paramName isTrain 학습 유무
paramValue True
field value 설명
paramName num_epochs 학습 반복 횟수
paramValue 2

워크플로우 완성 화면

ksbuser@etri.re.kr 계정으로 접속하면 예제 워크플로우가 만들어져있습니다. 불러오기해서도 돌려볼 수 있습니다.

워크플로우 실행 및 모니터링하기

워크플로우 실행하기

위에서 작성한 워크플로우를 실행하기 위해서는 워크플로우 편집기 상단의 실행 버튼을 누릅니다.

워크플로우 모니터링 하기

KSB 웹툴킷 상단 메뉴의 Monitoring 탭을 클릭하면 Workflow 탭이 선택되어있습니다. Workflow 탭에서는 실행한 워크플로우들의 목록 및 동작 상태를 확인하고 제어할 수 있습니다. 위에서 실행한 워크플로우 이름을 클릭하면 워크플로우의 각 엔진들의 동작 상태 (status) 를 확인할 수 있습니다.

워크플로우 동작 상태 확인

WorkFlow History 탭을 선택하면, 프레임워크에서 워크플로우가 동작하며 발생시킨 로그 정보를 확인 할 수 있습니다.

워크플로우 히스토리

학습한 후 export 된 모델 확인하기

FileWriter 에서 지정한 위치 (hdfs://csle1:9000/user/ksbuser_etri_re_kr/model/kangnam) 에 학습된 모델이 생성된 것을 확인합니다.
KSB 웹툴킷 상단의 Repository 메뉴에서 model/kangnam 위치에 최신버전인 0000 폴더를 만들고 학습된 모델(saved_model.pb 파일 및 variables 폴더)이 저장된 것을 확인할 수 있습니다. 만약 0000 폴더가 이미 있었다면, 0001 폴더를 만들고 학습된 모델이 저장됩니다.

학습된 모델 확인

❖ 참고
학습 후 export 한 모델을 프레임워크에서 REST API 서비스가 가능하도록 띄우고, 클라이언트는 쿼리를 통해 예측 결과를 받을 수 있습니다. 사용자는 온디맨드 방식으로 서비스를 구성하거나 (온디맨드 방식으로 교통속도예측 모델 서빙하기 참고) 스트림 방식으로 서비스를 구성할 수 있습니다 (스트림 방식으로 교통속도예측 모델 서빙하기 참고).

워크플로우 종료하기

KSB 웹툴킷 상단 "Monitoring" 메뉴의 "Workflow" 탭에서 실행 중인 TrafficTraining 워크플로우를 종료()할 수 있습니다.

워크플로우 저장하기

워크플로우 편집 화면에서 작성한 워크플로우를 "Save Workflow" 메뉴를 이용하여 저장합니다.