1.2.1 Node.js를 사용한 딥러닝
보안과 성능이라는 이유 때문에 웹 브라우저는 한정된 메모리와 저장 공간 할당 측면에서 자원이 제한적인 환경으로 설계되었습니다. 브라우저가 자원이 적게 드는 다양한 종류의 추론과 작은 규모의 모델 훈련, 전이 학습에는 이상적이지만 대용량 데이터로 대규모 머신 러닝 모델을 훈련하는 데는 이상적인 환경이 아니라는 의미입니다. 하지만 Node.js가 완전히 판도를 바꾸었습니다. Node.js를 사용하면 웹 브라우저 밖에서 자바스크립트를 실행할 수 있기 때문에 RAM, 파일 시스템 같은 네이티브 자원을 모두 활용할 수 있습니다. TensorFlow.js는 tfjs-node라 부르는 Node.js 버전을 제공합니다. C++와 CUDA 코드를 컴파일한 네이티브 텐서플로 라이브러리를 직접 바인딩하기 때문에 (파이썬용) 텐서플로가 사용하는 것과 같은 병렬화된 CPU와 GPU 연산 커널을 사용할 수 있습니다. 경험적으로 보았을 때 tfjs-node로 모델을 훈련하는 속도는 파이썬으로 케라스(Keras)를 사용하는 속도와 같습니다. 따라서 tfjs-node는 대용량 데이터로 대규모 머신 러닝 모델을 훈련하는 데 적절한 환경입니다. 이 책에서는 tfjs-node를 사용해 브라우저 능력을 넘어서 대규모 모델을 훈련하는 예제를 보게 될 것입니다(예를 들어 5장의 단어 인식과 9장의 텍스트 감성 분석).
하지만 머신 러닝 모델을 훈련하기 위해 검증된 기반을 가진 파이썬 환경보다 Node.js를 선택하는 이유는 무엇일까요? 이에 대한 답은 1) 성능과 2) 기존 스택(stack) 및 개발자 기술 세트와의 호환성입니다. 첫째, 성능 측면에서 Node.js가 사용하는 V8 엔진 같은 최신 자바스크립트 인터프리터(interpreter)는 자바스크립트 코드에 대해 JIT(just-in-time) 컴파일을 수행하여 파이썬보다 월등한 성능을 냅니다. 결과적으로 (파이썬용) 케라스보다 tfjs-node에서 모델 훈련 속도가 더 빠른 경우가 많습니다. 다만 인터프리터의 성능이 결정적인 요인이 될 만큼 충분히 작은 모델일 경우입니다.