앞으로 TF.js는 어떻게 될까?
메이저한 프로그래밍 언어들의 경우 (C/C++, Java, Python 등) 대부분 행렬 연산, 수학 계산 등을 위한 라이브러리가 존재합니다. 이미지 프로세싱 등을 하게 된다면 이는 매우 중요하기 때문에, 역사가 오래된 라이브러리가 많고 hardware dependent 한 것들도 많습니다. Python을 예로 들면 numpy가 가장 많이 사용되고, 이미지 프로세싱은 OpenCV, 머신러닝은 scikit-learn, 추가로 딥러닝 용도로는 Tensorflow나 Pytorch와 같은 라이브러리를 사용하곤 합니다.
근데 Javascript 진영에서는 이런 라이브러리가 잘 없었습니다. 특정 기능에 특화된 라이브러리들이 많기는 했지만 범용적으로 잘 쓰일만한 것들, 예를들어 numpy 처럼 상징적인 라이브러리가 없었죠. 이는 Javascript의 태생이 브라우저이기 때문에 당연한 것일 수도 있습니다. 하지만, 브라우저 뿐 아니라 Node 기반의 백엔드 언어로 각광받으며 이런 필요성이 커졌고, 마침 딥러닝 시대 이후로 Google Tensorflow팀에서 TensorFlow.js 를 공개하며 JS 쪽에 이미지 프로세싱이나 머신러닝, 딥러닝 등을 적용할 때 TF.js를 사용할 수 있게 되었습니다. 그리고 발표된지 몇 년 안되었지만 매우 빠른 속도로 발전중입니다.
얼마 전 Google I/O 2021 에서 진행한 TF.js의 최근 동향 관련된 발표를 봤는데, 정말 많이 좋아졌다는 걸 다시 새삼스럽게 느끼게 됩니다.
Node이후로 Javascript가 광범위한 인기를 얻게 되면서 이제 모든 곳에서 JS가 쓰이게 되었습니다. 브라우저를 벗어나 서버, 모바일, 데스크탑, 임베디드 시스템 까지 이제 전 영역을 커버하고 있습니다. low level의 system programming 수준만 아니라면 웬만한 플랫폼 상에서는 JS를 사용한 개발이 가능해 졌습니다.
원래 JS가 브라우저에서 쓰이는 것이지만, 서버 뿐 아니라 모바일이나 데스크탑에 쓰이게 되고 결정적으로 TF.js 와 같은 연산속도가 극히 중요한 라이브러리도 실제 서비스가 가능할 정도로 수준이 올라오게 된 것은 WASM 같은 프로젝트의 공로가 크다고 할 수 있겠습니다.
현재 TF.js 는 WASM을 백엔드로 사용할 수 있게 되었으며, 거기에 SIMD, Multithreading 등 추가적으로 하드웨어에 의존적인 기술들도 (지원하는 디바이스라면) 사용가능하게 되며 성능이 많이 좋아졌습니다.
이제 웬만한 하드웨어에서도 모두 TF.js 를 이용하여 edge에서 ML 모델을 연산하는 걸 쉽게 볼 수 있게 될 것 같습니다. 그정도로 성능도 많이 좋아졌고 아직까지는 일반적인 TF에 비해서 구현되지 않은 부분도 있긴 하지만 그런 부분들도 보강되면 더 많이 쓰일 것 같네요.
이번 소개 때 TF.js를 활용한 다양한 프로젝트 예시도 보여주는데 흥미로운 프로젝트가 많았습니다. 일단 개선된 TF.js 를 활용하여 MediaPipe의 성능이 개선된 것을 빼놓을 수가 없지요. 여기에 있는 실시간 Pose estimation의 성능도 많이 개선이 되었고, Face mesh 도 많이 개선이 되었다고 합니다. 이런 것들은 예전에 쓴 글인 모델 경량화와도 함께 이뤄져서 개선된 것이겠죠. 그리고 이러한 모델을 활용한 수화 인식 프로젝트나 Pose 기반으로 Animation 만드는 프로젝트도 굉장히 흥미로워 보였습니다. 앞으로 이런 기술들을 활용하여 더 많은 재미난 프로젝트와 서비스가 나올 것 같습니다.
또 한가지 흥미로웠던 점은 Natural Language Understanding (NLU) 까지도 가능해 졌다는 점입니다. 아래 예시는 QnA 모델을 클라이언트단에서 구현한 예시입니다.
예전같으면 굉장히 많은 노력이 들어갔을 일인데, 이렇게 코드 몇줄로 embed 하여 클라이언트단에서 사용할 수 있다는 점에서 정말 기술 발전에 대해서 놀라움을 느꼈습니다. 물론 아직 JS 생태계는 이러한 수학 연산 관련 부분은 시작단계이며, TF.js 기반 모델들도 아직 구현이 안 된 부분도 많고, 클라이언트 단에서는 사용이 힘든 무거운 모델도 많습니다. 그리고 실제로 상용 서비스에 뭔가 하려고 하다보면 python에서는 다양한 라이브러리의 도움을 받아 어렵지 않게 구현 가능한 것도 JS에는 직접 기능을 새로 구현해야 하는 경우도 있구요. 하지만 이 정도 발전속도라면 머지않아 광범위하게 사용되지 않을까 싶네요.
이번 Google IO 2021 을 보며 느낀건데, 확실히 AI와 관련된 뜬구름 잡는 이야기는 많이 줄었고 실제로 적용 가능한 application level ML에 관한 비중이 대부분인 것 같습니다. 구글같은 회사도 비교적 현실적인 접근을 하고 있는 것 같네요. (Long-term research는 대부분 DeepMind에서 하지 않을까... 싶습니다.)
TF.js가 좋은 것은 첫번째로 real time video stream 처리와 같이 latency 가 굉장히 중요한 케이스에서는 거의 반드시 on-device ML이 필요하다는 점이고, 두번째로는 서버 비용을 많이 줄일 수 있다는 점입니다. ML 서비스를 운영해 보신 분들은 동감하시겠지만 모델이 무거운 만큼 꽤 많은 서버 자원을 사용하는데, 이런 부담을 클라이언트의 연산으로 넘길 수 있다는 데에서 얻는 장점이 많습니다. 장점도 많고, 정말 빠르게 발전중이니 앞으로 Javascript (+Typescript) 의 인기가 더 커지지 않을까 싶습니다.