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
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# 스트림 방식으로 MNIST 모델 서빙하기 (TfStreamPredictionMnist)
---
Kafka 스트림으로 입력받은 이미지 데이터를 텐서플로우 기반의 MNIST 모델을 이용하여 분류한 결과를 Kafka 스트림으로 출력하는 예제를 설명합니다.
## 모델 등록하기
웹툴킷 화면에서 [Repository] 탭을 클릭하여, MNIST 모델을 등록합니다.
### 모델 폴더 생성하기
웹툴킷 화면에서 [New Directory] 메뉴를 클릭하여, MNIST 모델을 등록할 폴더를 생성합니다.
![모델 폴더 생성화면](images/2.5.12_1_01.png)
### 모델 업로드
웹툴킷 화면에서 [File Upload] 메뉴를 클릭하여, 모델을 등록합니다.
[파일 입력] 콤보 박스에서 '폴더'를 선택합니다.
![모델 업로드 메뉴](images/2.5.12_1_02.png)
[파일 선택] 버튼을 클릭하여, 등록할 모델을 선택합니다.
![모델 업로드 선택](images/2.5.12_1_03.png)
### 모델 등록 완료
웹툴킷 화면에서 모델이 등록된 것을 확인할 수 있습니다.
![모델 등록 완료](images/2.5.12_1_04.png)
## 워크플로우 생성하기
워크플로우 편집기를 이용하여, 다음의 절차에 따라 워크플로우를 생성합니다.
### 엔진 선택
본 예제는 스트림 타입의 모델 서빙 서비스를 제공하므로, StreamToStream 엔진을 선택합니다.
#### Reader
Kafka 스트림을 입력받기 위해 KafkaReader를 선택하고, 아래 표와 같이 속성을 설정합니다.
field | value | 설명
--|---|--
topic | mnist_input | 이미지 데이터를 입력받기 위한 Kafka Topic 이름
zooKeeperConnect | csle1:2181 | Zookeeper 접속주소 (IP, 포트번호)
groupId | mnist_input | Kafka 통신을 위한 그룹 아이디
bootStrapServer | csle1:9092 | Kafka 서버 접속주소 (IP, 포트번호)
#### Writer
이미지 분류 결과를 Kafka 스트림으로 출력하기 위해 KafkaWriter를 선택하고, 아래 표와 같이 속성을 설정합니다.
field | value | 설명
--|---|--
topic | mnist_output | 이미지 분류 결과를 출력하기 위한 Kafka Topic 이름
zooKeeperConnect | csle1:2181 | Zookeeper 접속주소 (IP, 포트번호)
groupId | mnist_output | Kafka 통신을 위한 그룹 아이디
bootStrapServer | csle1:9092 | Kafka 서버 접속주소 (IP, 포트번호)
#### Controller
Spark 기반의 스트림 데이터 처리를 위해 SparkSessionOrStreamController를 선택하고, 아래 표와 같이 속성을 설정합니다.
field | value | 설명
--|---|--
operationPeriod | 1 | 스트림 데이터를 처리하는 주기 (초 단위)
#### Runner
Spark 환경 설정을 위해 SimpleSparkRunner를 선택하고, 아래 표와 같이 속성을 설정합니다.
field | value | 설명
--|---|--
inJason | false | false로 설정하는 경우 json 형태의 파라메타를 커맨드라인 파라미터 형태로 변환하여 호출되는 외부 시스템에 전달. True 이면 json 형태의 파라메타 형태 그대로 외부시스템에 전달
sparkArgs | 아래 표 참고 | Spark Application 설정
sparkArgs 설정은 다음과 같이 합니다.
field | value | 설명
--|---|--
master | local[\*] | 마스터
numExecutors | 4 | Spark Executor 개수
excuterCores | 2 | 각 Spark Executor의 core 개수
executerMemory | 1g | 각 Spark Executor의 메모리 크기
driverMemory | 1g | Spark Driver 메모리
#### Operator
본 예제의 경우, 데이터 전처리가 필요 없기에 아래 1개의 Operator를 이용합니다.
1. **TensorflowPredictOperator**
텐서플로우 기반의 MNIST 모델을 이용하여, 입력 이미지의 분류 결과를 출력합니다.
field | value | 설명
--|---|--
modelServerUri | model/mnist | MNIST 모델 경로
modelName | mnist | 모델 이름
signatureName | predict_images | 이미지 분류 signature 이름
완성된 워크플로우는 다음과 같습니다.
![워크플로우 완성 화면](images/2.5.12_2_01.png)
웹툴킷에 ksbuser@etri.re.kr 계정으로 로그인하면, 본 예제 워크플로우가 이미 만들어져 있는 것을 확인할 수 있습니다.
워크플로우 편집기의 불러오기 메뉴를 통해 본 예제를 실행할 수 있습니다.
## 워크플로우 실행 및 모니터링하기
### 워크플로우 실행하기
워크플로우 편집기 화면 상단의 실행 버튼을 클릭하여, 위에서 작성한 워크플로우를 실행합니다.
본 예제는 스트림 타입의 엔진이므로, Batch 체크박스를 해제하고 Run 버튼을 클릭합니다.
![워크플로우 실행](images/2.5.12_3_01.png)
### 워크플로우 모니터링 하기
#### 워크플로우 상태 확인
웹툴킷 [Monitoring] 화면에서 [Workflow] 탭을 선택하여, 위에서 실행한 워크플로우와 엔진의 동작 상태를 확인할 수 있습니다.
정상적으로 실행되어 Status 값이 Inprogress인 것을 확인할 수 있습니다.
![워크플로우 동작 상태 확인](images/2.5.12_3_02.png)
#### 워크플로우 로그 보기
[Workflow History] 탭을 선택하여, 현재 동작 중인 워크플로우의 로그 정보를 확인할 수 있습니다.
![워크플로우 히스토리](images/2.5.12_3_03.png)
## 결과 확인하기
KSB 툴박스에 포함된 테스트 스크립트를 이용하여, 스트림 방식의 모델 서빙 기능을 확인하는 과정입니다.
#### (1) 이미지 분류 결과 수신 대기
KSB 툴박스에 포함된 ```consume-mnist-output.sh``` 스크립트를 실행하여, MNIST 이미지 분류 결과를 Kafka 서버로부터 수신할 수 있도록 대기합니다.
호스트 PC에서 터미널 창을 열어, 아래의 명령을 수행합니다.
```bash
$ docker exec -it csle1 bash
$ cd ~/ksb-csle/examples/models/mnist/client/kafka-json
$ ./consume-mnist-output.sh
```
![이미지 분류 결과 수신 대기](images/2.5.12_4_01.png)
#### (2) 분류할 이미지 데이터 전송
KSB 툴박스에 포함된 ```publish-mnist-input.sh``` 스크립트를 실행하여, MNIST 이미지 데이터를 Kafka 서버로 전송합니다.
호스트 PC에서 터미널 창을 열어, 아래의 명령을 수행합니다.
```bash
$ docker exec -it csle1 bash
$ cd ~/ksb-csle/examples/models/mnist/client/kafka-json
$ ./publish-mnist-input.sh
```
![분류할 이미지 데이터 전송](images/2.5.12_4_02.png)
#### (3) 이미지 분류 결과 수신 확인
위 (1)번 과정에서 실행한 터미널 창에서, MNIST 이미지 데이터와 분류 결과를 확인할 수 있습니다.
![이미지 분류 결과 수신 확인](images/2.5.12_4_03.png)
## 워크플로우 종료하기
웹툴킷 [Monitoring] 화면의 [Workflow] 탭에서, 현재 Status가 Inprogress인 '2.5.12.TfStreamPredictionMnist' 워크플로우의 정지(<span style="color:red">◼</span>) 버튼을 클릭하여 종료시킵니다.
## 워크플로우 저장하기
워크플로우 편집기에서 작성한 워크플로우를 "Save Workflow" 메뉴를 이용하여 저장합니다.