|
* 본 리뷰는 출판사에서 도서를 제공 받아, 직접 읽고 작성한 리뷰입니다. 딥러닝 공부를 하면서 실제 논문을 읽고 구현된 코드를 들여다보면 최근에 나온 모델들의 경우 pytorch보다는 jax로 구현된 논문들이 있는 것을 확인할 수 있었습니다. 개인적으로 jax를 공부해 보면서 어려웠었는데 Jpub에서 JAX/Flax로 딥러닝 레벨업이라는 책을 출판해 주셔서 읽어보게 되었습니다. 개인적으로 이 책을 읽으면서 가장 만족스러웠던 부분은 JAX가 기존에 사용되던 프레임워크나 라이브러리와는 어떤 점으로 다른지에 대해 집중적으로 설명해 준 점이었습니다. 특히, 함수형 프로그래밍과 관련해서 JAX에서는 어떤 식으로 작성된 함수를 다루는지 알 수 있었고, 이에 대한 코딩 스타일에 대해서도 예제와 함께 나와 있어서 쉽게 이해할 수 있었던 것 같습니다. 또한, Numpy와 JAX의 차이점에 대해서도 나와 있는 점이 매우 흥미로웠습니다. 평소에 Numpy 라이브러리의 주요 기능들을 사용하기만 했지, 그 밑의 단의 특징에 대해서는 고민은 안 해 보았는데, 이에 대한 자세한 설명과 JAX에서는Numpy에서의 부족한 점들을 어떻게 보완했는지 나와 있기에 흥미롭게 읽었습니다. 다만, 해당 책의 후반부에는 JAX를 이용한 여러 딥러닝 모델의 구현 방법이 나와있는 만큼 딥러닝 기법에 대해 이해가 있는 독자들에게 추천합니다. 각 모델에 대한 설명이 나와있긴 하나 해당 책의 목적이 라이브러리에 대한 소개 및 활용 방법을 설명하는 것을 주 목적으로 잡고 있기에 모델들에 대한 설명은 간단하게 소개된 편입니다. 나와 있는 기법들에 대한 이해도가 부족하다면 외부 자료들과 같이 학습하면 좋을 듯싶습니다. |
| pytorch로만 딥러닝 모델들을 설계해보고 여태 python을 통해서만 딥러닝 모델들 학습해보곤 했는데, jax/flax 도서를 읽어보면서 훨씬 빠르게 연산할 수 있는 jax 프레임워크에 대해 알게 되었고 기존의 numpy, torch 와 크게 다르지 않은 동작법으로 금방 실습해볼 수 있던 것 같습니다! 더군다나 도서 내에 다양한 딥러닝 모델들을 구현해 볼 수 있는 예제들이 있어 좀 더 쉽게 접근할 수 있다는 장점이 있어 딥러닝을 공부하시는 분 특히 jax 프레임워크를 한번이라도 들어보셨던 분이라면 강력히 추천드립니다! |
|
그러던 중 최근에 JAX와 Flax를 활용한 딥러닝 프레임워크에 대해 다룬 이 책을 접하게 되었고, 바로 읽어보게 되었다. 이 책은 모두의 연구소 JAX/Flax LAB이 JAX를 어떻게 실용적으로 활용할 수 있는지에 중점을 두고 집필한 책이다. 그 목표에 맞게 이론과 실제 예제가 적절하게 섞여있다.
개발 서적치고 짧은 분량에도 불구하고 간결하면서 쉽게 이해 가능한 설명과 예제 코드에 대한 설명으로 가득 채워져 있어서 빠르고 수월하게 JAX를 익히기에 좋은 책이었다.
전에 텐서플로와 파이토치로 구현해 본 적이 있던 CNN, ResNet, DCGAN 같은 친숙한 딥러닝 모델을 JAX로 구현해 보면서 해당 라이브러리를 더 쉽게 이해할 수 있었다.
Numpy와 JAX를 비교해서 설명하는 부분과 참고 내용으로 텐서플로, 파이토치에서는 어떻게 구현하는지 짧게 비교 설명한 부분도 마음에 들었다. 이 책은 파이썬에 익숙하며 머신러닝/딥러닝에 대한 사전 지식이 있고 파이토치 보다 확장성이 뛰어난 라이브러리를 프로젝트나 연구에 적용할 필요성을 느낀 사람들에게 추천한다. |
▶▶ 이 리뷰는 출판사에서 도서를 제공 받아, 직접 읽고 작성한 리뷰입니다. <JAX/Flax로 딥러닝 레벨업>은 딥러닝의 차세대 라이브러리로 각광받는 JAX와 Flax를 본격적으로 다룬 국내 최초의 책입니다. 이 책은 JAX의 함수형 프로그래밍 개념, 자동 미분, 그리고 병렬 연산 기능을 상세히 설명하고, 실제 딥러닝 모델을 구축하며 병렬 가속화의 힘을 경험할 수 있도록 안내합니다. 특히, CNN, ResNet, DCGAN, CLIP 등의 딥러닝 모델을 예제로 다뤄, 독자가 실제 프로젝트에 적용할 수 있도록 돕습니다. 이 책의 가장 큰 장점은 JAX와 Flax를 쉽게 따라할 수 있게 구성되어 있다는 점입니다. 초심자들에게는 JAX의 함수형 프로그래밍 개념이 조금 어려울 수 있지만, 실습을 통해 고급 모델링과 병렬 가속화의 실제적인 이점을 경험할 수 있게 돕습니다. 예제 코드와 함께 다양한 딥러닝 모델을 단계별로 구축하면서 독자는 JAX와 Flax의 강력한 기능을 자연스럽게 습득할 수 있습니다. 특히, JIT 컴파일, 벡터화, 병렬 처리 등 JAX의 고유한 기능을 각 장마다 예제 코드와 상세한 설명을 통해 그 개념을 자연스럽게 습득할 수 있게 돕습니다. 어느 정도 딥러닝과 파이썬에 익숙한 독자를 대상으로 하고 있기 때문에, 완전 초보자에게는 다소 어려울 수 있습니다. PyTorch나 TensorFlow에 익숙한 독자라면 JAX로의 전환이 매끄럽게 이루어질 수 있습니다. 함수형 프로그래밍의 패러다임이 초심자에게는 다소 생소할 수 있지만, 선형대수와 기본적인 머신러닝 지식이 있는 독자라면 그 개념을 이해하는 데 큰 어려움이 없을 것입니다. 실제로 이 책은 파이썬과 딥러닝 지식을 어느 정도 갖춘 독자들에게 적합하며, JAX의 강력한 성능을 효과적으로 활용할 수 있도록 돕습니다. 따라서, 파이썬과 선형대수, 그리고 기본적인 머신러닝 지식을 가지고 있는 독자라면 이 책을 통해 JAX와 Flax의 강력한 기능을 효과적으로 학습할 수 있습니다. 각 단계를 차근차근 밟아가며 자신만의 실습을 추가한다면 훨씬 더 풍부한 학습 경험을 얻을 수 있을 것입니다. <JAX/Flax로 딥러닝 레벨업>은 대규모 모델 학습에 관심 있는 개발자들에게 강력히 추천할 만한 실용적인 안내서입니다. JAX의 확장성과 Flax의 유연성에 대한 이해를 통해 딥러닝 개발에 도움을 줄 것입니다. #JAX/Flax로딥러닝레벨업 #JAX/Flax로_딥러닝_레벨업 #Jpub #제이펍 #JAX #Flax #딥러닝 #이영빈 #유현아 #김한빈 #조영빈 #이태호 #장진우 #이승현 #김형섭 #박정현 JAX/Flax로 딥러닝 레벨업
|
|
이번에 리뷰하게 된 도서는 구글에서 개발한 고성능 딥러닝 라이브러리인 JAX/Flax 프레임워크에 대한 내용을 다루고 있는 도서이다. 이 도서를 접하기 전까지 JAX에 대해서는 이름만 들어본 수준이었지, 구체적으로 어떤 기능을 가지고 있는지 전혀 알지 못했었기에 본 도서를 통해 JAX와 Flax라는 것에 대해 어떤 것인지 개념을 이해할 수 있는 좋은 기회가 되었던 것 같다. JAX는 구글 딥마인드에서 사용하고 있는 고성능 수치계산을 지원하는 딥러닝 프레임워크이다. 뒤에서 또 언급하겠지만 JAX는 PyTorch나 TensorFlow와 다르게 함수형 프로그래밍 방식을 사용하기 때문에 이에 대한 이해가 좀 필요하다. 그리고, Flax는 구글 브레인 팀에서 JAX팀과 협업을 하면서 JAX를 조금 더 쉽게 사용할 수 있도록 하기 위해 만들어진 오픈소스로서, Flexibility+JAX의 의미로 만들어진 합성어이다. 그래서 요새 JAX 기반으로 딥러닝 모델을 만들 때에는 대부분 Flax를 함께 사용한다고 한다 아래 표를 보면, 더 나아가서 Whisper-JAX를 Google의 TPU(Tensor Processing Unit) 환경에서 돌리면, A100 GPU에서 돌릴 때보다도 4분의 1 정도의 시간 밖에 안걸리는 걸 확인할 수 있다.ㅋ 구글의 AI 연구원들은 사내에서 연구하고 테스트하기 참 좋을 것 같다는 생각이 든다. ( ![]() 벤치마크 출처 : https://github.com/sanchit-gandhi/whisper-jax 이 책은 총 5개의 장으로 구성되어 있다. 1장에서는 JAX/Flax에 대한 소개와 JAX 사용에 필요한 함수형 프로그래밍에 대한 설명, 그리고 JAX/Flax 설치 방법에 대한 내용을 담고 있다. 특히, 함수형 프로그래밍에 대한 개념 설명은 나처럼 일반적인 절차적 프로그래밍 방식에 익숙한 개발자들에게 꼭 필요한 부분이라는 생각이 든다. JAX에서 요구되는 함수형 프로그래밍에서 가장 중요한 핵심은, 함수가 외부에 영향을 미치거나 상호작용을 수행하지 않는 순수 함수(pure function) 형태로 구현되어야 한다는 것이며, 순수 함수로 만들어야만 병렬처리나 분산처리 시 독립적인 활용과 코드 재사용이 가능하게 된다. (그렇기 때문에 JAX가 PyTorch나 TensorFlow에 비해 수행 속도가 빠른 것이다.) 2장부터가 본격적인 JAX를 활용한 개발에 대한 내용인데, JAX의 강력한 기능 중 하나인 자동 미분 기능에 대한 소개부터 손실 함수의 기울기, JAX의 함수형 언어적 특징에 대한 설명, JAX를 활용한 선형회귀 수행 등을 Colab 기반 실습 예제와 함께 담고 있다. 이 부분은 사전에 딥러닝에 대한 지식을 대략적으로 알고 있어야 원활한 학습이 가능할 듯 하고, 아니라면 구글링을 좀 하면서 책을 보면 좋을 것 같다. ![]() JAX 활용 기본 예제 코드 특히, JIT(Just-In-Time) 컴파일을 통해 더 빠른 연산을 지원하는 JAX의 특징에 대한 소개를 하면서, JAX가 성능 향상을 위해 어떤 기술을 품고 있는지 이해할 수 있도록 해준다. JIT 컴파일이란 보통 소스코드를 실행하는 시점에 기계어로 변환하는 컴파일 기법을 이야기하며, 컴파일한 후 그 기계어 코드를 캐싱하여 같은 함수가 여러 번 호출될 때는 캐시된 코드를 활용하는 방식으로 기계어 코드 변환 과정을 줄이게 되어 성능 향상을 꾀할 수 있게 된다. JAX의 JIT 컴파일링 과정은 "jax.jit(함수명)"을 통해 특정 함수로의 변환이 이루어지게 되며, 이러한 과정을 통해 동시에 여러 연산을 실행하거나 병렬로 코드를 실행하는 등의 최적화를 가능하게 한다. 이 외에도 2장에서는 자동 벡터화, 자동 미분, pmap을 통한 병렬처리와 같은 JAX의 성능 최적화 방식에 대해 설명하고 있다. 2장은 한 마디로 JAX가 성능 측면에서 왜 우위를 가질 수 밖에 없는지에 대한 여러 가지 원리를 이해할 수 있는 chapter라 할 수 있겠다. 3장은 Flax에 대한 설명을 담은 chapter이다. 앞서도 소개했듯이 Flax는 JAX를 사용하는 딥러닝 연구자들을 위해 개발된 고성능 신경망 라이브러리이자 에코 시스템이다. 최초 구글 리서치 브레인 팀에서 JAX팀과 협력하며 개발하였고 현재는 오픈소스 커뮤니티와 공동으로 개발하고 있다. TensorFlow 딥러닝 프레임워크의 쉽고 간결한 사용을 위해 Keras API가 나온 것처럼, JAX 프레임워크의 사용을 돕기 위해 나온 것이 Flax라고 보면 된다. 3장에서는 이러한 Flax 라이브러리를 통해 간단한 합성곱 신경망(CNN)을 구축하고, MNIST 데이터셋(손글씨로 쓴 된 숫자 이미지 데이터)에 대해 이미지 분류 태스크를 학습시키는 실습 튜토리얼을 소개하고 있고, 이를 통해 Flax의 사용을 연습해 볼 수 있다. 2~3장에서 JAX/Flax의 기본적인 사용법을 다루었다면, 4장에서는 이러한 기초 지식을 바탕으로 JAX/Flax 라이브러리를 통해 딥러닝 모델 구축과 미세조정(파인튜닝) 과정을 수행하는 내용에 대해 다루고 있다. JAX/Flax에 대한 가장 종합적인 활용 부분을 담고 있는 본 도서의 핵심 chapter라고 할 수 있겠다.4장에 다루는 내용을 구체적으로 나열하자면, 순수 JAX만을 활용하여 CNN 모델을 구축하는 부분과 ResNet(Residual Network), 생성형 AI 분야에서 많이 활용되고 있는 DCGAN(합성곱 레이어로 구성된 Deep Convolutional GAN), 그리고 OpenAI에서 개발한, 대규모 이미지-텍스트 쌍으로 비지도 학습된 멀티모달 신경망인 CLIP(Contrastive Language-Image Pretraining), Flax와 TPU를 활용하여 허깅 페이스의 Transformers 라이브러리에 있는 DistilGPT2 모델을 미세조정 학습하는 과정 등이 4장에서 다루고 있는 내용이다. 분량에 비해 다소 많은 내용을 담고 있으며, 완벽한 이해를 위해서는 이 분야에 대한 지식이 좀 필요하지만, 예제 위주로 설명되어 있어 실제 실습을 따라가면서 JAX/Flax를 활용하여 문제해결 전략을 구현하는 부분에 대해서는 대략적으로 이해하고 학습할 수 있기 때문에, 너무 겁먹을 필요는 없을 듯.. (우리에게는 구글신이 있다.^^) 본 chapter를 통해 각자가 수행하고 있는 딥러닝 연구 프로젝트에 JAX/Flax를 적용하는 능력을 키울 수 있을 것 같다. ![]() 마지막 5장은 딥러닝 프로젝트 실습 시 학습 속도를 올리기 위해 구글 클라우드의 TPU 환경을 활용하는 방법을 간략히 소개하고 있다. 이 chapter는 약간 부록같은 개념으로서, 앞에서도 언급한 바와 같이 본격적인 딥러닝 연구를 위해 TPU가 필요하다면, 누구나 이 TRC 프로그램을 통해 TPU 환경 확보를 시도해 보는 것도 좋은 방법인 것 같다. 본 도서의 전체 과정에 대한 실습 전에 5장을 먼저 읽어보고 TPU 환경을 확보하고 난 후 본 도서를 통한 학습을 진행하는 것도 괜찮을 것 같다. ![]() TRC 프로그램 신청 사이트 (https://sites.research.google/trc/about/) 결론적으로, 본 도서는 다음과 같은 사람들이 읽으면 좋을 것 같다.
최근 AI 관련 학문이 큰 각광을 받으면서 단순히 관련 서비스를 활용하는 이용자의 수준을 넘어서, AI 기술 자체에 대한 연구에 뛰어드는 분들도 예전에 비해 많아지고 있는 것 같고, 그로 인해 SW개발자라면 자연스레 머신러닝과 딥러닝에 대한 어느 정도 상식 수준 또는 그 이상의 학습과 활용 경험이 필수가 되어 가고 있다는 생각이 든다. 그와 더불어 이러한 딥러닝 연구를 진행할 때의 생산성 향상을 위해서 JAX/Flax 프레임워크에 대해서도 점점 관심도가 높아질 것이라 생각되며, 본 도서는 그러한 JAX/Flax를 처음 접하고 활용하는데 있어 분명 좋은 길잡이가 될 것이다. (JAX/Flax 관련 국내 도서는 아직까지 본 도서가 유일한 것으로 알고 있음) 현재 담당하고 있는 업무가 딥러닝이나 머신러닝과 직접적으로 관련된 업무는 아니어서(물론 이상탐지 부분에 있어서 좀 관련은 있지만..) 나 같은 경우는 JAX/Flax를 당장 활용할 일은 없을 것 같다. 그렇지만, 최근 SW개발자에 대한 AI 역량 강화 기조에 따라 나 또한 조만간 AI 관련 과제를 수행할 가능성이 있어 그 때 본 도서를 다시 뒤적거리며 JAX/Flax를 활용할 일이 곧 생길 수도 있을 것 같다. |
|
[책리뷰] JAX/Flax로 딥러닝 레벨업 ![]() 전반적인 소감 및 마음에 드는 부분흔히들 딥러닝 프레임워크 하면 Tensorflow나 PyTorch를 떠올린다. 인공지능 개발 경쟁이 한창인 요즘 JAX는 구글 딥마인드에서 개발, 유지관리하고 사용하는 또 다른 딥러닝 프레임워크다. 텐서플로우나 파이토치를 알려주는 책은 많지만 JAX 를 알려주는 책이 24년 9월 기준 이 책이 유일하다. 이 책에서도 쓸데없는 파이썬 기초 프로그래밍을 알려주는 페이지 없이 JAX/Flax 에 대해서만 다룬다. 책의 머릿말에도 나오듯이 JAX/Flax LAB은 '모두의 연구소'에서 활동하는 AI 리서처와 현업자로 구성되어 있는데, 해당 구성원들이 집필한 책이다. 아무리 공식 문서를 보고 공부하는 게 좋다고 하더라도 이렇게 번역하고 한국어로 책이 나온 점은 대단히 감사하다.
대상 독자 및 책 난이도JAX에 관심 있는 모든 개발자와 학생들을 대상으로 한다. 특히 파이썬을 통한 고성능 계산과 머신러닝에 익숙하거나 관심이 있는 분들도 대상 독자다. 이 책을 보기 위해 적어도 파이썬 프로그래밍 기초 지식이 있어야 하며, 선형대수 기본 개념과 머신러닝/딥러닝 기초 이론이 필요하다. 여기에 함수형 프로그래밍이 대략 어떤건지 간단하게나마 알고 있으면 더욱 좋다. 개인적으로는 텐서플로우와 파이토치로 딥러닝을 공부해본 개발자를 대상으로 한 느낌이다. ![]() 텐서플로우나 파이토치로 딥러닝 공부를 해본 경험이 있다면 무리없이 따라할 수 있다. 파이썬 라이브러리 import 할 때, JAX로 대체하는 것이 대부분이라고 보면 될 것이다. 그러나 처음부터 JAX로 시작한다고 하면 어려울 수 있다. 다루는 내용과 범위JAX/Flax 프레임워크에 대해서만 다룬다. 책의 목차는 다음과 같다.
결론딥러닝 모델 학습에 막대한 리소스가 필요한 대규모 모델 연구에 깊이 관여 중이라면 JAX 를 고려해볼만 하다. 따라서 대규모 모델 연구 즉, LLM 같은 걸 연구하는 사람들에게 추천한다. 지난 약 1년 동안 나온 논문과 릴리스를 살펴보면 구글에서 많은 연구가 JAX로 옮겨갔다는 사실을 알 수 있다고 한다. 모든 것을 충족시키는 만능 프레임워크는 없다. 어떤 문제를 해결할 것인가, 배포할 모델의 크기, 플랫폼 등등에 따라 달라진다. 조그마한 모델을 학습시키기 위해 JAX를 고려할 필요는 없다는 의미이다. 그러나 대규모 연산의 확장성을 염두에 둔다면 JAX도 고려해볼만 하다. |
|