이준영 (현 소프트웨어인라이프 연구원)
OpenShfit와 CSB.IO
인프라 비용을 절감하고 애플리케이션 개발속도를 향상 시킬 수 있는 방안으로 PaaS와 레드햇의 오픈 소스 솔루션인 OpenShift에 대하여 설명한다.
그리고, CSB.IO와 OpenShift의 미래 모습에 대해서도 소개한다.
- The Cloud Life Seminar 2014 발표 내용
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...hoondong kim
[Tensorflow-KR Offline 세미나 발표자료]
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps Cycle 구성 방법론. (Azure Docker PaaS 위에서 1만 TPS Tensorflow Inference Serving 방법론 공유)
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발Jeongkyu Shin
머신러닝 및 데이터 과학 분야의 컴퓨팅 수요는 해가 갈수록 급증하고 있습니다. 이와 더불어 분산처리 기술, 데이터 파이프라이닝 및 개발 환경 스택 관리 등의 관련된 다양한 이슈들 또한 엄청나게 늘어나고 있습니다. 머신러닝 모델의 기하급수적인 모델 복잡도 증가 추세와 마찬가지로, 모델 학습을 위한 환경 관리 또한 갈수록 복잡도가 높아지는 추세입니다.
이 세션에서는 이러한 문제를 해결하기 위해 python 언어 기반의 분산처리 스케쥴링/오케스트레이션 미들웨어 플랫폼을 개발한 4년간의 과정에서 겪은 다양한 문제들에 대해 다룹니다. 2015년 컨테이너 기반의 고밀도 분산처리 플랫폼 설계 및 프로토타이핑 과정을 PyCon KR에서 발표한 이후, 실제 구현 및 오픈소스화, 안정화를 거치며 겪은 다양한 기술적/비기술적 문제들에 대한 경험을 공유합니다.
기술적으로는 최근 몇 년 간의 클러스터 플랫폼 관련 기술의 진보와 함께 탄생한 다양한 도구들과, 이러한 도구들을 python 기반으로 엮어내기 위해 사용하고 개발한 다양한 오픈소스들을 다룹니다. Python 기반의 컨테이너 스케쥴링 및 오케스트레이션 과정의 구현과, 다양한 프로그래밍 언어로 만든 SDK를 graphQL을 이용하여 연동하는 과정에서의 몇몇 유의점을 설명합니다. 아울러 python 기반의 SDK를 다양한 언어로 포팅했던 경험을 간단하게 안내합니다.
플랫폼을 개발하는 중 등장한 TensorFlow, PyTorch 등의 다양한 머신러닝 프레임워크들을 도입하며 겪은 문제와 해결 과정에 대해서도 나눕니다. 연구 분야에는 Python 2.7 기반의 프레임워크들이 여전히 많습니다. 이러한 프레임워크 및 라이브러리의 지원을 위하여 Python 2 기반의 프레임워크와 Python 3.7로 구현한 컨테이너 인터페이스를 단일 컨테이너 환경에 중복 빌드 및 상호 간섭 없이 공존시키기 위해 개발한 아이디어를 소개합니다.
마지막으로 Python 기반의 프레임워크를 개발, 배포 및 상용화 하는 과정에서 겪은 다양한 어려움을 소개합니다. 솔루션을 배포 및 보급할 때 겪는 다양한 런타임, 하드웨어 환경 및 개인 정보 보호를 위한 폐쇄망 대상의 디플로이 등에 대응하기 위하여 Python 응용프로그램을 단독 실행용으로 패키징하는 과정에서 겪은 팁들을 설명합니다. 또한 GUI 빌드 및 Python, Go 및 C++을 함께 사용한 드라이버 가상화 레이어 개발 등의 내용도 살짝 다룹니다.
이 슬라이드는 PyCon KR 2019의 발표 슬라이드입니다. ( https://www.pycon.kr/program/talk-detail?id=138 )
**** 도서관 프로그램 완성 ㅋ(서버(관리자), 클라이언트)
2015/7/22 ~ 2015/8/6 (약 2주)
개발자 : 안병현, 한골드 @한정수
사용한 언어 : 개발자
- JAVA JDK 1.8(Swing, Socket) : 한정수
- C#(WPF) : 안병현
- C/C++(Socket, DLL-Socket) : 안병현, 한정수
* 기능
관리자
(도서 추가/도서 검색/신청 도서 구입/고객 추가/고객 찾기/가입 허가/지출 및 수입 확인)
클라이언트
(도서 검색/대여/반납/도서 신청/회원 가입/로그인)
* Linux(Server)
- Cent OS Release 6.1
- Mysql(5.1.73, RDB)
- GCC version-4.4.7
*VM으로 돌리지 않음.
* 구성
1. JAVA(Swing, Socket)
자바 Swing에 Socket으로 서버소켓과 연결하여 입력된 명령(Command)에 따라 서버에서
해당하는 데이터를 송수신함.
2. C#
C# 소스에서는 주로 UI를 만들기 위한 소스를 만들었고, 소켓 통신을 C에 의존하였음.
이른 바인딩으로 C/C++로 만든 DLL을 참조하였고, 마찬가지로 입력된 명령에 따라 서버에서
해당하는 데이터를 송수신함.
3. C(리눅스 서버측)
-1 JAVA
자바와 통신하는 소스는 do~while 구문으로 하나의 명령에 하나의 소켓으로 일대일 방식으로 구성
* 구분자 '/'
-2 C#
C#과 통신하는 소스는 while 구문으로 해당 클라이언트에 하나의 쓰레드를 할당하였고,
전체 클라이언트 소켓관리는 int형 배열을 만들어 관리함.
* 구분자 ','
* 권장 사양
- JDK 설치
- .NET Framework 설치
- Windows 지원하는 OS
* 생각해니까 굉장히 쓸모 없는 도서관 프로그램임
* 포트 포워딩을 하지않아서 그런지 다른 네트워크 망에서는 리눅스 서버에 접근하지 못함(방화벽을 허물어도 안됨 ㅅㅂ..)
+ C/C++로 DLL 어셈블리 만드는게 처음이라서 개짜증났음. 게다가 C가 CLS에 맞지 않아서 자료형 맞추려다 보니 미치는줄
+ Server socket 예제가 채팅만 줠라게 많아서 미치는줄
Machine Learning Model Serving with Backend.AIJeongkyu Shin
머신러닝 모델을 서비스 단에서 서빙하는 것은 손이 많이 갑니다.
서비스 과정을 편리하게 하기 위하여 TensorFlow serving 등 서빙 과정을 돕는 다양한 도구들이 공개되고 개발되고 있습니다만, 여전히 서빙 과정은 귀찮고 불편합니다. 이 세션에서는 Backend.AI 와 TensorFlow serving을 이용하여 간단하게 TensorFlow 모델을 서빙하는 법에 대해 다루어 봅니다.
Backend.AI 서빙 모드를 소개하고, 여러 TF serving 모델 등을 Backend.AI 로 서비스하는 과정을 통해 실제로 사용하는 법을 알아봅니다.
Serving the machine learning model at the service level is a lot of work. A variety of tools are being developed and released to facilitate the process of serving. TensorFlow serving is the greatest one for serving now, but the docker image baking-based serving process is not easy, not flexible and controllable enough. In this session, I will discuss how to simplify the serving process of TensorFlow models by using Backend.AI and TensorFlow serving.
I will introduce the Backend.AI serving mode (on the trunk but will be official since 1.6). After that, I will demonstrate how to use the Backend.AI serving mode that conveniently provides various TensorFlow models with TensorFlow serving on the fly.
데브시스터즈의 Cookie Run: OvenBreak 에 적용된 Kubernetes 기반 다중 개발 서버 환경 구축 시스템에 대한 발표입니다.
Container orchestration 기반 개발 환경 구축 시스템의 필요성과, 왜 Kubernetes를 선택했는지, Kubernetes의 개념과 유용한 기능들을 다룹니다. 아울러 구축한 시스템에 대한 데모와, 작업했던 항목들에 대해 리뷰합니다.
*NDC17 발표에서는 데모 동영상을 사용했으나, 슬라이드 캡쳐로 대신합니다.
Backend.AI (https://backend.ai)는 클라우드 및 온-프레미스 환경에서 여러 사용자가 안전하고 효율적으로 컴퓨팅 자원을 공유할 수 있는 머신러닝에 특화된 인프라 관리 프레임워크입니다. 현재 널리 사용되고 있는 오픈소스 기술인 OpenStack, Kubernetes 등과 비교하여 어떤 특징과 차이점이 있는지 소개하고, 프레임워크의 구조와 기반 기술 및 응용 사례를 데모와 함께 소개합니다.
이 발표는 [야생의 땅: 듀랑고]의 지형 배포 시스템과 생태계 시뮬레이션 자동화 시스템에 대한 이야기를 다룹니다. 듀랑고의 각 섬은 크기와 지형, 기후 조건이 다양하고 섬의 개수가 많아서 수동으로 관리하는 것은 사실상 불가능합니다. 몇번의 사내 테스트와 베타 테스트를 거치면서 이러한 문제를 해결해주는 자동화된 도구의 필요성이 절실해졌고, 작년에 NDC에서 발표했던 생태계 시뮬레이터와 Docker, 그리고 아마존 웹서비스(AWS)를 이용하여 수많은 섬들을 자동으로 생성하고 관리하는 자동화 시스템을 구축하게 되었습니다. 그 과정에서 했던 고민들, 기존의 애플리케이션을 "Dockerizing" 했던 경험, AWS의 각 서비스들을 적절히 활용했던 이야기, AWS의 각 지역별 요금이 상이하다는 점을 이용해서 비용을 절감한 사례, 그리고 자동화 시스템의 문제점과 앞으로의 방향에 대해서 이야기 할 계획입니다.
Angular 2는 HTML 5 웹 컴포넌트 기술을 포함합니다. 이 기술은 Angular 2 컴포넌트를 존재케한 기반기술입니다. 본 슬라이드는 이와 관련하여 2가지 흐름을 가지고 있습니다.
- 전반부는 웹 컴포넌트가 Angular 2 컴포넌트가 되기까지의 과정을 설명합니다.
- 후반부는 컴포넌트 트리 구조를 기반으로한 컴포넌트 상호작용에 대해 설명합니다.
필요하신 분에게 조금이라도 도움이 되었으면 좋겠습니다. 감사합니다.
CHANGE LOG
2016-06-27 : @input 데코레이터 설명교정
2016-06-26 : 쉐도우 돔 / 쉐도우 호스트관련 보다 정확한 문장으로 수정
2016-06-25 : 업로드
Angular2는 컴포넌트 중심의 개발 접근 방식에 대한 내용을 가집니다. 따라서 본 슬라이드도 컴포넌트 중심의 개발 접근 방식으로 Angular2를 바라보았습니다.
대략적인 내용은 다음과 같습니다.
- Angular2 History
- Angular2 핵심구성요소
- 컴포넌트 중심의 개발
- Angular2 주요개념
- Type Script에대한 설명
- 기타
필요하신 분에게 도움이 되었으면 좋겠습니다. 관련 코드는 다음 주소에 공유하였습니다.
https://github.com/DaeguDevGroup/angular2-bootstrap
- 내용이 업데이트되거나, 추가되면 설명에 이력을 남기겠습니다.
- 본 슬라이드에 오류가 있다면 코멘트 바랍니다.
*Change Log*
- 2016-05-14 : 슬라이드 첫 버전을 업로드
본 슬라이드는 Windows환경에서 NginX구동을 실습하기 위해, PHP를 예로 들어 진행하고 있습니다. NginX는 PHP 동적웹페이지에 대한 처리보다, 정적 HTTP 서버에 적합 합니다.
본 슬라이드는 시작과 구동에 초점을 맞추고 있습니다. 설정관련 내용은 아래 공식 문서를 참조할 수 있습니다.
http://nginx.org/en/docs/beginners_guide.html
4. Thrift
Thrift와 Protocol Buffer와 비교
Thrift Protocol Buffer
개발사 Facebook Apache Google
채택사 Facebook, Hadoop (Eco
System 관련)
Google
사용자 많다 보통
지원 대부분 C++,java,python
지원기능 많다 적은편
자료형지원 Map, List, Set등 지원 지원안함
5. Thrift
Thrift 설치
• 설치준비 필요환경
– https://thrift.apache.org/docs/install/
– Basic requirements
• A relatively POSIX-compliant *NIX system
• Cygwin or MinGW can be used on Windows (but there are better options, see
below)
• g++ 4.2
• boost 1.53.0
• Runtime libraries for lex and yacc might be needed for the compiler.
– Requirements for building from source
• GNU build tools:
• autoconf 2.65
• automake 1.13
• libtool 1.5.24
• pkg-config autoconf macros (pkg.m4)
• lex and yacc (developed primarily with flex and bison)
• libssl-dev
– Requirements for building the compiler from source on Windows
• Visual Studio C++
• Flex and Bison (e.g. the WinFlexBison package)
...
6. Thrift
Thrift 설치
• Thrift 설치환경준비
sudo yum -y update
sudo yum -y groupinstall "Development Tools"
sudo yum install -y wget
wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
tar xvf autoconf-2.69.tar.gz
cd autoconf-2.69
./configure --prefix=/usr
make
sudo make install
cd ..
wget http://ftp.gnu.org/gnu/automake/automake-1.14.tar.gz
tar xvf automake-1.14.tar.gz
cd automake-1.14
./configure --prefix=/usr
make
sudo make install
cd ..
https://thrift.apache.org/docs/install/centos
7. Thrift
Thrift 설치
• Thrift 설치환경준비
wget http://ftp.gnu.org/gnu/bison/bison-2.5.1.tar.gz
tar xvf bison-2.5.1.tar.gz
cd bison-2.5.1
./configure --prefix=/usr
make
sudo make install
cd ..
git clone https://git-wip-us.apache.org/repos/asf/thrift.git
cd thrift
./bootstrap.sh
./configure --with-lua=no
make
sudo make install
8. Thrift
Thrift 프로젝트 생성
• Ant 다운로드 및 설치
– yum -y install ant
이후, Thrift 압축해제 디렉터리에 가서 다음 명령어를 실행함
– ant -Dproxy.enabled=1 -Dproxy.host=myproxyhost -Dproxy.user=thriftuser -
Dproxy.pass=topsecret
https://thrift.apache.org/lib/java
9. Thrift
Thrift 프로젝트 생성
• Thrift 코드 Import시 의존라이브러리
– 아래 의존라이브러리를 다운로드후 ‘add JAR’하여 프로젝트에 포함
– slf4j
• http://www.slf4j.org/dist/
• slf4j-api-1.7.9.jar
– Libthrift
• http://repo1.maven.org/maven2/org/apache/thrift/libthrift/0.9.2/
• libthrift-0.9.2.jar
10. Thrift
Thrift Interface Description Language
• Thrift I.D.L 작성
– 공통으로 사용할 인터페이스를 정의합니다.
namespace java tutorial.arithmetic.gen
namespace js tutorial.arithmetic.gen
//Namespace setting for each programming language
typedef i64 long
typedef i32 int
service ArithmeticService { // defines simple arithmetic service
long add(1:int num1, 2:int num2),
long multiply(1:int num1, 2:int num2),
}
Thrift –gen java calc.thrift로 java코드 생성시 파일명과 서비스명이됨
< calc.thrift >
https://thrift.apache.org/docs/idl
11. Thrift
Thrift I.D.L에 기반한 인터페이스 코드 생성
• IDL기반 언어별 Thrift 인터페이스 생성
• Node.JS 예
– gen-node에 생성됨
• JAVA 예
$ thrift --gen java calc.thrift
thrift --gen <language> <Thrift filename>
thrift --gen js:node calc.thrift
12. Thrift
Thrift 서버
• Java 인터페이스 코드생성
– # thrift --gen java calc.thrift
– ‘namespace java tutorial.arithmetic.gen’에 따라 디렉터리 생성됨
– Tutorial 디렉터리를 자바 프로젝트 폴더로 옮김
13. Thrift
Thrift 서버
public class Server {
private void start() {
try {
TServerSocket serverTransport = new TServerSocket(7911);
ArithmeticService.Processor processor = new ArithmeticService.Processor(new
ArithmeticServiceImpl());
TServer server = new TThreadPoolServer(new TThreadPoolServer.Args(serverTransport).
processor(processor));
System.out.println("Starting server on port 7911 ...");
server.serve();
} catch (TTransportException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Server srv = new Server();
srv.start();
}
}
14. Thrift
Thrift 서버
public class ArithmeticServiceImpl implements ArithmeticService.Iface{
public long add(int num1, int num2) throws TException {
return num1 + num2;
}
public long multiply(int num1, int num2) throws TException {
return num1 * num2;
}
}
https://github.com/Flipkart/phantom/tree/master/sample-thrift-proxy/src/main/java/thrift