Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
<!DOCTYPE html><html><head>
<title>1.1.IntroductionFramework</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="file:////home/csle/.atom/packages/markdown-preview-enhanced/node_modules/@shd101wyy/mume/dependencies/katex/katex.min.css">
<style>
/**
* prism.js Github theme based on GitHub's theme.
* @author Sam Clarke
*/
code[class*="language-"],
pre[class*="language-"] {
color: #333;
background: none;
font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.4;
-moz-tab-size: 8;
-o-tab-size: 8;
tab-size: 8;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
/* Code blocks */
pre[class*="language-"] {
padding: .8em;
overflow: auto;
/* border: 1px solid #ddd; */
border-radius: 3px;
/* background: #fff; */
background: #f5f5f5;
}
/* Inline code */
:not(pre) > code[class*="language-"] {
padding: .1em;
border-radius: .3em;
white-space: normal;
background: #f5f5f5;
}
.token.comment,
.token.blockquote {
color: #969896;
}
.token.cdata {
color: #183691;
}
.token.doctype,
.token.punctuation,
.token.variable,
.token.macro.property {
color: #333;
}
.token.operator,
.token.important,
.token.keyword,
.token.rule,
.token.builtin {
color: #a71d5d;
}
.token.string,
.token.url,
.token.regex,
.token.attr-value {
color: #183691;
}
.token.property,
.token.number,
.token.boolean,
.token.entity,
.token.atrule,
.token.constant,
.token.symbol,
.token.command,
.token.code {
color: #0086b3;
}
.token.tag,
.token.selector,
.token.prolog {
color: #63a35c;
}
.token.function,
.token.namespace,
.token.pseudo-element,
.token.class,
.token.class-name,
.token.pseudo-class,
.token.id,
.token.url-reference .token.variable,
.token.attr-name {
color: #795da3;
}
.token.entity {
cursor: help;
}
.token.title,
.token.title .token.punctuation {
font-weight: bold;
color: #1d3e81;
}
.token.list {
color: #ed6a43;
}
.token.inserted {
background-color: #eaffea;
color: #55a532;
}
.token.deleted {
background-color: #ffecec;
color: #bd2c00;
}
.token.bold {
font-weight: bold;
}
.token.italic {
font-style: italic;
}
/* JSON */
.language-json .token.property {
color: #183691;
}
.language-markup .token.tag .token.punctuation {
color: #333;
}
/* CSS */
code.language-css,
.language-css .token.function {
color: #0086b3;
}
/* YAML */
.language-yaml .token.atrule {
color: #63a35c;
}
code.language-yaml {
color: #183691;
}
/* Ruby */
.language-ruby .token.function {
color: #333;
}
/* Markdown */
.language-markdown .token.url {
color: #795da3;
}
/* Makefile */
.language-makefile .token.symbol {
color: #795da3;
}
.language-makefile .token.variable {
color: #183691;
}
.language-makefile .token.builtin {
color: #0086b3;
}
/* Bash */
.language-bash .token.keyword {
color: #0086b3;
}
/* highlight */
pre[data-line] {
position: relative;
padding: 1em 0 1em 3em;
}
pre[data-line] .line-highlight-wrapper {
position: absolute;
top: 0;
left: 0;
background-color: transparent;
display: block;
width: 100%;
}
pre[data-line] .line-highlight {
position: absolute;
left: 0;
right: 0;
padding: inherit 0;
margin-top: 1em;
background: hsla(24, 20%, 50%,.08);
background: linear-gradient(to right, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0));
pointer-events: none;
line-height: inherit;
white-space: pre;
}
pre[data-line] .line-highlight:before,
pre[data-line] .line-highlight[data-end]:after {
content: attr(data-start);
position: absolute;
top: .4em;
left: .6em;
min-width: 1em;
padding: 0 .5em;
background-color: hsla(24, 20%, 50%,.4);
color: hsl(24, 20%, 95%);
font: bold 65%/1.5 sans-serif;
text-align: center;
vertical-align: .3em;
border-radius: 999px;
text-shadow: none;
box-shadow: 0 1px white;
}
pre[data-line] .line-highlight[data-end]:after {
content: attr(data-end);
top: auto;
bottom: .4em;
}html body{font-family:"Helvetica Neue",Helvetica,"Segoe UI",Arial,freesans,sans-serif;font-size:16px;line-height:1.6;color:#333;background-color:#fff;overflow:initial;box-sizing:border-box;word-wrap:break-word}html body>:first-child{margin-top:0}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{line-height:1.2;margin-top:1em;margin-bottom:16px;color:#000}html body h1{font-size:2.25em;font-weight:300;padding-bottom:.3em}html body h2{font-size:1.75em;font-weight:400;padding-bottom:.3em}html body h3{font-size:1.5em;font-weight:500}html body h4{font-size:1.25em;font-weight:600}html body h5{font-size:1.1em;font-weight:600}html body h6{font-size:1em;font-weight:600}html body h1,html body h2,html body h3,html body h4,html body h5{font-weight:600}html body h5{font-size:1em}html body h6{color:#5c5c5c}html body strong{color:#000}html body del{color:#5c5c5c}html body a:not([href]){color:inherit;text-decoration:none}html body a{color:#08c;text-decoration:none}html body a:hover{color:#00a3f5;text-decoration:none}html body img{max-width:100%}html body>p{margin-top:0;margin-bottom:16px;word-wrap:break-word}html body>ul,html body>ol{margin-bottom:16px}html body ul,html body ol{padding-left:2em}html body ul.no-list,html body ol.no-list{padding:0;list-style-type:none}html body ul ul,html body ul ol,html body ol ol,html body ol ul{margin-top:0;margin-bottom:0}html body li{margin-bottom:0}html body li.task-list-item{list-style:none}html body li>p{margin-top:0;margin-bottom:0}html body .task-list-item-checkbox{margin:0 .2em .25em -1.8em;vertical-align:middle}html body .task-list-item-checkbox:hover{cursor:pointer}html body blockquote{margin:16px 0;font-size:inherit;padding:0 15px;color:#5c5c5c;border-left:4px solid #d6d6d6}html body blockquote>:first-child{margin-top:0}html body blockquote>:last-child{margin-bottom:0}html body hr{height:4px;margin:32px 0;background-color:#d6d6d6;border:0 none}html body table{margin:10px 0 15px 0;border-collapse:collapse;border-spacing:0;display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}html body table th{font-weight:bold;color:#000}html body table td,html body table th{border:1px solid #d6d6d6;padding:6px 13px}html body dl{padding:0}html body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:bold}html body dl dd{padding:0 16px;margin-bottom:16px}html body code{font-family:Menlo,Monaco,Consolas,'Courier New',monospace;font-size:.85em !important;color:#000;background-color:#f0f0f0;border-radius:3px;padding:.2em 0}html body code::before,html body code::after{letter-spacing:-0.2em;content:"\00a0"}html body pre>code{padding:0;margin:0;font-size:.85em !important;word-break:normal;white-space:pre;background:transparent;border:0}html body .highlight{margin-bottom:16px}html body .highlight pre,html body pre{padding:1em;overflow:auto;font-size:.85em !important;line-height:1.45;border:#d6d6d6;border-radius:3px}html body .highlight pre{margin-bottom:0;word-break:normal}html body pre code,html body pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}html body pre code:before,html body pre tt:before,html body pre code:after,html body pre tt:after{content:normal}html body p,html body blockquote,html body ul,html body ol,html body dl,html body pre{margin-top:0;margin-bottom:16px}html body kbd{color:#000;border:1px solid #d6d6d6;border-bottom:2px solid #c7c7c7;padding:2px 4px;background-color:#f0f0f0;border-radius:3px}@media print{html body{background-color:#fff}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{color:#000;page-break-after:avoid}html body blockquote{color:#5c5c5c}html body pre{page-break-inside:avoid}html body table{display:table}html body img{display:block;max-width:100%;max-height:100%}html body pre,html body code{word-wrap:break-word;white-space:pre}}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview .pagebreak,.markdown-preview .newpage{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers>code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows>span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center !important}.markdown-preview:not([for="preview"]) .code-chunk .btn-group{display:none}.markdown-preview:not([for="preview"]) .code-chunk .status{display:none}.markdown-preview:not([for="preview"]) .code-chunk .output-div{margin-bottom:16px}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for="html-export"]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0}@media screen and (min-width:914px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px + 2em)}}@media screen and (max-width:914px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{font-size:14px !important;padding:1em}}@media print{html body[for="html-export"]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for="html-export"]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,0.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{padding:0 1.6em;margin-top:.8em}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc li{margin-bottom:.8em}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{list-style-type:none}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% - 300px);padding:2em calc(50% - 457px - 150px);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for="html-export"]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for="html-export"]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
/* Please visit the URL below for more information: */
/* https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */
</style>
</head>
<body for="html-export">
<div class="mume markdown-preview ">
<h1 class="mume-header" id="ksb-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-%EA%B0%9C%EC%9A%94">KSB 인공지능 프레임워크 개요</h1>
<hr>
<p>KSB 인공지능 프레임워크는 다양한 학습모델과 지식/경험을 선택조합하여 서비스를 생성할 수 있는 DIY 자가학습형 지식융합 인공지능 서비스 프레임워크를 지향합니다.<br>
분산병렬 인프라를 기반으로, 다양한 데이터 소스로부터 도메인의 응용서비스를 제공하기까지의 전주기적 솔루션을 지향합니다. 데이터의 수집-적재-처리-분석-서빙에 이르는 시스템을 구성할 수 있는 프레임워크 기능과 이를 실행하고 운영할 수 있는 플랫폼 기능을 제공합니다.</p>
<p>KSB 인공지능 프레임워크는 프레임워크 개발자들이 기능을 확장할 수 있도록 컴퍼넌트와 API를 개발할 수 있는 인터페이스를 제공합니다. 또한 개발자들에 의해서 만들어진 컴퍼넌트나 API 들을 이용하여 응용을 개발하고 실행하도록 하는 사용자 인터페이스를 제공합니다.</p>
<p>KSB 인공지능 프레임워크의 <strong>주요 이해관계자</strong> 는 다음과 같습니다.</p>
<ul>
<li>
<p><strong><span style="font-size: 14pt; color:green">응용 개발자</span></strong> KSB 인공지능 프레임워크에 탑재된 모듈 및 소프트웨어 컴퍼넌트를 이용하여 응용을 개발하고 이를 실행하여 최종사용자에게 응용을 이용한 서비스를 제공하고자 하는 자</p>
</li>
<li>
<p><strong><span style="font-size: 14pt; color:green">개발자</span></strong> 프레임워크 기능을 확장할 수 있도록 컴퍼넌트와 API를 개발하는 자로서 <strong>소프트웨어 컴퍼넌트 개발자</strong>, <strong>파이썬 모듈 개발자</strong>, <strong>지식전문가</strong> 가 포함됩니다.</p>
<ul>
<li><strong>소프트웨어 컴퍼넌트 개발자</strong> 프레임워크의 개발자 인터페이스를 통하여 새로운 소프트웨어 컴퍼넌트를 개발하여 프레임워크에 탑재하는 자</li>
<li><strong>파이썬 모듈 개발자</strong> 프레임워크에서 제시하는 인터페이스를 만족하는 파이썬 모듈을 개발하여 프레임워크에 탑재하는 자</li>
<li><strong>지식 전문가</strong> 경험이나 지식을 구조화하여 저장하고 이를 활용할 수 있도록 인터페이스를 생성하여 탑재하는 자</li>
</ul>
</li>
<li>
<p><strong><span style="font-size: 14pt; color:green">운용자</span></strong> 프레임워크를 통해 실행된 시스템(엔진)들을 중단없이 안정적으로 실행되도록 자원을 할당하고 운영하고자 하는 자</p>
</li>
<li>
<p><strong><span style="font-size: 14pt; color:green">관리자</span></strong> 프레임워크 및 웹툴킷 사용자에 대한 관리 및 시스템 전반적인 관리를 담당하는 자</p>
</li>
<li>
<p><strong><span style="font-size: 14pt; color:green">최종사용자</span></strong> 프레임워크를 통해 실행된 응용 시스템으로부터 제공되는 서비스를 최종적으로 제공받는 자</p>
</li>
</ul>
<hr>
<h2 class="mume-header" id="%EC%A3%BC%EC%9A%94%EA%B0%9C%EB%85%90">주요개념</h2>
<p>KSB 인공지능 프레임워크는 유기적인 관계에 있는 일련의 작업의 흐름을 <strong>워크플로우</strong> 라는 개념으로 정의합니다. 워크플로우는 독립적인 실행 시스템에 해당하는 단위인 <strong>엔진</strong> 을 하나 이상 선언함으로써 정의될 수 있습니다. 독립적인 논리 배포단위인 <strong>엔진</strong> 은 엔진의 틀에 해당하는 <strong>엔진 컨테이너</strong> 에 필요한 <strong>컴퍼넌트</strong> 를 선언함으로써 정의됩니다. 이러한 과정에 의해 정의된 워크플로우 스펙에 따라 프레임워크는 실행시스템을 동적으로 구성하고, 이를 도메인의 응용에 필요한 서비스를 제공하도록 클러스터 상에 실행합니다.</p>
<h3 class="mume-header" id="%EC%9B%8C%ED%81%AC%ED%94%8C%EB%A1%9C%EC%9A%B0">워크플로우</h3>
<p>일련의 작업을 정의하고 실행하기 위한 단위입니다. 하나의 워크플로우는 하나 이상의 엔진컨테이너의 정의로 구성될 수 있으며, 워크플로우를 구성하는 각각의 엔진들은 배치실행과 동시실행 방식으로 구동될 수 있습니다.</p>
<ul>
<li><strong>배치실행 방식</strong> 엔진의 순서정보에 의해 순차적으로 일련의 엔진이 실행되고 종료되는 방식</li>
<li><strong>동시실행 방식</strong> 워크플로우에 정의된 엔진이 동시에 실행되는 방식</li>
</ul>
<h3 class="mume-header" id="%EC%97%94%EC%A7%84%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88">엔진컨테이너</h3>
<p>엔진컨테이너는 워크플로우 상에서 필요한 목적에 맞게 구성할 수 있는 하나의 실행 시스템인 엔진에 대한 틀로서, 엔진컨터이너 상에 컴퍼넌트들을 탑재하여 각 컴퍼넌트의 값을 설정하여 엔진에 대한 정의를 합니다. 엔진의 유형은 현재 총 12 종이 제공되고 있으며, 자세한 내용은 <a href="./2.4.1.EngineTypeList.html">엔진 유형 목록</a>을 참조하시기 바랍니다.</p>
<h3 class="mume-header" id="%EC%BB%B4%ED%8D%BC%EB%84%8C%ED%8A%B8">컴퍼넌트</h3>
<p>엔진컨테이너를 구성하는 구성체로서, 5가지의 컴퍼넌트의 유형이 존재하며 각각 다음과 같은 역할을 수행합니다.</p>
<ul>
<li><strong>Reader</strong> 데이터 발생지로부터 데이터를 읽어오기 위한 컴퍼넌트 유형</li>
<li><strong>Writer</strong> 데이터 저장소로 데이터를 출력하기 위한 컴퍼넌트의 유형</li>
<li><strong>Operator</strong> 데이터를 처리하기 위한 컴퍼넌트의 유형</li>
<li><strong>Runner</strong> 실행 런타임을 실행하기 위한 컴퍼넌트 유형</li>
<li><strong>Controller</strong> 엔진컨테이너 내의 처리절차를 구성하고 실행을 주관하는 컴퍼넌트의 유형</li>
</ul>
<p>현재 프레임워크 상에는 데이터처리/학습/서빙 관련 총 73종의 컴퍼넌트가 탑재되어 있으며, 자세한 내용은 <a href="./2.4.2.ComponentList.html">컴퍼넌트 목록</a>을 참조하시기 바랍니다. 개략적인 분류는 다음과 같습니다.</p>
<ul>
<li><strong>데이터 수집/처리 컴퍼넌트 (62종)</strong>: 수집/적재 17종, 미니배치 32종, 실시간 처리 13종</li>
<li><strong>학습 SW (2종)</strong>: 분산텐서플로우 스케툴러(CoDDL), AutoSparkML</li>
<li><strong>모델서빙 관련 컴퍼넌트 (3종)</strong>: 온디맨드 DL 모델 서빙, 스트림 DL 모델서빙, 스트림 ML모델서빙</li>
<li><strong>융합서빙 관련 컴퍼넌트 (6종)</strong>: 컨트롤러 1종, 오퍼레이터 5종</li>
</ul>
<hr>
<h2 class="mume-header" id="ksb-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-sw-v1903-%EA%B5%AC%EC%84%B1%EC%9A%94%EC%86%8C">KSB 인공지능 프레임워크 SW v19.03 구성요소</h2>
<h3 class="mume-header" id="ksb-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8">KSB 클라이언트</h3>
<p><strong>KSB 클라이언트</strong> 는 워크플로우를 작성하고, 이를 <strong>KSB 프레임워크</strong> 에서 구동하도록 지시하기 위해 <strong>KSB 프론트엔드</strong> 로 요청하는 역할을 수행하는 도구입니다. <strong>KSB 프레임워크</strong> 의 클라이언트 모듈은 웹기반의 클라이언트 모듈인 <strong>KSB 웹툴킷</strong> 과 스칼라 기반의 클라이언트 모듈인 <strong>KSB Client SDK</strong> 두 가지 형태로 제공됩니다.</p>
<h4 class="mume-header" id="ksb-%EC%9B%B9%ED%88%B4%ED%82%B7">KSB 웹툴킷</h4>
<p><strong>KSB 웹툴킷</strong> 은 워크플로우를 정의할 수 있는 편집기, 워크플로우를 실행하고 제어하기 위한 모니터링, 데이터의 업로드 및 시각화 등을 웹 방식의 그래픽 환경에서 수행할 수 있도록 제공되는 클라이언트 모듈입니다. 자세한 내용은 <a href="./2.1.IntroductionWebToolkit.html">KSB 웹툴킷 소개</a> 를 참조하시기 바랍니다.</p>
<h4 class="mume-header" id="ksb-client-sdk">KSB Client SDK</h4>
<p><strong>KSB Client SDK</strong> 는 스칼라(자바) 기반의 클라이언트 개발도구로서, 개발자가 <strong>KSB 프레임워크</strong> 상에서 실행하고자 하는 워크플로우를 개발할 수 있는 환경과 작성한 워크플로우를 실행할 수 있는 API 를 함께 제공합니다 (자세한 설명은 <a href="./3.1.HowToConfigureDevelopEnvironment.html">KSB 프레임워크 SW 개발환경 구성</a>을 참조). 또한 <strong>KSB 프레임워크</strong> 상에 실행가능한 다양한 종류의 워크플로우 예제를 포함하고 있으므로, 이를 참조하여 다양한 워크플로우 시나리오 예제를 작성할 수 있습니다.</p>
<h3 class="mume-header" id="ksb-%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C">KSB 프론트엔드</h3>
<p><strong>KSB 프론트엔드</strong> 는 <strong>KSB 웹툴킷</strong> 이나 <strong>KSB Client SDK</strong> 를 이용하여 작성된 워크플로우 스펙을 받아서 <strong>KSB 오케스트레이터</strong> 로 넘겨 줌으로써 워크플로우를 수행하도록 하는 매개역할을 수행합니다. 이 외에도 사용자 관리나 저장소 관리 등의 다양한 요청에 대해 대응하는 front-end 로서의 역할을 수행합니다.</p>
<h3 class="mume-header" id="ksb-%EB%A9%94%EC%84%B8%EC%A7%80-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4">KSB 메세지 인터페이스</h3>
<p><strong>KSB 메세지 인터페이스</strong> 는 각 컴퍼넌트들에 대한 속성값을 정의하고 값을 전달하기 위한 <strong>KSB 메세지 인터페이스</strong> 객체에 해당합니다.</p>
<h3 class="mume-header" id="ksb-%EC%98%A4%EC%BC%80%EC%8A%A4%ED%8A%B8%EB%A0%88%EC%9D%B4%ED%84%B0">KSB 오케스트레이터</h3>
<p><strong>KSB 프론트엔드</strong> 로부터 넘겨받은 워크플로우 사양에 따라 필요한 엔진을 구성하여 실행하도록 요청하고, 각각의 엔진에 대한 구동과 종료 및 제어를 수행하는 등의 역할을 수행합니다.</p>
<h3 class="mume-header" id="ksb-%EC%97%94%EC%A7%84-%EC%BB%B4%ED%8D%BC%EB%84%8C%ED%8A%B8">KSB 엔진 컴퍼넌트</h3>
<p>엔진컨테이너를 구성하는 구성체로서 5가지 유형이 있으며, 이들 5가지의 컴퍼넌트의 조합에 의해 엔진이 생성됩니다. 현재 <strong>KSB 프레임워크</strong> 에는 약 73종 이상의 컴퍼넌트가 구현되어 있습니다. ( 상기 <strong>컴퍼넌트</strong> 설명 참조 )</p>
<h3 class="mume-header" id="ksb-%EC%97%B0%EB%8F%99%ED%94%8C%EB%9E%AB%ED%8F%BC">KSB 연동플랫폼</h3>
<p><strong>KSB 프레임워크</strong> 는 목적에 따른 다양한 외부 실행 플랫폼과 연동할 수 있는 인터페이스를 제공합니다. 각각의 <strong>KSB 연동플랫폼</strong> 은 <strong>엔진컴퍼넌트</strong> 중 <strong>Runner</strong> 에 의해 연동과 실행이 제어됩니다. 현재 <strong>KSB 프레임워크</strong> 에는 Spark, Tensorflow, Tensorflow Serving, Jena Knowledge Base 등을 연동하기 위한 모듈이 각각의 <strong>Runner 컴퍼넌트</strong> 로 구현되어 있습니다.</p>
<h3 class="mume-header" id="ksb-%EC%A0%80%EC%9E%A5%EC%86%8C">KSB 저장소</h3>
<p><strong>KSB 프레임워크</strong> 는 수집한 데이터를 적재하기 위한 저장소인 <strong>데이터 저장소</strong>, 자원이나 응용에 필요한 자원이나 룰, 컨텍스트 정보 등을 저장할 수 있는 <strong>자원/룰 저장소</strong>, 프레임워크 자체적인 워크플로우를 보관하기 위한 <strong>워크플로우 저장소</strong>, 크게 3가지 유형의 저장소 기능을 제공합니다.</p>
<hr>
<h2 class="mume-header" id="ksb-%EB%B0%B0%ED%8F%AC">KSB 배포</h2>
<p><strong>KSB 인공지능 프레임워크</strong> 는 <a href="https://csleoss.etri.re.kr">KSB 인공지능 프레임워크 웹페이지</a> 를 통해 <strong>툴박스 버전</strong>과 <strong>클러스터 버전</strong>, 두 가지의 배포버전에 대한 설치방법을 제공하고 있습니다.</p>
<h3 class="mume-header" id="ksb-%ED%88%B4%EB%B0%95%EC%8A%A4">KSB 툴박스</h3>
<p><strong>KSB 툴박스</strong> 는 <strong>KSB 웹툴킷</strong> 과 stand-alone 버전의 <strong>KSB 런타임(실행환경)</strong> 을 지원하는 툴박스 형태의 <strong>KSB 프레임워크</strong> 로서, 사용자의 로컬환경에서 KSB 프레임워크 실행환경을 쉽고 빠르게 구성하여 사용하기 위한 환경을 제공합니다.</p>
<h3 class="mume-header" id="ksb-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0">KSB 클러스터</h3>
<p><strong>KSB 클러스터</strong> 는 실제 클러스터 환경에서 운영하기 위한 배포 형태로서 <strong>KSB 웹툴킷</strong> 과 분산병렬 버전의 <strong>KSB 런타임</strong> 을 지원하는 <strong>KSB 프레임워크</strong> 로 구성되어 있습니다. 설치와 사용에 관한 자세한 사항은 <a href="./3.1.HowToConfigureDevelopEnvironment.html">KSB 인공지능 프레임워크 설치</a> 매뉴얼을 참조하시기 바랍니다.</p>
</div>
<div class="md-sidebar-toc"><ul>
<li><a href="#ksb-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-%EA%B0%9C%EC%9A%94">KSB 인공지능 프레임워크 개요</a>
<ul>
<li><a href="#%EC%A3%BC%EC%9A%94%EA%B0%9C%EB%85%90">주요개념</a>
<ul>
<li><a href="#%EC%9B%8C%ED%81%AC%ED%94%8C%EB%A1%9C%EC%9A%B0">워크플로우</a></li>
<li><a href="#%EC%97%94%EC%A7%84%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88">엔진컨테이너</a></li>
<li><a href="#%EC%BB%B4%ED%8D%BC%EB%84%8C%ED%8A%B8">컴퍼넌트</a></li>
</ul>
</li>
<li><a href="#ksb-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-sw-v1903-%EA%B5%AC%EC%84%B1%EC%9A%94%EC%86%8C">KSB 인공지능 프레임워크 SW v19.03 구성요소</a>
<ul>
<li><a href="#ksb-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8">KSB 클라이언트</a>
<ul>
<li><a href="#ksb-%EC%9B%B9%ED%88%B4%ED%82%B7">KSB 웹툴킷</a></li>
<li><a href="#ksb-client-sdk">KSB Client SDK</a></li>
</ul>
</li>
<li><a href="#ksb-%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C">KSB 프론트엔드</a></li>
<li><a href="#ksb-%EB%A9%94%EC%84%B8%EC%A7%80-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4">KSB 메세지 인터페이스</a></li>
<li><a href="#ksb-%EC%98%A4%EC%BC%80%EC%8A%A4%ED%8A%B8%EB%A0%88%EC%9D%B4%ED%84%B0">KSB 오케스트레이터</a></li>
<li><a href="#ksb-%EC%97%94%EC%A7%84-%EC%BB%B4%ED%8D%BC%EB%84%8C%ED%8A%B8">KSB 엔진 컴퍼넌트</a></li>
<li><a href="#ksb-%EC%97%B0%EB%8F%99%ED%94%8C%EB%9E%AB%ED%8F%BC">KSB 연동플랫폼</a></li>
<li><a href="#ksb-%EC%A0%80%EC%9E%A5%EC%86%8C">KSB 저장소</a></li>
</ul>
</li>
<li><a href="#ksb-%EB%B0%B0%ED%8F%AC">KSB 배포</a>
<ul>
<li><a href="#ksb-%ED%88%B4%EB%B0%95%EC%8A%A4">KSB 툴박스</a></li>
<li><a href="#ksb-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0">KSB 클러스터</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<a id="sidebar-toc-btn">≡</a>
<script>
document.body.setAttribute('html-show-sidebar-toc', true)
var sidebarTOCBtn = document.getElementById('sidebar-toc-btn')
sidebarTOCBtn.addEventListener('click', function(event) {
event.stopPropagation()
if (document.body.hasAttribute('html-show-sidebar-toc')) {
document.body.removeAttribute('html-show-sidebar-toc')
} else {
document.body.setAttribute('html-show-sidebar-toc', true)
}
})
</script>
</body></html>