Commit 1830da19 authored by HooYoungAhn's avatar HooYoungAhn
Browse files
parents 2799fc83 9ff1a3e9
Pipeline #1125 canceled with stages
......@@ -13,21 +13,23 @@ export_on_save:
## 입력 데이터 준비하기
본 예제에서는 온도 센서 스트림 데이터를 HTTP로 입력 받는 것을 가정합니다. 이를 위해 Jmeter 도구를 활용합니다.
<a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/jmeter.html">Jmeter 설명 바로가기</a>
<a href="https://etrioss.kr/thkimetri/ksb19.03-manual/blob/master/manual1903/jmeter.html">Jmeter 설명 바로가기</a>
### 온도 스트림데이터 생성하기
워크플로우 실행 결과를 확인하기 위해서는 온도데이터를 스트림 형태로 발생시켜야합니다. Jmeter를 활용한 온도 스트림데이터 생성하는 방법은 메뉴얼 하단의 "결과 확인하기" 를 확인해주시기 바랍니다.
##워크플로우 생성하기
## 워크플로우 생성하기
워크플로우 편집화면에서 워크플로우를 작성합니다. 본 예제에서는 두 개의 엔진을 생성합니다.
### 첫 번째 엔진 생성하기
####엔진 선택
#### 엔진 선택
스트림형태로 제공되는 온도 데이터를 입력받아 실시간 온도 예측을 하는 서빙 엔진으로 전달하기 위해 Streamtostream 엔진을 선택합니다.
#####Reader
##### Reader
HTTP 서버로부터 전달되어 오는 센서데이터를 입력 받기 위해 HttpServerReader를 선택하고 아래표와 같은 속성을 지정합니다.
field |value | 설명
--|---|--
ip | 0.0.0.0 | HTTP 서버의 IP 주소
......@@ -35,8 +37,9 @@ path | / | HTTP 서버의 URL
port | 53002 | HTTP 서버의 포트 번호
#####Writer
##### Writer
StreamToStream엔진에서 처리된 결과를 다음 엔진에게 Stream 형태로 전달해야 하므로 KafkaWriter를 선택합니다.
field |value | 설명
--|---|--
topic | test3 | 온도 예측 결과를 받아 올때 사용할 Kafka 큐의 이름
......@@ -45,8 +48,9 @@ groupId | group3 | Kafka writer topic 그룹 아이디
bootStrapServer | csle1:9092 | Kafka 접속 주소(IP, 포트번호)
#####Controller
##### Controller
Controller 로는 WindowedSparkSessionOrStreamController 를 선택합니다. WindowedSparkSessionOrStreamController 는 스트림으로 입력되는 데이터를 큐에 저장하고, 일정 주기 마다 정해진 윈도우 크기로 잘라서 operator 에게 전달합니다.
field |value | 설명
--|---|--
operationPeriod | 2 | Reader로 부터 데이터를 읽어올 주기 | 53002 | HTTP 서버의 포트번호를 입력합니다.
......@@ -54,14 +58,16 @@ inputQueSize | 1 | 입력 큐의 크기 | |
selectedColumnName | temperature | Spark dataframe에서 추출할 컬럼의 이름 | |
windowSize | 10 | 큐에서 사용할 윈도우의 크기 | |
#####Runner
##### Runner
SimpleSparkRunner 를 선택합니다.
field |value | 설명
--|---|--
inJason | false | false로 설정하는 경우 json 형태의 파라메타를 커맨드 라인 파라미터 형태로 변환하여 호출되는 외부 시스템에 전달. True 이면 json 형태의 파라메타 형태 그대로 외부시스템에 전달.
sparkArgs | master | 아래의 표 참고
sparkArgs 설정은 다음과 같이 합니다.
field |value | 설명
--|---|--
master | local[\*] | YARN 의 마스터
......@@ -72,7 +78,7 @@ driverMemory | 1g | Spark 드라이버 메모리
#####Operator
##### Operator
첫번째 엔진에서는 센서로부터 입력되는 온도 데이터를 여섯가지 전처리 기법을 적용하여 정제합니다. 본 예제에서 사용한 전처리 기법은 ColumnSelectOperator, MinMaxScalingOperator, TransposeOperator, SparkMLPredictOperator, MinMaxScalingOperator, ColumnSelectOperator 입니다.
- ColumnSelectOperator
......@@ -126,11 +132,12 @@ field |value | 설명
selectedColumnId | 13 | 선택할 칼럼 ID
### 두 번째 엔진 생성하기
####엔진 선택
#### 엔진 선택
스트림 형태로 전달되는 온도 예측값을 온디맨드 서빙을 하기 위해 OnDemandStreamServing 엔진을 선택합니다. (KSB프레임워크에서는 도커 컨테이너 내부의 지식베이스(KB)가 실행되고 있습니다.)
#####Reader
##### Reader
첫번째 엔진에서 입력되는 실시간 온도 예측값을 입력 받기 위해 KafkaOnDemandReader 를 선택합니다.
field |value | 설명
--|---|--
topic | test3 | 실시간 온도 예측값을 받아올때 사용할 Kafka 큐의 이름
......@@ -139,18 +146,19 @@ groupId | group3 | Kafka writer topic 그룹 아이디
bootStrapServer | csle1:9092 | Kafka 접속 주소(IP, 포트번호)
#####Writer
##### Writer
이 엔진에서는 Writer를 사용하지 않습니다.
#####Controller
##### Controller
Controller 로는 servingWithkbController를 선택합니다. servingWithkbController는 추가적인 속성을 설정하지 않습니다.
#####Runner
##### Runner
REST 방식으로 엔진을 실행 하기위해서는 ServingRunner를 선택합니다.
field |value | 설명
--|---|-- |
port | 18080 | 최적의 제어값을 서빙할 포트번호 |
......@@ -158,7 +166,7 @@ host | 0.0.0.0 | 최적의 제어값을 서빙할 IP |
#####Operator
##### Operator
두 번째 엔진에서는 ControlContextQueryOperator를 사용합니다.
field |value | 설명
......@@ -184,7 +192,7 @@ values(name) | temperature | 질의 속성 |
ksbuser@etri.re.kr 계정으로 접속하면 예제 워크플로우가 만들어져있습니다. 불러오기해서도 돌려볼 수 있습니다.
##워크플로우 실행 및 모니터링하기
## 워크플로우 실행 및 모니터링하기
### 워크플로우 실행하기
위에서 작성한 워크플로우를 실행하기 위해서는 워크플로우 편집기 상단의 실행 버튼을 누릅니다. 이 때, StreamToStream 엔진과 OnDemandStreamServing 엔진은 배치형태로 실행되지 않는 엔진들이므로 Batch 체크 박스는 해제하고 워크플로우를 제출해야합니다.
......@@ -213,7 +221,7 @@ WorkFlow History 탭을 선택하면, KSB프레임워크에서 워크플로우
![워크플로우 동작 로그](./images/2.5.9_06.png)
##결과 확인하기
## 결과 확인하기
#### 온도 스트림데이터 생성하기
워크플로우 실행 결과를 확인하기 위해서는 온도데이터를 스트림 형태로 발생시켜야 합니다. 이를 위해 위에서 설명한 Jmeter 도구를 활용합니다.
......@@ -229,7 +237,7 @@ Method: GET
URL: http://localhost:18080/query
```
<a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/postman.html">Postman 설명 바로가기</a>
<a href="https://etrioss.kr/thkimetri/ksb19.03-manual/blob/master/manual1903/postman.html">Postman 설명 바로가기</a>
![Jmeter로 온도 스트림데이터 입력하기](./images/2.5.9_08.png)
......
......@@ -52,7 +52,7 @@ python3 kangnam_producer.py ./input/201601_kangnam.csv localhost:9092 traffic 0.
![파일 업로드](./images/2.6_fileUpload.png)
##워크플로우 생성하기
## 워크플로우 생성하기
워크플로우 편집화면에서 워크플로우를 작성합니다. 본 예제에서는 하나의 엔진을 생성합니다.
- 워크플로우 속성
......@@ -115,12 +115,14 @@ slidingSize | 1360 | 윈도우를 sliding 하는 크기 <br> 170 x 8
#### Runner
SimpleSparkRunner 를 선택합니다.
field |value | 설명
--|---|--
inJason | false | false로 설정하는 경우 json 형태의 파라메타를 커맨드라인 파라미터 형태로 변환하여 호출되는 외부 시스템에 전달. True 이면 json 형태의 파라메타 형태 그대로 외부시스템에 전달.
sparkArgs | | 아래의 표 참고
sparkArgs 설정은 다음과 같이 합니다.
field |value | 설명
--|---|--
master | local[\*] | YARN 의 마스터
......
......@@ -10,11 +10,11 @@ export_on_save:
텐서플로우 기반 딥러닝 모델을 이용한 교통 속도 예측 RESTful 서비스 예제를 설명합니다.
## 입력 데이터 준비하기
<a href="http://csleoss.etri.re.kr:8088/images/contents/manual_1.0/2.6.2.TrafficTraining.html">교통속도예측 텐서플로우 모델 학습하기</a> 매뉴얼에서 학습한 후 export 된 모델이 ``hdfs://csle1:9000/user/ksbuser_etri_re_kr/model/kangnam`` 위치에 저장되어 있다고 가정합니다.
<a href="https://etrioss.kr/thkimetri/ksb19.03-manual/blob/master/manual1903/2.6.2.TrafficTraining.md">교통속도예측 텐서플로우 모델 학습하기</a> 매뉴얼에서 학습한 후 export 된 모델이 ``hdfs://csle1:9000/user/ksbuser_etri_re_kr/model/kangnam`` 위치에 저장되어 있다고 가정합니다.
##워크플로우 생성하기
## 워크플로우 생성하기
워크플로우 편집화면에서 워크플로우를 작성합니다. 하나의 엔진을 생성합니다.
- 워크플로우 속성
......@@ -44,6 +44,7 @@ TensorflowServingController 를 선택합니다.
#### Runner
TensorflowServingRunner 를 선택하고 아래표와 같은 속성을 지정합니다.
field |value | 설명
--|---|--
port | 8001 | RESTful 서비스 포트번호
......
......@@ -10,7 +10,7 @@ export_on_save:
교통센서로부터 시계열 속도 데이터를 수집한 후 전처리를 수행하고, 텐서플로우 기반 딥러닝 모델에 의해 예측된 속도를 클라이언트로 전달하는 예제를 설명합니다.
## 입력 데이터 준비하기
본 예제에서는 교통센서로부터 시계열 속도 데이터(LINK_ID, 속도, 날짜)를 Kafka로 입력 받는 것을 가정합니다. 5분 단위로 측정된 센서 데이터가 시간 순으로 들어온다고 가정합니다. 또한, <a href="http://csleoss.etri.re.kr:8088/images/contents/manual_1.0/2.6.2.TrafficTraining.html">교통속도예측 텐서플로우 모델 학습하기</a> 매뉴얼에서 학습한 후 export 된 모델이 ``hdfs://csle1:9000/user/ksbuser_etri_re_kr/model/kangnam`` 위치에 저장되어 있다고 가정합니다.
본 예제에서는 교통센서로부터 시계열 속도 데이터(LINK_ID, 속도, 날짜)를 Kafka로 입력 받는 것을 가정합니다. 5분 단위로 측정된 센서 데이터가 시간 순으로 들어온다고 가정합니다. 또한, <a href="https://etrioss.kr/thkimetri/ksb19.03-manual/blob/master/manual1903/2.6.2.TrafficTraining.html">교통속도예측 텐서플로우 모델 학습하기</a> 매뉴얼에서 학습한 후 export 된 모델이 ``hdfs://csle1:9000/user/ksbuser_etri_re_kr/model/kangnam`` 위치에 저장되어 있다고 가정합니다.
### 시계열 속도 스트림데이터 생성하기
본 예제를 위해 준비된 파일로부터 시계열 속도 데이터를 한줄씩 읽어 Kafka로 보내주는 파이썬 프로그램을 제공합니다.
......@@ -112,12 +112,14 @@ slidingSize | 170 | 윈도우를 sliding 하는 크기
#### Runner
SimpleSparkRunner 를 선택합니다.
field |value | 설명
--|---|--
inJason | false | false로 설정하는 경우 json 형태의 파라메타를 커맨드라인 파라미터 형태로 변환하여 호출되는 외부 시스템에 전달. True 이면 json 형태의 파라메타 형태 그대로 외부시스템에 전달.
sparkArgs | | 아래의 표 참고
sparkArgs 설정은 다음과 같이 합니다.
field |value | 설명
--|---|--
master | local[\*] | YARN 의 마스터
......
......@@ -52,7 +52,7 @@ python3 kangnam_producer.py ./input/201601_kangnam_orgarnized_new.csv localhost:
![파일 업로드](./images/2.6_fileUpload.png)
##워크플로우 생성하기
## 워크플로우 생성하기
워크플로우 편집화면에서 워크플로우를 작성합니다. 본 예제에서는 두 개의 엔진을 생성합니다.
- 워크플로우 속성
......@@ -80,6 +80,7 @@ verbose | false | 디버깅을 위해 로그정보를 보고자할 경우, true
#### Reader
KafkaPipeReader를 선택하고 아래표와 같은 속성을 지정합니다.
field |value | 설명
--|---|--
bootStrapServers | localhost:9092 | Kafka 접속 주소(IP, 포트번호)
......@@ -95,6 +96,7 @@ failOnDataLoss | false |
#### Writer
KafkaPipeWriter를 선택하고 아래표와 같은 속성을 지정합니다.
field |value | 설명
--|---|--
mode | append | 새로 들어온 입력데이터에 대해서 처리함
......@@ -112,12 +114,14 @@ StreamingGenericController 를 선택합니다.
#### Runner
SimpleSparkRunner 를 선택합니다.
field |value | 설명
--|---|--
inJason | false | false로 설정하는 경우 json 형태의 파라메타를 커맨드라인 파라미터 형태로 변환하여 호출되는 외부 시스템에 전달. True 이면 json 형태의 파라메타 형태 그대로 외부시스템에 전달.
sparkArgs | | 아래의 표 참고
sparkArgs 설정은 다음과 같이 합니다.
field |value | 설명
--|---|--
master | local[\*] | YARN 의 마스터
......@@ -145,6 +149,7 @@ groupby | AVG | 평균 계산
window | | 아래의 표 참고
window 설정은 다음과 같이 합니다.
field |value | 설명
--|---|--
key | PRCS_DATE | 윈도우를 사용할 칼럼 이름
......@@ -173,6 +178,7 @@ field |value | 설명
selectedColumn | | 아래의 표 참고
selectedColumn 설정은 다음과 같이 합니다.
field |value | 설명
--|---|--
selectedColIndex | 1 | window.start 칼럼 선택 (0번부터 시작함)
......@@ -196,6 +202,7 @@ missing value를 채우고 잡음을 smoothing 하기 위해, 한번 더 카프
#### Reader
KafkaPipeReader를 선택하고 아래표와 같은 속성을 지정합니다.
field |value | 설명
--|---|--
bootStrapServers | localhost:9092 | Kafka 접속 주소(IP, 포트번호)
......@@ -210,6 +217,7 @@ failOnDataLoss | false |
#### Writer
KafkaPipeWriter를 선택하고 아래표와 같은 속성을 지정합니다.
field |value | 설명
--|---|--
mode | append | 새로 들어온 입력데이터에 대해서 처리함
......@@ -227,12 +235,14 @@ StreamingGenericController 를 선택합니다.
#### Runner
SimpleSparkRunner 를 선택합니다.
field |value | 설명
--|---|--
inJason | false | false로 설정하는 경우 json 형태의 파라메타를 커맨드라인 파라미터 형태로 변환하여 호출되는 외부 시스템에 전달. True 이면 json 형태의 파라메타 형태 그대로 외부시스템에 전달.
sparkArgs | | 아래의 표 참고
sparkArgs 설정은 다음과 같이 합니다.
field |value | 설명
--|---|--
master | local[\*] | YARN 의 마스터
......@@ -260,6 +270,7 @@ groupby | AVG | 평균 계산
window | | 아래의 표 참고
window 설정은 다음과 같이 합니다.
field |value | 설명
--|---|--
key | PRCS_DATE | 윈도우를 사용할 칼럼 이름
......@@ -288,6 +299,7 @@ field |value | 설명
selectedColumn | | 아래의 표 참고
selectedColumn 설정은 다음과 같이 합니다.
field |value | 설명
--|---|--
selectedColIndex | 1 | window.start 칼럼 선택 (0번부터 시작함)
......@@ -334,9 +346,8 @@ cd /home/csle/ksb-csle/tools/kafka_2.11-0.10.0.1
./bin/kafka-console-consumer.sh --zookeeper localhost:2181 --bootstrap-server localhost:9092 --topic traffic_output2
```
아래 그림과 같이 전처리한 속도값을 Kafka로 보내는 것을 확인할 수 있습니다.
전처리한 속도값을 Kafka로 보내는 것을 확인할 수 있습니다.
![전처리 결과 확인](./images/2.6.5_predictResult.png)
## 워크플로우 종료하기
......
......@@ -45,7 +45,8 @@ python3 kangnam_producer.py ./input/201601_kangnam_orgarnized_new.csv localhost:
### 학습된 모델 업로드
<a href="http://csleoss.etri.re.kr:8088/images/contents/manual_1.0/2.6.2.TrafficTraining.html">교통속도예측 텐서플로우 모델 학습하기</a> 매뉴얼에서 학습한 후 export 된 모델이 ``hdfs://csle1:9000/user/ksbuser_etri_re_kr/model/kangnam`` 위치에 저장되어 있을 경우, 아래 과정을 생략합니다.
<a href="https://etrioss.kr/thkimetri/ksb19.03-manual/blob/master/manual1903/2.6.2.TrafficTraining.md">교통속도예측 텐서플로우 모델 학습하기</a> 매뉴얼에서 학습한 후 export 된 모델이 ``hdfs://csle1:9000/user/ksbuser_etri_re_kr/model/kangnam`` 위치에 저장되어 있을 경우, 아래 과정을 생략합니다.
그렇지 않을 경우, Host PC의 /home/csle/ksb-csle/examples/models/kangnam/model 폴더에 있는 텐서플로우 서빙용으로 export 한 모델을 HDFS repository에 웹툴킷을 이용하여 업로드합니다.
model/kangnam 위치에 model 폴더를 업로드 합니다.
......@@ -64,7 +65,7 @@ model/kangnam 위치에 model 폴더를 업로드 합니다.
![파일 업로드](./images/2.6_fileUpload.png)
##워크플로우 생성하기
## 워크플로우 생성하기
워크플로우 편집화면에서 워크플로우를 작성합니다. 본 예제에서는 세 개의 엔진을 생성합니다.
- 워크플로우 속성
......@@ -92,6 +93,7 @@ verbose | false | 디버깅을 위해 로그정보를 보고자할 경우, true
#### Reader
KafkaPipeReader를 선택하고 아래표와 같은 속성을 지정합니다.
field |value | 설명
--|---|--
bootStrapServers | localhost:9092 | Kafka 접속 주소(IP, 포트번호)
......@@ -107,6 +109,7 @@ failOnDataLoss | false |
#### Writer
KafkaPipeWriter를 선택하고 아래표와 같은 속성을 지정합니다.
field |value | 설명
--|---|--
mode | append | 새로 들어온 입력데이터에 대해서 처리함
......@@ -124,12 +127,14 @@ StreamingGenericController 를 선택합니다.
#### Runner
SimpleSparkRunner 를 선택합니다.
field |value | 설명
--|---|--
inJason | false | false로 설정하는 경우 json 형태의 파라메타를 커맨드라인 파라미터 형태로 변환하여 호출되는 외부 시스템에 전달. True 이면 json 형태의 파라메타 형태 그대로 외부시스템에 전달.
sparkArgs | | 아래의 표 참고
sparkArgs 설정은 다음과 같이 합니다.
field |value | 설명
--|---|--
master | local[\*] | YARN 의 마스터
......@@ -157,6 +162,7 @@ groupby | AVG | 평균 계산
window | | 아래의 표 참고
window 설정은 다음과 같이 합니다.
field |value | 설명
--|---|--
key | PRCS_DATE | 윈도우를 사용할 칼럼 이름
......@@ -185,6 +191,7 @@ field |value | 설명
selectedColumn | | 아래의 표 참고
selectedColumn 설정은 다음과 같이 합니다.
field |value | 설명
--|---|--
selectedColIndex | 1 | window.start 칼럼 선택 (0번부터 시작함)
......@@ -208,6 +215,7 @@ missing value를 채우고 잡음을 smoothing 하기 위해, 한번 더 카프
#### Reader
KafkaPipeReader를 선택하고 아래표와 같은 속성을 지정합니다.
field |value | 설명
--|---|--
bootStrapServers | localhost:9092 | Kafka 접속 주소(IP, 포트번호)
......@@ -222,6 +230,7 @@ failOnDataLoss | false |
#### Writer
KafkaPipeWriter를 선택하고 아래표와 같은 속성을 지정합니다.
field |value | 설명
--|---|--
mode | append | 새로 들어온 입력데이터에 대해서 처리함
......@@ -239,12 +248,14 @@ StreamingGenericController 를 선택합니다.
#### Runner
SimpleSparkRunner 를 선택합니다.
field |value | 설명
--|---|--
inJason | false | false로 설정하는 경우 json 형태의 파라메타를 커맨드라인 파라미터 형태로 변환하여 호출되는 외부 시스템에 전달. True 이면 json 형태의 파라메타 형태 그대로 외부시스템에 전달.
sparkArgs | | 아래의 표 참고
sparkArgs 설정은 다음과 같이 합니다.
field |value | 설명
--|---|--
master | local[\*] | YARN 의 마스터
......@@ -272,6 +283,7 @@ groupby | AVG | 평균 계산
window | | 아래의 표 참고
window 설정은 다음과 같이 합니다.
field |value | 설명
--|---|--
key | PRCS_DATE | 윈도우를 사용할 칼럼 이름
......@@ -300,6 +312,7 @@ field |value | 설명
selectedColumn | | 아래의 표 참고
selectedColumn 설정은 다음과 같이 합니다.
field |value | 설명
--|---|--
selectedColIndex | 1 | window.start 칼럼 선택 (0번부터 시작함)
......@@ -355,13 +368,16 @@ slidingSize | 170 | 윈도우를 sliding 하는 크기
본 예제에서는 5초 주기마다 1530 개의 데이터를 잘라서 operator에게 전달합니다. 입력데이터는 총 170개의 LINK_ID 를 가집니다. 따라서 5분 간격으로 170개의 데이터가 들어오는 셈입니다. 그런데 170개 데이터의 순서는 무작위로 들어옵니다. 또한 스트림 데이터는 계속해서 들어오고 있으므로 첫 시작 데이터가 어디일지 가늠하기 어렵습니다. 따라서 필요한 8 주기 보다 한 주기를 더 가져와서 처리하고 (170 x 9 = 1530 개), 1 주기 씩 슬라이딩 합니다. 아래에서 설명할 GroupByFilterOperator 및 OrderByFilterOperator 를 이용하여 170 x 8 = 1360 개 데이터를 필터링해서 사용합니다.
#### Runner
SimpleSparkRunner 를 선택합니다.
field |value | 설명
--|---|--
inJason | false | false로 설정하는 경우 json 형태의 파라메타를 커맨드라인 파라미터 형태로 변환하여 호출되는 외부 시스템에 전달. True 이면 json 형태의 파라메타 형태 그대로 외부시스템에 전달.
sparkArgs | | 아래의 표 참고
sparkArgs 설정은 다음과 같이 합니다.
field |value | 설명
--|---|--
master | local[\*] | YARN 의 마스터
......
......@@ -15,7 +15,7 @@ export_on_save:
<br>
본 예제는 <a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/2.6.6.TrafficStreamingPredict.html">실시간 시계열 교통속도 센서스트림 처리 및 텐서플로우 모델 서빙하기</a> 매뉴얼에 따라 워크플로우를 작성하였다고 가정하고 이어서 설명을 합니다.
본 예제는 <a href="https://etrioss.kr/thkimetri/ksb19.03-manual/blob/master/manual1903/2.6.6.TrafficStreamingPredict.md">실시간 시계열 교통속도 센서스트림 처리 및 텐서플로우 모델 서빙하기</a> 매뉴얼에 따라 워크플로우를 작성하였다고 가정하고 이어서 설명을 합니다.
## 입력 데이터 준비하기
......@@ -60,10 +60,10 @@ dataset/tensorflowTrainSource 위치에 폴더를 업로드 합니다.
![코드 업로드](./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> 를 참고합니다.
`tensorflow_train.py` 파일은 텐서플로우 기반의 15분 뒤 속도를 예측하는 모델을 학습하는 코드가 구현되어 있는 파일입니다. (본 예제에서는 LSTM 알고리즘을 이용하여 15분 뒤 속도를 예측하는 모델을 사용합니다.) 프레임워크와 연동하여 학습이 되도록 파이썬 코드에 input 과 output 경로 등을 argument 로 받는 부분이 코딩되어야 합니다. 자세한 내용은 <a href="https://etrioss.kr/thkimetri/ksb19.03-manual/blob/master/manual1903/2.7.2.KSB_TfPyCoding_Guide.md">KSB 프레임워크과 연동을 위한 tensorflow 학습코드 작성하기</a> 를 참고합니다.
### 학습된 모델 업로드
<a href="http://csleoss.etri.re.kr:8088/images/contents/manual_1.0/2.6.2.TrafficTraining.html">교통속도예측 텐서플로우 모델 학습하기</a> 매뉴얼에서 학습한 후 export 된 모델이 ``hdfs://csle1:9000/user/ksbuser_etri_re_kr/model/kangnam`` 위치에 저장되어 있을 경우, 아래 과정을 생략합니다.
<a href="https://etrioss.kr/thkimetri/ksb19.03-manual/blob/master/manual1903/2.6.2.TrafficTraining.md">교통속도예측 텐서플로우 모델 학습하기</a> 매뉴얼에서 학습한 후 export 된 모델이 ``hdfs://csle1:9000/user/ksbuser_etri_re_kr/model/kangnam`` 위치에 저장되어 있을 경우, 아래 과정을 생략합니다.
그렇지 않을 경우, Host PC의 /home/csle/ksb-csle/examples/models/kangnam/model 폴더에 있는 텐서플로우 서빙용으로 export 한 모델을 HDFS repository에 웹툴킷을 이용하여 업로드합니다.
model/kangnam 위치에 model 폴더를 업로드 합니다.
......@@ -83,7 +83,7 @@ model/kangnam 위치에 model 폴더를 업로드 합니다.
![파일 업로드](./images/2.6_fileUpload.png)
##워크플로우 생성하기
## 워크플로우 생성하기
워크플로우 편집화면에서 워크플로우를 작성합니다. 본 예제에서는 다섯 개의 엔진을 생성합니다.
- 워크플로우 속성
......@@ -105,7 +105,7 @@ verbose | false | 디버깅을 위해 로그정보를 보고자할 경우, true
4 | StreamToBatch | PreprocessingEngine | 즉시실행 | 딥러닝 모델 학습을 위한 전처리
5 | Batch | TrainEngine | 반복실행 | 딥러닝 모델 학습
앞의 세 개 엔진은 <a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/2.6.6.TrafficStreamingPredict.html">실시간 시계열 교통속도 센서스트림 처리 및 텐서플로우 모델 서빙하기</a> 매뉴얼을 참고하여 생성합니다. 워크플로우 편집화면 상단의 **Load Workflow** 메뉴를 이용하여 *TrafficStreamingPredict* 워크플로우를 불러옵니다.
앞의 세 개 엔진은 <a href="https://etrioss.kr/thkimetri/ksb19.03-manual/blob/master/manual1903/2.6.6.TrafficStreamingPredict.md">실시간 시계열 교통속도 센서스트림 처리 및 텐서플로우 모델 서빙하기</a> 매뉴얼을 참고하여 생성합니다. 워크플로우 편집화면 상단의 **Load Workflow** 메뉴를 이용하여 *TrafficStreamingPredict* 워크플로우를 불러옵니다.
![워크플로우 불러오기](./images/2.6.7_workflowLoad.png)
......@@ -121,6 +121,7 @@ KafkaPipeWriter를 하나 더 추가합니다. StreamJoin 엔진은 여러 개
#### Writer
KafkaPipeWriter를 선택하고 아래표와 같은 속성을 지정합니다.
field |value | 설명
--|---|--
mode | append | 새로 들어온 입력데이터에 대해서 처리함
......@@ -176,12 +177,14 @@ slidingSize | 1360 | 윈도우를 sliding 하는 크기 <br> 170 x 8
#### Runner
SimpleSparkRunner 를 선택합니다.
field |value | 설명
--|---|--
inJason | false | false로 설정하는 경우 json 형태의 파라메타를 커맨드라인 파라미터 형태로 변환하여 호출되는 외부 시스템에 전달. True 이면 json 형태의 파라메타 형태 그대로 외부시스템에 전달.
sparkArgs | | 아래의 표 참고
sparkArgs 설정은 다음과 같이 합니다.
field |value | 설명
--|---|--
master | local[\*] | YARN 의 마스터
......
......@@ -41,7 +41,7 @@ print_background: true
$> python setup.py install
```
KSB 프레임워크가 설치되어있지 않다면 설치매뉴얼 (https://csleoss.etri.re.kr/kor/sub05_01.do)을 참고하여 KSB 프레임워크를 설치합니다.
KSB 프레임워크가 설치되어있지 않다면 설치매뉴얼을 참고하여 KSB 프레임워크를 설치합니다.
### 2. base.py 와 main_func 생성하기
......
......@@ -10,7 +10,7 @@ export_on_save:
이 예제에서는 CSV 자료를 Batch 형태로 입력받아 Parquet 파일로 저장하는 방법에 대해 설명합니다.
<b>참고</b>: Parquet 파일은 KSB 프레임워크가 제공하는 <a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/2.5.5.BatchAutoMLTrainInSingleEngine.html">AutoML 기능</a> 혹은 <a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/2.5.4.BatchMLTrainInSingleEngine.html">ML학습 기능</a>을 사용하기 위해 필요한 입력자료 형태입니다.
<b>참고</b>: Parquet 파일은 KSB 프레임워크가 제공하는 <a href="https://etrioss.kr/thkimetri/ksb19.03-manual/blob/master/manual1903/2.5.5.BatchAutoMLTrainInSingleEngine.md">AutoML 기능</a> 혹은 <a href="https://etrioss.kr/thkimetri/ksb19.03-manual/blob/master/manual1903/2.5.4.BatchMLTrainInSingleEngine.md">ML학습 기능</a>을 사용하기 위해 필요한 입력자료 형태입니다.
## 입력 데이터 준비하기
입력데이터는 헤더 정보를 포함하는 CSV 파일이어야 합니다. 본 예제에서는 Host PC의 "/home/csle/ksb-csle/examples/input/iris.csv" 를 사용자 HDFS repository 의 "dataset/input" 폴더에 업로드하여 사용합니다.
......
# KSB 프레임워크 SW 개발환경 구성
KSB 프레임워크를 이용한 신규 컴퍼넌트의 개발과 scala clientSDK를 이용한 워크플로우 실행 시나리오 작성 및 실행을 요청하기 위한 개발환경 구성방법을 설명합니다.
KSB 프레임워크 SW 개발을 위한 환경을 구성하기 위한 절차는 다음과 같습니다.
- KSB 프레임워크 실행 및 테스트 환경구성 ( <a href="https://csleoss.etri.re.kr/images/contents/manual_1903/1.2.HowToInstallKsbToolBox-1903.html">툴박스 설치</a> 참조 )
- KSB 프레임워크 실행 및 테스트 환경구성 ( <a href="https://etrioss.kr/thkimetri/ksb19.03-manual/blob/master/manual1903/1.2.HowToInstallKsbToolBox-1903.md">툴박스 설치</a> 참조 )
- Scala IDE 설치
- Java8 sdk 설치
- Maven 빌드도구 설치
......@@ -19,7 +18,7 @@ KSB 프레임워크 SW 개발을 위한 환경을 구성하기 위한 절차는
## KSB 프레임워크 실행(테스트) 환경구성
[KSB 툴박스 설치][c87a2fc0] 에서 제시하는 절차에 따라 KSB 프레임워크 실행(테스트) 환경을 구성합니다.
[c87a2fc0]: https://csleoss.etri.re.kr/images/contents/manual_1903/1.2.HowToInstallKsbToolBox-1903.html "KSB 툴박스 설치"
[c87a2fc0]: https://etrioss.kr/thkimetri/ksb19.03-manual/blob/master/manual1903/1.2.HowToInstallKsbToolBox-1903.md "KSB 툴박스 설치"
## Scala IDE (개발도구) 설치
......@@ -122,9 +121,6 @@ $ brew intall maven
[다운로드][3c996289] 에 로그인하여 KSB 인공지능 프레임워크 오픈소스인 ksb-oss_dist (실행 바이너리 포함)를 다운로드 합니다.
- ksb_oss_v1_0.tar.gz : KSB 인공지능 프레임워크 오픈소스 압축파일
[3c996289]: https://csleoss.etri.re.kr/kor/sub02_01.do "KSB 프레임워크 다운로드 페이지"
다운로드한 파일을 압축해제하면 ksb-oss_dist 디렉토리가 생성되며, 다음과 같이 출력되는 것을 확인합니다.
......
......@@ -7,7 +7,7 @@ export_on_save:
---
# KSB 웹툴킷에 새로 개발한 Operator 컴퍼넌트 등록하기
---
<a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/3.2.1.HowToDevelopOperator.html">Operator 컴퍼넌트 개발하기 매뉴얼</a> 에서 SW 개발자가 만든 **MyColumnSelectWithFileOperator** 를 웹툴킷에서 사용할 수 있도록 등록하는 방법을 설명합니다. **Component** 메뉴를 클릭하여 Component 관리화면 으로 이동합니다. 컴포넌트를 등록하기 위한 절차는 다음과 같습니다.
<a href="https://etrioss.kr/thkimetri/ksb19.03-manual/blob/master/manual1903/3.2.1.HowToDevelopOperator.md">Operator 컴퍼넌트 개발하기 매뉴얼</a> 에서 SW 개발자가 만든 **MyColumnSelectWithFileOperator** 를 웹툴킷에서 사용할 수 있도록 등록하는 방법을 설명합니다. **Component** 메뉴를 클릭하여 Component 관리화면 으로 이동합니다. 컴포넌트를 등록하기 위한 절차는 다음과 같습니다.
1. 컴퍼넌트를 등록할 버전 선택
2. Enum Component 등록하기
......@@ -17,7 +17,7 @@ export_on_save:
## 컴퍼넌트를 등록할 버전 선택
**Revision** 탭으로 이동합니다. *Version Map* 표에서 웹툴킷의 *Component Version* 과 프레임워크의 *KSB Version* 목록을 확인할 수 있습니다. 본 예제에서는 SW 개발자가 만든 신규 컴퍼넌트를 웹툴킷의 *Component Version* = 1.0.1 에 등록합니다. 따라서 1.0.1 버전을 *Working version* 으로 선택합니다. 1.0.1 버전이 없을 경우, <a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/3.4.HowToUseComponent.html">KSB 웹툴킷 컴퍼넌트 등록 매뉴얼</a>을 참고하여 생성합니다 (복제 기능 이용).
**Revision** 탭으로 이동합니다. *Version Map* 표에서 웹툴킷의 *Component Version* 과 프레임워크의 *KSB Version* 목록을 확인할 수 있습니다. 본 예제에서는 SW 개발자가 만든 신규 컴퍼넌트를 웹툴킷의 *Component Version* = 1.0.1 에 등록합니다. 따라서 1.0.1 버전을 *Working version* 으로 선택합니다. 1.0.1 버전이 없을 경우, <a href="https://etrioss.kr/thkimetri/ksb19.03-manual/blob/master/manual1903/3.4.HowToUseComponent.md">KSB 웹툴킷 컴퍼넌트 등록 매뉴얼</a>을 참고하여 생성합니다 (복제 기능 이용).
![버전 선택](./images/3.4.1_revision.png)
......@@ -38,7 +38,7 @@ message MySelectColumnsWithFileInfo {
}
```
<a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/3.4.HowToUseComponent.html">KSB 웹툴킷 컴퍼넌트 등록 매뉴얼</a>을 참고하여 입력합니다.
<a href="https://etrioss.kr/thkimetri/ksb19.03-manual/blob/master/manual1903/3.4.HowToUseComponent.md">KSB 웹툴킷 컴퍼넌트 등록 매뉴얼</a>을 참고하여 입력합니다.
![메세지 입력화면](./images/3.4.1_component.png)
......
......@@ -7,7 +7,7 @@ export_on_save:
---
# KSB 웹툴킷에 새로 개발한 Reader 컴퍼넌트 등록하기
---
<a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/3.2.2.HowToDevelopReader.html">Reader 컴퍼넌트 개발하기 매뉴얼</a> 에서 SW 개발자가 만든 **MyFileReader** 를 웹툴킷에서 사용할 수 있도록 등록하는 방법을 설명합니다. **Component** 메뉴를 클릭하여 Component 관리화면 으로 이동합니다. 컴포넌트를 등록하기 위한 절차는 다음과 같습니다.
<a href="https://etrioss.kr/thkimetri/ksb19.03-manual/blob/master/manual1903/3.2.2.HowToDevelopReader.md">Reader 컴퍼넌트 개발하기 매뉴얼</a> 에서 SW 개발자가 만든 **MyFileReader** 를 웹툴킷에서 사용할 수 있도록 등록하는 방법을 설명합니다. **Component** 메뉴를 클릭하여 Component 관리화면 으로 이동합니다. 컴포넌트를 등록하기 위한 절차는 다음과 같습니다.
1. 컴퍼넌트를 등록할 버전 선택
2. Enum Component 등록하기
......@@ -17,7 +17,8 @@ export_on_save:
## 컴퍼넌트를 등록할 버전 선택
**Revision** 탭으로 이동합니다. *Version Map* 표에서 웹툴킷의 *Component Version* 과 프레임워크의 *KSB Version* 목록을 확인할 수 있습니다. 본 예제에서는 SW 개발자가 만든 신규 컴퍼넌트를 웹툴킷의 *Component Version* = 1.0.1 에 등록합니다. 따라서 1.0.1 버전을 *Working version* 으로 선택합니다. 1.0.1 버전이 없을 경우, <a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/3.4.HowToUseComponent.html">KSB 웹툴킷 컴퍼넌트 등록 매뉴얼</a>을 참고하여 생성합니다 (복제 기능 이용).
**Revision** 탭으로 이동합니다. *Version Map* 표에서 웹툴킷의 *Component Version* 과 프레임워크의 *KSB Version* 목록을 확인할 수 있습니다. 본 예제에서는 SW 개발자가 만든 신규 컴퍼넌트를 웹툴킷의 *Component Version* = 1.0.1 에 등록합니다. 따라서 1.0.1 버전을 *Working version* 으로 선택합니다. 1.0.1 버전이 없을 경우,
<a href="https://etrioss.kr/thkimetri/ksb19.03-manual/blob/master/manual1903/3.4.HowToUseComponent.md"> KSB 웹툴킷 컴퍼넌트 등록 매뉴얼</a>을 참고하여 생성합니다 (복제 기능 이용).
![버전 선택](./images/3.4.1_revision.png)
......@@ -55,7 +56,7 @@ message MyFileInfo {
}
```
<a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/3.4.HowToUseComponent.html">KSB 웹툴킷 컴퍼넌트 등록 매뉴얼</a>을 참고하여 입력합니다.
<a href="https://etrioss.kr/thkimetri/ksb19.03-manual/blob/master/manual1903/3.4.HowToUseComponent.md">KSB 웹툴킷 컴퍼넌트 등록 매뉴얼</a>을 참고하여 입력합니다.
![메세지 입력화면](./images/3.4.2_component.png)
<!--![메세지 입력화면](./images/3.4.2_component2.png) -->
......
......@@ -13,7 +13,7 @@ export_on_save:
</br>
</br>
- 아래 그림의 경우 최소 포인트가 6일 경우 클러스터 할당 모습이다. Epsilon 만큼 범위를 확대해 나가고 있다.
<img src=/images/4.1.1.1.DBSCAN.png>
<img src=./images/4.1.1.1.DBSCAN.png>
- 클러스터에 할당하기 위한 최소 조건이 min point가 6이상이어야 한다
하지만 z는 이웃이 5개, 2개 이므로 noise 포인트가 된다.
## Operator 파라미터 설명
......
......@@ -11,7 +11,7 @@ export_on_save:
- 한번에 하나씩의 설명변수를 사용하여 예측 가능한 규칙들의 집합을 생성하는 알고리즘이다.
- 입력한 데이터 중 DecisionTree의 결과를 토대로 주요한 column을 추출하는 기능이다.
<img src=/images/4.1.1.20.Decision_tree.png width="500" align="center" > <br>
<img src=./images/4.1.1.20.Decision_tree.png width="500" align="center" > <br>
wikipedia,2018년8월20일,https://ko.wikipedia.org/wiki/결정_트리_학습법
......
......@@ -10,8 +10,8 @@ export_on_save:
## Operator 설명
- 데이터의 분산(variance)을 최대한 보존하면서 서로 직교하는 새 축을 찾아, 고차원 공간의 표본들을 선형 연관성이 없는 저차원 공간으로 변환하는 기법이다.
<img src="/images/4.1.1.23.PCA1.PNG">
<img src="/images/4.1.1.23.PCA2.PNG">
<img src="./images/4.1.1.23.PCA1.PNG">
<img src="./images/4.1.1.23.PCA2.PNG">
## Operator 파라미터 설명
......
......@@ -11,7 +11,7 @@ export_on_save:
- 입력 데이터를 분포도(fraction)만큼 무작위로 sampling을 하는 방법이다.
구현 알고리즘은 SSRWR와 SSRWOR가 있으며 Replacement에 따라 sampling을 중복으로 뽑힐지 설정할 수 있다. (withReplacement가 true 면 중복 sampling 가능하다.)
<img src="/images/4.1.1.24.randomSampling.png" width="600">
<img src="./images/4.1.1.24.randomSampling.png" width="600">
......
......@@ -10,7 +10,7 @@ export_on_save:
## Operator 설명
- 모든 설명 변수를 고려한 모형에서 유의하지 않은 설명 변수를 하나씩 제거하는 방법이다.
Spark ml의 LinearRegeression을 사용하여 P-Value를 구하여 유의성 검증 하게 된다. 입력 받은 기준 P-Value보다 클 경우 적합하지 않은 칼럼으로 제거 처리하도록 구현하였다.
<img src=/images/4.1.1.25.backward.PNG width="700">
<img src=./images/4.1.1.25.backward.PNG width="700">
## Operator 파라미터 설명
- labelName: 라벨 이름 (required)
- pValue: 귀무가설이 맞다고 가정했을 때 해당 관측치와 그것보다 더 극단적인 관측치가 나올 확률 (required)
......
......@@ -10,7 +10,7 @@ export_on_save:
## Operator 설명
- 고려된 설명변수 중 설명력이 가장 높고 설명력이 유의한 설명변수를 하나씩 선택하는 방법이다.
Spark ml의 LinearRegeression을 사용하여 P-Value를 구하여 유의성 검증 하게 된다. 입력 받은 기준 P-Value보다 작을 경우 적합한 칼럼으로 선택 처리하도록 구현하였다.
<img src=/images/4.1.1.26.forward.PNG width="700">
<img src=./images/4.1.1.26.forward.PNG width="700">
## Operator 파라미터 설명
- labelName: 라벨 이름 (required)
- pValue: 귀무가설이 맞다고 가정했을 때 해당 관측치와 그것보다 더 극단적인 관측치가 나올 확률 (required)
......
......@@ -11,7 +11,7 @@ export_on_save:
- 모집단을 먼저 중복되지 않도록 층으로 나눈 다음 각 층에서 표본을 추출하는 방법이다. 층을 나눌 때 층내는 동질적, 층간은 이질적 특성을 가지도록 하면 적은 비용으로 더 정확한 추정을 할 수 있으며, 전체 모집단뿐만 아니라 각 층의 특성에 대한 추정도 할 수 있다는 장점이 있다.
&emsp;&emsp;&emsp;&emsp;&emsp;<img src="/images/4.1.1.27.Stratified_sampling.PNG" width="500" align="center">
&emsp;&emsp;&emsp;&emsp;&emsp;<img src="./images/4.1.1.27.Stratified_sampling.PNG" width="500" align="center">
slideshare,2018년8월20일,https://www.slideshare.net/Newsjelly/1-50965379
## Operator 파라미터 설명
......
......@@ -13,7 +13,7 @@ export_on_save:
- NEAREST: 가장 가까운 점의 값을 선택하는 방법이다.
- PREV_COPY: 이전 값을 선택하는 방법이다.
<img src="/images/4.1.1.29.interpolation.jpg" ><br>
<img src="./images/4.1.1.29.interpolation.jpg" ><br>
위키피디아,2018년8월20일,https://ko.wikipedia.org/wiki/선형_보간법
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment