텐서플로, 파이토치, 케라스, LightGBM, JAX까지
안녕하세요, 에디터 SA입니다. 최근 저에게는 혼란스럽기만 한 회의가 있었는데요…@.@ 바로, AI 개발자 분들과 함께한 회의였답니다. 다양한 이야기들이 오고 가는 자리였는데, 거의 대부분의 내용을 이해는커녕 알아들을 수 없었거든요…@.@
개발자A님 “그래도 텐서플로 사용자들이 여전히 있으니 무시하긴 어렵죠…”
개발자B님 “케라스랑 조합했을 때의 효과는…”
개발자C님 “파이토치는… 아무래도 그런 게 있죠…”
무슨… flow요…? 케라스, 파이토치…는 다 뭔가요?@.@ 이제 막 MLOps의 개념과 MLOps Lifecycle에 대해 알게 된, ‘AI린이’보다도 더 초보에 가까운 저에게는 모두 새롭기만 했습니다.
그날, 회의 내내 언급된 생소한 단어들의 정체는 바로 ‘프레임워크’였습니다. 디자인 작업을 할 때에 포토샵, 일러스트레이터, 피그마 등 다양한 애플리케이션이나 툴을 떠올릴 수 있는 것처럼, AI 개발, 학습, 배포 후 운영 작업을 하는 과정에서 다양한 프레임워크를 활용할 수 있어요. 오늘은, 저처럼 AI가 그다지 익숙하지 않으실 여러분들을 위해, 프레임워크 중에서도 자주 언급되는, 특히 딥러닝 프레임워크에 대해 소개해 드리려 합니다.
소프트웨어 등 프로그램 개발 과정을 떠올리면, 프레임워크의 개념을 좀 더 잘 이해할 수 있는데요. 개발 과정의 ‘설계’와 ‘구현’을 생각해 보면, 아주 구체적이지요. 개발하는 대상의 구조를 짜고, 그 구조가 단단한 뼈대가 되도록 만드는 과정이니까요. 백지에서 시작하기에 무척이나 번거롭고, 시간과 비용의 관점에서 어려움이 있을 수밖에 없는 과정입니다. 그래서 ‘설계’와 ‘구현’을 좀 더 편하게 해낼 수 있도록, 기존의 설계/구현된 것을 재사용할 수 있게끔 만들어주는 대상이 등장하게 되었는데요. 바로 프레임워크라고 할 수 있어요.
저는 거푸집을 비유해 볼 수 있겠다고 생각했는데요. 동그란 금속 원판을 만들기 위해서는, 원판 모양의 거푸집이 필요하겠지요. 그 틀을 직접 만들 수도 있겠지만, 잘못 만들어서 녹인 금속이 새어나갈 수도 있고 하니, 사람들이 많이 사용하는 거푸집을 외부에서 구해올 수도 있겠죠. ‘Frame’과 ‘work’의 뜻을 나누어 각각 생각해 보면, 좀 더 쉽게 이해가 되실 거예요. 개발자는 해결하려는 문제의 종류, 배포할 모델의 크기, 타깃 컴퓨팅 플랫폼 등에 따라 각기 다른 프레임워크를 사용하게 됩니다. 마치 원판을 만드는 틀과 삼각판을 만드는 틀이 따로 필요한 것처럼요.
머신러닝, 딥러닝에서는 3~4년 전부터 꾸준히 언급되고 있는 프레임워크가 몇 가지 존재하는데요. 관련 업계에 계신 개발자분들과 이야기를 나눠보면, 제일 많이 들을 수 있는 프레임워크 이름은 ‘파이토치(Pytorch)’, ‘텐서플로(Tensorflow)’, ‘케라스(Keras)’ 정도가 있을 것 같네요. 개발 중인 모델의 특성, 개발 트렌드, 개발자 개인의 취향 등 다양한 이유로 각자 프레임워크를 선택하여 활용하므로 무엇을 사용하고, 자세히 알아두는 게 정답(혹은 국룰)이 될지 알기는 어려워요. 하지만, 자주 언급되는 것들에 대해 간단히 알아 둘 필요는 있겠지요?
1. 텐서플로 (Tensorflow)
Tensorflow는 Google Brain Team에서 개발한 프레임워크입니다. Google뿐만 아니라 Dropbox, eBay, Airbnb, Nvidia 등 다양한 기업에서 활용하고 있는데요. 오픈 소스인데다가 거의 모든 종류의 기기에서 애플리케이션을 실행할 수 있고, 기본 언어는 Python이지만 C++, Java, Julia 및 JavaScript와 같은 다른 언어로도 인터페이스에 접근, 제어할 수 있다는 유연한 점 때문에 인기가 아주 높습니다.
2010년대부터 시작해서, ‘즉시 실행’ 모드를 담은 2.0 이후 버전을 거쳐 오늘날의 점유율 1위 자리를 굳건히 지키고 있습니다. 뒤에서 소개해드릴 Keras와의 만남으로 단점을 보완할 수 있는 방향을 꾀했다는 점도 주목할만한 부분이에요. 오랜 시간이 지남에 따라 독자적인 생태계를 갖추었고 광범위한 유저층을 보유하고 있습니다. 다른 API와 여러 가지를 통합하고 커뮤니티에서 빠른 지원과 업데이트를 받을 수 있다는 점도 큰 장점으로 작용해요. 북미권에서 사용률이 높게 나타나는 프레임워크이기도 한데요. 현업 개발자 분들께 이야기를 들어보면, 오랜 시간 AI 개발에 몰두하신 국내 개발자 분들 중에 텐서플로를 선호하시는 분들이 많다는 이야기를 들은 적도 있어요.
2. 파이토치 (Pytorch)
AI 산업에 종사하고 계신 분들이라면, ‘파이토치’냐, ‘텐서플로’냐 하면서 두 프레임워크를 두고 고민하는 개발자들의 이야기를 한 번 이상 들어보셨을 거라 생각해요. 파이토치는 텐서플로보다 후발주자임에도 단숨에 큰 인기를 얻게 된 프레임워크이기도 해요. 2021년 이후의 국내 구글 검색량을 기준으로 하면, 파이토치가 텐서플로보다 더 많이 언급될 정도라고 합니다. 정말 놀라워요.
파이토치는 Meta에서 Facebook 서비스 운영을 지원하기 위해 개발되었는데요. 파이토치가 라이징스타로 떠오른 배경에는 Python을 스크립팅 언어로 사용한다는 점, 동적 그래프에서 기인한 ‘유연함’, 쉬운 절차 등을 꼽을 수 있겠습니다. 저는 이 중에서, 특히 동적으로 업데이트된 그래프를 작동하면서 개발 영역 내외의 환경 변화에 유연하게 대응할 수 있다는 점이 가장 매력적이라 느껴졌는데요. 데이터 세트를 처리할 때 데이터 세트의 아키텍처를 변경할 수도 있고, 속도를 중점에 둔 딥러닝 플랫폼을 개발하기에도 적합하니까요. 지원 범위도 해를 거듭할수록 확장되고 있는 중이기에, 변화무쌍한 AI 산업 영역에서 더욱 핫한 프레임워크로 자리매김하게 될 것 같네요.
3. Keras
케라스는 단순한 인터페이스를 특징으로 합니다. “사용자들이 어떻게 하면 코딩을 더 쉽게 할 수 있을까?”라는 질문에서 출발한 프레임워크이기 때문이에요. 때문에 케라스도 접근성이 좋다는 특징을 가지고 있습니다. 딥러닝 초보자라면 한 번쯤 추천받는 프레임워크라고 하더라고요. 케라스는 파이썬을 기반으로 하고 있는 데다, 다양한 뉴럴 네트워크 모델을 지원해주고 있어요. 미리 네트워크 구조를 그려본 다음 케라스를 사용한다면, 모델들을 활용해 네트워크를 만들고 빨리 코딩을 할 수 있게 됩니다.
케라스는 텐서플로의 단점을 커버한다는 점에서 주목을 많이 받았습니다. 일부 시각에서는 텐서플로가 2.0 이후로도 건재할 수 있었던 데에는, 케라스가 고수준 API로 채택된 것도 영향을 미쳤다고 말하기도 합니다. 기초 레벨부터 직접 작업해야 하는 텐서플로의 특징을 생각해 보면, 케라스의 심플함, 명확함, 그리고 모듈의 조합으로 쉽게 만드는 모델 등은 매력적으로 다가올만한 부분이 맞는 것 같아요. 텐서플로와 케라스의 조합을 많이들 이야기하시지만, 그 외에도 CNTK, 테아노, MXNet, PlaidML과 같은 백엔드 엔진과도 통합이 가능합니다. 여러 GPU 및 분산 학습을 지원한다는 점도 케라스의 매력 포인트 중 하나라고 할 수 있겠네요.
4. LightGBM
LightGBM에서 GBM은 Gradient Boosting Machine의 약자인데요. 줄여서 LGBM이라고 쓰기도 합니다. 트리 기반의 학습 알고리즘인 gradient boosting 방식을 차용했다는 점을 의미하는 이름의 프레임워크인데요. ‘Light’라는라는 이름에서 짐작해 볼 수 있듯이, 빠른 속도가 장점이에요. 또한 메모리도 적게 차지합니다. 결과의 정확도가 높은 데다 GPU를 사용할 수 있기에 전 세계적으로 널리 쓰이고 있지요.
학습에 소요되는 시간이 적다는 점 때문에 부스팅 계열 알고리즘에서 가장 각광받고 있긴 하지만, 데이터가 적은 경우에는 ‘과적합’이 발생하기 쉽다고 하네요. LGBM에서는 통상 10,000건 이하의 데이터셋일 경우에 과적합이 발생할 수 있다고 공식적으로 밝히기도 했는데요. 그렇다 하더라도 앞서 언급한 LightGBM의 장점들 때문에 꾸준한 수요가 있는 것이겠지요.
5. JAX
JAX 역시 Google에서 개발하고 관리하고 있는데요. 머신러닝과 고성능 연산 작업에 주로 쓰이는 프레임워크입니다. 구글 연구진이 JAX를 기준으로 많은 연구를 진행하고 있다고 하는데요. 사용하고 있는 제품 CPU, GPU, TPU에서 코드를 변경하지 않고 사용할 수 있다는 점, 자동미분(Autograd)이 가능하고, JIT 컴파일 방식이라 빠른 속도를 자랑한다는 점 등 다양한 장점을 갖고 있습니다. 이 때문에 학습 과정에서 많은 리소스가 필요할 때에 그 효율을 확인할 수 있습니다. 실제로 SOTA 모델(State-of-the-art, 현재 최고 수준의 결과를 가진 모델)들 중에서 활용이 늘고 있다고 해요.
JAX에게서 아쉬운 점을 한 가지 뽑아보자면, 국내 자료가 많지 않다는 거예요. 실제로 저도 관련된 자료를 찾아보면서, 단순 소개자료조차 많지 않아 애를 많이 먹었답니다. 그렇다고 해서 이 프레임워크의 가치를 낮게 평가할 수는 없겠지요. 앞으로 국내 AI산업에서 거대 모델을 활용해 더 나은 AI 개발 환경을 구축하고, 또 서비스를 만들어 나갈 것이라는 점을 생각하면, 자료들이 충분히 확보되는 시점은 그리 멀지 않은 미래일 테니까요.
어떠셨나요? 저는 이번 기회를 통해서, 자주 언급되는 프레임워크들 몇몇에 대해 좀 더 알아보고 싶은 마음이 생기더라고요. 각 프레임워크의 장단점, 특징 등은 앞으로 계속될 ‘AI, 더 쉽게’ 콘텐츠에서 차차 소개하도록 하겠습니다. 이제, 여러분들은 저처럼 회의 시간에 당황하게 되는 일을 겪진 않으시게 될 거라 생각되네요. :) 아직 갈 길이 멀지만, 그래도 ‘AI알못’에서 벗어날 수 있는 그날을 위해, 우리 앞으로도 함께 파이팅 해 보자고요!