Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# 교통속도예측 텐서플로우 모델 학습하기 (TrafficTraining)
---
일정 기간 수집하여 전처리한 시계열 속도 데이터를 이용하여 텐서플로우 기반 딥러닝 모델을 학습하여 서빙용 모델을 만드는 예제를 설명합니다.
## 입력 데이터 준비하기
<a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/2.6.1.TrafficPreprocessing.html">교통속도 스트림 데이터 전처리하기</a> 매뉴얼에서 만든 결과 파일(``traffic_processing.csv``) 이 있다고 가정합니다. 또한 텐서플로우 기반의 15분 뒤 속도를 예측하는 모델이 파이썬 코드로 구현되어 있다고 가정합니다.
### 입력파일 업로드
``traffic_processing.csv`` 파일을 HDFS repository에 웹툴킷을 이용하여 dataset/input/traffic 위치에 업로드 합니다.
![파일 업로드](./images/2.6.2_fileUpload.png)
### 사용자 파이썬 코드 업로드
Host PC의 /home/csle/ksb-csle/components/src/main/python/kangnam 폴더를 HDFS repository에 웹툴킷을 이용하여 업로드 합니다.
dataset/tensorflowTrainSource 위치에 폴더를 업로드 합니다.
![코드 업로드](./images/2.6.2_codeUpload.png)
![코드 업로드](./images/2.6.2_codeUpload2.png)
`tensorflow_train.py` 파일은 텐서플로우 기반의 15분 뒤 속도를 예측하는 모델을 학습하는 코드가 구현되어 있는 파일입니다. (본 예제에서는 LSTM 알고리즘을 이용하여 15분 뒤 속도를 예측하는 모델을 사용합니다.) 프레임워크와 연동하여 학습이 되도록 파이썬 코드에 input 과 output 경로 등을 argument 로 받는 부분이 코딩되어야 합니다. 자세한 내용은 <a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/2.7.2.KSB_TfPyCoding_Guide.html">KSB 프레임워크와 연동을 위한 tensorflow 학습코드 작성하기</a> 를 참고합니다.
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씩 증가합니다. 따라서 예를 들면:
- (modelPath) file:///home/csle/ksb-csle/{선택한 경로}
- (자동생성되는 model) file:///home/csle/ksb-csle/{선택한 경로}/{모델버전}
field |value | 설명
--|---|--
modelPath | file:///home/csle/ksb-csle/examples/output/kangnam/model | 내부적으로 학습된 모델을 저장할 경로 <br> 반드시 로컬 시스템 경로만 지정
additionalParams | | 아래의 표 참고
additionalParams 설정은 [+] 버튼을 두 번 클릭하여 다음과 같이 합니다. 사용자가 필요한 파라미터의 이름과 값을 세팅하여 사용자 파이썬 코드로 전달합니다.
field |value | 설명
--|---|--
paramName | isTrain | 학습 유무
paramValue | True |
field |value | 설명
--|---|--
paramName | num_epochs | 학습 반복 횟수
paramValue | 2 |
<br>
![워크플로우 완성 화면](./images/2.6.2_workflow.png)
ksbuser@etri.re.kr 계정으로 접속하면 예제 워크플로우가 만들어져있습니다. 불러오기해서도 돌려볼 수 있습니다.
## 워크플로우 실행 및 모니터링하기
### 워크플로우 실행하기
위에서 작성한 워크플로우를 실행하기 위해서는 워크플로우 편집기 상단의 실행 버튼을 누릅니다.
### 워크플로우 모니터링 하기
KSB 웹툴킷 상단 메뉴의 Monitoring 탭을 클릭하면 Workflow 탭이 선택되어있습니다. Workflow 탭에서는 실행한 워크플로우들의 목록 및 동작 상태를 확인하고 제어할 수 있습니다. 위에서 실행한 워크플로우 이름을 클릭하면 워크플로우의 각 엔진들의 동작 상태 (status) 를 확인할 수 있습니다.
![워크플로우 동작 상태 확인](./images/2.6.2_monitoring.png)
WorkFlow History 탭을 선택하면, 프레임워크에서 워크플로우가 동작하며 발생시킨 로그 정보를 확인 할 수 있습니다.
![워크플로우 히스토리](./images/2.6.2_monitoring_history.png)
### 학습한 후 export 된 모델 확인하기
FileWriter 에서 지정한 위치 (hdfs://csle1:9000/user/ksbuser_etri_re_kr/model/kangnam) 에 학습된 모델이 생성된 것을 확인합니다.
KSB 웹툴킷 상단의 Repository 메뉴에서 model/kangnam 위치에 최신버전인 0000 폴더를 만들고 학습된 모델(saved_model.pb 파일 및 variables 폴더)이 저장된 것을 확인할 수 있습니다. 만약 0000 폴더가 이미 있었다면, 0001 폴더를 만들고 학습된 모델이 저장됩니다.
![학습된 모델 확인](./images/2.6.2_modelSave.png)
**<span style="font-size: 15pt;">❖ 참고</span>**
학습 후 export 한 모델을 프레임워크에서 REST API 서비스가 가능하도록 띄우고, 클라이언트는 쿼리를 통해 예측 결과를 받을 수 있습니다. 사용자는 온디맨드 방식으로 서비스를 구성하거나 (<a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/2.6.3.TrafficOnDemandServing.html">온디맨드 방식으로 교통속도예측 모델 서빙하기</a> 참고) 스트림 방식으로 서비스를 구성할 수 있습니다 (<a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/2.6.4.TrafficStreamServing.html">스트림 방식으로 교통속도예측 모델 서빙하기</a> 참고).
## 워크플로우 종료하기
KSB 웹툴킷 상단 "Monitoring" 메뉴의 "Workflow" 탭에서 실행 중인 TrafficTraining 워크플로우를 종료(<span style="color:red">◼</span>)할 수 있습니다.
## 워크플로우 저장하기
워크플로우 편집 화면에서 작성한 워크플로우를 "Save Workflow" 메뉴를 이용하여 저장합니다.