KSB 인공지능 프레임워크는 다양한 학습모델과 지식/경험을 선택조합하여 서비스를 생성할 수 있는 DIY 자가학습형 지식융합 인공지능 서비스 프레임워크를 지향합니다.
분산병렬 인프라를 기반으로, 다양한 데이터 소스로부터 도메인의 응용서비스를 제공하기까지의 전주기적 솔루션을 지향합니다. 데이터의 수집-적재-처리-분석-서빙에 이르는 시스템을 구성할 수 있는 프레임워크 기능과 이를 실행하고 운영할 수 있는 플랫폼 기능을 제공합니다.
KSB 인공지능 프레임워크는 프레임워크 개발자들이 기능을 확장할 수 있도록 컴퍼넌트와 API를 개발할 수 있는 인터페이스를 제공합니다. 또한 개발자들에 의해서 만들어진 컴퍼넌트나 API 들을 이용하여 응용을 개발하고 실행하도록 하는 사용자 인터페이스를 제공합니다.
KSB 인공지능 프레임워크의 **주요 이해관계자** 는 다음과 같습니다.
-**<span style="font-size: 14pt; color:green">응용 개발자</span>** KSB 인공지능 프레임워크에 탑재된 모듈 및 소프트웨어 컴퍼넌트를 이용하여 응용을 개발하고 이를 실행하여 최종사용자에게 응용을 이용한 서비스를 제공하고자 하는 자
-**<span style="font-size: 14pt; color:green">개발자</span>** 프레임워크 기능을 확장할 수 있도록 컴퍼넌트와 API를 개발하는 자로서 **소프트웨어 컴퍼넌트 개발자**, **파이썬 모듈 개발자**, **지식전문가** 가 포함됩니다.
-**소프트웨어 컴퍼넌트 개발자** 프레임워크의 개발자 인터페이스를 통하여 새로운 소프트웨어 컴퍼넌트를 개발하여 프레임워크에 탑재하는 자
-**파이썬 모듈 개발자** 프레임워크에서 제시하는 인터페이스를 만족하는 파이썬 모듈을 개발하여 프레임워크에 탑재하는 자
-**지식 전문가** 경험이나 지식을 구조화하여 저장하고 이를 활용할 수 있도록 인터페이스를 생성하여 탑재하는 자
-**<span style="font-size: 14pt; color:green">운용자</span>** 프레임워크를 통해 실행된 시스템(엔진)들을 중단없이 안정적으로 실행되도록 자원을 할당하고 운영하고자 하는 자
-**<span style="font-size: 14pt; color:green">관리자</span>** 프레임워크 및 웹툴킷 사용자에 대한 관리 및 시스템 전반적인 관리를 담당하는 자
-**<span style="font-size: 14pt; color:green">최종사용자</span>** 프레임워크를 통해 실행된 응용 시스템으로부터 제공되는 서비스를 최종적으로 제공받는 자
---
## 주요개념
KSB 인공지능 프레임워크는 유기적인 관계에 있는 일련의 작업의 흐름을 **워크플로우** 라는 개념으로 정의합니다. 워크플로우는 독립적인 실행 시스템에 해당하는 단위인 **엔진** 을 하나 이상 선언함으로써 정의될 수 있습니다. 독립적인 논리 배포단위인 **엔진** 은 엔진의 틀에 해당하는 **엔진 컨테이너** 에 필요한 **컴퍼넌트** 를 선언함으로써 정의됩니다. 이러한 과정에 의해 정의된 워크플로우 스펙에 따라 프레임워크는 실행시스템을 동적으로 구성하고, 이를 도메인의 응용에 필요한 서비스를 제공하도록 클러스터 상에 실행합니다.
### 워크플로우
일련의 작업을 정의하고 실행하기 위한 단위입니다. 하나의 워크플로우는 하나 이상의 엔진컨테이너의 정의로 구성될 수 있으며, 워크플로우를 구성하는 각각의 엔진들은 배치실행과 동시실행 방식으로 구동될 수 있습니다.
-**배치실행 방식** 엔진의 순서정보에 의해 순차적으로 일련의 엔진이 실행되고 종료되는 방식
-**동시실행 방식** 워크플로우에 정의된 엔진이 동시에 실행되는 방식
### 엔진컨테이너
엔진컨테이너는 워크플로우 상에서 필요한 목적에 맞게 구성할 수 있는 하나의 실행 시스템인 엔진에 대한 틀로서, 엔진컨터이너 상에 컴퍼넌트들을 탑재하여 각 컴퍼넌트의 값을 설정하여 엔진에 대한 정의를 합니다. 엔진의 유형은 현재 총 12 종이 제공되고 있으며, 자세한 내용은 <ahref="./2.4.1.EngineTypeList.html">엔진 유형 목록</a>을 참조하시기 바랍니다.
### 컴퍼넌트
엔진컨테이너를 구성하는 구성체로서, 5가지의 컴퍼넌트의 유형이 존재하며 각각 다음과 같은 역할을 수행합니다.
-**Reader** 데이터 발생지로부터 데이터를 읽어오기 위한 컴퍼넌트 유형
-**Writer** 데이터 저장소로 데이터를 출력하기 위한 컴퍼넌트의 유형
-**Operator** 데이터를 처리하기 위한 컴퍼넌트의 유형
-**Runner** 실행 런타임을 실행하기 위한 컴퍼넌트 유형
-**Controller** 엔진컨테이너 내의 처리절차를 구성하고 실행을 주관하는 컴퍼넌트의 유형
현재 프레임워크 상에는 데이터처리/학습/서빙 관련 총 73종의 컴퍼넌트가 탑재되어 있으며, 자세한 내용은 <ahref="./2.4.2.ComponentList.html">컴퍼넌트 목록</a>을 참조하시기 바랍니다. 개략적인 분류는 다음과 같습니다.
-**데이터 수집/처리 컴퍼넌트 (62종)**: 수집/적재 17종, 미니배치 32종, 실시간 처리 13종
-**학습 SW (2종)**: 분산텐서플로우 스케툴러(CoDDL), AutoSparkML
-**모델서빙 관련 컴퍼넌트 (3종)**: 온디맨드 DL 모델 서빙, 스트림 DL 모델서빙, 스트림 ML모델서빙
-**융합서빙 관련 컴퍼넌트 (6종)**: 컨트롤러 1종, 오퍼레이터 5종
------
## KSB 인공지능 프레임워크 SW v19.03 구성요소
### KSB 클라이언트
**KSB 클라이언트** 는 워크플로우를 작성하고, 이를 **KSB 프레임워크** 에서 구동하도록 지시하기 위해 **KSB 프론트엔드** 로 요청하는 역할을 수행하는 도구입니다. **KSB 프레임워크** 의 클라이언트 모듈은 웹기반의 클라이언트 모듈인 **KSB 웹툴킷** 과 스칼라 기반의 클라이언트 모듈인 **KSB Client SDK** 두 가지 형태로 제공됩니다.
#### KSB 웹툴킷
**KSB 웹툴킷** 은 워크플로우를 정의할 수 있는 편집기, 워크플로우를 실행하고 제어하기 위한 모니터링, 데이터의 업로드 및 시각화 등을 웹 방식의 그래픽 환경에서 수행할 수 있도록 제공되는 클라이언트 모듈입니다. 자세한 내용은 <ahref="./2.1.IntroductionWebToolkit.html">KSB 웹툴킷 소개</a> 를 참조하시기 바랍니다.
#### KSB Client SDK
**KSB Client SDK** 는 스칼라(자바) 기반의 클라이언트 개발도구로서, 개발자가 **KSB 프레임워크** 상에서 실행하고자 하는 워크플로우를 개발할 수 있는 환경과 작성한 워크플로우를 실행할 수 있는 API 를 함께 제공합니다 (자세한 설명은 <ahref="./3.1.HowToConfigureDevelopEnvironment.html">KSB 프레임워크 SW 개발환경 구성</a>을 참조). 또한 **KSB 프레임워크** 상에 실행가능한 다양한 종류의 워크플로우 예제를 포함하고 있으므로, 이를 참조하여 다양한 워크플로우 시나리오 예제를 작성할 수 있습니다.
### KSB 프론트엔드
**KSB 프론트엔드** 는 **KSB 웹툴킷** 이나 **KSB Client SDK** 를 이용하여 작성된 워크플로우 스펙을 받아서 **KSB 오케스트레이터** 로 넘겨 줌으로써 워크플로우를 수행하도록 하는 매개역할을 수행합니다. 이 외에도 사용자 관리나 저장소 관리 등의 다양한 요청에 대해 대응하는 front-end 로서의 역할을 수행합니다.
### KSB 메세지 인터페이스
**KSB 메세지 인터페이스** 는 각 컴퍼넌트들에 대한 속성값을 정의하고 값을 전달하기 위한 **KSB 메세지 인터페이스** 객체에 해당합니다.
### KSB 오케스트레이터
**KSB 프론트엔드** 로부터 넘겨받은 워크플로우 사양에 따라 필요한 엔진을 구성하여 실행하도록 요청하고, 각각의 엔진에 대한 구동과 종료 및 제어를 수행하는 등의 역할을 수행합니다.
### KSB 엔진 컴퍼넌트
엔진컨테이너를 구성하는 구성체로서 5가지 유형이 있으며, 이들 5가지의 컴퍼넌트의 조합에 의해 엔진이 생성됩니다. 현재 **KSB 프레임워크** 에는 약 73종 이상의 컴퍼넌트가 구현되어 있습니다. ( 상기 **컴퍼넌트** 설명 참조 )
### KSB 연동플랫폼
**KSB 프레임워크** 는 목적에 따른 다양한 외부 실행 플랫폼과 연동할 수 있는 인터페이스를 제공합니다. 각각의 **KSB 연동플랫폼** 은 **엔진컴퍼넌트** 중 **Runner** 에 의해 연동과 실행이 제어됩니다. 현재 **KSB 프레임워크** 에는 Spark, Tensorflow, Tensorflow Serving, Jena Knowledge Base 등을 연동하기 위한 모듈이 각각의 **Runner 컴퍼넌트** 로 구현되어 있습니다.
### KSB 저장소
**KSB 프레임워크** 는 수집한 데이터를 적재하기 위한 저장소인 **데이터 저장소**, 자원이나 응용에 필요한 자원이나 룰, 컨텍스트 정보 등을 저장할 수 있는 **자원/룰 저장소**, 프레임워크 자체적인 워크플로우를 보관하기 위한 **워크플로우 저장소**, 크게 3가지 유형의 저장소 기능을 제공합니다.
------
## KSB 배포
**KSB 인공지능 프레임워크** 는 <ahref="https://csleoss.etri.re.kr">KSB 인공지능 프레임워크 웹페이지</a> 를 통해 **툴박스 버전**과 **클러스터 버전**, 두 가지의 배포버전에 대한 설치방법을 제공하고 있습니다.
### KSB 툴박스
**KSB 툴박스** 는 **KSB 웹툴킷** 과 stand-alone 버전의 **KSB 런타임(실행환경)** 을 지원하는 툴박스 형태의 **KSB 프레임워크** 로서, 사용자의 로컬환경에서 KSB 프레임워크 실행환경을 쉽고 빠르게 구성하여 사용하기 위한 환경을 제공합니다.
### KSB 클러스터
**KSB 클러스터** 는 실제 클러스터 환경에서 운영하기 위한 배포 형태로서 **KSB 웹툴킷** 과 분산병렬 버전의 **KSB 런타임** 을 지원하는 **KSB 프레임워크** 로 구성되어 있습니다. 설치와 사용에 관한 자세한 사항은 <ahref="./3.1.HowToConfigureDevelopEnvironment.html">KSB 인공지능 프레임워크 설치</a> 매뉴얼을 참조하시기 바랍니다.
KSB 인공지능 프레임워크 실행하기 위해 <ahref="https://csleoss.etri.re.kr/images/contents/manual_1903/1.5.HowToRunFirst-1903.html"title="KSB 인공지능 프레임워크 실행하기">KSB 인공지능 프레임워크 실행하기</a> 페이지로 이동하여 KSB 프레임워크를 구동합니다.
단, nvidia-docker 버전 KSB 프레임워크 구동시 기존 cpu버전 툴박스와의 차이점은 위에서 생성한 /home/csle/ksb-csle/docker/19.03-nvidia/startDockerCsle.sh을 실행하여 KSB 툴박스 docker 컨테이너를 실행하고 접속하는 것일 뿐 모두 동일합니다.
KSB 인공지능 프레임워크 실행하기 위해 <ahref="https://csleoss.etri.re.kr/images/contents/manual_1.0/1.5.HowToRunFirst.html"title="KSB 인공지능 프레임워크 실행하기">KSB 인공지능 프레임워크 실행하기</a> 페이지로 이동하여 KSB 프레임워크를 구동합니다.
단, nvidia-docker 버전 KSB 프레임워크 구동시 기존 cpu버전 툴박스와의 차이점은 위에서 생성한 /home/csle/ksb-csle/docker/1.0-nvidia/startDockerCsle.sh을 실행하여 KSB 툴박스 docker 컨테이너를 실행하고 접속하는 것일 뿐 모두 동일합니다.
제공된 KSB 툴박스를 사용하지 않고, 직접 Host PC에 KSB 인공지능 프레임워크를 설치하기 위해서 아래의 오픈소스 프레임워크들을 설치합니다. 사용자 csle 계정을 생성한 후 아래 프로그램들을 설치합니다.
## csle 사용자 계정(권한 : administrator) 생성하기
<ahref="https://csleoss.etri.re.kr/images/contents/manual_1.0/1.2.HowToInstallKsbToolBox.html#host-pc-csle-%EC%82%AC%EC%9A%A9%EC%9E%90-%EA%B3%84%EC%A0%95%EA%B6%8C%ED%95%9C-administrator-%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0"title="KSB 툴박스 설치">KSB 툴박스 설치</a>의 csle 사용자 계정 생성 부분을 참고합니다.
## java-8-oracle 설치하기
<ahref="https://csleoss.etri.re.kr/images/contents/manual_1.0/1.2.HowToInstallKsbToolBox.html#host-pc-java-8-oracle-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0"title="KSB 툴박스 설치">KSB 툴박스 설치</a>의 java-8-oracle 설치 부분을 참고합니다.
## Apache Hadoop 2.7.3 설치하기
아래 링크를 참고하여 사용자의 PC 혹은 클러스터 환경에 맞게 설치합니다.
참고링크 : https://hadoop.apache.org/docs/r2.7.3/
다운로드 링크 : https://archive.apache.org/dist/hadoop/common/hadoop-2.7.3/
## spark-2.3.0-bin-hadoop2.7 설치하기
아래 링크를 참고하여 사용자의 PC 혹은 클러스터 환경에 맞게 설치합니다.
참고링크 : https://spark.apache.org/downloads.html
다운로드 링크 : https://spark.apache.org/downloads.html
## hbase 1.2.4(optional) 설치하기
아래 링크를 참고하여 사용자의 PC 혹은 클러스터 환경에 맞게 설치합니다.
참고링크 : https://hbase.apache.org/book.html
다운로드 링크 : https://archive.apache.org/dist/hbase/1.2.4/
## kafka 2.11-0.10.0.1(optional) 설치하기
아래 링크를 참고하여 사용자의 PC 혹은 클러스터 환경에 맞게 설치합니다.
참고링크 : https://kafka.apache.org/
다운로드 링크 : https://kafka.apache.org/downloads
## zookeeper 3.4.9(optional) 설치하기
아래 링크를 참고하여 사용자의 PC 혹은 클러스터 환경에 맞게 설치합니다.
참고링크 : https://zookeeper.apache.org/
다운로드 링크 : https://archive.apache.org/dist/zookeeper/zookeeper-3.4.9/
## KSB 프레임워크 설치하기
<ahref="http://csleoss.etri.re.kr:8088/kor/sub02_01.do"title="다운로드"> 다운로드</a> 페이지로부터 KSB 툴박스 파일을 다운로드합니다.
- ksb_toolbox_v1.tar.gz : KSB 툴박스 파일
<br>
csle 사용자 계정의 home에 ksb_toolbox_v1.tar.gz 압축을 해제합니다. 결과적으로 /home/csle/ksb-csle 폴더가 생성됩니다.
```sh
csle@csle1:~$ tar zxvf ksb_toolbox_v1.tar.gz -C /home/csle/
```
/home/csle/ksb-csle 폴더는 다음의 하위 폴더들로 구성됩니다.
- /bin : KSB 프레임워크 shell 스크립트 파일 저장 폴더
- /components : tensorflow train 예제 프로그램 저장 폴더
- /conf : KSB 프레임워크 환경설정 파일 저장 폴더
- /docker : KSB 툴박스 docker 컨테이너 실행 스크립트 저장 폴더
- /examples : CLI(Command Line Interface)를 통해 워크플로우 생성 및 submit 할 수 있는 프로젝트 폴더
- /jars : KSB 프레임워크 1.0 버전의 jar 파일 저장 폴더
- /ksblib : python 전처리 라이브러리 폴더
- /kubernetes : 쿠버네티스 환경설정 폴더
- /logs : log 저장 폴더
- /pyML : autoML python 프로젝트 폴더
- /tools: 예제 테스트를 위한 프로그램(jmeter, hadoop, kafka, maven, .ssh)
<br>
## ksb-csle conf 파일 설정하기
/home/csle/ksb-csle/conf/ksb.conf 파일을 사용자 PC에 맞게 수정합니다.
```sh
csle {
user {
home ="/home/csle"# 사용자 home 디렉토리를 지정합니다.
}
home ="/home/csle/ksb-csle"# KSB home 디렉토리를 지정합니다.
submit.cli ="true"
scheduler.initialization ="false"
}
servers {
gateway {
baseUrl ="http://KSB_GATEWAY:SERVICEPORT"
}
kubernetes {
enable="false"
baseUrl ="http://SERVICENAME.ksb.local:30100"
imgRepositoryUrl ="docker.io"
kubernetes_yaml_path ="/kubernetes"
masterIp ="csle1"# Kubernetes 마스터 도메인 이름 혹은 IP를 지정합니다.
masterPort ="2243"# Kubernetes SSH 포트 번호를 지정합니다.
nodesIp ="csle2, csle3"# Kubernetes 노드들의 도메인 이름 혹은 IP들을 지정합니다.
user ="csle"# Kubernetes 서버의 사용자 ID를 지정합니다.
externalKafka {
brokerHostName ="csle1"# 외부 Kafka broker서버 도메인 이름을 지정합니다.
brokerHostIp ="192.168.0.xxx"# 외부 Kafka broker서버 IP을 지정합니다.
}
}
tensorflow {
enable="true"
python_path ="/anaconda3/envs/tensorflow/bin/python"# 사용자 PC의 tensorflow python 위치를 지정합니다.
python_code_project_path ="/analysis"
}
pyspark {
python_path ="/anaconda3/bin/python"# 사용자 PC의 python 위치를 지정합니다.
KSB 지식베이스 엔진을 시작하려면, 해당폴더 (/home/csle/ksb-csle/bin)로 이동하여, startknowledge_service.sh 스크립트를 ip address와 port 번호와 함께 실행합니다.
```sh
# KSB 지식베이스 실행 스크립트가 있는 경로로 이동
cd /home/csle/ksb-csle/bin
# KSB 지식베이스 엔진 시작 (./startknowledge_service.sh ip_address port_number)
./startknowledge_service.sh 127.0.0.1 9876
```
KSB 지식베이스 엔진을 종료하려면, 해당폴더 (/home/csle/ksb-csle/bin)로 이동하여, stopKnowledge_service.sh 스크립트를 실행합니다.
```sh
# KSB 지식베이스 엔진 종료
./stopKnowledge_service.sh
```
### 온톨로지 파일 Upload 하기
KSB 지식베이스 엔진이 Start 되어 있는 상황에서, 사용자가 로컬 파일에 작성된 온톨로지 파일(.owl, .rdf, .rdfs)을 KSB 지식베이스 엔진에 Upload 하는 기능을 설명합니다. 본 예제에서는 KSB 지식베이스 엔진 내부 폴더에 제공하는 공통 온톨로지 파일을 이용합니다.
```sh
# 예제 수행 온톨로지 확인을 위해 해당 경로로 이동
cd /home/csle/ksb-knowledge/KBE/ontologies
```
![KSB 공통 온톨로지](./images/1.3_HowToInstallKsbFrameWork_02.png"KSB 공통 온톨로지")
```sh
# Curl 명령어 restful request 수행 (url: /loadOntologies, parameter: 온톨로지 경로)
curl -X POST http://127.0.0.1:9876/loadOntologies -H'Cache-Control: no-cache'-H'Content-Type: text/plain'-d ./ontologies
```
![KSB 지식베이스 엔진 온톨로지 upload 화면](./images/1.3_HowToInstallKsbFrameWork_03.png"KSB 지식베이스 엔진 온톨로지 upload 화면")
KSB 지식베이스 엔진에 Upload된 온톨로지는 KSB 지식베이스 엔진이 제공하는 쿼리 Restful API(``http://127.0.0.1:9876/query``)를 통해 확인할 수 있습니다. 이를 위해 Restful Client(본 예제에서는 Postman)를 실행하고, URL과 질의 쿼리 내용을 아래와 같이 입력하여 실행합니다.
```sh
# 본 쿼리는 SPAQRL 1.1의 형태의 질의이며, 이는 온톨로지 thing:Thing 클래스의 서브 클래스를 검색하기 위한 쿼리입니다.
## [Host PC] SSH config 수정하기 (known_hosts에 호스트 저장 질문을 하지 않도록 설정)
아래의 명령을 수행하여 ssh_config의 기존 내용을 모두 삭제하고 설정을 추가합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
sudo truncate-s0 /etc/ssh/ssh_config
echo"Host localhost"\
| sudo tee-a /etc/ssh/ssh_config >/dev/null
echo"StrictHostKeyChecking no"\
| sudo tee-a /etc/ssh/ssh_config >/dev/null
echo"Host 0.0.0.0"\
| sudo tee-a /etc/ssh/ssh_config >/dev/null
echo"StrictHostKeyChecking no"\
| sudo tee-a /etc/ssh/ssh_config >/dev/null
echo"Host 127.0.0.1"\
| sudo tee-a /etc/ssh/ssh_config >/dev/null
echo"StrictHostKeyChecking no"\
| sudo tee-a /etc/ssh/ssh_config >/dev/null
echo"Host csle*"\
| sudo tee-a /etc/ssh/ssh_config >/dev/null
echo"StrictHostKeyChecking no"\
| sudo tee-a /etc/ssh/ssh_config >/dev/null
echo"UserKnownHostsFile=/dev/null"\
| sudo tee-a /etc/ssh/ssh_config >/dev/null
echo"Host master"\
| sudo tee-a /etc/ssh/ssh_config >/dev/null
echo"StrictHostKeyChecking no"\
| sudo tee-a /etc/ssh/ssh_config >/dev/null
echo"UserKnownHostsFile=/dev/null"\
| sudo tee-a /etc/ssh/ssh_config >/dev/null
sudo service ssh restart
```
## [Host PC] Hadoop 2.7.3 설치하기
아래 링크를 참고하여 사용자의 PC 혹은 클러스터 환경에 맞게 설치합니다.
참고링크 : https://hadoop.apache.org/docs/r2.7.3/
다운로드 링크 : https://archive.apache.org/dist/hadoop/common/hadoop-2.7.3/
**[KSB 툴박스를 이용한 설치 방법]**
KSB 툴박스를 동작시킨 상태에서 docker 컨테이너로부터 hadoop 설정 파일을 복사하여 설치할 수도 있습니다.
먼저 도커에 접속하는 방법을 참고하여 접속합니다. (<ahref="http://csleoss.etri.re.kr:8088/images/contents/manual_1.0/Filezilla.html"> Filezilla를 이용하여 KSB 툴박스 docker 컨테이너에 접속하기 </a>)
도커에 있는 hadoop-2.7.3 폴더를 Host PC의 /home/csle 폴더에 복사합니다.
또한, /home/csle/data 폴더의 hdfs 관련 정보저장 폴더를 /home/csle 폴더에 복사합니다.
그리고, ssh 포트 정보를 'hadoop-env.sh'파일에 추가합니다.
```sh
vi /home/csle/hadoop-2.7.3/etc/hadoop/hadoop-env.sh
export HADOOP_SSH_OPTS="-p 2243"
```
마지막으로 심볼릭링크을 설정합니다.
```sh
ln-s /home/csle/hadoop-2.7.3 /home/csle/hadoop
```
## [Host PC] spark-2.3.0-bin-hadoop2.7 설치하기
아래 링크를 참고하여 사용자의 PC 혹은 클러스터 환경에 맞게 설치합니다.
참고링크 : https://spark.apache.org/downloads.html
다운로드 링크 : https://spark.apache.org/downloads.html
**[KSB 툴박스를 이용한 설치 방법]**
KSB 툴박스를 동작시킨 상태에서 docker 컨테이너로부터 spark 설정 파일을 복사하여 설치할 수도 있습니다.
먼저 도커에 접속하는 방법을 참고하여 접속합니다. (<ahref="http://csleoss.etri.re.kr:8088/images/contents/manual_1.0/Filezilla.html"> Filezilla를 이용하여 KSB 툴박스 docker 컨테이너에 접속하기 </a>)
도커에 있는 spark-2.3.0-bin-hadoop2.7 폴더를 /home/csle 폴더에 복사합니다.
다운로드 링크 : https://archive.apache.org/dist/hbase/1.2.4/
**[KSB 툴박스를 이용한 설치 방법]**
KSB 툴박스를 동작시킨 상태에서 docker 컨테이너로부터 hbase 설정 파일을 복사하여 설치할 수도 있습니다.
먼저 도커에 접속하는 방법을 참고하여 접속합니다. (<ahref="http://csleoss.etri.re.kr:8088/images/contents/manual_1.0/Filezilla.html"> Filezilla를 이용하여 KSB 툴박스 docker 컨테이너에 접속하기 </a>)
도커에 있는 hbase-1.2.4 폴더를 /home/csle 폴더에 폴더에 복사합니다.
그리고, ssh 포트 정보를 'hbase-env.sh'파일에 추가합니다.
```sh
vi /home/csle/hbase-1.2.4/conf/hbase-env.sh
export HBASE_SSH_OPTS="-p 2243"
```
그리고 심볼릭링크을 설정합니다.
```sh
ln-s /home/csle/hbase-1.2.4 /home/csle/hbase
```
## [Host PC] kafka 2.11-0.10.0.1(optional) 설치하기
아래 링크를 참고하여 사용자의 PC 혹은 클러스터 환경에 맞게 설치합니다.
참고링크 : https://kafka.apache.org/
다운로드 링크 : https://kafka.apache.org/downloads
**[KSB 툴박스를 이용한 설치 방법]**
KSB 툴박스를 동작시킨 상태에서 docker 컨테이너로부터 kafka 설정 파일을 복사하여 설치할 수도 있습니다.
먼저 도커에 접속하는 방법을 참고하여 접속합니다. (<ahref="http://csleoss.etri.re.kr:8088/images/contents/manual_1.0/Filezilla.html"> Filezilla를 이용하여 KSB 툴박스 docker 컨테이너에 접속하기 </a>)
도커에 있는 kafka_2.11-0.10.0.1 폴더를 /home/csle 폴더에 복사합니다.
다운로드 링크 : https://archive.apache.org/dist/zookeeper/zookeeper-3.4.9/
**[KSB 툴박스를 이용한 설치 방법]**
KSB 툴박스를 동작시킨 상태에서 docker 컨테이너로부터 zookeeper 설정 파일을 복사하여 설치할 수도 있습니다.
먼저 도커에 접속하는 방법을 참고하여 접속합니다. (<ahref="http://csleoss.etri.re.kr:8088/images/contents/manual_1.0/Filezilla.html"> Filezilla를 이용하여 KSB 툴박스 docker 컨테이너에 접속하기 </a>)
KSB 지식베이스 엔진을 종료하려면, 해당폴더 (/home/csle/ksb-csle/bin)로 이동하여, stopKnowledge_service.sh 스크립트를 실행합니다.
```sh
# KSB 지식베이스 엔진 종료
./stopKnowledge_service.sh
```
### 온톨로지 파일 Upload 하기
KSB 지식베이스 엔진이 Start 되어 있는 상황에서, 사용자가 로컬 파일에 작성된 온톨로지 파일(.owl, .rdf, .rdfs)을 KSB 지식베이스 엔진에 Upload 하는 기능을 설명합니다. 본 예제에서는 KSB 지식베이스 엔진 내부 폴더에 제공하는 공통 온톨로지 파일을 이용합니다.
```sh
# 예제 수행 온톨로지 확인을 위해 해당 경로로 이동
cd /home/csle/ksb-knowledge/KBE/ontologies
```
![KSB 공통 온톨로지](./images/1.3_HowToInstallKsbFrameWork_02.png"KSB 공통 온톨로지")
```sh
# Curl 명령어 restful request 수행 (url: /loadOntologies, parameter: 온톨로지 경로)
curl -X POST http://127.0.0.1:9876/loadOntologies -H'Cache-Control: \
![KSB 지식베이스 엔진 온톨로지 upload 화면](./images/1.3_HowToInstallKsbFrameWork_03.png"KSB 지식베이스 엔진 온톨로지 upload 화면")
KSB 지식베이스 엔진에 Upload된 온톨로지는 KSB 지식베이스 엔진이 제공하는 쿼리 Restful API(``http://127.0.0.1:9876/query``)를 통해 확인할 수 있습니다. 이를 위해 Restful Client(본 예제에서는 Postman)를 실행하고, URL과 질의 쿼리 내용을 아래와 같이 입력하여 실행합니다.
UI 기반으로 KSB 인공지능 프레임워크를 사용할 수 있는 KSB 웹툴킷 설치 과정을 설명합니다.
## 설치 요구사항
- Docker 기반 KSB 툴박스 환경에서는, KSB 웹툴킷 실행을 위한 기능들이 사전에 설치 되어 있거나 설치 과정에 포함 되어 있으므로, 본 과정이 필요하지 않습니다.
- Ubuntu 16.04가 설치된 메모리 16GB 이상 데스트탑이나 노트북이 요구됩니다.
- KSB 웹툴킷은 KSB 인공지능 프레임워크를 기반으로 구동됩니다. 따라서 startKsbApiServing 을 실행하여 KSB 인공지능 프레임워크를 구동하고 있어야 합니다.
- KSB 웹툴킷은 저장소로 HDFS를 사용합니다. 따라서, 저장소로 사용할 PC에 Hadoop 및 관련 소프트웨어가 설치 되어 있어야 합니다. Hadoop을 설치한 후에는 ksb-csle/conf/ksb.conf 파일에서 hadoop.master 정보를 설치한 호스트명으로 설정해 주어야 합니다. 또한 hadoop.hdfs.activated 도 true로 설정해야 정상적으로 HDFS 를 저장소로 이용할 수 있습니다.(기본적으로 true로 설정 되어 있습니다.)
- DB에서 한글을 정상적으로 사용하기 위해, 호스트 운영체제의 언어를 한글로 설정 합니다. 변경 하는 방법은 다음 링크를 참고 합니다.
[Ubuntu 언어 변경](https://askubuntu.com/questions/509174/how-can-i-change-the-language-from-english-to-spanish)
- Postgresql 9.6.8 이상이 설치되어야 합니다.
- Pgadmin3 1.22.2 이상이 설치되어야 합니다.
- JDK 8 이 설치되어야 합니다. 설치 방법은 다음 링크를 참고 합니다. [JDK 8 설치](https://csleoss.etri.re.kr/images/contents/manual_1.0/1.2.HowToInstallKsbToolBox.html#host-pc-java-8-oracle-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0)
- Apache Tomcat 7.x가 설치되어야 합니다.
## KSB 인공지능 프레임워크 DB 설치하기
KSB 인공지능 프레임워크는 프레임워크 사용자 정보, 생성 및 구동된 워크플로우 정보, KSB 웹툴킷에서 이용하는 UI Component 관련 정보를 관리하기 위해 Postgresql DB를 사용 합니다.
Postgresql 설치 버전은 9.6.8 이상를 권장하며, 다음과 같이 설치한 후 재시작합니다.
또한 Postgresql DB 접근 및 이용을 편리하게 하기 위해 Pgadmin을 설치하여 사용합니다. pgadmin3는 1.22.2 이상을 설치합니다. (Postgresql 9.6.8 이상을 설치해야 잘 동작합니다.) 툴박스 내에서 제공하는 DB restore 파일 등도 위 두 버전을 통해 백업 되었습니다.
```sh
$ sudo apt-get update
$ sudo apt-get install-y pgadmin3
```
## 외부에서 DB 접근 가능하도록 수정하기
설치된 Postgresql은 기본적으로는 localhost에서만 사용 가능합니다. 외부에서도 접근 가능하도록 하기 위해서는 다음 두 파일을 수정해야 합니다.
```sh
** postgresql remote access
$ sudo vi /etc/postgresql/9.6/main/pg_hba.conf/pg_hba.conf
host all all 0.0.0.0/0 md5
$ sudo vi /etc/postgresql/9.6/main/postgresql.conf
listen_addresses ='*'
$ sudo service postgresql restart
```
## KSB 인공지능 프레임워크 DB 정의
Postgresql 설치가 완료되면, DB에 접속하여 DB 사용자 계정과 권한을 생성하고, SDK 압축파일에 포함된 백업파일(csledb_v1.0.backup)을 이용하여 KSB 인공지능 프레임워크 DB 정보를 restore 합니다.
Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.
2018-10-22 16:51:13,925 INFO StdSchedulerFactory: Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
2018-10-22 16:51:13,925 INFO StdSchedulerFactory: Quartz scheduler version: 2.3.0
2018-10-22 16:51:13,925 INFO QuartzScheduler: Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
[INFO] [10/22/2018 16:51:13.979] [KsbApi-serving-akka.actor.default-dispatcher-2] [akka://KsbApi-serving/user/IO-HTTP/listener-0] Bound to /0.0.0.0:19999
[INFO] [10/22/2018 16:51:13.981] [KsbApi-serving-akka.actor.default-dispatcher-3] [akka://KsbApi-serving/deadLetters] Message [akka.io.Tcp$Bound] from Actor[akka://KsbApi-serving/user/IO-HTTP/listener-0#1547261392] to Actor[akka://KsbApi-serving/deadLetters] was not delivered. [1] dead letters encountered. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'.
2018-10-23 08:22:18,351 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
```
## KSB 웹툴킷 설정 업데이트
KSB 웹툴킷과 KSB 인공지능 프레임워크는 다음 사용자 정보가 저장되어 있습니다.
User ID: ksbuser@etri.re.kr / User Password: ksbuser@etri.re.kr
Chrome 브라우저(또는 HTML5 표준 호환 브라우저)를 열고 위 사용자 정보를 입력하여 로그인합니다.
```sh
http://localhost:8080
```
![login](./images/1.4_01.png)
정상적으로 로그인에 성공하면, Management 메뉴를 클릭해서 KSB 인공지능 프레임워크가 구동되고 있는 환경 정보를 csle.gw.host 와 csle.gw.port 정보에 반영 합니다.
본 매뉴얼에서는 localhost 와 19999 포트가 되겠습니다.
![management](./images/1.4_02.png)
설정이 완료되면, Tomcat 서버를 재구동 하고, KSB 웹툴킷을 이용 합니다.
```sh
$ ./catalina.sh stop
$ ./catalina.sh start
```
## KSB 웹툴킷 회원 가입 기능 활성화를 위한 설정
KSB 웹툴킷은 이메일을 통해 사용자 가입을 처리하도록 되어 있습니다. 이를 위해 관리자의 메일 계정을 설정 하도록 되어 있으며, Gmail 계정을 통해 설정할 수 있습니다. 관리자는 uidb 의 system_configuration 테이블에 자신의 Gmail 계정을 설정할 수 있으며, 사용자가 회원 가입을 신청하면 관련 메일이 관리자의 Gmail 계정을 통해 발송 됩니다.
설정 방법은, KSB 웹툴킷에 관리자 계정(ksbuser@etri.re.kr)으로 로그인 하여 Management 메뉴의 System Configuration 탭에서 'javax.mail.session.prop.id' property에서 수정아이콘을 클릭하여 Gmail 계정(aaa@gmail.com 이면 aaa)을 'javax.mail.session.prop.password' 에 Gmail 암호를 입력하고 저장 아이콘을 클릭하여 수정한 사항을 저장 합니다.
이메일의 발송 시, 사용자에게 메일로 안내 되는 링크의 ip는 KSB 웹툴킷이 구동 중인 서버의 설정을 따릅니다. 만약 localhost로 구동 하였다면, KSB 웹툴킷이 구동 중인 서버에서만 가입 절차를 진행할 수 있으므로, 외부에서 접속 가능한 ip로 실행 하시기 바랍니다.
. (참고사항) KSB 툴박스 docker 컨테이너를 실행할 경우, Host pc의 /home/csle/ksb-csle 폴더를 volume 마운트해서 사용합니다. 따라서 예제 파일이나 모델 파일 등 사용자 파일은 ksb-csle 폴더를 통해 docker 컨테이너에서 접근 할 수 있습니다.
## [Docker 컨테이너] KSB 툴박스 docker 컨테이너 초기화하기
KSB 툴박스 docker 컨테이너 접속한 후, 다양한 KSB 툴박스 예제들을 실행하기 위해서 아래 명령을 통해 docker 컨테이너를 초기화 합니다. Zookeeper/Hadoop/Kafka/Hbase/웹툴킷 등 초기화를 진행합니다. PC사양에 따라 다소 시간이 걸릴 수 있습니다. 아래와 같은 메세지가 나오면 초기화가 완료된 상태입니다. (host pc의 IP는 192.168.0.5로 가정합니다. 자신의 Host PC IP가 출력되면 정상입니다.)
```sh
csle@csle1: cd
csle@csle1:~$ ./startService.sh
* Restarting OpenBSD Secure Shell server sshd [ OK ]
* Restarting PostgreSQL 9.6 database server [ OK ]
ZooKeeper JMX enabled by default
Using config: /home/csle/zookeeper-3.4.9/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
Warning: Permanently added 'master,192.168.0.5'(ECDSA) to the list of
known hosts.
ZooKeeper JMX enabled by default
Using config: /home/csle/zookeeper-3.4.9/bin/../conf/zoo.cfg
Starting zookeeper ... already running as process 174.
Warning: Permanently added 'csle1,192.168.0.5'(ECDSA) to the list of
known hosts.
ZooKeeper JMX enabled by default
Using config: /home/csle/zookeeper-3.4.9/bin/../conf/zoo.cfg
Starting zookeeper ... already running as process 174.
Starting namenodes on [csle1]
csle1: Warning: Permanently added 'csle1,192.168.0.5'(ECDSA) to the
list of known hosts.
< 중간 생략 >
[info] Loading project definition from
/home/csle/ksb-knowledge/KBE/project
[info] Set current project to KBE
(in build file:/home/csle/ksb-knowledge/KBE/)
[warn] The start command is deprecated, and will be removed in a
future version of Play.
[warn] To run Play in production mode, run 'stage' instead, and then
execute the generated start script in target/universal/stage/bin.
[warn] To test your application using production mode, run 'testProd'
instead.
[info] Wrote /home/csle/ksb-knowledge/KBE/target/scala-2.11/
kbe_2.11-1.0-SNAPSHOT.pom
Warning: node.js detection failed, sbt will use the Rhino based
Trireme JavaScript engine instead to run JavaScript assets compilation,
which in some cases may be orders of magnitude slower than using
node.js.
(Starting server. Type Ctrl+D to exit logs, the server will remain in
background)
<!DOCTYPE html>
<html lang="en">
<head>
<title>Select inference rules</title>
<link rel="stylesheet"media="screen"
href="/assets/stylesheets/main.css">
<link rel="shortcut icon"type="image/png"
href="/assets/images/favicon.png">
<script src="/assets/javascripts/hello.js"
type="text/javascript"></script>
</head>
<body>
< 중간 생략 >
<!DOCTYPE html>
<html lang="en">
<head>
<title>Welcome to Play</title>
<link rel="stylesheet"media="screen"
href="/assets/stylesheets/main.css">
<link rel="shortcut icon"type="image/png"
href="/assets/images/favicon.png">
<script src="/assets/javascripts/hello.js"
type="text/javascript"></script>
</head>
<body>
<h1>addDeviceControl</h1>
</body>
</html>
csle@csle1:~$
```
jps명령을 이용하여 초기화 상태를 확인합니다.
```sh
csle@csle1:~$ jps
2336 HRegionServer
2161 HMaster
3681 Jps
1890 NodeManager
1219 DataNode
885 QuorumPeerMain
1413 SecondaryNameNode
1078 NameNode
3542 ProdServerStart
2475 Kafka
3228 Bootstrap
1597 ResourceManager
```
## [Docker 컨테이너] KSB Base Ontology 로드하기
KSB 툴박스에 포함된 RealtimeIngestToServingWithKbInTwoEngines 예제를 실행하기 위해 온톨로지를 로드합니다.
```sh
cd ~/ksb-csle/bin/
./loadKnowledge_BaseOntologies.sh localhost 9876
```
## [Docker 컨테이너] KSB 인공지능 프레임워크 구동하기
KSB 툴박스의 다양한 예제를 실행하기 위해 아래 명령으로 KSB 인공지능 프레임워크 API serving을 실행합니다.
3대 서버에 마스터 1개, 노드1, 노도2의 쿠버네티스 클러스터를 구성하기 위한 설치 방법을 설명합니다.
각 서버의 호스트 이름 및 IP 는 아래와 같이 가정합니다.
csle1 : 192.168.0.5 (master)
csle2 : 192.168.0.6 (node1)
csle3 : 192.168.0.7 (node2)
## 모든 서버에 공통으로 설치하기
### [모든 서버 공통] java 8 설치하기
<ahref="https://csleoss.etri.re.kr/images/contents/manual_1.0/1.2.HowToInstallKsbToolBox.html#host-pc-java-8-oracle-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0"title="KSB 툴박스 설치">KSB 툴박스 설치</a>의 java-8-oracle 설치 부분을 참고합니다.
### [모든 서버 공통] 기타 우분투 프로그램 설치하기
```sh
sudo apt-get update &&\
sudo apt-get install-y--no-install-recommends apt-utils curl bc jq &&\
[WARNING FileExisting-crictl]: crictl not found in system path
[certificates] Generated ca certificate and key.
[certificates] Generated apiserver certificate and key.
[certificates] apiserver serving cert is signed for DNS names [csle1 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 129.254.xxx.xxx]
[certificates] Generated apiserver-kubelet-client certificate and key.
[certificates] Generated sa key and public key.
[certificates] Generated front-proxy-ca certificate and key.
[certificates] Generated front-proxy-client certificate and key.
[certificates] Valid certificates and keys now exist in "/etc/kubernetes/pki"
[kubeconfig] Wrote KubeConfig file to disk: "admin.conf"
[kubeconfig] Wrote KubeConfig file to disk: "kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk: "controller-manager.conf"
[kubeconfig] Wrote KubeConfig file to disk: "scheduler.conf"
[controlplane] Wrote Static Pod manifest for component kube-apiserver to "/etc/kubernetes/manifests/kube-apiserver.yaml"
[controlplane] Wrote Static Pod manifest for component kube-controller-manager to "/etc/kubernetes/manifests/kube-controller-manager.yaml"
[controlplane] Wrote Static Pod manifest for component kube-scheduler to "/etc/kubernetes/manifests/kube-scheduler.yaml"
[etcd] Wrote Static Pod manifest for a local etcd instance to "/etc/kubernetes/manifests/etcd.yaml"
[init] Waiting for the kubelet to boot up the control plane as Static Pods from directory "/etc/kubernetes/manifests".
[init] This might take a minute or longer if the control plane images have to be pulled.
[apiclient] All control plane components are healthy after 46.007752 seconds
[uploadconfig] Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace
[markmaster] Will mark node csle1 as master by adding a label and a taint
[markmaster] Master csle1 tainted and labelled with key/value: node-role.kubernetes.io/master=""
[bootstraptoken] Using token: a96953.b5d1418a5099b5de
[bootstraptoken] Configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
[bootstraptoken] Configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
[bootstraptoken] Configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
[bootstraptoken] Creating the "cluster-info" ConfigMap in the "kube-public" namespace
[addons] Applied essential addon: kube-dns
[addons] Applied essential addon: kube-proxy
Your Kubernetes master has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
3대 서버에 마스터 1개, 노드1, 노도2의 쿠버네티스 클러스터를 구성하기 위한 설치 방법을 설명합니다.
각 서버의 호스트 이름 및 IP 는 아래와 같이 가정합니다. 사용자의 클러스터 환경에 맞게 IP를 수정하시기 바랍니다.
csle1 : 192.168.0.5 (master)
csle2 : 192.168.0.6 (node1)
csle3 : 192.168.0.7 (node2)
## 모든 서버에 공통으로 설치하기
### [모든 서버 공통] java 8 설치하기
<ahref="https://csleoss.etri.re.kr/images/contents/manual_1.0/1.2.HowToInstallKsbToolBox.html#host-pc-java-8-oracle-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0"title="KSB 툴박스 설치">KSB 툴박스 설치</a>의 java-8-oracle 설치 부분을 참고합니다.
**KSB 웹툴킷** 은 사용자가 프레임워크를 효과적으로 사용할 수 있도록 지원하는 웹기반의 저작 도구입니다. **KSB 웹툴킷** 은 워크플로우를 정의하고 실행하는 기능과 실행 과정을 모니터링하는 기능, 그리고 관련 데이터를 업로드하고 결과를 시각화하는 기능 등을 지원합니다. **KSB 웹툴킷** 은 회원가입을 통해 로그인을 하여 사용하며 사용자별로 워크플로우를 관리합니다.
## 웹을 통한 접속 및 로그인
먼저 <ahref="./1.5.HowToRunFirst.html">KSB 인공지능 프레임워크 실행하기</a> 매뉴얼을 참고하여 KSB 프레임워크를 구동합니다.
Chrome 브라우저(또는 HTML5 표준 호환 브라우저)를 열고 <ahref="http://localhost:8080/">http://localhost:8080</a> 에 접속합니다. 로그인 페이지를 볼 수 있으며, 다음과 같이 기본적으로 제공하는 사용자 정보(수퍼관리자)가 저장되어 있습니다.
- User ID : `ksbuser@etri.re.kr`
- User Password : `ksbuser@etri.re.kr`
사용자 ID 와 암호를 입력한 후 로그인 합니다. 위 아이디로 로그인할 경우 워크플로우 예제가 저장되어 있습니다.
![Figure](images/2.1_signin.png)
## 기능 및 메뉴 구성
KSB 웹툴킷에 로그인을 하면 대시보드 화면이 보이고, 화면 상단에 다음과 같은 메뉴가 있습니다.
### Dashboard
대시보드에서는 KSB 웹툴킷에 로그인 한 사용자가 작성하여 저장하거나 실행한 워크플로우 정보 및 현재 서비스 되고 있는 정보를 한 눈에 파악할 수 있습니다. (다른 사용자가 작성하여 저장하거나 실행한 워크플로우는 나타나지 않습니다.) *Workflow TOP 10* 에서는 수행된 워크플로우의 통계 정보(수행 횟수, 수행 결과, 수행 경과시간)를 보여줍니다. *Workflow* 에서는 사용자가 작성하여 저장한 워크플로우의 리스트를 보여줍니다. 삭제(<spanstyle="color:red">☓</span>) 버튼을 눌러 해당 워크플로우를 삭제할 수 있습니다. 또한 특정 기간에 작성된 워크플로우를 검색하여 볼 수 있습니다. *Services* 에서는 현재 서비스 되고 있는 서빙 엔진들(온디맨드방식 처리 엔진들)의 세부 정보를 보여줍니다.
![dashboard Figure](images/2.1_dashboard.png)
### Workflow Editor
워크플로우 편집기에서는 그래픽 기반의 워크플로우 편집 기능을 사용하여 워크플로우를 작성하고 실행할 수 있습니다. 또한 워크플로우를 저장하고 로딩할 수 있으며 별도의 Json 파일로 Import/Export 할 수 있습니다. 워크플로우 편집기는 별도의 창으로 생성되며, 여러 개의 창을 동시에 띄워서 워크플로우를 각각 편집하고 실행할 수 있습니다. 구체적인 사용 방법은 <ahref="./2.2.WebToolkit_Workflow.html">워크플로우 편집기 소개</a> 를 참조합니다.
![workflow Figure](images/2.1_workflow.png)
### Repository
KSB 인공지능 프레임워크는 **하둡파일시스템(HDFS)** 을 기본적으로 사용합니다. 데이터 저장소 관리에서는 사용자가 HDFS에 파일을 업로드 하거나 다운로드 하기 위한 인터페이스를 제공합니다. 워크플로우에서 사용하는 데이터 파일, 모델 파일, 결과 파일 등을 관리할 수 있습니다. 사용자가 원하는 파일 내용을 확인하거나 신규 디렉토리를 생성하고 파일을 업로드할 수 있는 기능을 제공합니다. 구체적인 사용 방법은 <ahref="./2.3.1.WebToolkit_Repository.html">데이터 저장소 관리</a> 를 참조합니다.
![repository Figure](images/2.1_repository.png)
### Monitoring
진행내역/상태 모니터링에서는 KSB 프레임워크에 제출된 워크플로우(워크플로우에 속한 엔진 포함)의 목록 및 상태를 확인할 수 있습니다. 또한 워크플로우 및 엔진의 Status에 따라 실행 중인 워크플로우 및 엔진을 종료(<spanstyle="color:red">◼</span>)하거나, 재실행(<spanstyle="color:#6698FF">▶</span>)할 수 있습니다. 또한 *Workflow Histroy* 탭에서 엔진이 실행 되어 생성된 결과파일을 확인하고 그래프로 시각화 하거나 로그 기록을 볼 수 있습니다. 구체적인 사용 방법은 <ahref="./2.3.2.WebToolkit_Monitoring.html"> 모니터링 소개</a> 를 참조합니다.
![monitoring Figure](images/2.1_monitoring.png)
### Component (관리자 메뉴)
컴퍼넌트 관리는 관리자 권한을 가진 사용자만 접근할 수 있습니다. 컴퍼넌트 관리에서는 SW 개발자가 만든 신규 컴퍼넌트를 **KSB 웹툴킷** 에서 사용할 수 있도록 등록하거나, 기존의 컴퍼넌트 동작이 변경되어었을 경우 수정하는 기능을 제공합니다. 또한 웹툴킷 컴퍼넌트들의 버전을 관리할 수 있습니다. 자세한 설명은 <ahref="./3.4.HowToUseComponent.html">KSB 웹툴킷에 컴퍼넌트 등록하기</a> 를 참조합니다.
![component Figure](images/2.1_component.png)
### Management (관리자 메뉴)
시스템 설정 관리는 관리자 권한을 가진 사용자만 접근할 수 있습니다. 시스템 설정 관리에서는 웹툴킷 관리자가 쉽게 웹툴킷 정보(게이트웨이 Ip, Port, 버전 정보 등)를 확인하고 수정할 수 있습니다. *User Configuration* 탭에서는 회원 목록을 확인하고 회원 가입 승인, 관리자 권한 부여, 회원 삭제 등을 수행할 수 있습니다.
![management Figure](images/2.1_management.png)
## 회원 가입
KSB 웹툴킷은 회원가입을 통해 로그인을 하여 사용하며 사용자별로 워크플로우를 관리합니다. 자신의 계정을 생성하려면 로그인 화면에서 "신규 회원가입" 버튼을 클릭하여 이메일 인증을 통해 회원가입을 수행 합니다.
![Figure](images/2.1_joinin.png)
회원 가입 절차를 위해서는 이메일 인증을 할 메일 계정이 요구되며, **Management** 메뉴의 *System Configuration* 탭에서 설정할 수 있습니다. `javax.mail.session.prop.id` 와 `javax.mail.session.prop.password` 를 통해 각각 메일 계정과 메일 암호를 설정하여 이용할 수 있습니다. 메일은 Gmail 등을 사용하면 됩니다.
또한, 회원 가입을 위해서는 이메일 인증절차를 수행하는 PC에서 KSB 웹툴킷이 운용중인 서버에 접근할 수 있어야 합니다.
## 회원 관리
KSB 웹툴킷은 회원을 **일반사용자/관리자/수퍼관리자** 로 권한을 나누어 관리합니다. 일반사용자 계정은 Component 메뉴와 Management 메뉴에 접근할 수 없습니다. 관리자 및 수퍼관리자 계정은 Component 메뉴와 Management 메뉴에 접근 가능하고 기능을 사용할 수 있습니다. 다만, 관리자 계정은 **Management** 메뉴의 *User Configuration* 탭에서 일반사용자의 회원 가입 승인, 관리자 권한 부여, 회원 삭제 등을 수행할 수 있습니다. 관리자의 권한을 일반사용자로 바꾸거나 관리자 회원을 삭제하는 것은 수퍼관리자 계정만 가능합니다.
워크플로우 편집기는 사용자가 워크플로우를 쉽게 정의할 수 있도록 그래픽 기반의 워크플로우 편집 기능과 실행 기능을 제공합니다. 워크플로우 편집 화면은 다음 그림과 같이 7가지 영역으로 구성되어 있습니다.
![워크플로우 편집 화면 (Workflow editor)](./images/2.2_workflow.png)
## 메뉴바
워크플로우의 생성/로딩/저장/실행/불러오기/내보내기/마법사 기능을 선택할 수 있는 화면입니다. 구체적인 메뉴 설명은 아래와 같습니다.
### New Workflow
새로운 워크플로우를 생성합니다. 하나의 워크플로우를 생성할 때는 버전을 선택하여 생성하며, 생성된 워크플로우의 버전은 변경할 수 없습니다. 해당 워크플로우가 생성될 때 선택한 버전으로 항상 로딩 되고 실행됩니다.
![워크플로우 편집 화면 (New)](./images/2.2_WorkflowVersion.png)
### Load Workflow
DB에 저장된 워크플로우를 불러옵니다. 삭제(<spanstyle="color:red">☓</span>) 버튼을 눌러 해당 워크플로우를 삭제할 수 있습니다. 이전에 실행한 이력이 있는 워크플로우를 삭제 하는 경우, 해당 워크플로우의 실행 이력 및 로그파일도 모두 삭제 됩니다. 또한 표의 헤더 부분을 클릭하여 정렬할 수 있습니다.
![워크플로우 편집 화면 (Load)](./images/2.2_WorkflowLoad.png)
### Save Workflow
작성 중인 워크플로우를 DB에 저장합니다. 워크플로우를 처음 저장할 경우 워크플로우의 이름과 설명을 입력한 후 저장합니다. 기존에 저장한 워크플로우를 수정했을 때는 저장 버튼을 누른 후 *Update* 를 통해 워크플로우를 갱신하거나 *Save As* 를 통해 새로운 워크를로우로 저장할 수 있습니다.
저장한 워크플로우의 이름은 왼쪽 메뉴 상단에 나타납니다.
워크플로우 편집 창의 빈 공간에서 마우스 오른쪽 버튼을 눌렀을 때도 워크플로우 이름 및 설명 정보를 확인 및 수정할 수 있습니다.
![워크플로우 편집 화면 (Save)](./images/2.2_WorkflowSave.png)
### Run Workflow
작성한 워크플로우 Spec 을 KSB 프레임워크로 제출합니다. 워크플로우의 이름과 설명을 입력하지 않았을 경우 이를 입력해야 합니다. 또한 Batch 여부 (배치처리일 경우 Batch 를 체크함) 와 Verbose (디버깅을 위해 상세 로그 정보를 확인 할 경우 체크함. 로그 정보가 상세하게 기록 됨.) 를 선택한 후 제출합니다. KSB 프레임워크는 Json 형태의 워크플로우 Spec 을 해석하여 엔진을 동적으로 구성하여 실행합니다.
![워크플로우 편집 화면 (Run)](./images/2.2_WorkflowRun.png)
### Import from file
Export 된 Json 포맷의 워크플로우 파일을 불러옵니다. "파일선택" 버튼을 클릭하여 워크플로우 파일을 선택한 후 "Import" 버튼을 클릭하여 워크플로우를 불러옵니다.
![워크플로우 편집 화면 (Import)](./images/2.2_WorkflowImport.png)
### Export to file
작성한 워크플로우 Spec 을 Json 포맷의 파일로 내보냅니다. Json 파일에 작성한 워크플로우의 spec이 저장되므로 Import 기능을 통해 워크플로우를 불러올 수 있습니다. 다른 사용자에게 내가 작성한 워크플로우를 공유하고자 할 때 사용합니다.
### Wizard
사용자가 작성하고자 하는 워크플로우와 가장 적합한 워크플로우 템플릿을 찾아주는 기능입니다.
다음과 같이 질문에 답변을 함으로써 사용자의 목적에 가장 부합하는 워크플로우를 찾아서 불러옵니다.
현재는, 개발자가 사전에 지식베이스에 저장한 예제 워크플로우에 대해서만 검색 됩니다.
![Wizard](./images/2.2_wizard1.png)
![Wizard](./images/2.2_wizard2.png)
![Wizard](./images/2.2_wizard3.png)
## 엔진 선택 창
사용자가 다양한 서비스를 만들 수 있도록 여러가지 엔진 타입을 제공합니다. 사용자가 원하는 엔진 타입을 선택한 후 **워크플로우 편집 창** 으로 drag & drop 하면 엔진 선택이 쉽게 완료됩니다. 각 엔진 타입에 대한 자세한 내용은 <ahref="./2.4.1.EngineTypeList.html">엔진 유형 목록</a> 을 참조 하시기 바랍니다.
![워크플로우 편집 화면 (Engine)](./images/2.2_container.png)
## 컴퍼넌트 선택 창
엔진을 구성하는데 필요한 컴퍼넌트를 5종으로 구분하여 관련 컴퍼넌트 리스트를 제공하는 화면입니다. 사용자는 원하는 컴퍼넌트를 선택하여 **엔진 컨테이너** 으로 drag & drop 하면 자동으로 엔진 컨테이너에 탑재되어 손쉽게 엔진을 구성할 수 있습니다. 5종의 컴퍼넌트는 아래와 같으며 구체적인 컴퍼넌트 리스트는 <ahref="./2.4.2.ComponentList.html">컴퍼넌트 목록</a> 을 참조하시기 바랍니다.
-**Reader**: 데이터를 읽어오기 위한 입력 컴퍼넌트들을 보여줍니다.
-**Writer**: 데이터를 보내기 위한 출력 컴퍼넌트들을 보여줍니다.
-**Operator**: 데이터 처리를 위한 처리 컴퍼넌트들을 보여줍니다.
-**Runner**: 실행을 지원하기 위한 실행 컴퍼넌트들을 보여줍니다.
-**Controller**: 선택된 컴퍼넌트들을 제어하기 위한 제어 컴퍼넌트들을 보여줍니다.
각 엔진마다 사용할 수 있는 컴퍼넌트들이 매핑되어 있으며, 각 컴퍼넌트에 마우스를 오버하면 간단한 툴팁 설명을 볼 수 있습니다.
![워크플로우 편집 화면 (Component)](./images/2.2_component.png)
## 속성 창
탑재된 컴퍼넌트의 속성을 설정하는 화면을 제공합니다. 사용자가 **탑재된 컴퍼넌트** 를 클릭하면, 컴퍼넌트 속성 창에 해당 컴퍼넌트의 속성이 표시됩니다.
![워크플로우 편집 화면 (Property)](./images/2.2_property.png)
속성 창에서 별표(<spanstyle="color:red">✱</span>) 표시는 반드시 입력해야 하는 필드를 나타냅니다. 해당 필드의 속성을 입력하지 않으면 워크플로우가 실행되지 않습니다.
반복적으로 입력하는 필드일 경우, <spanstyle="color:#777777">✚</span> 버튼을 반복적으로 클릭하여 입력합니다.
하위에 여러 필드를 가지는 속성일 경우, `세부 설정 내용 ...` 으로 표시되며 클릭하면 별도의 팝업창이 나타나서 입력할 수 있습니다.
### Help 참조
속성 창에서는 별도의 Help를 제공하여 사용자가 이를 참조하여 속성 값을 입력할 수 있도록 지원합니다. Help 버튼(<spanstyle="color:#777777">?</span>)을 클릭하면 팝업창이 나타납니다. 구체적인 속성 입력 방법은 <ahref="./2.5.2.KMeansExample.html">워크플로우 예제 만들기</a>를 참조합니다.
![워크플로우 편집 화면 (Property)](./images/2.2_property_help.png)
### 파일 경로 선택
입력파일, 출력파일, 학습모델 등의 경로에 관한 속성 설정은 **하둡파일시스템(HDFS)** 을 사용할 것인지 **로컬파일시스템** 을 사용할 것이지에 따라 주의해서 입력해야 합니다. 파일 시스템에 대한 설정은 KSB 프레임워크 설정파일인 ksb.conf에 설정된 **hdfs.Activated** 값이 *true* 인지 *false* 인지에 따라 하둡파일시스템(HDFS)의 상대경로인지 로컬파일 시스템의 상대경로인지가 결정되며, **기본 값은 하둡파일시스템** 으로 설정이 되어 있습니다.
또한 상대경로를 사용할 경우 다음과 같이 **사용자 기본 파일경로** 가 상대경로 앞에 적용됩니다.
- Writer 일 경우: hdfs://{host}:{port}/user/{user_id}/applications/{workflow_instance_id}_{engine_id}/output/
- 로컬파일시스템 상의 기본경로: file://{KSB_HOME}/
하둡파일시스템으로 설정된 경우, 하둡파일시스템에 대한 상대경로로 설정이 되며, **Repository** 와 `File` 버튼을 클릭 했을 때 보이는 파일시스템은 하둡파일시스템 입니다.
파일 경로 속성을 입력하는 방법은 두 가지를 제공합니다.
#### 1) 파일탐색기 버튼을 이용하는 방법
filePath, pyEntryPath 등과 같이 Path로 끝나는 필드 이름을 가지는 속성은 입력창 옆에 `File` 버튼이 있습니다. 이 버튼을 클릭하여 탐색기 창을 통해 하둡파일시스템(HDFS)의 파일 또는 경로를 선택하는 것이 가능합니다.
![워크플로우 편집 화면 (Property)](./images/2.2_property_file.png)
`File` 버튼을 통해서 선택한 경로는 **하둡파일시스템의 상대경로** 이며, KSB 프레임워크로 제출 되면, 시스템에서 자동으로 **사용자 기본 파일경로** 를 추가하여 처리합니다.
#### 2) 직접 입력하는 방법
-`File` 버튼 옆의 입력란에, 사용자가 파일시스템 정보(*hdfs://* 또는 *file://*)를 포함한 전체경로를 직접 설정한 경우, KSB 프레임워크는 해당 경로에 대해 기본 파일경로 추가 등의 처리를 하지 않으며, 입력한 파일시스템 상의 경로가 그대로 KSB 프레임워크 내부에서 사용됩니다.
-*/home/csle/...* 와 같이 최상위 경로정보 *'/'* 로 시작하는 경우, 해당파일시스템의 최상위로 시작하는 경로로 인식합니다.
-*'dataset/...'* 와 같이 상대경로를 지정한 경우, 상기에 설명한 **사용자 기본 파일경로** 가 상대경로 앞에 적용됩니다. 예를 들면, *'dataset/...'* 을 입력한 경우, *'hdfs://{host}:{port}/user/{user_id}/dataset/...'* 로 변경되어 KSB 프레임워크 상에서 처리됩니다.
## 워크플로우 편집 창
사용자가 직관적으로 엔진이나 컴퍼넌트를 편집할 수 있도록 워크플로우 편집 화면을 제공합니다. 사용자는 편집하고자 하는 엔진을 선택하거나 위치를 조정할 수 있습니다. 또한 필요한 컴퍼넌트들을 탑재하거나 삭제할 수 있습니다.
또한 엔진을 선택하고 마우스 오른쪽 버튼을 클릭하면 다음과 같은 메뉴를 사용할 수 있습니다.
- Engine 순서 설정
- Engine 순서 수정
- Engine 순서 보기
- Engine 복제
- Engine 삭제
워크플로우 편집창의 빈 공간에서 마우스 오른쪽 버튼을 클릭하여 다음과 같은 메뉴를 사용할 수도 있습니다.
- Engine 순서 설정
- Engine 순서 수정
- Engine 순서 보기
두 개 이상의 엔진을 구성하였을 경우, **선 연결** 및 **선 삭제** 기능을 이용할 수 있습니다.
### 엔진 복제
선택한 엔진과 동일한 엔진을 하나 만듭니다.
### 엔진 삭제
선택한 엔진을 삭제합니다.
### 엔진 순서 설정
엔진들 간의 순서를 설정합니다. "Engine 순서 설정" 을 클릭하면 워크플로우 편집 창이 비활성화 됩니다. 이 때 엔진을 차례대로 클릭하여 순서를 지정하고, Apply 버튼을 누릅니다.
![워크플로우 편집 화면 (Ordering)](./images/2.2_EngineOrdering.png)
### 엔진 순서 수정
엔진들 간의 순서를 수정합니다. "Engine 순서 수정" 을 클릭하면 워크플로우 편집창이 비활성화 되고, 현재 엔진들의 순서가 표시됩니다. 엔진 위의 숫자를 drag 하여 순서를 수정하고 Apply 버튼을 누릅니다.
![워크플로우 편집 화면 (Ordering)](./images/2.2_EngineOrdering2.png)
### 엔진 순서 보기
엔진 순서를 확인합니다.
"Engine 순서 보기" 를 클릭하면 워크플로우 편집창이 비활성화 되고, 현재 엔진들의 순서가 표시됩니다. 확인이 끝났으면 마우스 오른쪽 버튼을 클릭하여 "Engine 순서 보기 닫기" 를 클릭합니다.
![워크플로우 편집 화면 (Ordering)](./images/2.2_EngineOrdering3.png)
### 선 연결
워크플로우 편집 화면에서 선은 데이터 패스를 의미하며, 두 엔진을 선으로 연결하는 것이 가능합니다. 앞 엔진의 Writer 부분의 반달 모양에서 마우스를 클릭한 후 뒤에 있는 엔진의 Reader 부분의 반달 모양으로 drag & drop 하여 선을 연결합니다. Writer 와 Reader 의 이름이 다를 경우 다음과 같은 안내문이 나오며, 그래도 연결하고자 할 경우 연결하면 됩니다.
![워크플로우 편집 화면 (Link)](./images/2.2_WorkflowLink.png)
Writer 와 Reader 의 이름이 같을 경우에는 다음과 같이 Writer 의 속성값을 Reader 의 속성값으로 덮어쓸지를 선택하는 안내창이 나옵니다. "확인"을 클릭할 경우 Writer 의 속성값을 Reader 의 속성값으로 덮어쓰고, "취소"를 클릭할 경우 덮어쓰지 않습니다. 동일한 속성을 가지지 않았을 경우 (Writer 와 Reader 가 동일한 Component Property 를 가지지 않을 경우) 덮어쓰지 않을 것을 권장합니다.
![워크플로우 편집 화면 (Link)](./images/2.2_WorkflowLink2.png)
### 선 삭제
두 엔진을 연결한 선을 삭제하고자 할 경우 선이 있는 곳에서 마우스 오른쪽 버튼을 클릭하여 "Link 삭제"를 선택합니다.
![워크플로우 편집 화면 (Link)](./images/2.2_WorkflowLink3.png)
## 엔진 상세보기 창
엔진의 이름을 클릭하면 편집창 하단에 엔진 상세보기 창이 나타나며 엔진이 가진 Reader, Operator, Writer 들을 보여줍니다. 하나의 엔진에서 Reader, Operator, Writer는 여러 개를 가질 수 있습니다 (엔진 타입에 따라 하나만 가지거나 없는 경우도 있을 수 있음). 반면 Controller, Runner 는 반드시 하나만 가질 수 있습니다. 엔진 상세보기 창에서 각 컴퍼넌트를 drag & drop 하여 순서를 변경할 수 있습니다.
## 워크플로우 선택 창
KSB 웹툴킷에서 워크플로우 Spec 을 작성하여 KSB 프레임워크로 제출된 워크플로우의 목록 (워크플로우에 속한 엔진 목록 포함) 을 보여줍니다.
워크플로우 또는 엔진 이름을 선택한 후 **워크플로우 편집창** 으로 Drag & Drop 하면, 해당 워크플로우 또는 엔진을 불러옵니다. 따라서 이미 작성한 워크플로우 또는 엔진을 재사용하여 새로운 워크플로우를 작성할 수 있습니다.
KSB 인공지능 프레임워크는 **하둡파일시스템(HDFS)** 을 기본적으로 사용합니다. KSB 웹툴킷에서는 **Repository** 메뉴를 통해 HDFS에 파일을 업로드 하거나 다운로드 하기 위한 인터페이스를 제공합니다.
## 사용자 기본 파일경로
파일 시스템에 대한 설정은 ksb.conf (KSB 인공지능 프레임워크 설정파일) 에 설정된 **hdfs.Activated** 값에 따라 결정됩니다. **hdfs.Activated** 가 *true* 일 경우 HDFS의 상대경로로 설정합니다. **hdfs.Activated** 가 *false* 일 경우 로컬파일 시스템의 상대경로로 설정합니다. 기본 값은 HDFS의 상대경로로 설정이 되어 있습니다 (**hdfs.Activated** 가 *true*).
- Writer 일 경우: hdfs://{host}:{port}/user/{user_id}/applications/{workflow_instance_id}_{engine_id}/output/선택한 경로
- 로컬파일시스템 상의 기본경로: file://{KSB_HOME}/선택한 경로
KSB 웹툴킷의 Repository에서 사용하는 경로는 **사용자 기본 파일경로** 를 생략하여 보여줍니다. 따라서 *'dataset/...'* 을 입력한 경우, *'hdfs://{host}:{port}/user/{user_id}/dataset/...'* 로 변경되어 KSB 인공지능 프레임워크 상에서 처리됩니다.
## 데이터 업로드
KSB 인공지능 프레임워크는 HDFS에 업로드 할 데이터 타입을 크게 세 가지로 분류하도록 권장합니다.
- dataset : 입력 데이터 파일 및 사용자 파이썬 코드 파일
- model : 학습된 기계학습 모델의 파라미터가 저장된 파일
- applications : 엔진의 Writer 가 생성한 결과 파일
따라서 KSB 인공지능 프레임워크를 설치하면 HDFS에 기본적으로 "dataset" 폴더와 "model" 폴더가 생성되어 있습니다. "applications" 폴더는 엔진 실행 시 생성됩니다. 업로드할 파일의 타입에 따라 상위 디렉토리를 먼저 선택한 후 하위 디렉토리를 선택하고 해당 위치에 파일을 업로드 합니다. "Filename", "FileSize", "Last Modified" 을 클릭하면 해당 속성을 기준으로 오름차순 또는 내림차순으로 정렬할 수 있습니다.
![Repository](./images/2.3.1_repository.png)
상위 디렉토리를 선택하면, 하위 디렉토리 구조가 왼쪽 창에 나타납니다. 파일을 업로드 하고자 하는 위치로 마우스를 클릭하여 이동한 후, <spanstyle="color:#6698FF">File Upload</span> 버튼을 클릭하여 파일을 업로드 합니다.
이 때 입력파일의 이름(Name)과 설명(Description)을 함께 입력할 수 있습니다 (입력을 생략해도 됨). 이 정보는 입력 파일의 메타정보로 DB에 저장됩니다.
또한 파일 단위로 업로드 하거나 폴더 단위로 업로드 할 수 있습니다. 모델의 경우 주로 폴더 단위로 업로드 합니다.
구조가 복잡한 파일 및 디렉토리는 ZIP 파일로 압축한 다음, 파일 입력에서 폴더(압축파일)을 선택하여 업로드 할 수도 있습니다.
![파일 등록](./images/2.3.1_FileUpload.png)
새로운 폴더를 생성하고자 할 경우 <spanstyle="color:#6698FF">New Directory</span> 버튼을 클릭하여 폴더명, *메타정보 [(이름(Name), 설명(Description)]* 를 입력한 후 생성 버튼을 클릭합니다.
![폴더 생성](./images/2.3.1_NewDirectory.png)
*메타정보 [이름(Name), 설명(Description)]* 는 **워크플로우 편집기** 의 **속성창** 에서 파일 경로를 선택할 경우 이용됩니다. 즉 파일탐색기 버튼 (filePath, pyEntryPath 등과 같이 Path로 끝나는 필드 이름을 가지는 속성의 입력창 옆에 있는 `File` 버튼) 을 클릭했을 때 사용할 파일을 검색하기 위해 이용되며, 입력이 필수 사항은 아닙니다.
## 파일 삭제 및 다운로드
파일 또는 폴더를 클릭한 후 마우스 오른쪽 버튼을 클릭하면 다음과 같은 메뉴가 나타납니다. 메타정보는 dataset, model 의 하위 경로에 포함된 파일에 대해서만 설정 및 이용할 수 있습니다.
- 삭제
- 복사
- 잘라내기
- 붙여넣기 (복사 또는 잘라내기 한 경우에만 활성화 됨)
- 이름 변경
- 다운로드
- 메타정보
![Repository](./images/2.3.1_FileSelect.png)
폴더를 선택하고 다운로드 메뉴를 클릭할 경우, 폴더를 압축하여 다운로드 합니다.
메타정보 메뉴를 클릭할 경우, 이름, 설명 등의 메타정보를 입력할 수 있는 팝업창이 나타납니다.
![Repository](./images/2.3.1_meta.png)
## 결과 파일 확인
사용자가 작성한 워크플로우에 상대경로로 파일을 저장하는 **FileWriter** 를 사용한 엔진이 있을 경우, 워크플로우 실행이 종료된 후 Repository 메뉴에서 결과 파일을 확인할 수 있습니다. 결과 파일은 기본적으로 아래 위치에 저장이 됩니다.
KSB 프레임워크에 제출된 워크플로우(워크플로우에 속한 엔진 포함)의 목록 및 상태를 확인하고 제어합니다.
각 엔진은 다음과 같은 상태를 가질 수 있습니다.
Engine Status | 설명
--|---
<spanstyle="color:#555555">Accepted</span> | API 게이트웨이로 엔진이 제출(submit) 된 경우
<spanstyle="color:#1F77B4">InProgress</span> | 엔진이 실행 중인 경우
<spanstyle="color:#2ca02c">Completed</span> | 엔진이 에러없이 완료된 경우
<spanstyle="color:#d62728">Failed</span> | 엔진 실행 중 에러가 발생하여 종료된 경우
<spanstyle="color:#ff7f0e">Killed</span> | 사용자가 엔진 실행 중 종료한 경우
워크플로우는 워크플로우에 속한 엔진들의 상태에 따라 다음과 같은 두 가지 상태를 가질 수 있습니다.
-<spanstyle="color:#1F77B4">Inprogress</span>
- 한 엔진이라도 Inprogress 또는 Accpted 의 상태를 가지는 경우
-<spanstyle="color:#2ca02c">Finished</span>
- 모든 엔진이 Completed / Failed / Killed 중 하나의 상태를 가지는 경우
- 엔진 정보를 검색할 수 없는 경우
<br>
<ahref="./2.2.WebToolkit_Workflow.html">워크플로우 편집기 소개</a> 를 참고하여 작성한 워크플로우를 실행한 뒤, KSB 웹툴킷 상단의 **Monitoring** 메뉴를 선택하여 "진행내역/상태모니터링" 화면으로 이동합니다.
## Workflow 탭
진행내역/상태 모니터링의 *workflow* 탭에서는 KSB 프레임워크에 제출된 워크플로우(워크플로우에 속한 엔진 포함)의 목록 및 상태를 확인할 수 있습니다. 또한 실행 중인 워크플로우를 종료(<spanstyle="color:red">◼</span>)하거나, 다시 실행(<spanstyle="color:#6698FF">▶</span>)할 수 있습니다.
"펼쳐보기" 를 선택하면 워크플로우에 속한 엔진들의 목록을 일괄적으로 펼쳐서 모두 보여줍니다. "줄여보기" 를 선택하면 워크플로우에 속한 엔진들의 목록을 일괄적으로 접고 워크플로우 목록만 보여줍니다.
각 워크플로우를 개별적으로 "펼쳐보기" 하려면 워크플로우 이름 앞의 (<spanstyle="color:#777777">✚</span>) 버튼을 클릭합니다. 각 워크플로우를 개별적으로 "줄여보기" 하려면 워크플로우 이름 앞의 (<spanstyle="color:#777777">⁃</span>) 버튼을 클릭합니다.
워크플로우 및 엔진의 현재 상태(Status) 를 업데이트 합니다. 상태 정보는 KSB 프레임워크에 요청하여 응답 받은 결과를 보여주는 것입니다. 기본적으로는 모니터링 페이지를 열 때 마다 새로운 정보를 수신하여 표시 합니다.
**<span style="font-size: 14pt;">➄ 자동 새로고침 </span>**
"Auto Reload" 를 체크할 경우 워크플로우 및 엔진의 상태(Status) 를 주기적으로 업데이트 합니다.
참고로, 업데이트 할 주기는 **Management** 메뉴의 **System Configuration** 탭에서 `monitoring.auto.reload.interval` 를 통해 설정합니다. 기본 값은 5000 (5초) 으로 설정되어 있습니다.
**<span style="font-size: 14pt;">➅ 개별 펼쳐보기/줄여보기 </span>**
워크플로우 이름 앞의 (<spanstyle="color:#777777">✚</span>) 버튼을 클릭하면 워크플로우에 속한 엔진의 상세 정보를 확인할 수 있습니다 ("펼쳐보기"). 워크플로우 이름 앞의 (<spanstyle="color:#777777">⁃</span>) 버튼을 클릭하면 워크플로우에 속한 엔진의 목록을 숨깁니다 ("줄여보기").
**<span style="font-size: 14pt;">➆ 워크플로우 세부 Spec 보기 </span>**
KSB 웹툴킷에서 워크플로우 Spec 을 작성하여 KSB 프레임워크로 제출한 워크플로우일 경우에 "세부 Speck 보기" 버튼이 활성화 됩니다. (이클립스와 같이 개발자 환경 환경을 통해 워크플로우 Spec 을 작성하여 KSB 프레임워크로 제출하거나, 클라이언트 라이브러리를 이용한 경우 "세부 Speck 보기" 버튼이 보이지 않습니다.)
"세부 Speck 보기" 버튼을 클릭하면 **워크플로우 편집기** 화면을 열어서 작성한 워크플로우의 Spec 을 보여줍니다. 이 경우, 해당 워크플로우는 새로운 워크플로우로 열리며, 수정 및 재제출 시 다른 워크플로우로 인식 됩니다.
참고로, 이 기능은 추후 json 형태의 워크플로우 Spec 을 보여주는 것으로 변경될 예정입니다.
진행내역/상태 모니터링의 *Workflow Histroy* 탭에서는 최근에 수행한 워크플로우 이력을 엔진 단위로 보여줍니다. (각 엔진은 재실행 될 때 마다 새로운 history id를 부여 받으며, 각 실행이력은 본 Workflow History 탭에서 확인할 수 있습니다.)
화면 좌측에서 "Data" 는 파일의 내용을 표로 보여줍니다. "Statistics" 는 통계 정보를 보여줍니다. "Chart" 는 "Chart Style" 을 선택하여 그래프를 그려줍니다.
**<span style="font-size: 14pt;">➂ TEXT 결과 파일 보기 </span>**
FileWriter 를 포함하고 있는 엔진일 경우에 "TEXT 결과 파일 보기" 버튼이 활성화 됩니다. "TEXT 결과 파일 보기" 버튼을 클릭하면 파일의 내용을 보여주는 창이 팝업됩니다. 화면 우측에서 파일명을 선택하고 최대로 보고자 하는 길이 (Max Length) 를 입력합니다. 디폴트로 1000 바이트가 설정되어 있습니다.
KSB 인공지능 프레임워크가 기본적으로 제공하는 엔진 유형으로서 크게 배치방식, 스트림방식, 실시간 스트림 방식, 온디맨드 방식으로 동작하는 엔진들과 기타 외부연동용 엔진, GenericType의 엔진 유형이 존재합니다.
## 배치방식 처리엔진
엔진 타입 | 설명 | 사용 예제
--|--|--
**Batch** | 배치성 처리에 사용되는 엔진컨테이너로서 배치저장소로부터 데이터를 읽어 일괄처리 후 배치저장소로 출력하기 위한 용도로 활용가능. <br>BatchReader, BatchWriter, BatchOperator, BatchRunner, BatchController로 구성. <br>대표적으로 딥러닝학습용 엔진컨테이너를 구성하고자 하는 경우 이 엔진을 활용 |<ahref="./2.5.10.HourlyTensorflowTraining.html">• 텐서플로우 모델 주기적으로 학습하기 </a>
**Batchcd Dummy** | Deprecated by Batch <br> 삭제예정 |
**BatchToBatchStream** | 배치성 데이터 처리에 사용되는 컨테이너로서 배치저장소로부터 많은 데이터를 읽어 미니배치 형태의 다양한 처리를 수행한 후 배치저장소에 적재하는데 사용. <br>BatchReader, BatchWriter, StreamOperator, StreamRunner, StreamController로 구성 |<ahref="./2.5.2.KMeansExample.html">• 배치방식으로 데이터 처리하기 </a><br><ahref="./2.5.3.DeidentificationExample.html">• 비식별 처리하기 </a>
배치처리 방식의 엔진들은 파일, DB 등의 배치저장소로부터 데이터를 한번 읽은 후 데이터를 가공하고, 배치저장소로 출력합니다. 따라서 엔진이 실행되면 데이터 처리가 끝난 후 자동으로 종료됩니다. 배치방식 처리 엔진들은 한번 실행하거나 주기적으로 실행할 수 있습니다 (엔진의 RUNTYPE 속성 지정).
배치방식 처리 엔진들이 두 개 이상 포함된 워크플로우의 경우, 워크플로우의 속성 값 중 Batch 를 true 로 선택할 경우, 맨 앞의 엔진부터 실행과 종료가 순차적으로 실행이 됩니다. 반대로 Batch 를 false 로 설정할 경우 동시에 엔진이 실행됩니다. 따라서 앞의 엔진의 처리 결과를 이용해 뒤에 엔진이 처리해야하는 순차적인 실행을 하고자하는 워크플로우는 반드시 Batch 를 true 로 설정하시고 실행하여야 합니다.
## 스트림방식 처리엔진
엔진 타입 | 설명 | 사용 예제
--|--|--
**StreamToBatch** | 스트림을 입력받아 처리한 후 배치저장소에 출력하기 위한 엔진컨테이너.<br>StreamReader, BatchWriter, StreamOperator, StreamRunner, StreamController로 구성 |<ahref="./2.5.1.HttpToMongodbExample.html">• 스트림 데이터 적재하기 </a><br><ahref="./2.6.1.TrafficPreprocessing.html">• 교통속도 스트림 데이터 전처리하기 </a>
**StreamToStream** | 스트림 데이터처리에 사용되는 엔진컨테이너. <br>StreamReader, StreamWriter, StreamOperator, StreamRunner, StreamController로 구성 |<ahref="./2.5.12.TfStreamPredictionMnist.html">• 스트림 방식으로 MNIST 모델 서빙하기 </a><br><ahref="./2.5.7.RealtimeIngestToPredictInSingleEngine.html">• 스트림방식으로 ML모델 예측결과 얻기 </a>
스트림방식 처리 엔진들은 카프카, HTTP 등을 이용해 스트림 데이터를 입력받은 후 일정한 주기 (Mini batch 주기)로 깨어나 미니배치 형태로 동작합니다. 스트림 데이터를 들어온 순서대로 일정한 개수만큼 잘라서 가공하고, 배치저장소에 출력하거나 또는 스트림 형태로 출력합니다. 스트림 처리 엔진은 계속해서 스트림 데이터를 받고 있으므로 사용자가 종료 명령을 내릴 경우 종료됩니다. 종료는 **KSB 웹툴킷** 의 모니터링 화면에서 할 수 있습니다.
현재 프레임워크 상에 구현되어 있는 대부분의 스트림 처리용 컴퍼넌트들은 Spark Streaming (<ahref="https://spark.apache.org/docs/latest/streaming-programming-guide.html">참고사이트 바로가기</a>) 기반으로 구현되었습니다.
스트림방식 처리 엔진들은 데이터를 처리하는 시간이 길 경우 (데이터 처리 오퍼레이터가 많을 경우) delay 가 발생할 수 있습니다. 실시간 처리가 필요할 경우 실시간 스트림방식 처리 엔진을 사용할 것을 권장합니다.
스트림방식 처리 엔진들이 두 개 이상 포함된 워크플로우의 경우, 워크플로우의 속성 값 중 Batch 를 반드시 false 로 설정하셔야 합니다. Batch 를 true 로 설정할 경우 앞의 엔진이 종료되기 전까지 뒤에 엔진이 실행되지 않습니다.
## 실시간 스트림방식 처리엔진
엔진 타입 | 설명 | 사용 예제
--|--|--
**StreamJoin** | 실시간 스트림처리를 제공하기 위한 엔진컨테이너로서 하나 이상의 Reader와 Writer 탑재 가능. <br>StreamController, StreamPipeReader, StreamPipeWriter, StreamPipeOperator, StreamRunner로 구성. <br>Spark structed-streaming 처리에 사용 |<ahref="./2.6.5.TrafficTimeseriesProcessing.html">• 실시간 시계열 교통속도 센서스트림 처리 하기 </a>
**StreamPipe** | Deprecated by StreamJoin <br> 삭제예정 |
실시간 스트림방식 처리 엔진은 카프카 등을 이용해 시간정보가 포함된 스트림 데이터를 계속해서 받고 있고 (입력 테이블은 새로 들어온 데이터를 append 함), trigger 시 입력 테이블에서 데이터를 가져와 쿼리를 수행하고 결과 테이블을 출력하는 방식의 실시간 처리를 합니다.
현재 프레임워크 상에 구현되어 있는 대부분의 실시간 스트림 컴퍼넌트들은 Spark의 Structred Streaming (<ahref="https://spark.apache.org/docs/latest/structured-streaming-programming-guide.html">참고사이트 바로가기</a>) 기반으로 구현되었습니다.
실시간 스트림방식 처리 엔진은 데이터에 포함된 시간 정보를 기반으로 처리합니다. 현재 시간은 받은 데이터의 시간 중 가장 늦은 시간이 됩니다. 이 시간을 기준으로 늦게 들어오는 데이터를 얼마동안 고려해서 처리할 것인지를 watermark 설정을 통해 할 수 있습니다 (watermark 는 Reader 의 속성으로 설정합니다). 따라서 실시간 스트림방식 처리 엔진에서는 시간 순으로 들어오지 않는 데이터도 처리 가능합니다.
실시간 스트림방식 처리 엔진에서 결과 테이블을 출력하는 방식은 3가지가 존재합니다 (Writer 의 mode 속성으로 설정합니다). "complete" 모드는 결과 테이블의 전체 row 들을 모두 출력합니다. "update" 모드는 결과 테이블에서 쿼리 수행 결과 변화가 있는 row들을 모두 출력합니다. "append" 모드는 변화가 있는 row들 중 앞으로 변화가 더 이상 일어나지 않을 row 들을 출력합니다. "update" 모드와 "append" 모드는 watermark 설정과 관련이 있으며, watermark 설정을 하지 않았을 경우 출력값이 동일합니다. 현재는 "append" 모드를 사용할 것을 권장합니다.
실시간 스트림방식 처리 엔진은 single 쿼리를 수행하므로 복잡한 가공을 하기는 어렵습니다. window 설정을 통한 총계처리 등을 통해 무작위로 들어오는 데이터를 시간순으로 처리하고, 잡음을 스무딩하고, missing 데이터를 채우는 용도로 사용하고, 복잡한 가공은 스트림 처리 엔진을 통해 미니배치 형태로 수행하는 것을 권장합니다.
실시간 스트림방식 처리 엔진은 계속해서 데이터를 받고 있으므로 사용자가 종료 명령을 내릴 경우 종료됩니다. 종료는 **KSB 웹툴킷** 의 모니터링 화면에서 할 수 있습니다. 따라서 실시간 스트림 방식 처리 엔진들은 한번 실행할 수 있습니다 (엔진의 RUNTYPE 속성 지정).
실시간 스트림방식 처리 엔진들이 두 개 이상 포함된 워크플로우의 경우, 워크플로우의 속성 값 중 Batch 를 반드시 false 로 설정하셔야 합니다. Batch 를 true 로 설정할 경우 앞의 엔진이 종료되기 전까지 뒤에 엔진이 실행되지 않습니다.
## 온디맨드방식 처리엔진
엔진 타입 | 설명 | 사용 예제
--|--|--
**OnDemandServing** | OnDemand 요청에 응답을 제공하기 위한 엔진컨테이너로서, OnDemandOperator, OnDemandRunner, OnDemandController로 구성 |<ahref="./2.5.11.InceptionServingExample.html">• 온디맨드 방식으로 Inception 모델 서빙하기 </a><br><ahref="./2.6.3.TrafficOnDemandServing.html">• 온디맨드 방식으로 교통속도예측 모델 서빙하기 </a>
**OnDemandStream** | 삭제예정 |
**OnDemandPipeServing** | OnDemand 요청에 하나 이상의 오퍼레이터를 파이프라인 처리하여 응답을 제공하는 엔진으로서 OnDemandPipeReader, OnDemandPipeOperator, OnDemandRunner, OnDemandController로 구성. <br>주로 **융합서빙** 에 사용 |<ahref="./2.5.13.ConvergedServingEndToEndExample.html">• 융합 REST API 만들기 </a>
**OnDemandStreamServing** | OnDemand 요청에 서비스를 제공하기 위한 엔진컨테이너로서, OnDemandReader, OnDemandOperator, OnDemandRunner, OnDemandController로 구성 |<ahref="./2.5.8.RealtimeIngestToServingInTwoEngines.html">• 스트림 예측하여 REST 방식으로 서빙하기 </a>
**OnDemandExternalServing** | OnDemand 요청에 서비스를 제공하기 위한 엔진컨테이너로서, OnDemandExternalRunner로 구성. <br>주로 사용자가 작성한 Python 모듈을 API화 하기 위한 엔진 구성시 사용 |<ahref="./2.5.13.ConvergedServingEndToEndExample.html">• 융합 REST API 만들기 </a>
온디맨드방식 처리 엔진들은 텐서플로우 기반 딥러닝 모델, 사용자가 작성한 Python 모듈 등을 REST API 형태로 서비스 하는 용도로 사용합니다. 사용자 (클라이언트) 는 프레임워크 외부에서 쿼리를 요청하고, 결과를 응답받는 방식으로 사용합니다. Reader 를 통해 데이터를 받지 않는 경우 데이터를 쿼리에 포함하여 요청합니다.
텐서플로우 기반 딥러닝 모델은 TensorFlow Serving (<ahref="https://www.tensorflow.org/serving/">참고사이트 바로가기</a>) 을 통해 서비스 합니다. 따라서 사용자는 학습한 딥러닝 모델을 텐서플로우 서빙용으로 export 한 후 프레임워크에서 모델을 서빙합니다. 프레임워크와 연동하고 서빙을 하기 위해 파이썬 기반 텐서플로우 모델을 코딩하는 방법은 <ahref="./2.7.2.KSB_TfPyCoding_Guide.html">KSB 프레임워크와 연동을 위한 tensorflow 학습코드 작성하기</a> 를 참고합니다.
사용자가 작성한 Python 모듈은 프레임워크에서 제공하는 KSB Dockerize (<ahref="./2.7.1.KSB_Dockerize.html">참고자료 바로가기</a>) 를 이용하여 REST API로 만들고 서비스 합니다. KSB Dockerize 라이브러리는 사용자가 프로그래밍한 Python 함수를 Docker 이미지로 자동 변환할 뿐만 아니라 REST API 기능을 자동으로 추가하여, 사용자 Python 함수로 입력 데이터를 보내고 결과를 받을 수 있게 합니다.
또한 내부적으로 여러 개의 REST API 를 파이프라인하여 새로운 융합 REST API 를 만드는 것이 가능합니다. 사용자 (클라이언트) 는 프레임워크 외부에서 융합서빙 엔진으로 한번만 쿼리를 요청하면, 내부적으로 여러 개의 REST API 로 쿼리를 보내고 응답받은 결과를 총계처리 하여 사용자 (클라이언트) 에게 보내줍니다. 또는 REST API 로 쿼리를 보내고 응답받은 결과에 따라 다음 REST API 주소를 결정하여 (라우팅 기능) 쿼리를 보내고 응답받은 결과를 사용자 (클라이언트) 에게 보내줍니다.
온디맨드방식 처리 엔진은 계속해서 쿼리 요청을 대기하고 있으므로 사용자가 종료 명령을 내릴 경우 종료됩니다. 종료는 **KSB 웹툴킷** 의 모니터링 화면에서 할 수 있습니다. 따라서 온디맨드방식 처리 엔진들은 한번 실행할 수 있습니다 (엔진의 RUNTYPE 속성 지정).
온디맨드 방식 처리 엔진들이 두 개 이상 포함된 워크플로우의 경우, 워크플로우의 속성 값 중 Batch 를 반드시 false 로 설정하셔야 합니다. Batch 를 true 로 설정할 경우 앞의 엔진이 종료되기 전까지 뒤에 엔진이 실행되지 않습니다.
## 기타 엔진
엔진 타입 | 설명 | 사용 예제
--|--|--
**External** | 외부 실행플랫폼을 연동하기 위한 엔진컨테이너로서, BatchReader, BatchWriter, 하나 이상의 BatchOperator, BatchRunner, BatchController로 구성. <br>대표적으로 파이썬 기반 딥러닝학습용 엔진컨테이너의 경우 이 엔진을 활용 |<ahref="./2.5.4.BatchMLTrainInSingleEngine.html">• ML 모델 학습하기 </a><br><ahref="./2.5.5.BatchAutoMLTrainInSingleEngine.html">• AutoML 학습하기 </a>
**Generic** | 사용자가 정의할 수 있는 모든 요소를 이용 가능한 엔진컨테이너로서, 모든 종류의 Reader, Writer, Operator, Runner, Controller로 구성. <br>Generic 타입이므로 자유도가 높은 반면, 개발자가 오류를 범하지 않도록 응용을 만들때 신중히 구성해야 함.
|RandomForestClassifierPredictOperator |ksb.csle.component.operator.analysis.<br>RandomForestClassifierPredictOperator |RandomForest 분류 모델을 이용하여 label 예측 | |
|RandomForestClassifierTrainOperator |ksb.csle.component.operator.analysis.<br>RandomForestClassifierTrainOperator |RandomForest 분류 모델 생성 | |
|EqualDepthBinningOperator |ksb.csle.component.operator.cleaning.<br>EqualDepthBinningOperator |동일 빈도수 이산화 처리기 |<ahref="./operator/4.1.1.3.EqualDepthBinning_manual.html"> Link</a> |
|EqualWidthBinningOperator |ksb.csle.component.operator.cleaning.<br>EqualWidthBinningOperator |동일 폭 이산화 처리기 | <ahref="./operator/4.1.1.6.EqualWidthBinning_manual.html"> Link</a> |
|GeneralizedLinearRegressionOperator |ksb.csle.component.operator.cleaning.<br>GeneralizedLinearRegressionOperator |Generalized Linear Regression 처리기 | <ahref="./operator/4.1.1.9.GeneralizedLinearRegression_manual.html"> Link</a> |
|GroupByOperator |ksb.csle.component.operator.integration.<br>GroupByOperator |특정 조건에 따른 해당 column의 grouping 처리기 | <ahref="./operator/4.1.1.12.GroupBy_manual.html"> Link</a> |
|ColumnSelectOperator |ksb.csle.component.operator.reduction.<br>ColumnSelectOperator |column 선택 및 재배열 처리기 |<ahref="./operator/4.1.1.19.ColumnSelect_manual.html"> Link</a> |
|ColumnSelectWithFileOperator |ksb.csle.component.operator.reduction.<br>ColumnSelectWithFileOperator |파일로부터 칼럼 선택 및 재배열 처리기 | |
|DecisionTreeInductOperator |ksb.csle.component.operator.reduction.<br>DecisionTreeInductOperator |Decision Tree Induction을 이용한 column 선택처리기 |<ahref="./operator/4.1.1.20.DecisionTreeInduct_manual.html"> Link</a> |
|FilterOperator |ksb.csle.component.operator.reduction.<br>FilterOperator |특정 조건에 따른 row 필터 처리기 |<ahref="./operator/4.1.1.21.Filter_manual.html"> Link</a> |
|FilterUsingSqlOperator |ksb.csle.component.operator.reduction.<br>FilterUsingSqlOperator |SQL을 이용한 row 필터 처리기 |<ahref="./operator/4.1.1.22.FilterUsingSql_manual.html"> Link</a> |
|GroupByFilterOperator |ksb.csle.component.operator.reduction.<br>GroupByFilterOperator |총계처리 후 필터링 | |
|OrderByFilterOperator |ksb.csle.component.operator.reduction.<br>OrderByFilterOperator |정렬 후 필터링 | |
|PCAOperator |ksb.csle.component.operator.reduction.<br>PCAOperator |PCA를 이용한 column 생성 처리기 | <ahref="./operator/4.1.1.23.PCA_manual.html"> Link</a> |
|TimeWindowAggregateOperator |ksb.csle.component.operator.reduction.<br>TimeWindowAggregateOperator |Unit timestamp 정보를 이용하여 시간정보에 따라 aggregation 처리기 | |
###ksb.csle.component.operator.service
|컴포넌트 이름 | 구현 클래스명 | 설명 |
|---|---|---|
|ControlContextQueryOperator |ksb.csle.component.operator.service.<br>ControlContextQueryOperator |컨텍스트 및 제어 쿼리 처리기 | |
|TensorflowServingOperator |ksb.csle.component.operator.service.<br>TensorflowServingOperator |텐서플로우 모델 예측 처리기 | |
|WeatherQueryOperator |ksb.csle.component.operator.service.<br>WeatherQueryOperator |지식베이스 엔진 쿼리 처리기 | |
###ksb.csle.component.operator.transformation
|컴포넌트 이름 | 구현 클래스명 | 설명 | 관련 링크|
|---|---|---|---|
|AddConditionalColumnOperator |ksb.csle.component.operator.transformation.<br>AddConditionalColumnOperator |주어진 조건에 의해 새로운 column 생성 | |
|ChangeColumnDataTypeOperator |ksb.csle.component.operator.transformation.<br>ChangeColumnDataTypeOperator |column의 데이터 타입 변경 | |
|ExplodeColumnOperator |ksb.csle.component.operator.transformation.<br>ExplodeColumnOperator |array/map 타입 column의 각 element로부터 새로운 row 생성 | |
|FlattenOperator |ksb.csle.component.operator.transformation.<br>FlattenOperator |선택한 column의 모든 row을 하나의 row로 합치는 처리기 | |
|InterpolateOperator |ksb.csle.component.operator.transformation.<br>InterpolateOperator |일정한 간격으로 데이터를 보간하여 새로운 데이터프레임 생성 |<ahref="./operator/4.1.1.29.Interpolate_manual.html"> Link</a> |
|MinMaxScalingOperator |ksb.csle.component.operator.transformation.<br>MinMaxScalingOperator |최소/최대값을 기준으로 스케일링 처리기 | <ahref="./operator/4.1.1.30.MinMaxScaling_manual.html"> Link</a> |
|NullReplaceOperator |ksb.csle.component.operator.transformation.<br>NullReplaceOperator |공백문자나 Zero 값 Null 대체기 | |
|PivotOperator |ksb.csle.component.operator.transformation.<br>PivotOperator | 특정 column 내 값을 row의 schema 정보로 변환 처리기 |<ahref="./operator/4.1.1.33.Pivot_manual.html"> Link</a> |
|RenameColumnOperator |ksb.csle.component.operator.transformation.<br>RenameColumnOperator |column 이름 변경 | | |
|ReshapeWithTimeWindowOperator |ksb.csle.component.operator.transformation.<br>ReshapeWithTimeWindowOperator |Time window 값에 따라 shift된 row 생성 처리기 ||
|SelectWithTimeWindowOperator |ksb.csle.component.operator.transformation.<br>SelectWithTimeWindowOperator |Time window 값에 따라 shift된 row 선택 처리기 |<ahref="./operator/4.1.1.35.SelectWithTimeWindow_manual.html"> Link</a> |
|SplitColumnOperator |ksb.csle.component.operator.transformation.<br>SplitColumnOperator |array/map 타입 column의 element를 각 column으로 분리 | |
|StringIndexOperator |ksb.csle.component.operator.transformation.<br>StringIndexOperator |문자열 타입의 컬럼에 대한 색인 컬럼을 생성 | |
|TimeSynchronizeOperator |ksb.csle.component.operator.transformation.<br>TimeSynchronizeOperator |시간(timestamp)을 동기화하여 두 개의 데이터프레임 join | |
|TransposeOperator |ksb.csle.component.operator.transformation.<br>TransposeOperator |하나의 dataframe column을 row로 변환 처리기|<ahref="./operator/4.1.1.37.Transpose_manual.html"> Link</a> |
|VectorizeColumnOperator |ksb.csle.component.operator.transformation.<br>VectorizeColumnOperator |여러 column들을 모아서 하나의 vector 타입 column을 생성 | |
|SparkSessionOrStreamController |ksb.csle.component.controller.<br>SparkSessionOrStreamController |SparkSession/Stream 통합 컨트롤러 | |
|SparkStreamController |ksb.csle.component.controller.<br>SparkStreamController |스트림 데이터 처리를 위한 제어기 | |
|TensorflowServingController |ksb.csle.component.controller.<br>TensorflowServingController |텐서플로우 기반 서빙 컨트롤러 | |
|WindowedSparkSessionOr<br>StreamController |ksb.csle.component.controller.<br>WindowedSparkSessionOrStreamController |윈도우 기능이 있는 Spark과 스트림 데이터 컨트롤러 | |
|PySparkMLTrainer| - |Spark ML 학습용 컨트롤러| |
###ksb.csle.component.pipe.controller
|컴포넌트 이름 | 구현 클래스명 | 설명 |
|---|---|---|
|OnDemandCompositeServingRestfulController |ksb.csle.component.pipe.controller.<br>OnDemandCompositeServingRestfulController |온디멘드 Rest 방식의 API 융합서빙 컨트롤러 |
|OnDemandGenericController |ksb.csle.component.pipe.controller.<br>OnDemandGenericController |OnDemand 복합 컨트롤러 | |
HTTP 서버로부터 전달되어 오는 데이터를 입력 받기 위해 **HttpServerReader** 를 드래그 앤 드롭한 후 아래표와 같은 속성을 지정합니다.
field |value | 설명
--|---|--
ip | 0.0.0.0 | HTTP 서버의 주소를 입력합니다.
port | 53001 | HTTP 서버의 포트번호를 입력합니다.
####Writer
**MongodbWriter** 를 드래그앤 드롭한 후 아래표와 같은 속성을 지정합니다.
field |value | 설명
--|---|--
serverAddress | localhost:27017 | MongoDB 서버 주소 및 포트
dbName | examples | DB 명
collectionName | data_from_http | 생성할 테이블 명
cleaningDataInconsistency | true | 기존 테이블 삭제 및 재생성 여부
####Controller
**SparkSessionOrStreamController** 를 드래그앤 드롭한 후 아래 표와 같은 속성을 지정합니다.
field |value | 설명
--|---|--
setOperationPeriod | 3 | 스트리밍 처리 주기 (초 단위)
####Runner
**SimpleSparkRunner** 를 드래그앤 드롭합니다. 디폴트 속성값을 사용합니다.
####Operator
본 예제에서는 스트림 입력을 그대로 MongoDB에 적재하므로 Operator를 사용하지 않습니다. 만약 스트림 입력 데이터를 가공해야 할 경우, 필요한 Operator를 드래그앤 드롭하여 속성값을 지정한 후 사용할 수 있습니다.
<br>
![워크플로우 완성 화면](./images/2.5.1_workflow.png)
ksbuser@etri.re.kr 계정으로 접속하면 예제 워크플로우가 만들어져있습니다. **HttpToMongodbExample** 을 불러오기하여 사용할 수 있습니다.
![워크플로우 불러오기](./images/2.5.1_workflowLoad.png)
##워크플로우 실행 및 모니터링하기
### 워크플로우 실행하기
위에서 작성한 워크플로우를 실행하기 위해서는 워크플로우 편집기 상단의 실행 버튼(<spanstyle="color:#000000">▶</span>)을 클릭합니다. 본 예제는 스트림 데이터를 처리하므로 **Batch** 체크 박스를 해제하고 워크플로우를 실행합니다.
![워크플로우 실행화면](./images/2.5.1_workflowStart.png)
### 워크플로우 모니터링 하기
#### 워크플로우 상태 확인
KSB 웹툴킷 상단의 **Monitoring** 메뉴를 클릭하여 진행내역/상태모니터링 화면으로 이동합니다. **Workflow** 탭에서 작성한 워크플로우가 실행 중 (<spanstyle="color:#6698FF">Inprogress</span>)인 것을 확인할 수 있습니다. 이 화면에서 실행 중인 워크플로우를 종료(<spanstyle="color:red">◼</span>)하거나, 다시 실행(<spanstyle="color:#6698FF">▶</span>)할 수 있습니다.
![워크플로우 동작 상태 확인](./images/2.5.1_workflowMonitoring.png)
#### 워크플로우 로그 보기
**WorkFlow History** 탭을 선택하면, KSB 인공지능 프레임워크에서 워크플로우가 동작하며 발생시킨 로그 정보를 확인 할 수 있습니다.
매분, 매시간, 매일, 매주, 매월, 매년 등 주기적으로 파일로부터 데이터셋을 읽어 딥러닝 학습을 수행하고, 그 결과로 새롭게 학습된 모델의 신규버전이 담긴 디렉토리와 파일을 생성하는 예제입니다.
## 입력 데이터 준비하기
본 예제에서는 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 하는 부분 등이 구현되어야 합니다. 자세한 내용은 <ahref="https://csleoss.etri.re.kr/images/contents/manual_1.0/2.7.2.KSB_TfPyCoding_Guide.html">KSB 프레임워크와 연동을 위한 tensorflow 학습코드 작성하기</a> 를 참고합니다.
main 함수를 포함한 사용자 파이썬 코드에서 사용하는 라이브러리 파일 등은 동일한 폴더에 위치 시키거나 1 depth의 하위 폴더까지 작성 가능합니다.
##워크플로우 생성하기
워크플로우 편집화면을 이용하여 아래의 과정을 통해 워크플로우를 생성합니다.
- 워크플로우 속성
속성 | 값 | 비고
--|---|--
name | HourlyTensorflowTraining | 워크플로우 이름
description | 텐서플로우 기반 딥러닝 모델을 주기적으로 학습하는 예제 | 워크플로우를 설명하는 글
isBatch | true | 배치 처리를 하는 워크플로우 이므로, true 로 지정
verbose | false | 디버깅을 위해 로그정보를 보고자할 경우, true 로 지정
###엔진 선택
본 예제는 텐서플로우를 이용하여 배치 형태로 딥러닝 모델을 생성하는 워크플로우이므로 배치 엔진을 선택합니다. 그리고 딥러닝 모델을 주기적으로 생성하기 위해 **RUNTYPE** 을 **반복실행** 으로 설정합니다. **주기** 는 한번, 매분, 매시간, 매일, 매주, 매월, 매년 중에 하나로 설정합니다. 본 예제에서는 테스트를 위해 **매분** 으로 설정합니다. 매분은 테스트용으로 5분 단위로 엔진이 submit 되어 실행됩니다.
- 엔진 속성
순번 | 엔진 Type | NickName | RunType | 설명
--|---|---|---|--
1 | Batch | TrainEngine | 반복 실행 | 텐서플로우 모델 학습
####Reader
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)
####Writer
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
텐서플로우와 같은 외부시스템를 제어하기 위한 ExternalAnalysisController를 선택합니다.
####Runner
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
DLTrainOperator를 선택하고 아래표와 같은 속성을 지정합니다. modelPath 에 내부적으로 학습된 모델을 저장할 경로를 지정합니다. 이 값은 사용자 파이썬 코드(텐서플로우 모델을 정의하고 학습하는 코드)의 `--modelPath` 파라미터로 전달됩니다. 로컬 파일시스템 절대경로로 입력합니다.
또한, modelPath를 기준으로 최신버전의 폴더를 자동으로 생성하여 사용자 파이썬 코드의 `--model` 파라미터로 전달합니다. 모델의 버전은 0000 부터 시작하여 1씩 증가합니다. 따라서 예를 들면:
KSB 웹툴킷 상단 메뉴의 Monitoring 탭을 클릭하면 Workflow 탭이 선택되어있습니다. Workflow 탭에서는 실행한 워크플로우들의 목록 및 동작 상태를 확인하고 제어할 수 있습니다. 위에서 실행한 워크플로우 이름을 클릭하면 워크플로우의 각 엔진들의 동작 상태 (status) 를 확인할 수 있습니다.
![워크플로우 동작 상태 확인](./images/2.5.10_monitoring.png)
주기적으로 (5분 마다) 실행되므로, 동작 상태(status) 가 완료(Completed)였다가 실행 중일 때는 실행 중(Inprogress) 으로 바뀌는 것을 확인할 수 있습니다.
![워크플로우 동작 상태 확인](./images/2.5.10_monitoring2.png)
WorkFlow History 탭을 선택하면, 프레임워크에서 워크플로우가 동작하며 발생시킨 로그 정보를 확인 할 수 있습니다. 본 예제에서는 엔진이 5분 마다 동작한 내역을 확인할 수 있습니다.