과거, 인공지능 개발에서는 Tensorflow와 Keras가 양대산맥을 이루어 있었다. Tensorflow는 구글의 전폭적인 지원으로 이루어진 Python, C, C++, Go, Java 등 여러 언어를 지원했고 현재는 Python에 주로 힘을 쓰고 있는 것으로 보인다.
Keras도 과거에는 단독적인 행보를 이어갔다. Tensorflow 와 같이 Python 인공지능 모듈로서 역할을 꾸준히 해왔고 Tensorflow 2.X 부터는 Tensorflow가 Keras를 먹어버림과 동시에 고급지게 말하면 통합 되었다.
Source : https://pyimagesearch.com/2019/10/21/keras-vs-tf-keras-whats-the-difference-in-tensorflow-2-0
근 1년간 논문들을 보면 트렌드가 Tensorflow에서 Pytorch로 넘어가는 추세로 보여진다. Pytorch에 대해서도 간단한 소개를 하면 현) Meta, 구) Facebook 이 제작한 인공지능 파이썬 모듈이다. 이름에서는 오직 Python만 신경 쓸거 처럼 보여지지만 C++도 지원 한다.
단순히 가장 최근에 나온 YOLOv6는 대놓고 Pytorch를 로고를 차용하였다. 이렇게 Pytorch가 추세가 되고 모두가 Pytorch를 쓴다면 정말 우리도 Pytorch를 써야할까?
나는 본질적으로 묻고 싶다. 당신은 인공지능을 활용하고 있는가? 아니면 인공지능을 모델링 하고 있는가?
당신이 인공지능 모델을 논문에서 읽어와 활용하고 이를 쓸줄 안다면 이를 모델링이라고 하기에는 너무 크나큰 오산이다. 모델링은 주로 아래와 같은 내용으로 쓰인다.
Modeling: The first step is to create an AI model, which uses a complex algorithm or layers of algorithms that interpret data and make decisions based on that data. A successful AI model can act as a surrogate for human expertise in any given use case.
Source : https://www.intel.com/content/www/us/en/analytics/data-modeling.html
모델의 초반 설계를 시작으로 Hidden Network의 구성과 같이 내부적인 요소들을 구성을 어떻게 하는가에 대해서 A to Z 를 하는 작업이다. 만일 논문 혹은 깃허브에 좋은 모델을 끌어와 일부 수정한다면 이는 활용이라고 봐야한다. Transfer learning (전이학습) 과 헷갈리면 안되는게 Transfer learning은 모델의 가중치와 구조를 갖고와 학습하는 방법을 말한다. 내가 말하는 활용은 모델의 구조만을 얘기하는 것이다.
Tensorflow는 정말이지 모델을 만들고 쓰기에는 정말 좋다. 더불어 모델을 갖고와서 활용하기에는 좋지만 내가 세부적인 내용 까지 건들기에는 어려움이 있다. Pytorch는 모델을 만들고 쓰기에는 약간의 어려움이 있지만 Loss 값부터 시작에서 정확도 등을 내가 하나하나 정해주고 그 연산 방식을 직접 정해 학습 방식을 정말 A to Z 까지 건들 수 있다고 생각한다.
이렇게 글 쓰니 배고프다.
옆에서 "Tensorflow랑 Pytorch랑 무슨 차이야?" 라고 묻을 때 마다 나는 항상 전자레인지 치킨과 치킨집에서 조리한 치킨 차이라고 말한다.
전자레인지 닭, 활용하기에도 정말 좋고 집에서 해먹기도 정말 편하다. 포장지에 있는 가이드 대로 해도 맛있지만 내가 여러 소스를 추가하고 이런저런 방식으로 조리하면 더욱 맛있게 먹을 수도 있다. 하지만 감히 치킨집 닭을 범할 수는 없다.
닭을 직접 손질하고 뼈를 발라내고 밀가루를 얼마나 묻히고, 덜어내고, 어떻게 배치하고 기름의 온도는 얼마로 하고, 몇분을 튀겨야 하는가. 이를 계산하는데에는 정말 오랜 시간과 노력이 필요하다.
딱 그 차이 이다. Tensorflow는 모델링을 하기에도 쉬우면서 내가 뭔가 하나 더 손보면 더욱 좋은 성능을 낼 수는 있지만 한계가 있다. Pytorch는 모델링을 하기에는 좀 어려움이 있고 고난도의 실력을 요구하지만 반대로 시간과 노력의 끝에는 좋은 성능을 내고 내가 직접 손 보기에는 최적의 용도이다.
2022년 기준, HuggingFace의 전반적인 사용빈도의 차이를 보면 Pytorch의 빈도가 굉장히 높다. 반대로 생각해보자. 왜 Tensorflow의 빈도가 줄어들고 있을까?
개인적인 이유로는 프로그래밍적인 이유가 가장 크다고 생각한다. Tensorflow에서는 디버깅을 하기가 쉽지 않다. 너무 뭉등끄려저 있어서 그런지 에러는 있는데 어디서 났는지 명확하게 확인하기가 어렵다. Python의 주된 문제이기는 하지만 Tensorflow는 더더욱 그렇다.
하지만 비교적 Pytorch는 확실한 에러와 디버깅 면에서는 굉장히 빠르고 개인적으로는 환경 세팅과 가볍다고 느껴지는게 크다고 생각한다. Linux, macOS, Windows 등에서 GPU를 동일하게 구현하기에는 CUDA는 무겁고, 뉴런엔진이 주로 쓰이는 요즘 GPU 만큼의 전력을 필요로 하진 않는다.
현재 저자는 M1 맥북 프로를 쓰고 있다. 16GB 모델로 한 노트북에서 학습도 하고 모델링도 하고 할거 다하는데도 주변 온도에 따라 팬이 안 돌때도, 좀 더우면 돌때도 있다. 확실한 거는 Pytorch를 활용할 때에는 GPU 보다는 Neural Engine 이 활용되면서 전력 소모량이 확 줄어든다. 여러 이점을 지니기에 당연한 트렌드 일 수도 있다.
이미 Tensorflow로 인공지능에 대한 경험이 있다면 본인이 하고 있는 프로젝트를 기반으로 공부하는 것도 좋은 방법이다. 혹은 책을 구매해서 참고해가면서 공부하는 것도 좋고 강의를 보는 것도 좋다. 하지만 인공지능의 이론이 탄탄하다는 전제하에 가능한 얘기이다.
반대로 본인은 인공지능에 대한 지식이 정말 얕고 아직 공부해야할 분량이 많다고 느껴진다면, 되려 Pytorch를 공부하는데에 있어 큰 도움이 될 것이다. Tensorflow로 이미 굳어진 인공지능 모델링을 Pytorch에 점목 시키는게 개인적으로는 꽤나 어려웠다. 하지만 Pytorch로 처음 시작하는 경우에는 모델링부터 학습 까지 모두 첫경험(?)이 되기에 적극적으로 추천한다.