시스템 그게 돈이 됩니까?

oogie·2023년 3월 14일
0
post-thumbnail

이번학기 시간표다.
특징은 시스템 관련 수업을 3개 듣는다.

컴퓨터 시스템 개론
이름 그대로 시스템에 대한 개론과 어셈블리어 기초를 배운다.

컴퓨터 아키텍쳐과목
이름 그대로 컴퓨터의 아키텍처(cpu, 메모리,gpu 등)를 배운다.

멀티코어프로그래밍
시스템프로그래밍이라는 이름을 가지고 있던 과목으로 컴퓨터 시스템 개론에서 기초를 배웠다면 이 과목에서는 그것보다 어렵고 운영체제보다는 쉬운 내용을 배운다.

이번학기 기초머신러닝, 딥러닝 기초 수업 뿐 아니라 자연어 처리 교양 과목 등 인공지능 수업이 많이 개설되었다.

그런데 나는 시스템 쪽 수업을 선택했다. 전공학점을 채우는게 문제였으면 머신러닝/딥러닝 수업으로 전공학점을 채워도 됬지만 단순히 시스템을 듣고 싶어서가 이유다.

인공지능을 버린건가? 시스템 개발자가 목표가 된건가?

위 질문에 대한 대답은 “아니요”다. 오히려 반대다. 인공지능을 더 잘하고싶어서 시스템을 공부해야겠다 생각했다.

이 생각에 대해서 엄청난 확신이 있는 것은 아니지만 인공지능을 잘 하고 싶으면 시스템을 알아야겠다고 느꼈다.

나는 추상화와 Ops관점에서 시스템이란 무엇이고 왜 필요한지를 강렬하게 느꼈다.

추상화란 무엇인가(Abstraction)

추상화에 대해서 처음 생각한 순간은 수업이 아닌 인공지능 오픈톡방에서 질문에 대한 대답을 고민하면서였다.

pytorch/tf의 softmax 함수에서 분류를 1로 잡으면 sigmoid함수와 같냐는 질문이었다. 순간 고민했다.

softmax와 sigmoid는 다중분류나 이진분류냐의 차이로 분류 대상이 다중이됬을 때 sigmoid수식을 일반화하면 softmax함수와 같다는 이론은 직접 수식으로도 증명해봤다. 그래서 말이되는 것 같다고 생각을 하고 있었다.

그때 현직 ML 엔지니어 분이 직접 실제로 그렇지 않다고 괜히 softmax와 sigmoid를 따로 둔 것이 아니며 내부 구현 코드를 보면 다르다고 하셨다.

이 경험에서 엔지니어링 측면을 외면하고 추상화된 개념에 매몰되어 있다고 생각했다. 결국 나는 logical 레벨이 아닌 physical 레벨의 AI를 구현하는 엔지니어를 희망하고 있는데 엔지니어링에 더 집중할 필요성을 느꼈다.
이후 이런 함수부터 CNN의 커널 구현, lstm의 weight 구현 등 엔지니어링 측면에서 AI를 바라보고 AI에 바틀넥 또는 비효율성을 야기하는 요인에 대해서 고민하기 시작했다.

최근에는 AI 관점 뿐 아니라 더 넓고 기초적인 추상화들에 대해서도 고민했다.

python의 int는 왜 C언어에서 쓰는 int보다 범위가 넓을까?

python의 list,dictionary,heapq등의 자료형이 있다고 치면 왜 dictionary는 빠르고 좋은가 왜 heapq가 list sorting보다 빠르고 효율적인가?

자료구조의 관점 그리고 더 나아가 로우레벨(가령 어셈블리 레벨)에서 구현을 생각하기 시작했다.

시스템 레벨에 대한 궁금증을 더 커지게 한 이유는 사실 다음 내용이 더 결정적이다.

Ops 관점에서 바라보기

Ops 관점이라 썼는데, 사실 이 관점의 시작은 하드웨어부터 시작이었다

하드웨어? 갑자기 왠 하드웨어?

인공지능의 발전에 기여한 요인 2가지는 대부분 알듯 빅데이터와 하드웨어의 성장이다.

하드웨어 얘기를 해보자 gpu라는 병렬 처리에 미친듯이 빠른 하드웨어 덕분에 행렬곱의 가속화가 가능해졌다.

대부분의 딥러닝 계산이 거대한 행렬곱 연산으로 이루어지기에 학습 속도를 가속화했고 지금의 AI가 태어났다.

그렇게 nvdia gpu가 4천번대까지 발전했다. 그런데 이 변화는 일정한 방향의로의 발전이 아니다.

무슨 말이냐면 단순히 고정된 형태에서 연산을 빨리하는 하드웨어가 발전한 말이 아니라는 것이다.

TPU, NPU등이 새롭게 개발되고 있고 nvidia에서는 인공지능 전용 하드웨어 개발에 나섰다.

위 발전이 이루어진 이유를 잠깐 들춰보면, 구글의 TPU는 자신의 프레임워크 TF,jax에 최적화된 하드웨어 개발을 위해 만들어졌다.

인공지능 전용 gpu가 발전된 이유는 일반 게임용 gpu와 다른 성능 및 작동을 하는 gpu가 효율적이기 때문이다.

우리가 쉽게 생각하는 더하기, 곱하기 라는 연산도 하드웨어 수준에서 다르게 만들 수 있다.

그리고 그 하드웨어에 맞춰서 최적화해 연산을 최적화할 수 있다는 말이다.

괜히 직접 처음 데스크탑을 맞춰 프레임워크와 쿠다를 깔아 환경설정을 하는 부분이 큰 스트레스를 주는게 아니다.

딥러닝 성능 및 개발에 있어 이렇게나 큰 축을 담당하는 하드웨어의 지식없이 딥러닝 개발을 하겠다는 것이 나에게는 너무나 큰 맹점으로 느껴졌다.

그래서 하드웨어랑 Ops랑 무슨 상관인데?

MLOps, 이름부터 일단 굉장히 fancy한 이 기술은 뭘까?

MLOps의 이름에 홀렸는데 아는건 없어서 뭐하는 곳인지 궁금해서 MLOps오픈톡방에 들어간 나는 그냥 귓동냥이나 하는데, 이들의 주제는 모오옵시 다양하다.

kuberflow(Ops의 핵심),fastapi,메모리 누수, 클라우드, 네트워크,데이터 베이스, 쿠다, gpu 병목 등등등 무수히 많은 주제였다. 나 혼자 자료도 찾아보고 고민을 하고 내린 결론은 MLOps는 그냥 ML 서비스를 서빙하는데 필요한 기술의 집합이었다.

실제로 한번은 MLOps 뭐냐에 대해 개발자들이 토론하는걸 잠깐 들었는데, 누군가가

“MLOps는 해당 기업, 부서, 또는 팀의 개발 문화 그 자체다”

라고 말했고 많은 개발자 분들이 동의했다.

이런 생각들이 모여 내가 생각한 MLOps는 AI기술을 논문에서 끄집어 내 현실속 서비스로 만들어내는 기술이다.

인공지능 분야별로 조금씩 다르겠지만 일부 분야는 곧 AI 고유 분야보다 일단 벡엔드로 분류될 것이라고 생각하는 나이기에 더더욱 Ops관점에서 AI를 바라보았다. 다시 말하면 실제 데이터, 실제 환경, 실제 사용자를 대상으로
AI가 어떻게 잘 작동할지를 고민하는 관점에서 바라보았다. 그리고 다음과 같은 생각들이 떠올랐다.

AI 서비스를 현실에 구현하기 위해서는 하드웨어를 알아야해.
AI 서비스를 현실에 구현하기 위해서는 하드웨어를 알아야해.
AI 서비스를 배포하기 위해 필요한 도커와 kebernetes 기술을 알아야해.
이들을 알기 위해서는 클라우드를 이해해야해.
클라우드를 이해하기 위해서는 기본적인 데이터 베이스와 네트워크를 알아야해.
도커 및 쿠버네티스 뿐 아니라 API기술을 활용해 실제 서비스를 배포하려면 메모리 개념을 알아야해.
메모리 개념을 알려면 하드웨어를 알아야해.

이런 생각에서 나의 시간표가 완성되었다.

나의 노션 소개에 이런 말을 써뒀다.

이론상의, 현실적이지 않은, 실용적이지 않은 AI가 아닌

실용적인 AI 서비스를 개발을 꿈꿉니다.

내가 시스템을 공부하는 이유는
AI가 논문 속에만 존재하지 않고 빅테크 기업의 무수한 자본속에서만 존재하는 기술이 아니라 믿기 때문이고.
그것을 실현하는 개발자가 되기 위해서이다.

0개의 댓글