PYCON Korea 2015
Python은 과학 계산 분야에서도 이미 널리 사용되고 있습니다. numpy와 scipy 기반으로 만들어진 많은 모듈들이 휼륭한 생태계를 이루고 있기 때문입니다. 그러나 극한의 계산 성능을 요구하는 분야(HPC, High Performance Computing)에서는 여전히 C와 Fortran으로만으로 짜여진 코드들이 선호되고 있습니다. 이런 분야에서 Python에 대한 일반적인 견해는 전처리/후처리에는 유용하지만 메인 코드에 적용하기에는 느리다라는 것입니다.
이번 발표에서는 HPC 분야에서도 Python의 유용함을 보여줍니다. 계산이 집중된 부분만을 Fortran, C로 구현하여 Python 메인 코드에 접합하면, Python의 장점은 충분히 활용하면서도 계산 성능에 큰 손해는 보지 않을 수 있습니다. 게다가 CUDA-C, OpenCL-C와 연동하면 GPU, MIC와 같은 가속 프로세서들도 비교적 쉽게 활용할 수 있습니다. 이번 발표에서는 간단한 시뮬레이션 코드를 예제로 사용하여 Python 코드로부터 시작하여 Fortran, C, CUDA-C, OpenCL-C 등을 단계적으로 접합해 나가는 것을 보여줄 것입니다.
주니어와 시니어 그 사이 - 중니어
문제 인식부터 해결책까지 컴포트존을 벗어날 고민을 공유합니다.
제주 '어쩌다밋업'에서 발표했습니다.
https://www.facebook.com/permalink.php?id=1512494142177634&story_fbid=3692166177543742
여러 언어에서 null 안전성을 주요 마케팅 쟁점으로 내세우면서 null 안전성이 관심을 많이 받고 있습니다.
자바에서도 null을 잘 다루어야 소프트웨어 결함을 줄이고 견고하게 만들 수 있는데 null의 위협에서 코드를 안전하게 지키는 설계 지침을 정리하고 안전하다고 확인하는데 도움이 되는 도구를 소개합니다.
파이썬과 OpenCL을 함께 쓰는 방법을 안내 합니다.
this slides introduce how to use python with OpenCL.
unfortunately, I made this for korean readers only. however, if anyone wants to know this procedure in english, please contact me.
주니어와 시니어 그 사이 - 중니어
문제 인식부터 해결책까지 컴포트존을 벗어날 고민을 공유합니다.
제주 '어쩌다밋업'에서 발표했습니다.
https://www.facebook.com/permalink.php?id=1512494142177634&story_fbid=3692166177543742
여러 언어에서 null 안전성을 주요 마케팅 쟁점으로 내세우면서 null 안전성이 관심을 많이 받고 있습니다.
자바에서도 null을 잘 다루어야 소프트웨어 결함을 줄이고 견고하게 만들 수 있는데 null의 위협에서 코드를 안전하게 지키는 설계 지침을 정리하고 안전하다고 확인하는데 도움이 되는 도구를 소개합니다.
파이썬과 OpenCL을 함께 쓰는 방법을 안내 합니다.
this slides introduce how to use python with OpenCL.
unfortunately, I made this for korean readers only. however, if anyone wants to know this procedure in english, please contact me.
OpenCL source code is separated “host source code” as C Language file & “kernel(device) source code” as CL file.
But Android’s APK can NOT include “kernel(device) source code” as CL file in APK file.
In this case, I Introduce "OpenCL CL files header Generator". It generates Convert CL files to const char* in Single C header file.
http://imatge-upc.github.io/telecombcn-2016-dlcv/
Deep learning technologies are at the core of the current revolution in artificial intelligence for multimedia data analysis. The convergence of big annotated data and affordable GPU hardware has allowed the training of neural networks for data analysis tasks which had been addressed until now with hand-crafted features. Architectures such as convolutional neural networks, recurrent neural networks and Q-nets for reinforcement learning have shaped a brand new scenario in signal processing. This course will cover the basic principles and applications of deep learning to computer vision problems, such as image classification, object detection or text captioning.
본 장표는 인프콘 2022 / 코틀린 멀티플랫폼, 미지와의 조우 세션에 대한 강연 자료입니다.
코틀린은 멀티플랫폼을 지원하는 언어로 Server-side와 Android뿐만이 아니라 JavaScript 엔진이 있는 브라우저나 Node.js도 지원하며, Native 등 다양한 플랫폼에서 쓸 수 있습니다. 이를 이용해 코틀린 코드를 공유하는 단일 코드베이스로 모바일부터 웹과 데스크톱, 서버에 이르기까지 다중 플랫폼 애플리케이션을 작성할 수 있습니다.
본 핸즈온 세션을 통해 코틀린 멀티플랫폼과 함께 리액트, 스프링부트로 웹 애플리케이션의 프론트엔드부터 백엔드까지 직접 개발하며 친해져 보는 시간을 가져보세요. 참가자는 코틀린 멀티플랫폼 프로젝트를 이해하고, 더 나아가 프론트엔드와 백엔드 간의 공유 로직 작성, Kotlin/JS 기반 리액트 및 스프링 웹 프로그래밍을 경험할 수 있습니다.
https://github.com/arawn/building-fullstack-webapp-with-kotlin-multiplatform
https://infcon.day/speaker/박용권-김지헌-코틀린-멀티플랫폼/
출처: Selvas AI TTS 기술블로그 : https://tts.selvy.ai/2018/09/ai.html
음성합성 기술은 기계가 사람처럼 말하기를 원하는 인간의 바램으로부터 시작되었습니다. 지난 수십 년간 음성합성 기술은 많은 연구자들의 노력으로 획기적인 발전을 거듭해왔습니다. 특히, 최근의 딥러닝을 활용한 음성합성 기술은 인간이 말할 때의 억양이나 미세한 호흡까지도 잘 표현합니다. 이러한 기술의 발전은 자연스러운 음성을 만들어내는 것에 그치지 않고, 감정이나 개성을 표현하는 기술로 발전 하고 있습니다.
우리는 지난 몇 년간 딥러닝 기반의 음성합성 기술에 집중해왔으며 상용화를 위한 우리의 목표를 달성하게 해줄 여러 의미 있는 진전을 찾아내었습니다.
최근 우리가 주목한 것은 sequence-to-sequence 모델에 기반을 둔 구글의 Tacotron 입니다. Tacotron은 지금까지의 음성합성 기술중 가장 자연스러운 음성을 표현하는 훌륭한 기술입니다. 그러나 이것은 특정 단어를 합성하지 않는 생략(skip)문제, 특정 단어가 반복되는 반복(repetition) 문제를 안고 있습니다. 이러한 현상은 상용화를 목표로 할 때 매우 불안정한 요소가 됩니다. 우리는 이 문제를 해결하기 위하여 노력하였으며 새로운 알고리즘과 학습레시피를 고안하여 의미 있는 성과를 얻어 냈습니다.
특히, 생략과 반복이 phone sequence 확률 부족과 attention 메커니즘의 불안정성 때문이라는 것에 집중하여 Advanced Encoder와 Weighted Location Attention 알고리즘을 고안하였으며 약 20여 년간 축척된 음성합성 기술의 노하우와 접목하여 xVoice를 탄생시켰습니다
* Selvy deepTTS
셀바스AI의 Selvy deepTTS는 딥러닝 기술 기반의 음성합성 엔진 xVoice가 적용된 end-to-end 방식의 음성합성 솔루션입니다. Selvy deepTTS는 전통적인 방식의 음성합성기와 비교하여 보다 자연스러운 음성을 만들어내며, 특정인의 목소리와 발화스타일을 모방 할 수도 있습니다.
* Improving Naturalness
Selvy deepTTS는 사람이 발성할 때의 자연스러운 운율과 발음, 억양 등을 학습하여 자연스러운 음성을 생성합니다. 두 음절 사이의 연음, 문장 내에서의 쉼, 발성하는 동안의 작은 호흡 등을 사람처럼 자연스럽게 표현합니다.
* Human-like Expressive Speech
보다 자연스럽고 감성적인 느낌씨를 표현합니다.
* 개인화 TTS
xVoice는 단지 수분~수시간의 음성만으로도 그 사람의 목소리를 가진 음성합성기를 만들어 낼 수 있습니다. xVoice로 만들어진 음성합성기는 Selvy deepTTS에 탑재되어 실시간 음성합성 서비스에 활용 될 수도 있습니다.
* Overcome Skip/Repetition Problem
End-to-end 음성합성기술의 고질적인 문제였던 합성시 문장 일부분이 생략(skip)되거나 반복(repetition)되는 문제를 셀바스AI의 축적된 노하우(know-how)와 새로운 알고리즘을 고안하여 해결하였습니다.
* Real-Time Synthesis
실시간 음성 합성 기능을 제공합니다. 텍스트를 입력하고 실시간으로 음성을 생성할 수 있습니다. 텍스트를 입력하고 음성생성을 요청하여 청취하기까지의 과정이 텍스트의 길이에 상관없이 1초 이내에 이루어집니다.
OpenCL source code is separated “host source code” as C Language file & “kernel(device) source code” as CL file.
But Android’s APK can NOT include “kernel(device) source code” as CL file in APK file.
In this case, I Introduce "OpenCL CL files header Generator". It generates Convert CL files to const char* in Single C header file.
http://imatge-upc.github.io/telecombcn-2016-dlcv/
Deep learning technologies are at the core of the current revolution in artificial intelligence for multimedia data analysis. The convergence of big annotated data and affordable GPU hardware has allowed the training of neural networks for data analysis tasks which had been addressed until now with hand-crafted features. Architectures such as convolutional neural networks, recurrent neural networks and Q-nets for reinforcement learning have shaped a brand new scenario in signal processing. This course will cover the basic principles and applications of deep learning to computer vision problems, such as image classification, object detection or text captioning.
본 장표는 인프콘 2022 / 코틀린 멀티플랫폼, 미지와의 조우 세션에 대한 강연 자료입니다.
코틀린은 멀티플랫폼을 지원하는 언어로 Server-side와 Android뿐만이 아니라 JavaScript 엔진이 있는 브라우저나 Node.js도 지원하며, Native 등 다양한 플랫폼에서 쓸 수 있습니다. 이를 이용해 코틀린 코드를 공유하는 단일 코드베이스로 모바일부터 웹과 데스크톱, 서버에 이르기까지 다중 플랫폼 애플리케이션을 작성할 수 있습니다.
본 핸즈온 세션을 통해 코틀린 멀티플랫폼과 함께 리액트, 스프링부트로 웹 애플리케이션의 프론트엔드부터 백엔드까지 직접 개발하며 친해져 보는 시간을 가져보세요. 참가자는 코틀린 멀티플랫폼 프로젝트를 이해하고, 더 나아가 프론트엔드와 백엔드 간의 공유 로직 작성, Kotlin/JS 기반 리액트 및 스프링 웹 프로그래밍을 경험할 수 있습니다.
https://github.com/arawn/building-fullstack-webapp-with-kotlin-multiplatform
https://infcon.day/speaker/박용권-김지헌-코틀린-멀티플랫폼/
출처: Selvas AI TTS 기술블로그 : https://tts.selvy.ai/2018/09/ai.html
음성합성 기술은 기계가 사람처럼 말하기를 원하는 인간의 바램으로부터 시작되었습니다. 지난 수십 년간 음성합성 기술은 많은 연구자들의 노력으로 획기적인 발전을 거듭해왔습니다. 특히, 최근의 딥러닝을 활용한 음성합성 기술은 인간이 말할 때의 억양이나 미세한 호흡까지도 잘 표현합니다. 이러한 기술의 발전은 자연스러운 음성을 만들어내는 것에 그치지 않고, 감정이나 개성을 표현하는 기술로 발전 하고 있습니다.
우리는 지난 몇 년간 딥러닝 기반의 음성합성 기술에 집중해왔으며 상용화를 위한 우리의 목표를 달성하게 해줄 여러 의미 있는 진전을 찾아내었습니다.
최근 우리가 주목한 것은 sequence-to-sequence 모델에 기반을 둔 구글의 Tacotron 입니다. Tacotron은 지금까지의 음성합성 기술중 가장 자연스러운 음성을 표현하는 훌륭한 기술입니다. 그러나 이것은 특정 단어를 합성하지 않는 생략(skip)문제, 특정 단어가 반복되는 반복(repetition) 문제를 안고 있습니다. 이러한 현상은 상용화를 목표로 할 때 매우 불안정한 요소가 됩니다. 우리는 이 문제를 해결하기 위하여 노력하였으며 새로운 알고리즘과 학습레시피를 고안하여 의미 있는 성과를 얻어 냈습니다.
특히, 생략과 반복이 phone sequence 확률 부족과 attention 메커니즘의 불안정성 때문이라는 것에 집중하여 Advanced Encoder와 Weighted Location Attention 알고리즘을 고안하였으며 약 20여 년간 축척된 음성합성 기술의 노하우와 접목하여 xVoice를 탄생시켰습니다
* Selvy deepTTS
셀바스AI의 Selvy deepTTS는 딥러닝 기술 기반의 음성합성 엔진 xVoice가 적용된 end-to-end 방식의 음성합성 솔루션입니다. Selvy deepTTS는 전통적인 방식의 음성합성기와 비교하여 보다 자연스러운 음성을 만들어내며, 특정인의 목소리와 발화스타일을 모방 할 수도 있습니다.
* Improving Naturalness
Selvy deepTTS는 사람이 발성할 때의 자연스러운 운율과 발음, 억양 등을 학습하여 자연스러운 음성을 생성합니다. 두 음절 사이의 연음, 문장 내에서의 쉼, 발성하는 동안의 작은 호흡 등을 사람처럼 자연스럽게 표현합니다.
* Human-like Expressive Speech
보다 자연스럽고 감성적인 느낌씨를 표현합니다.
* 개인화 TTS
xVoice는 단지 수분~수시간의 음성만으로도 그 사람의 목소리를 가진 음성합성기를 만들어 낼 수 있습니다. xVoice로 만들어진 음성합성기는 Selvy deepTTS에 탑재되어 실시간 음성합성 서비스에 활용 될 수도 있습니다.
* Overcome Skip/Repetition Problem
End-to-end 음성합성기술의 고질적인 문제였던 합성시 문장 일부분이 생략(skip)되거나 반복(repetition)되는 문제를 셀바스AI의 축적된 노하우(know-how)와 새로운 알고리즘을 고안하여 해결하였습니다.
* Real-Time Synthesis
실시간 음성 합성 기능을 제공합니다. 텍스트를 입력하고 실시간으로 음성을 생성할 수 있습니다. 텍스트를 입력하고 음성생성을 요청하여 청취하기까지의 과정이 텍스트의 길이에 상관없이 1초 이내에 이루어집니다.
Automating Django Functional Tests Using Selenium on CloudJonghyun Park
테스트 코드는 작성한 코드가 제대로 동작하고 있는지 점검하는 코드이다. 경우의 수가 많아질수록 사람이 직접 테스트를 하기 어려워지므로, 테스트 코드를 작성해서 최소한의 코드 안정성을 항상 담보해둘 수 있다. 리팩토링할 때는 테스트 코드를 통해 바뀐 코드에 문제가 있는지 금방 확인할 수 있어 특히 유용하다고 할 수 있다.
Django는 자체적으로 테스트를 위한 기능을 제공하고 있다. 파이썬의 unittest 모듈을 확장해서 유용한 기능을 제공하고, 테스트 유닛마다 DB를 새로 생성해 각 테스트 단위의 독립성을 보장한다. 이를 통해 모델(model), 폼(form), 뷰(view) 단위에서 단위 테스트(unit test)를 작성할 수 있다. 하지만 실제 웹상에서 사용자의 동작에 반응하는 기능 테스트(functional test)를 하기는 매우 어려우므로, 이를 위한 별도의 테스트 프레임워크가 필요하다.
Selenium은 브라우저상에서 직접 사용자의 동작을 에뮬레이션할 수 있는 프레임워크로, Python+Django 환경에서 기능 테스트를 수행하기에 알맞은 기능을 제공한다. 웹드라이버(web driver)를 이용해서 실제 브라우저를 동작시키고, 각 페이지의 DOM에 존재하는 객체를 실제로 조작하는 과정을 파이썬 코드로 작성할 수 있다. 개발자가 원하는 방식으로 다양한 기능 테스트 코드를 작성하고 실행함으로써, 웹페이지와 사용자의 상호작용을 직접 테스트할 수 있다. Django가 제공하는 테스트 프레임워크와 결합하면 보다 더 촘촘한 테스트 망을 구축할 수 있다.
Selenium을 이용한 기능 테스트를 작성할 때 가장 중요한 점 중 하나는, 조작하고자 하는 DOM 객체가 준비(ready)될 때까지 기다리는 것이다. 기능 테스트는 단위 테스트와는 다르게 실제 웹브라우저 상에서 이루어지므로, 브라우저에서 DOM이 작동하는 과정에 대한 고려가 필요하다. 예를 들어, 어떤 페이지를 방문하자마자 DOM 객체에 명령을 내린다고 생각해보자. CPU가 빨리 동작하는 환경이라면 다행히 문제가 없을 수도 있겠지만, 그렇지 않고 객체가 아직 준비되지 않았다면 'undefined'가 반환되면서 적절한 테스트가 불가능하게 될 수 있다. 이런 상황을 피하고자 Selenium은 DOM 객체가 로딩될 때까지 기다리는 두 가지 방법을 가지고 있다. Implicit Wait(암시적 기다림)와 Explicit Wait(명시적 기다림)라고 부르는 방법인데, 이번 세션에서는 이들 기다림과 그 차이에 대해 알아볼 것이다. 이 외에 테스트를 작성하면서 얻은 나름의 팁에 대해서도 최대한 설명하고자 한다.
잘 작성한 테스트가 있다고 하더라도 개발자가 매번 테스트하는 것은 여간 귀찮은 일이 아닐 수 없다. 그래서 우리가 사용하고 있는 테스트 자동화에 대해서도 간단하게 이야기하고자 한다. 작성된 Selenium 기능 테스트를 클라우드(AWS) 상에 올려두고, 단위 테스트는 Github 커밋이 올라올 때마다, 기능 테스트는 하루에 한 번 자동으로 수행되도록 하고 있다. 이 테스트 환경 구축에 관한 개인적인 경험을 나누려고 한다.
http://www.ubuntu-kr.org/viewtopic.php?f=2&t=16175
내 용
발표 1 우분투로 슈퍼컴 만들기 = 김성윤
발표 2 geogebra (수학 그래프+도형 툴) = 미남imsu(구임수)
자기 소개 및 자유 이야기
발표 3 : 우분투에서 임베디드 리눅스 개발 환경 구축하기 = 뻔뻔강사(유명환)
[2016 데이터 그랜드 컨퍼런스] 2 5(빅데이터). 유비원 비정형데이터 중심의 big data 활용방안K data
빅데이터 시대에서 중요한 것은 의미 분석입니다. 통계분석에서 얻을 수 없는 가치를 빅데이터 분석을 통해 얻을 수 있습니다. 빅데이터는 정형데이터와 비정형데이터를 모두 포함하며, 기업 내부 문서, 이메일, ERP, CRM 같은 시스템에도 있고, 소셜 미디어, 웹블로그 같은 일반 인터넷에도 존재 합니다.
인공지능 알고리즘은 빅데이터를 활용하고 숨은 의미를 찾는데 중요한 역할을 합니다. 현재의 인공지능 기술은 아직 인간의 상식, 창의성, 도덕성을 담을 수 없는 한계를 안고 있습니다. 그러나 특정 분야에서, 예를 들어 고객 민원 자동 분류, 금융 상품 상담과 같은 영역에서 인간보다 뛰어난 처리 능력을 보일 수 있습니다. 궁극적으로 일처리에 효율과 효과를 높이는 방향으로 빅데이터와 인공지능이 활용되고 있습니다.
7. 수치예보의 중요성
7
농/수산물
공급 예측
❐ 기상예보의 정확도를 결정
국방/안보/항공 분야
활용도 증가
에너지
공급/소비 예측
기상재해로 인한
인명 및 재산피해
최소화
산업
및
가계
분야
경제
효과
발생
직접적 경제효과
최고 약 6,000억원
간접적 경제효과
최고 약
6조5,000억원
기상예보 정확도 결정요인 기상예보 정확도 향상으로 인한 이익
기상예보 정확도 결정 요인 중, 수치예보모델은 가장 많은 비중을 차지
※ 예보관은 수치예보모델의 분석치를 참고, 관측자료의 질 향상에 수치예보모델 사용
➠ 실제 수치예보모델의 비중은 50% 이상
➠ 수치예보모델의 성능이 향상될수록 기상예보 정확도 향상
에너지
공급/소비 예측
기상재해로 인한
인명 및 재산 피해
최소화
기상예보 정확도 향상으로 인한 사회 전반적인 이익과 막대한 경제효과
KDI
8. 수치예보의 역사
8
from 홍성유, ‘대기과학에서의 수치모델링’
1904 : Norwegian V. Bjerknes (1862-1951) :
날씨 예측 방법의 수학적 표현 기상 예보 위한 방정식 개발
1922 : British L. F. Richardson (1881-1953) :
수치 예측 모형 개념 정립 및 최초 계산 시도 (실패)
1. 원시방정식 사용
2. 계산불안정
3. 초기 조건의 문제점
1939 : Swedish C.-G. Rossby : 비발산 와도 방정식 개발 큰 규모 행성파 예측
1948, 1949, J. G. Charney (1917-1981)
Scale analysis를 통하여 작은 규모 운동 제거
지균풍 가정 : 정역학방정식과 지균풍방정식 이용
소규모 파동 제거,
일기의 변화에 중요한 영향 미치는 큰 규모 파동만 남김
(순압 준지균 잠재와도 방정식)
1950 : Princeton Group (Charney, Fjortoft, Von Newman)
ENIAC (Electrical Numerical Integrator and Computer)
첫 수치예보에 성공!
10. 수치예보모델 - 역학코어
10
from 홍성유, ‘대기과학에서의 수치모델링’
❐ 대기현상의 지배방정식
V. Bjerknes (1904) pointed out for the first time that there is a complete set of
7 equations with 7 unknowns that governs the evolution of the atmosphere:
2
d
p
dt
v
F v-운동량 보존
.( )
t
v
이상기체 상태방정식
질량 보존 (연속방정식)
1
p
ds d Q
C
dt dt T
dq
E C
dt
수증기 보존
열역학 제1법칙 (에너지 보존)
p RT
7 equations, 7 unknowns (u, v, w, T, p, s, q) solvable
13. 수치예보모델 - 역학코어
13
❐ 공간미분 분광요소법 (Spectral Element method)
- 계산 공간을 요소(element) 단위로 나눔 Finite Element Method
- 각 요소에서 다항식 공간 (ex, Legendre)으로 변환 Spectral Method
- 수치 차수를 자유롭게 선택할 수 있고, 높은 계산효율성을 가짐
❐ 시간미분 nth Runge-Kutta Method 사용
15. 수치예보모델 - 자료동화
15
from Takemasa Miyoishi and 기상청 수치자료응용팀
Numerical modelsObservations
Data Assimilation
자료동화
- 관측자료와 수치모델과의 동화
- 더 정확하고 안정된 모델초기값 생성
- 주기적인 모델값 보정
16. 수치예보모델의 불확실성
16
from 홍성유, ‘대기과학에서의 수치모델링’
time
stochasticdeterministic
Unstable system
(No-periodicity)
Stable system
(Periodicity)
수치모형을 이용한 대기의 예측성
한계 ?대기현상 복잡성
(u,v,T,q, etc)
계산상 오차
(dx=dt=finite)
Lorenz (혼돈역학) 2 주
18. 수치예보모델의 예
18
• GEOS 5 (Goddard Earth Observing System)
• 미국 항공우주국(NASA)에서 개발한 전지구 대기 모델
• 7 km 격자 해상도, 30분 시간간격
• Visualizations by Greg Shirah on August 10, 2014
동영상
21. Motivation
• 대부분의 수치예보모델은 Fortran으로만 개발되고 있다
• 모델이 막대한 계산성능(그리고 전력소모)을 요구함에도
불구하고, 새로운 저전력 고성능 머신들(eg. GPU, MIC,
FPGA)을 활용하기가 매우 힘들다
– 25km 해상도, 15초 간격, 10일 예보 6시간 @5400 cores
• 모델 전체 코드 중 계산이 집중된 부분은 상대적으로
비중이 낮다
• Python이 대안이 될 수 있지 않을까?
22. Goal
• 전체 모델 코드는 Python으로 작성
– 입출력, 전처리, 후처리, 가시화, 유닛테스트, 유지보수 유리
• 계산이 집중된 부분(hotspot)만 컴파일 언어로 대체
– CPU : Fortran, C
– GPU : CUDA-C, OpenCL-C
– MIC, FPGA : OpenCL-C
• Python의 장점과 컴파일 언어들의 장점 모두 활용
23. 간결하고 가독성 높은 문법 (≈ pseudo code)
쉬운 디버깅 정신건강에 이로움
활용도가 높은 표준 모듈들 (battery included)
과학/공학 계산에 유용한 확장 모듈들
(Numpy, Scipy, Matplotlib, H5Py, MPI4Py, …)
컴파일 언어 (C, C++, FORTRAN) 와의 쉬운 결합
간편한 GPU, MIC 활용 (PyCUDA, PyOpenCL)
풍부한 기술문서 (http://docs.python.org)
내가 좋아하는 Python 장점들
24. 참조 : www.scipy.org/Topical_Software
Science Tools for Python
General
Numpy
Scipy
GPGPU Computing
PyCUDA
PyOpenCL
Parallel Computing
PETSc
PyMPI
Pypar
mpi4py
Wrapping
C/C++/Fortran
SWIG
Cython
ctypes
Plotting &
Visualization
Matplotlib
Vislt
Chaco
MayaVi
AI
Pyem
Ffnet
Pymorph
Monte
Biology
Brian
SloppyCell
PySAT
Molecular &
Atomic Modeling
PyMOL
Biskit
GPAW
Geosciences
GIS Python
PyClimate
ClimPy
CDAT
Bayesian Stats
PyMC
Optimization
OpenOpt
Symbolic Math
SymPy
Electromagnetics
PyFemax
Astronomy
AstroLib
PySolar
Dynamic Systems
Simpy
PyDSTool
Finite Elements
SfePy
escript
25. Numpy : 과학/공학 계산을 위한 기본 모듈 패키지
• 풍부한 기능의 N-차원 배열
• Broadcasting 함수 연산
• C, C++, FORTRAN 코드 결합을 위한 도구 (f2py)
• Linear algebra, Fourier transform, Random number
Scipy : 확장 모듈 패키지
Numpy & Scipy
• statistics
• optimization
• numerical integration
• linear algebra
• Fourier transforms
• signal processing
• image processing
• ODE solvers
• special functions
참조 : www.scipy.org
38. 2D Wave Eq. (Python + Fortran)
계산 코어를 Fortran subroutine으로 변경
#!/usr/bin/env python
import numpy as np
from ext_f90 import update_core
(…)
# main time loop
for tstep in xrange(1, tmax+1):
update_core(f, g, c)
update_core(g, f, c)
(…)
wave2d_fortran.py
43. GPU (Graphics Processing Unit)
CPU는 임의의 메모리 접근, 흐름 제어를 포함하는 범용 연산에 적합
GPU는 많은 데이터에 동일한 연산을 수행하는 데이터 병렬 연산에 적합
GPU의 메모리 대역폭이 CPU보다 높다 (eg. 180 GB/s vs 40 GB/s)
CPU vs GPU
45. CUDA/OpenCL의 Python wrapper
모든 객체의 동적 할당/자동 해제
자동 에러 체크 : 파이썬 예외처리로 변환
JIT (Just-In-Time) 컴파일
빠른 개발 및 디버깅
PyCUDA/PyOpenCL
mathema.tician.de/software/pycuda
mathema.tician.de/software/pyopencl
46. 2D Wave Eq. (Python + CUDA)
update_core() 함수를 CUDA kernel로 변경
__global__ void update_core(double *f, double *g, double *c, int nx, int ny) {
int tid = blockIdx.x * blockDim.x + threadIdx.x;
int i = tid / ny;
int j = tid % ny;
if (i > 0 && j > 0 && i < nx-1 && j < ny-1) {
f[tid] = c[tid] * (g[tid-ny] + g[tid+ny] + g[tid-1] + g[tid+1] - 4*g[tid])
+ 2*g[tid] - f[tid];
}
}
__global__ void update_src(double *f, double val, int idx0) {
int tid = blockIdx.x * blockDim.x + threadIdx.x;
if (tid == 0) f[idx0] += val;
}
ext_core.cu
47. 2D Wave Eq. (Python + CUDA)
#!/usr/bin/env python
import numpy as np
import pycuda.driver as cuda
import pycuda.autoinit
# setup
nx, ny = 1000, 800
tmax, tgap = 600, 100
# allocation
c = np.ones((nx, ny)) * 0.25
f = np.zeros_like(c)
c_gpu = cuda.to_device(c)
f_gpu = cuda.to_device(f)
g_gpu = cuda.to_device(f)
wave2d_cuda.py
(계속)
56. Python 성능 비교 (CPU)
Python-C API를 사용하여 계산이 집중된 부분만 C 코드로 작성함
Single CPU thread 최적화 코드 (SSE, OpenMP)
C Python+C C Python+C
GFLOPS 0.35 0.35 4.60 4.52
1.7 % 성능 차이
57. Python 성능 비교 (GPU)
PyCUDA를 사용하여 계산이 집중된 부분만 CUDA 커널로 작성
CUDA-C PyCUDA
GFLOPS 20.16 20.16
거의 차이 없음
58. Python에서 C, Fortran, CUDA-C, OpenCL-C와 쉽게 연동
할 수 있다
수치모델 메인은 Python으로 작성, 계산이 집중된 부분만
컴파일 언어로 대체한다.
계산성능이 중요한 대규모의 과학계산 분야에서도
Python은 훌륭한 대안이 될 수 있다
Wrap up