TensorFlow
An end-to-end open source machine learning platform
— TensorFlow 공식 깃허브 메인 소개글
분명 구글 공식 도큐먼트 소스코드를 그대로 긁어왔는데 왜 디프리케이트(Deprecated) 경고가 절반이죠? 버전이 0.1 올라갈 때마다 내가 알던 함수가 소리소문없이 사라지는 기적1
1. 개요
구글이 개발하여 2015년에 오픈소스로 공개한 머신러닝 및 딥러닝 라이브러리. 출시 초기에는 알파고의 신화와 구글이라는 압도적인 뒷배를 타고 업계 표준으로 군림했으나, 개발자 친화적이지 못한 설계와 정신 나갈 것 같은 버전 파편화로 인해 신흥 강자 파이토치에게 선두 자리를 내주고 현재는 레거시 시스템 보수용으로 전락하고 말았다.(...)
2. 정적 그래프(Static Graph)와 세션의 지옥
텐서플로 1.x 시절의 코딩은 그야말로 노가다의 극치였다. 수식을 선언해도 바로 계산되지 않고, 우선 메모리상에 추상적인 그래프를 그리는 정적 그래프(Static Graph)를 선언한 뒤, sess = tf.Session()이라는 세션을 열어 sess.run()을 호출해 데이터를 밀어 넣어야만 결과가 나왔다. 디버그를 하려고 print()를 찍으면 값은 안 나오고 <Tensor 'Placeholder:0' shape=(?,) dtype=float32> 같은 외계어만 뱉어대며 개발자의 위궤양을 유발했다.(...) 이 기괴한 설계가 파이토치로의 집단 엑소더스를 유발한 주범이다.
3. Keras 강제 합병과 2.x의 대혼란
다급해진 구글은 극도로 직관적인 하이레벨 API인 케라스(Keras)를 프레임워크 내부에 강제로 흡수 통합시키고 tf.keras를 표준으로 내세운 2.0 버전을 출시했다. 하지만 이 과정에서 수많은 1.x 레거시 코드들이 호환되지 않아 휴지조각이 되었고, 개발자들은 코드를 통째로 새로 짜느니 차라리 파이토치로 넘어가겠다고 선언했다. 현재는 산업계 엔터프라이즈 레벨의 대규모 분산 학습 환경 외에는 신규 프로젝트에서 굳이 선택받지 못하는 찬밥 신세다.2
4. 관련 밈 및 드립
4.1. tf.disable_v2_behavior()
텐서플로 2.x 설치해 두고 1.x 시절의 코드를 돌리려는 개발자들이 코드 최상단에 눈물을 흘리며 적어 넣는 일종의 '산소호흡기' 같은 방어용 코드. 실질적으로 텐서플로 2.0의 패배를 자인하는 웃픈 상징이다.
4.2. Deprecation Warning 폭탄
코드를 실행하면 노란색 경고 창이 터미널 화면을 가득 채우는 현상. 개발자들은 슬그머니 warnings.filterwarnings('ignore')를 집어넣어 눈을 가리고 아웅 하는 식으로 평화를 되찾곤 한다.
5. 여담
- TPU 독점의 족쇄: 구글이 제작한 초고성능 연산 장치인 TPU를 사용하려면 무조건 텐서플로 생태계를 거쳐야만 한다. 구글 클라우드를 쓰는 엔터프라이즈 기업들이 울며 울며 텐서플로를 버리지 못하는 이유 중 하나다.
- TensorBoard의 존재 의의: 텐서플로 자체는 까여도, 학습 과정을 실시간 시각화해 주는 '텐서보드(TensorBoard)'의 퀄리티만큼은 모두가 극찬한다. 파이토치 개발자들도 시각화만큼은 텐서보드를 라이브러리로 땡겨와서 쓸 정도다.
- TensorFlow.js의 비운: 웹 브라우저에서 딥러닝을 돌리겠다는 원대한 포부로 출시되었으나, 대용량 가중치(Weight) 파일을 클라이언트가 로딩하다가 브라우저가 먼저 뻗어버리는 대참사가 잦아 토이 프로젝트 외에는 찬밥 신세다.