[last updated Aug 05, 2022]

reference book : 구글 브레인 팀에게 배우는 딥러닝 with TensorFlow.js

 


서문

그동안 대부분의 딥러닝 프레임워크(Tensorflow 등)들은 파이썬으로 쓰여있어서, 파이썬이 익숙치 않은 사람들이 프레임워크를 다루는 것에 어려움이 있었다. 구글 브레인 팀은 자바스크립트와 Tensorflow 를 연결하여 자바스크립트 개발자들도 머신 러닝 모델을 구축하고 배포할 수 있도록 하며, 새로운 종류의 on-device 컴퓨팅을 가능하게 만들었다.

Tensorflow.js는 자바스크립트를 통해 신경망을 다루며 다양한 데이터 형태의 인풋이 가능하도록 하며 사전학습모델(pre-trained model)을 활용한 학습, fine-tuning, 더 나아가 추론(inference) 등이 가능케 하는 API를 제공한다. 

이 책은 Tensorflow.js 의 기능 및 기본적인 머신러닝/딥러닝 이론을 제공하며, <케라스 창시자에게 배우는 딥러닝> 책을 토대로 작성된 책이다. 딥러닝은 수학적 지식을 많이 알아야한다는 조건때문에 허들이 높게 느껴졌던 분들에게 좋은 책이 될 것 같다. 신경망 학습을 통해 활용하거나 확장할 수 있는 서비스가 굉장히 많기 때문에 많은 입문자 혹은 웹 개발자들이 읽기에 적합한 책이다.

책 자체가 프론트엔드 개발이나 Node.js 기반 백엔드 개발 경험을 가진 자바스크립트 실무 경험자를 대상으로 하여 쓰여졌기 때문에 자바스크립트를 경험해 본 사람이라면 이 책을 통해 누구나 쉽게 신경망을 다룰 수 있을 것이다.


환경설정

1) 책을 읽고 실습을 시작하기에 앞서, 도서의 부록 569페이지를 참고하여 실습 환경설정을 해야 한다. 책에 있는 예제를 실행하기 위해서는 node.js 와 npm을 설치해야 한다.

2) Node.js에서 Tensorflow.js GPU 가속 버전을 사용하기 위해서는 CUDA와 CuDNN을 설치해야 하며, CUDA를 지원하는 NVIDIA GPU가 장착되어야 한다. 1이 진행되었다는 가정하에 하기 진행사항을 서술한다.

<리눅스에서 tfs-node-gpu 설치하기>

  1. 리눅스에서 CUDA 툴킷을 설치한 후, sudo 명령으로 파일을 실행한다. 만약 이미 설치된 NVIDIA 드라이버의 버전이 오래됐거나 드라이브가 미설치되었다면 설치 과정에서 NVIDIA 드라이버를 설치 혹은 업데이트 해야한다. 이럴 경우에는 셸 전용 모드로 진입하여 설치하고 시스템을 리부팅해야 한다.
  2. 만약 위 단계가 마무리 되었다면 nvidia-smi 명령이 정상적으로 실행이 되고 GPU의 상태를 확인할 수 있다. 이후 환경 변수에 CUDA 라이브러리 디렉토리를 추가해주면 된다.
  3. 그 다음 CuDNN을 설치해야 하는데, CuDNN은 CUDA를 기반으로 구축한 심층 신경망 연산을 가속하기 위한 NVIDIA 라이브러리이다. 이는 실행 가능한 설치 파일이 아니라 동적 라이브러리 파일과 C/C++ 헤더를 포함하고 있는 압축파일이므로 적절한 폴더에 압축을 풀어 복사해야 한다. 아래 명령어를 통해 진행이 가능하다.
tar xzvf cudnn-10.0-linux-x64-v7.6.4.38.tgz
cp cuda/lib64/* /usr/local/cuda/lib64
cp cuda/include/* /usr/local/cuda/include

   4. 설치가 완료되었다면 node에서 tfjs-node-gpu를 import하여 확인할 수 있다.

npm i @tensorflow/tfjs @tensorflow/tfjs-node-gpu
node

   5. Node.js 명령줄 인터페이스에서 아래와 같이 입력하면 정상 설치가 완료되었을 때 GPU를 찾았다는 메시지와 tfjs-node-gpu를 사용할 준비가 되었다는 로그를 확인할 수 있다.

const tf = require('@tensorflow/tfjs');
require(@tensorflow/tfjs-node-gpu');

  6. 로그가 확인된다면 준비가 다 된것이고 package.json에 사용할 라이브러리 버전을 추가한다. 이후 main.js에서 필요한 라이브러리를 임포트하면 정말 끝이다.


<윈도우에서 tfs-node-gpu 설치하기>

  1. 설치 전 현재 윈도 버전이 CUDA 툴킷 시스템 요구 사항에 맞는지 확인해야 한다. 일부 버전과 32bit 는 지원하지 않는다.
  2. CUDA 툴킷 설치에 필요한 비주얼 스튜디오를 설치한다. (이미 설치되어있다면 패스해도 무방하다.)
  3. CUDA 툴킷을 설치한 후, CuDNN을 설치하는데 이 두 버전이 맞는 버전인지 확인한다.
  4. CuDNN은 zip파일이기 때문에 CUDA 툴킷이 설치된 디렉터리를 찾고 압축 해제한 CuDNN 파일을 동일 이름의 하위 폴더에 복사한다. 이 과정에서 관리자 권한이 필요할 수 있다.
  5. CUDA 툴킷과 CuDNN을 설치한 후 pc를 재부팅한다.
  6. window-build-tools npm 패키지를 설치하고, npm으로 tfjs와 tfjs-node-gpu 패키지를 설치한다.
npm install --add-python-to-path='true' --global windows-build-tools
npm install @tensorflow/tfjs @tensorflow/tfjs-node-gpu

 7. 설치를 확인하기 위해 node 명령줄에서 아래 코드를 실행하고 에러 없이 실행되는지, 로그가 잘 출력되는지 확인한다. 

const tf = require('@tensorflow/tfjs');
require('@tensorflow/tfjs-node-gpu');

본문

전부 적기엔 방대하여 이 책의 주요 포인트와 인상적인 부분만 추려 기록한다.

" 왜 자바스크립트와 머신 러닝을 합쳐야 하나요? "

  • 머신 러닝은 일반적으로 주로 백엔드에 사용되는 언어로 수행되어 웹 브라우저가 아닌 서버나 워크스테이션에서 실행된다. 심층 신경망 모델의 훈련을 위해서는 GPU와 멀티코어가 필요하며, 훈련 데이터는 백엔드에서 입력하는 것이 가장 편리하다. ex) native 파일
  • 머신 러닝이 훈련된 후 배포되지 않는다면 컴퓨터 자원 낭비에 불과하다. 많은 모바일 앱은 웹 뷰로도 전환되는데 그렇기 때문에 웹 브라우저가 딥러닝 모델을 배포하기 위한 합리적인 선택인 것이다.
  • 웹 서비스를 설계하고 확장할 때는 서버 비용이 가장 큰 모델이다. 딥러닝 모델을 위한 GPU를 따로 구축하며 트래픽이 늘어나고 클라우드 비용이 높아지는데, 모델을 클라이언트 측에 배포함으로써 문제를 해결할 수 있다. 모델을 클라이언트 측에 다운로딩하는 오버헤드는 브라우저 캐싱과 로컬 스토리지 기능으로 완화할 수 있다.

그 외에 추론 속도 증대, 데이터 프라이버시, WebGL 가속, 즉각적인 사용 등 자바스크립트를 활용한 다양한 이점이 있다.


후기

파이썬으로만 데이터를 다뤄보고, 자바스크립트는 웹 페이지를 구현하는 데에만 사용해온 나에게 자바스크립트를 활용한 딥러닝이라는 건 상상할 수 없는 조합이었다. 물론 이 책을 보기 전까지는 그랬다.... 두 언어 모두 스크립트 언어라는 공통점을 제외하고는 js로 사용하는 것에 대한 이점을 느낄 수 없었다. 하지만 막상 책을 보고 실습을 진행해보니 사용하는 언어만 바뀌었을 뿐 오히려 자바스크립트라는 언어의 특성을 잘 살려 쉽게 구성된 것 같아 재미있었고 굉장히 신선했다.

그도 그럴것이 목차의 구성을 보면 기본적인 머신러닝, 딥러닝 방법론적인 개념에 대한 설명부터 선형회귀,신경망에 대한 설명도 너무 친절하게 되어 있다. 실습을 통해 실제 딥러닝 workflow를 경험하며 예측모델을 만들어보고, 더 나아가 LSTM, GAN 등을 활용한 딥러닝과 강화학습까지 진행할 수 있다. 

일반적인 딥러닝 책이라면 이 단계까지 진행했겠지만, 모델 테스트 및 최적화, 배포까지 하는 과정까지 소개를 하며 구축부터 배포까지 end-to-end 과정을 친절하게 설명하고 있다. 또한 중간중간 연습문제도 제공하며, 독자가 딥러닝에 대한 지식을 탄탄하게 쌓을 수 있도록 잘 설계된 책이다.  

주변에 데이터를 다루거나 딥러닝을 배우고 싶어하는 웹 개발자분들이 많은데 꼭 추천하고 싶은 책이다. 구글 브레인팀 최고!

+ Recent posts