분류 전체보기 49

JAX 공부 8 - JIT in JAX

JIT을 공부하기 전에, 내가 위키에서 JIT의 정의를 가져왔다. 사실 JIT이 뭔지 정확히 감이 안 잡혔는데, 위키를 보니 감을 잡아가는 것 같다. JIT 컴파일(just-in-time compilation) 또는 동적 번역(dynamic translation)은 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법이다. 전통적인 입장에서 컴퓨터 프로그램을 만드는 방법은 두 가지가 있는데, 인터프리트 방식과 정적 컴파일 방식으로 나눌 수 있다. 이 중 인터프리트 방식은 실행 중 프로그래밍 언어를 읽어가면서 해당 기능에 대응하는 기계어 코드를 실행하며, 반면 정적 컴파일은 실행하기 전에 프로그램 코드를 기계어로 번역한다. JIT 컴파일러는 두 가지의 방식을 혼합한 방식으로 생각할 수 있는데, 실..

연구/JAX 2022.07.19

JAX 공부 7 - difference from numpy

https://jax.readthedocs.io/en/latest/jax-101/01-jax-basics.html JAX As Accelerated NumPy — JAX documentation jax.readthedocs.io 을 공부하면서 작성하고 있다. JAX는 함수형 프로그래밍을 하기 위해서 만들어졌다는 게 중요하다. 아... 근데 내가 직접 이 문서를 볼수록 나랑 잘 맞는 거 같다. 나는 학창 시절에도 python보다 c++ 이 더 편했다. python의 ambiguity가 나를 더 힘들게 했는데, 점점 재미가 붙는 거 같다. 아무튼.. 계속해서 설명하면 JAX를 익히는데 함수형 프로그래밍을 잘 알 필요는 없다. 사실 나도 함수형 프로그래밍을 모른다. 다만 functional programmin..

연구/JAX 2022.07.19

JAX 공부 6 - jax as accelerated numpy, grad

https://jax.readthedocs.io/en/latest/jax-101/01-jax-basics.html JAX As Accelerated NumPy — JAX documentation jax.readthedocs.io 공부하면서 정리하고 있다. DeviceArray : JAX가 array를 표현하는 방법이다. JAX는 다른 backend (CPU, GPU, TPU)에서 같은 코드로 돌릴 수 있다. asynchronous dispatch로 인해서 (https://jax.readthedocs.io/en/latest/async_dispatch.html#asynchronous-dispatch 참고) 뒤에 추가적인 코드를 붙인다. 쉽게 asynchronous dispatch를 이야기하면 계산을 기다리지..

연구/JAX 2022.07.19

Application: SOP

(주 1) SOP는 공개하지는 않았지만, 제 메일로 자신이 '딥러닝 이론'을 전공하고 싶은 경우, 자신의 CV랑 짤막한 소개를 보내주시면 제 SOP를 보내드리겠습니다. 제 메일은 cpark97@mit.edu입니다. (주 2) 과마다 매우 다를 것이기 때문에 참고만 하시면 좋을 것 같습니다. SOP는 내가 생각했을 때 자신이 지금까지 쌓아온 실적과 비슷하게 중요한 요소이다. 그 이유는 첫째, 생각보다 지원자들 중에서 현재의 Literature를 파악한 사람이 잘 없다. 사실 학석사 정도에서 현재 리터레쳐를 잘 파악하는 것은 거의 불가능이다. 내 sop를 지금 와서 돌아보면 부끄럽다. 당연한 것이기도 하지만, 그만큼 조사를 더 해서 어떤 일이 현재 일어나고 있는지를 정확하게 파악하고 그를 넘어서 앞으로 사람..

Applicaiton: interview

인터뷰 준비는 10월부터 진행했다. 내가 준비했던 notion을 여기에 첨부하도록 하겠다. https://frost-faucet-55b.notion.site/Interview-4445aab0c4f94b3f99fda8088d322bf9 나는 학교 페이지에서 같이 인터뷰 준비를 할 사람을 구했고, 지금까지도 친하다. 하하 역시 같이 역경을 이겨내니 전우애가 생기는 것 같다. 같이 준비한 친구는 진짜 열심히 논문도 쓰고 여러모로 본받을만한 친구였다. 노션에는 내가 준비했던 답변, 준비했던 문제와 팁을 모아두었다. 여러 인터넷 사이트들을 다 모아보았고, 이런 문제들을 참고하면 좋을 것 같다. 기본적인 문제들에 대한 것들을 외우다시피 준비를 했다. 특히 나는 영어를 못하는 편이라서, 스킴을 짜고 어떤 문제에 대해..

JAX 공부 5 - Control Flow

https://jax.readthedocs.io/en/latest/notebooks/Common_Gotchas_in_JAX.html을 공부하면서 작성 중이다. 🔪 JAX - The Sharp Bits 🔪 — JAX documentation jax.readthedocs.io @jit def f(x): if x < 3: return 3. * x ** 2 else: return -4 * x # This will fail! try: f(2) except Exception as e: print("Exception {}".format(e)) 안 되는 것을 확인 가능하다. 이걸 작성하면서 살짝 이해한 거 같음. jit의 특성이랑 꽤 관련이 있다. 어쨌든 전에 cache에 저장 도면서 머가 될지를 결정해야 하는데, t..

연구/JAX 2022.07.18

JAX 공부 4 - out of bounds indexing, non array input, random numbers

https://jax.readthedocs.io/en/latest/notebooks/Common_Gotchas_in_JAX.html 🔪 JAX - The Sharp Bits 🔪 — JAX documentation jax.readthedocs.io Out of bound를 만나면 그냥 실행을 안 해버린다. (넘겨서 실행한다). Non array input은 다음과 같다. try: jnp.sum([1, 2, 3]) except TypeError as e: print(f"TypeError: {e}") TypeError: sum requires ndarray or scalar arguments, got at position 0. 즉, 기존의 numpy와 다르게 list를 안 받는 걸 체크할 수 있다. 사실 이 ..

연구/JAX 2022.07.18

JAX 공부 3 - Pure function, array updates

https://jax.readthedocs.io/en/latest/notebooks/Common_Gotchas_in_JAX.html 🔪 JAX - The Sharp Bits 🔪 — JAX documentation jax.readthedocs.io Pure function 개념에 대해서 좀 헷갈려서 적으면서 정리하고자 한다. def impure_print_side_effect(x): print("Executing function") # This is a side-effect return x # The side-effects appear during the first run print ("First call: ", jit(impure_print_side_effect)(4.)) # Subsequent runs..

연구/JAX 2022.07.18

JAX 공부 2 - JIT 기초

https://jax.readthedocs.io/en/latest/notebooks/thinking_in_jax.html를 읽으며 공부하고 있다. How to Think in JAX — JAX documentation jax.readthedocs.io JIT이란 just in time이라는 뜻이다. 이 decorator를 사용한다면, operation이 최적화된 다음에 한 번에 돌아간다. (데코레이터 : https://dojang.io/mod/page/view.php?id=2427 참고) 모든 JAX 코드가 JIT complied 될 수 있는 건 아니다. (static, known at complie time이어야 한다). 아.. 이래서 training에서는 시간이 비슷하고 infernece에서 속도가 ..

연구/JAX 2022.07.18

JAX 공부 - jax.numpy, jax.lax 기초

JAX는 XLA를 이용해서 Numpy code를 accelerator에서 돌리는 것이다. 요즘 하두 JAX에 대한 말이 많아서, 나도 빠르게 익혀서 내 분야인 강화 학습, 딥러닝에 적용하고자 한다. 기본적으로 JAX document를 하나하나 읽어보고, 이후에 더 추가적으로 구현들을 봐보려 생각한다. 특히 Diffusion Model이나 RL 내에서 적어도 3배 정도 빨라진다 지인들이 추천해서, 안 할 수가 없다. 공부하면서 적은 블로그이니, 틀릴 수 있음을 감안해주면 좋을 거 같다. 생각이 나서, vscode에 colab도 연동해서 공부해보려 한다. (https://dacon.io/forum/406050에서 참고해보려 한다) 평소에는 연구실의 gpu를 썼는데 살짝 갭 타임이 있어서 (MIT에 입학 전에..

연구/JAX 2022.07.18