머신러닝 및 데이터 과학 연구자를 위한 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 )
이번 강의에서는 파이썬 클래스의 상속에 대해 알아보겠습니다. 소프트웨어 개발시에는 예전에 만들어진 코드를 이용하여 새로운 기능을 개발하는 경우가 많은데요, 클래스의 상속 기능을 사용하면 부모 클래스에서 만들어둔 기능과 속성을 물려받을 수 있습니다.
상속은 객체지향 프로그래밍의 매우 뛰어난 기능으로 이 강의에서는 상속에 대해 알아봅니다. 또한 상속받은 자식이 부모 클래스를 호출하기 위해 사용하는 super() 함수에 대해서도 알아봅니다.
- 강의 키노트 자료는 다음 링크를 통해 다운 받으세요
https://drive.google.com/drive/folders/1UrrO4_ch4xcIErbExstwpUVY6vFvPdkW
- 강의 소스코드는 다음 링크를 통해 다운 받으세요
https://github.com/dongupak/Basic-Python-Programmingwjd
빌드? 우선 사용부터 매뉴얼? Getting started 한 번 돌려보기 TV 리모컨 버튼 5개 전문가는 교육받아 만들어진다? 경험=시간+시행착오+성공실패 오픈소스 트러블슈팅 “메시지” 구글링 오픈소스 함부로 수정하지 마라 최신 버전을 대하는 우리의 자세 LTS로 대동단결 팀장 설득하기 오픈소스는 공짜가 아닙니다. 저도 기여하고 싶어요 2,000년 톰캣을 시작으로 Ant, Eclipse, JUnit, JMeter를 거쳐 현재 개발에 잘 사용하고 있는 Yona, Git, VSCode, Jenkins, CentOS, VirtualBox, Nginx, Node.js, Express.js, MariaDB, Uptime, Mocha, SonarQube, ZAP 이야기 등입니다.
https://www.youtube.com/watch?v=5LHOTBxG0hc
이번 강의에서는 지난 7개월간 이어진 강의의 마지막 편으로 파이썬이 각광받고 있는 이유와 장점에 대해서 다루어 봅니다.
그리고 저의 개인적인 강의 경험도 알려드릴까 합니다.
- 강의 키노트 자료는 다음 링크를 통해 다운 받으세요
https://drive.google.com/drive/folders/1UrrO4_ch4xcIErbExstwpUVY6vFvPdkW
- 강의 소스코드는 다음 링크를 통해 다운 받으세요
https://github.com/dongupak/Basic-Python-Programmingwjd
2. 참고 자료
• <컴퓨터 vs 책> 블로그
• http://jhrogue.blogspot.com/
• OKdevTV 유튜브 방송
• 오늘자 방송: https://www.youtube.com/watch?v=cKXvQ3--
GvE&list=PLdntWJk2tJPKvRB0mSqC5tyKUv7HFtcqg&index=2
• 재미있는 개발 이야기 리스트:
https://www.youtube.com/playlist?list=PLdntWJk2tJPKvRB0mSqC5t
yKUv7HFtcqg
• 슬라이드 셰어
• https://www.slideshare.net/jrogue/presentations
4. 오늘 소개할 내용
• 와디즈 SW 인턴후 넋두리++
• 강려크한 노드 터미널 인터페이스 라이브러리
• (강추!) 여러 개의 JDK를 설치하고 선택해서 사용하기
• Deno v1.0 공개!
• 파이썬을 셸 스크립트에서 사용하려면?
• Bundlephobia
• 깃랩 시스템 다이어그램
• 슬랙에서도 PHP를 …
• 원격 데스크톱 연결 시 모니터 여러 대 사용하기
5. (오늘의 논쟁) 와디즈 SW 인턴후 넋두리++
• https://velog.io/@mowinckel/%EC%99%80%EB%94%94
%EC%A6%88%EC%97%90%EC%84%9C%EC%9D%98
-SW-3%EA%B0%9C%EC%9B%94-I
• 주의: 세상은 좁고 IT 바닥은 더 좁다
6. (개발) 강려크한 노드 터미널 인터페이스 라
이브러리
• https://github.com/chjj/blessed
• 목표
• Ncurses 라이브러리를 완전히 재구현
• 터미널에 최적화된 위젯 API 구현
• 예제
• Slap – 서브라임과 유사한 텍스트 편집기(https://github.com/slap-editor/slap)
• Blessed-contrib – 대시보드 (https://github.com/yaronn/blessed-contrib)
7. (개발) (강추!) 여러 개의 JDK를 설치하고 선
택해서 사용하기
• https://blog.benelog.net/installing-jdk.html
• 운영체제별 관리자
• 윈도우
• Chocolatey(패키지 설치)
• SDKMAN(WLS 위에서)
• Jabba(파워셸)
• 리눅스
• apt/yum, update-alternatives/alternatives(패키지 설치와 선택)
• Direnv
• SDKMAN
• jabba
• 맥OS X
• Homebrew(패키시 설치)
• Direnv
• SDKMAN
• jabba
• 공통
• jEnv
8. (개발) Deno v1.0 공개!
• https://deno.land/v1
• 특징
• 명령행 스크립트를 위한 웹 브라우저 – 단독으로 실행 가능
• 타입스크립트 지원 – 1st class
• EventEmitter - promise보다 강력한 면모 예) 배압(back-pressure)
• Rust API 지원
• API 안정성
• 주의
• 아직 호환성이 완벽하지 않음
• HTTP 서버 성능이 노드보다 뒤쳐짐
• TSC 병목: 마이크로소프트 타입스크립트 컴파일러가 느림
10. (개발) 파이썬을 셸 스크립트에서 사용하려
면?
• https://github.com/hauntsaninja/pyp
• 동작 원리
• 파이썬 스크립트를 파싱해 AST를 만들고 이를 다시 소스 코드로 변환
• 예
11. (개발) 깃랩 시스템 다이어그램
• https://about.gitlab.com/handbook/business-ops/tech-stack-
applications/
• https://about.gitlab.com/handbook/business-ops/tech-stack/
12. (개발) 슬랙에서도 PHP를 …
• https://slack.engineering/taking-php-seriously-
cf7a60065329#.v1guv88jf
• 장점
• 상태 – 무상태
• 병행성 – 웹 요청에 따라 단일 스레드 구동 → 단점으로 보이지만…
• 프로그래머의 작업 흐름이 빨라짐: “생각하고 편집하고 페이지 다시 로드” (웹 서버 재
시동 필요없음)
• 단점
• 놀랄만한 형변환: 123 == “123foo” vs 0123 != “0123foo”
• 참조/값 의미의 불명확: 대입과 인수 전달
• 실패를 의식하지 못하는 철학: division by zero
• 표준 라이브러리의 모순: camel case와 snake case의 공존
13. (우리가 몰랐던 사실) 원격 데스크톱 연결 시
모니터 여러 대 사용하기
• https://bloodguy.tistory.com/1069
• https://m.blog.naver.com/goldrushing/130107777712
• mstsc /multimon : 물리적 2 모니터로 작동
• mstsc /span : 화면이 제공하는 크기로 원격 접속