JMK defying gravity

stream/

19 Dec 2009

헐퀴 아이리스 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 이런미친시발 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

16 Dec 2009

Making scipy.weave parallel by releasing the GIL

As everybody knows, the current implementation of CPython is pretty much incapable of doing any serious multithreaded computation, because of the GIL. Python's most current solution to this problem is using separate processes instead of threads - in most of the cases, this actually suffices.

A problem I'm trying to solve at work now is embarrassingly parallel. It was natural to try to make use of my quad-core Xeon desktop to decrease my 1-hr runtime down to 15 minutes; however, the programs use inputs from a vast (4+GB) numpy array which is common to all processes. Sending an array of this size through IPC is simply ridiculous. Yes, there are ways to 'share' a single copy of numpy array across processes - but it required me to make drastic changes to the program's structure. I tried numpy.memmap which is essentially an array using memory-mapped files. Single-thread performance was degraded 10x... dude, I was just trying to achieve 3+x speedup. Is this too much???

What I actually ended up doing is writing performance-critical piece of code in C++, using scipy.weave (it basically lets us to inline C++ code in Python, compiling the C++ code as a Python package). Yes, it's not pleasant, but when the C++ code snippet is small, it's doable. Yes, it's not a game-changer - it doesn't allow true multithreading. However: weave is compiled as a C Python module - and they can release the GIL if a macro is used: Py_BEGIN_ALLOW_THREADS.

So, simply adding the two macros at the beginning and the end of the inlined code can make it (almost) truly multithreading.

I did a simple experiment to verify this. ...

15 Dec 2009

대학원 가면 회사에서 학비 reimburse 해주는 제도가 있어서.. 회사 애들이 전부 GRE 보고 파트타임 마스터 따는 게 대세인 것 같길래 나도 한번 통계 석사를 따볼까 심각하게 고민했는데, U of Chicago 통계는 탑스쿨이었구나. orz 미방도 안듣고 통계학 B 인 나 따위를 받아주진 않겠지? orz

매스 섭젝이라도 봐야 되나.. 아....

14 Dec 2009

Preparing EC2 Image for AOJ

AOJ with Amazon EC2 의 연장선에서, 셋업 시도. 다 잘 되고 있는데, 파이썬 인터페이스인 boto 의 최신 버전에서도 아직 stop/resume instance 기능이 지원되지 않는 듯. ec2-api-tools 에서는 이게 지원되는데, 이제 와서 이쪽으로 fall back 해야 하나.. 너무 삽질 같은데... ㅠ.ㅠ

아니면 패치 만들어서 제출해볼까? -_-

(update) 소스코드 뒤져서 stop/resume 하는 법 알아냄.

Useful links

Tutorials links

Boto initial setup walkthrough

(more)

12 Dec 2009

해리 포터

<JongMan> 벅스 첫 페이지에
<JongMan> 해리포터와 혼혈왕자 배너가 떴는데
<JongMan> 밑에 이렇게 써있다
<JongMan> 출연: 엠마 왓슨 감독: 데이빗 예이츠
<JongMan> 그래 맞아 해리 따위 중요하지 않잖아

11 Dec 2009

어느새 테메레르 2권을 읽고 있다.

앨범커버

W&Whale 이 리메이크한 '슬픈 노래는 부르지 않을거야' 를 즐겁게 듣고 있다. 좀 음산하지만.. 그래서 벅스에서 mp3 을 사서 아이폰에 넣었는데

앨범 커버가

.... 앨범 디자인도 조덕배 활동 시기로 맞췄구나? 워드패드로 앨범커버 만들지 마 이놈들아 -_-;;;

.... 결국 whale 사진 받아서 커버 대신 집어넣었다.

10 Dec 2009

한글 제목 feedburner 테스트3

아아 마이크 테스트

Neural Nets

Reinforcement Learning Lecture on Videolectures 보고 있는데, 강의하는 아저씨가 이런 얘길 한다:

AI 처음 공부할 때 제일 배우고 싶던 게 인공 신경망이었어요. 신경망은 뇌를 시뮬레이션하는 것이니까요. 얼마나 멋있어요! 하지만 머신 러닝 공부를 하다 보니 신경망은 그냥 비선형 회귀 분석 방식의 하나일 뿐이란 걸 알았죠. 정말 실망했어요.

... ML 공부하는 사람들은 다들 신경망에 낚여 오나봐. 원석이형도 신경망 보고 컴퓨터 공부하고 싶단 생각을 했다던데. -_-

벅스에서 mp3 사겠다고 오랜만에 익스플로러를 열고 결제를 하려다 보니 한국 인터넷의 현실에 대한 짜증이 다시 보글보글 끓어오른다.

결론: 안심클릭 비번 까먹어서 리셋하려니 공인인증서가 필요 'ㅅ')r 아 놔 ㅠ

09 Dec 2009
08 Dec 2009

A parallelized, customizable, open-source implementation of stochastic gradient descent: Vowpal Wabbit

Monty Python 팬들이란.. (한숨)

제주항공 동성 2인 항공권 할인

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

<@legend13> 두커플이 남남 / 여여 로 결제하고 마는데

07 Dec 2009

주말

  1. 토요일에는 SRM454 를 하고, 한 대 남아 있는 집카를 빌려서 벤옹이랑 보은이랑 H마트에 장보러 갔다. H마트에 있는 이가자 헤어비스에서 머리도 자르고 (...) 야채 고기 생선 라면 김 등등을 쓸어담았다. 덕분에 또한번 냉동실은 꽉 찼음. 뿌듯하다... 그리고 오늘 수열이가 해준 고등어조림 눈물 흘리며 먹음. 맛잇따 ㅠ
  2. 마트 댕겨와서 각자의 집에 먹을거 떨어뜨려놓고, Star of Siam 이라는 태국 음식점에서 저녁. 보은이가 쐈음. 그 이후에는 벤옹이 쏘는 닌자 어쌔신. 아, 잘놀았다.
  3. 오늘은 집에서 빨래하고 청소한 뒤 내내 아이폰용 킨들로 테메레르 읽었다. 이제 절반정도 봤나.. 재밌다. ㅠ 수열이 아이폰도 내 아마존 어카운트에 등록해 둬서 이북도 공유 가능하기까지 하니 더 바랄 게 없다. 앞으로 physical 한 책을 살 일이 거의 없을 것 같다는 강력한 예감-_- 이 든다. 테메레르가 6권까지 나와 있으니 당분간 이것만 읽어도 연말은 지나갈 듯.

그래서 원고 안했단 얘깁니다.

SRM 454

실로 오랜만의 SRM. 첫 자바 매치!!! 두둥!!!

코드를 좀 깔끔하게 짜려는 노력을 하게 되다 보니 (그리고 아직 문법이 100% 익숙하지 않아서 IntelliJ 에 의존해야 하다 보니) 코딩이 많이 느리다. 반복된 연습이 역시 대안이지 싶은데 귀찮아서.. 그래도 둘다 패스했으니 별 불만은 없다. 이지+미디엄에서 시간이 너무 오래 걸려서 하드를 짤 시간이 없어서 결국 포기하고 챌페이즈 진입. 하지만 결국 챌린지 못하고 5x 등. 레이팅은 -7. :-(

그래도 패스패스에 의미를 둬야겠다. 아 그리고 하드도 나중에 결국 풀음.

(more)

새 파이썬 대몬 아키텍처

  • 일단 채점 서버 자체를 EC2 위에 올릴 순 없다. 외부 모니터링도 문제가 되고, 멀티 서버 돌릴 때 (그 날이 과연 오긴 올까)
  • 아마존 EC2 쓰면 스케일링이 쉬워진다. 그냥 서버 더 열어달라고 하면 됨~ :-) 인스턴스간에 CPU 파워가 대략 일정하니 time limit consistency 문제도 어느정도 해결된다.
  • 원래 생각했던 것처럼 채점서버별로 스레드를 하나씩 돌려서 producer-consumer 모델로 구현. 단 GIL 이 무서우니 multiprocessing 패키지를 써서 별개의 프로세스로.
  • SQLite 에 멀티프로세스에서 액세스하면 매우 귀찮음. (그렇다고 MySQL 쓰긴 싫다 -_ -;) 그냥 db 접근하는 것은 메인 프로세스로 한정하자.
  • Notification 프로세스는 지금과 같은 형태로. 3번 연속 실패하면 3분 쉬었다가 다시 하는 식.
  • 로깅에 이메일 보내주는 기능을 추가해서, 1) 서버가 맛이 가서 재부팅했다 2) 웹서버 접근에 실패했다 등등의 오류가 발생했을 때 나한테 이메일 보내는 것으로.. 'ㅅ'

채점서버 프로세스는:

  1. 큐에서 작업을 받는다
  2. 아마존에 소스코드 보내서 컴파일 & 실행. 시간 제한 + 5초가 흐르도록 답이 없으면 인스턴스 강제 리셋하고 런타임 에러 보낸다.
  3. 서버가 시작된지 55분이 되면 마지막 20분 동안 서브미션이 없었나 확인하고 없으면 서버

이걸 위해 할 수 있어야 하는 일은

  1. EBS Snapshot 으로부터 새 인스턴스를 얻고 핸들을 반환받음
  2. 인스턴스에 원격으로 명령 내려서 실행 / 결과 넘겨받기 (이거 그냥 ssh 로 해서 표준출력 받아와야 하나.. 사실 그게 제일 간단하긴 함...)
  3. 인스턴스 리셋

이런걸 하려면 Python API 를 쓰면 좋으나.. 버전 따라가기도 귀찮고.. 그냥 아마존에서 나오는 커맨드라인 유틸리티를 쓴다. 스냅샷 내에는 이런 스크립트를 만들어 둬야겠군:

  1. 답안 번호, 문제번호를 넘겨받고 웹서버에 접근해서 소스코드와 채점 데이터, 채점 스크립트를 가져옴 (30초 갭을 두고 3회 연속 실패시에는 별도의 오류 결과로 끝)
  2. 알아서 적당히 잘 컴파일 해주는 스크립트
  3. 알아서 잘 실행해 주고 채점해 주는 스크립트

EBS Snapshot 을 만들 때는

  1. 프로그램 실행하는 데 사용할 계정 만들고 (가능하면 chroot jail 에 넣음)
  2. 각종 컴파일러 깔아두고
  3. 해당 사용자에게 네트워크 액세스 막고...

이렇게 하면 좀 되려나?