2.5.10.HourlyTensorflowTraining.md 9.5 KB
Newer Older
HooYoungAhn's avatar
HooYoungAhn committed
---
html:
  toc: true
  offline: true

export_on_save:
  html: true
---
# 텐서플로우 모델 주기적으로 학습하기 (HourlyTensorflowTraining)
---
매분, 매시간, 매일, 매주, 매월, 매년 등 주기적으로 파일로부터 데이터셋을 읽어 딥러닝 학습을 수행하고, 그 결과로 새롭게 학습된 모델의 신규버전이 담긴 디렉토리와 파일을 생성하는 예제입니다.

## 입력 데이터 준비하기
본 예제에서는 KSB 프레임워크 웹툴킷 화면에서 Repository 탭을 클릭하여 dataset/input 디렉토리를 선택합니다. 해당 디렉토리에 trainset.csv 파일이 있는지 확인합니다.
만약 없다면 /home/csle/ksb-csle/examples/input 폴더에 존재하는 trainset.csv 파일을 사용자 HDFS repository dataset/input 폴더에 등록하여 사용합니다.

![학습 데이터셋 저장소 위치 및 파일 선택하기  ](./images/2.5.10_DataRepository.png)

## 사용자 파이썬 코드 준비하기
텐서플로우 기반 딥러닝 모델이 구현된 사용자 파이썬 코드가 있어야 합니다. 사용자 파이썬 코드는 프레임워크와 연동하기 위해 프레임워크에서 전달하는 파라미터를 받는 부분, 학습된 모델을 텐서플로우 서빙용으로 export 하는 부분 등이 구현되어야 합니다. 자세한 내용은 <a href="https://etrioss.kr/thkimetri/ksb19.03-manual/edit/master/manual1903/2.7.2.KSB_TfPyCoding_Guide.html">KSB 프레임워크와 연동을 위한 tensorflow 학습코드 작성하기</a> 를 참고합니다.
HooYoungAhn's avatar
HooYoungAhn committed
main 함수를 포함한 사용자 파이썬 코드에서 사용하는 라이브러리 파일 등은 동일한 폴더에 위치 시키거나 1 depth의 하위 폴더까지 작성 가능합니다.


## 워크플로우 생성하기
HooYoungAhn's avatar
HooYoungAhn committed
워크플로우 편집화면을 이용하여 아래의 과정을 통해 워크플로우를 생성합니다.

- 워크플로우 속성

속성  | 값  | 비고
--|---|--
name  | HourlyTensorflowTraining | 워크플로우 이름     
description  | 텐서플로우 기반 딥러닝 모델을 주기적으로 학습하는 예제  | 워크플로우를 설명하는 글
isBatch  | true | 배치 처리를 하는 워크플로우 이므로, true 로 지정
verbose  | false | 디버깅을 위해 로그정보를 보고자할 경우, true 로 지정

### 엔진 선택
HooYoungAhn's avatar
HooYoungAhn committed
본 예제는 텐서플로우를 이용하여 배치 형태로 딥러닝 모델을 생성하는 워크플로우이므로 배치 엔진을 선택합니다. 그리고 딥러닝 모델을 주기적으로 생성하기 위해 **RUNTYPE****반복실행** 으로 설정합니다. **주기** 는 한번, 매분, 매시간, 매일, 매주, 매월, 매년 중에 하나로 설정합니다. 본 예제에서는 테스트를 위해 **매분** 으로 설정합니다. 매분은 테스트용으로 5분 단위로 엔진이 submit 되어 실행됩니다.


- 엔진 속성

순번  | 엔진 Type | NickName  | RunType | 설명
--|---|---|---|--
1  | Batch  | TrainEngine  | 반복 실행  | 텐서플로우 모델 학습

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

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


filePath는 경로 입력창 옆의 "File" 버튼을 클릭하여 아래 그림과 같이 HDFS repository 탐색창을 통해 파일을 선택하여 입력할 수 있습니다.

![학습 데이터셋 파일 위치 및 선택하기  ](./images/2.5.10_DataFile.png)

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

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

field  |value   | 설명
--|---|--
filePath  |  hdfs://csle1:9000/user/ksbuser_etri_re_kr/model/rnn |  모델 저장 경로
fileType  |  CSV |  파일 타입
delimeter  |  , |  구분자  
header  |  false |  header 포함 여부
saveMode  |   | 사용하지 않음

#### Controller
HooYoungAhn's avatar
HooYoungAhn committed
텐서플로우와 같은 외부시스템를 제어하기 위한 ExternalAnalysisController를 선택합니다.

HooYoungAhn's avatar
HooYoungAhn committed
TensorflowRunner 를 선택하고 아래표와 같은 속성을 지정합니다. pyEntryPath 에 main 함수를 포함하는 사용자 파이썬 코드(텐서플로우 모델을 정의하고 학습하는 코드)의 경로 및 파일명을 지정합니다.

field  |value   | 설명
--|---|--
pyEntryPath  |  file:///home/csle/ksb-csle/components/src/main/python/recurrent/rnn_saved_model_new.py |  텐서플로우 모델 학습을 위한 파이썬 코드 경로
cluster  |  false |  cluster 환경 실행 여부  
inJson  |  false |  Json 형태 파라미터 전달 여부
tfVersion  |  r1.3 |  텐서플로우의 버전


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

- (modelPath) file:///home/csle/ksb-csle/{선택한 경로}
- (자동생성되는 model) file:///home/csle/ksb-csle/{선택한 경로}/{모델버전}

field  |value   | 설명
--|---|--
modelPath  | file:///home/csle/ksb-csle/models/rnn/model |  내부적으로 학습된 모델을 저장할 경로 <br> 반드시 로컬 시스템 경로만 지정
addtionalParams  | 아래 설정 참고  |

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

field  |value   | 설명
--|---|--
paramName  | isTrain  | 새롭게 학습할 경우에는 True, 그 외의 경우에는 False.
paramValue  | True  |  

field  |value   | 설명
--|---|--
paramName  | num_epochs  |  학습 반복 횟수
paramValue  | 2  |

<br>
<br>

![워크플로우 완성 화면](./images/2.5.10_workflow.png)

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

## 워크플로우 실행 및 모니터링하기
HooYoungAhn's avatar
HooYoungAhn committed
### 워크플로우 실행하기
엔진의 RUNTYPE 을 설정한 후, 워크플로우 편집기 상단의 실행 버튼을 누릅니다. 이 때, 본 예제는 Batch 형태로 실행되는 엔진이므로 Batch 체크 박스를 선택하고 워크플로우를 실행합니다.

![RUNTYPE 설정](./images/2.5.10_runTypeSetting.png)

![Batch 체크 박스 선택](./images/2.5.10_workflow_start.png)


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

![워크플로우 동작 상태 확인](./images/2.5.10_monitoring.png)

주기적으로 (5분 마다) 실행되므로, 동작 상태(status) 가 완료(Completed)였다가 실행 중일 때는 실행 중(Inprogress) 으로 바뀌는 것을 확인할 수 있습니다.

![워크플로우 동작 상태 확인](./images/2.5.10_monitoring2.png)

WorkFlow History 탭을 선택하면, 프레임워크에서 워크플로우가 동작하며 발생시킨 로그 정보를 확인 할 수 있습니다. 본 예제에서는 엔진이 5분 마다 동작한 내역을 확인할 수 있습니다.

![워크플로우 히스토리](./images/2.5.10_monitoring_history.png)


### 학습한 후 export 된 모델 확인하기  
엔진의 FileWriter 에서 지정한 위치 (hdfs://csle1:9000/user/ksbuser_etri_re_kr/model/rnn) 에 학습된 모델이 생성된 것을 확인합니다.
KSB 웹툴킷 상단의 Repository 메뉴에서 model/rnn 위치에 엔진이 5분 마다 실행되어 모델을 주기적으로 생성한 것을 확인할 수 있습니다. 모델의 버전은 0000 부터 자동으로 1씩 증가합니다.

![학습된 모델 확인](./images/2.5.10_modelSave.png)


## 워크플로우 종료하기
Monitoring 탭에서 동작중(Inprogress)인 상태의 HourlyTensorflowTraining 워크플로우의 정지(<span style="color:red">&#9724;</span>) 버튼을 눌러 종료시킵니다.