[소고] 너와 나의 인공지능이 멍청한 이유

@codemaru · July 15, 2020 · 22 min read

모든 사람이 그렇듯 내가 머신러닝에 관심을 갖게 된 시점은 알파고가 이세돌을 무참히 격파하던 그 즈음이었다. 대국이 시작되기 전 나는 당연히 이세돌의 전승을 점쳤고, 1국이 끝나고 세상이 바뀌었다는 사실을 깨달았다. 그리고는 봇물처럼 머신러닝 자료와 강연들이 이어졌다. 그덕에 구글의 제프딘을 실제로 보기도 하는 호사를 누리기도 했다 (텐서플로 홍보차 국내에 옴)

그때 제프딘이 발표한 내용 중에 이미지 인식(이게 고양이인지, 강아지인지, 나팔꽃인지, 장미인지, 등등을 판단) 분야에서는 기계가 인간을 뛰어 넘은지가 제법 됐다는 이야기를 했다. 그리고 얼마 지나지 않아 각종 렌즈앱들이 나오기 시작했고, 그 렌즈앱이 우리 엄마보다 더 정확하게 각종 식물의 이름을 나열하는 것을 보면서 2차 충격을 받았다. 그렇게 머신러닝의 르네상스는 시작되었고, 요즘 IT쪽 사람들을 만나서 뭐 하는지 물어보면 분야를 안 가리고 머신러닝 한다는 대답이 돌아오는 세상이 되었다.

어쨌든 그맘때 이미지 인식을 그렇게 기계가 잘 한다면 바이너리 인식도 잘하지 않을까라는 생각이 들었다. 컴퓨터한테야 이미지든 바이너리든 결국은 숫자일 뿐이니 말이다. 그런 선상에서 그당시 유행하던 머신 러닝 라이브러리로 해킹툴 바이너리를 분류해서 몇 개 학습시켜 보고 결과를 체크해 보았다. 샘플에서는 너무 완벽하게 동작했지만 각종 정상 바이너리를 집어 넣자 오진이 무지하게 많이 났다.

그당시 MS에서도 바이너리 분류와 관련한 컨테스트를 진행하고 있었다. 심지어 결과물도 공개가 되어 있었다. 테스트 안해볼 이유는 없기에 거기 1등한 사람들의 방법을 가져와서 우리도 테스트를 해보았다. MS 대회의 1위 답게 그냥 우리가 막 이미지 인식 시킨 것 보다는 훌륭했다. 그래서 본격적으로 돌려보자고 했는데, 회사 장비로는 한계가 있고 AWS에서 돌리면 수백만원 정도의 비용이 지출될 것 같다는 얘기를 했다. 될지 안될지도 모르는 일에 그 정도를 투자한다는게 쉽지 않은 일이라 거기까지 하고 말았던 기억이 난다.

그 1등의 방식도 재미있었는데 각종 팩터를 넣어서 학습시키는데 그 중에 하나가 바이너리 앞부분 200바이트 해시를 사용한다거나(200이란 숫자는 정확한 건 아님) 하는 것이 있다. 그래서 왜 300도 아니고, 400도 아니고 200이지라는 의문을 가지고 그들이 쓴 논문을 봤는데, 그 논문 왈, 200바이트가 왜 잘되는지는 우리도 모르겠지만 여러 테스트 결과 그게 좋아서 그렇게 했다는 다소 충격적인 답변. 아, 이런게 머신러닝 이구나 라는 느낌만 가지고 기억속 한편으로 사라졌다.

그렇게 잊고 있었던 머신러닝 관련해서 최근 지인 한 명이 그때 그 생각이 틀린 건 아닌 거 같다면서 MS에서 발표한 링크 를 보내줬다. 소오름. 내 생각이 바로 저거였는데 저게 된다니 ㄷ ㄷ ㄷ 그리고 우리가 머신러닝알못이라 그렇지 구현을 제대로 했으면 그때부터 잘됐을까라는 생각도 들었다.

Analyzing malware represented as image

그렇게 다시금 인공지능에 대한 연구 의지가 불타오름과 동시에 교보문고에서 인공지능 책들을 마구 질렀다. 친구가 심지어 2권은 선물까지 해줬으나 서평은 요원한 단계. 어쨌든 그 책들을 읽고 이미지 분류에 그렇게 좋다는 CNN으로 이미지를 좀 분류해보려고 돌렸으나 결과는 썩 좋지 않았다. 인공지능 쪽에 다소 조예가 있는 주변인들에게 물어보면 대다수가 그게 교과서에 나오는 건 잘 되는데 실질적으로 현실 세계 데이터로 뭐를 해보려면 잘 안 된다는 이야기를 했다. 그 이야기와 함께 다시금 광속으로 연구 의지는 마이너스 무한대로 발산하게 되었다.

#0

그런 기억이 희미해질만했던 6월 말 회사에서 병역특례로 근무하던 DevOps 친구가 그만두는 일이 있었다. 여러모로 똑똑한 친구였는데 헤어지는 자리에서도 다소 충격적인 이야기를 들려주었다. 머신러닝을 하기 위해서 무.려. 4400만원짜리 컴퓨터를 질렀다는 이야기.

그 이야기의 여러 요소에서 다중 충격을 받았는데, 1) 머신러닝을 하기 위해서 개인 돈으로 컴퓨터를 사는 투자를 한다는 데 놀랐고, 2) 그것도 무려 4400만원짜리를 샀다는 데 두 번 놀랐고, 3) 그 엄청난 비용의 상당수가 최근 유행하는 T 코인(테슬라)에서 충당됐다는 사실에 놀랐다. 어쨌든 그 머신은 제온씨퓨에 타이탄을 무려 4개나 달았다고 했다.

머신러닝을 하려면 그 정도 장비가 필요한 거냐고 물어봤더니 자기도 잘은 모르는데 제대로 해보려고 좋은 장비를 샀다는 이야기를 했다. 그와 더불어 요즘 AI 대회가 많아서 그런 곳에서 상금을 받으면 투자금 회수가 가능하다는 이야기도 덧붙였다.

#1

그 친구가 퇴사한 이후에 회사에 인공지능 하는 친구들이 현장실습을 왔다. 그당시 하다가 포기한 이미지 분류 작업을 진행하기 위해서 왔는데 그들은 학교에 있는 1080TI가 몇 개 있는 장비를 사용할 수 있는 상태였다.

출근한 날 같이 저녁을 먹을 시간이 있어서 이런 저런 얘기를 하다가 애니를 좋아한다는 이야기를 듣게 되었고, 추천작을 물어봤더니 고스트 바둑왕을 꼽았다. 나는 만화책으로 봤는데 끝이 너무 허했다는 이야기를 전했다. 작가가 히트 좀 하자 끝낸 용비불패같은 느낌. 그 친구가 애니는 그래도 괜찮다는 이야기를 했고 마침 스트리밍 서비스에 올라와 있길래 사이와 히카루의 대국을 애니로 몇 편 보게 되었다. 모든 만화가 그렇지만 보면 뿜뿜하게 된다. 바둑 기사 존멋~

#2

히카루와 사이의 바둑에 빠져서 애니를 보다보니 자연스레 바둑을 배우고 싶다는 생각이 들었고, 예전에 프로 기사를 준비했던 동생이 알파고 이후에 제로 시리즈 인공지능 바둑이 많이 나왔다는 이야기를 들었던 기억이 많이 났다. 그래서 집에 설치해보고 돌렸는데 자기들끼리 두게 해도 제법 모양이 나오게 두었다. 나는 바둑을 둘 줄 몰라 실력을 알 수 없어서 온라인 바둑에 들어가서 몇 판 둬봤는데 지는 법이 없었다. 그리고 유튜브를 찾아보니 프로 기사들도 3점 놓고 둬야 이기고, 2점은 힘들다는 이야기들이 올라와 있었다.

간략하게 인공지능 바둑에 대해서 이야기하자면 알파고가 시초고, 알파고 제로가 나오고 그들이 연구 방식을 논문으로 공개해서 유사한 종류의 인공지능이 많이 나오게 됐다. 제로의 특징은 인간의 기보를 사용하지 않고 자기 스스로 게임을 반복(self play)하면서 기량을 향상시켜 나가는 기법을 쓴다. 따라서 바둑의 룰만 넣어주고 돌리면 스스로 점점 더 강해진다는 알고나면 다소 단순해 보이는(?!) 컨셉이다.

그 이후에 등장한 것 중에는 릴라제로의 경우 개인이 오픈소스로 만들어 대중의 참여로 분산 학습시켜 나가는 구조로 진행되고 있다, 페이스북에서도 엘프고라는 프로젝트로 야심차게 진행했으나 현재는 퇴물, 그리고 가장 최근에 나온 게 카타고다. 카타고의 특징은 기존 알파고가 바둑이란 게임의 특징을 별로 활용하지 않았다면 카타고는 바둑에 특화된 특징을 많이 사용해서 학습 속도가 빠르고 승률 외의 다른 종류의 예측들을 더 가지고 있다고 한다. 개인 컴퓨터에서 각종 인공지능들끼리의 대국을 펼쳐 보았는데 카타고가 제일 강했다. 심지어 생각하는 시간을 차이를 두어도 카타고가 이기는 경우가 많았다.

대체로 프로 기사들 사이에서는 알파고 제로 > 텐센트 절예 > 카타고 > 릴라 제로 정도로 판단되고 있는 것 같았다. 이런 걸 보면 궁금증이 생기게 마련이다. 비슷한 셀프 플레이란 방식으로 학습을 시켰음에도 그들 사이에서 큰 기량 차이가 생기는 이유는 뭘까? 심지어 페이스북도 나름 똑똑할텐데 왜 엘프고는 순위에도 끼지 못할까라는 생각을 하면서 릴라제로 소개 페이지를 보다가 신기한 사실을 알게 되었다.

Recomputing the AlphaGo Zero weights will take about 1700 years on commodity hardware.

알파고 제로의 가중치 데이터를 재계산하는데에는 상용 하드웨어로 1700년이 걸린다는 이야기. 요는 이렇다. 제로 방식은 셀프 플레이를 토대로 가충치 파일을 만들어 추후 탐색을 할 때 더 적절하고 빠르게 하는 형태로 사용을 한다. 즉, 대다수 제로 방식 봇의 알맹이는 이 가중치 파일이란 것이다. 릴라제로 개발자는 1080ti 그래픽 카드 한 장으로 개발을 하는데 본인이 생각하는 추정치로는 그 그래픽 카드 하나로 알파고만큼의 수준을 계산하기 위해서는 1700년이 걸린다고 말한 것이다. 그걸 극복하기 위해서 릴라제로는 개인의 컴퓨팅 자원을 지원 받아 클라우드 형태로 계산해서 학습하는 구조로 진화를 하고 있다. 그냥 숫자만 보고 역시 구글이라는 생각을 하면서 카타고 자료도 살펴보게 되었다.

KataGo’s latest run used about 28 GPUs, rather than thousands (like AlphaZero and ELF), first reached superhuman levels on that hardware in perhaps just three to six days, and reached strength similar to ELF in about 14 days. With minor adjustments and some more GPUs, starting around 40 days it roughly began to match surpass Leela Zero in some tests with different configurations, time controls, and hardware. The run continued for a total of about five months of training time, reaching several hundred Elo stronger than Leela Zero and likely other open-source bots. The run has ended for now, but we hope to be able to continue it or begin another run in the future!

여기는 조금 구체적인데 28개의 GPU로 학습을 시켰고, 인간을 뛰어넘는데 3-6일이 걸렸고, 14일에 엘프고 수준에 도달했다. 여기에 조금의 조정을 하고 GPU를 몇개 더 추가해서 40일 정도 되니까 릴라 제로의 수준에 도달했고, 총 5개월 정도가 지나서는 릴라제로에 비해서 Elo 점수가 수백점 차이가 났고 학습을 중단시켰다는 이야기. 내용이 재밌어서 그들의 논문도 찾아서 읽어보았다. 도입부가 무척 흥미로웠는데 다음과 같이 정리돼 있었다.

In 2017, DeepMind’s AlphaGoZero demonstrated that it was possible to achieve superhuman performance in Go without reliance on human strategic knowledge or preexisting data [18]. Subsequently, DeepMind’s AlphaZero achieved comparable results in Chess and Shogi. However, the amount of computation required was large, with DeepMind’s main reported run for Go using 5000 TPUs for several days, totaling about 41 TPU-years [17]. Similarly ELF OpenGo, a replication by Facebook, used 2000 V100 GPUs for about 13-14 days, or about 74 GPU-years, to reach top levels of performance [19].

알파고 제로의 경우 5000 TPU로 몇일 계산을 했다고 나와 있다. 총 41년 TPU 시간이 사용되었다. 엘프고의 경우 2000개의 V100 GPU를 사용해서 13-14일 계산을 했고, 총 74년 GPU 시간이 사용되었다.

결국 당연한 소리겠지만 동등한 설정이라면 결국 연산 시간에 따라서 인공지능의 강함이 결정된다고 할 수 있겠다. 그런데 그 연산 시간이라는 것이 생각보다 천문학적이라는데 놀랐다. 릴라제로 개발자는 1080TI GPU 한장으로 개발을 하고 있고, 카타고는 V100 28장에서 몇 장을 더썼고, 엘프고는 V100 2000장, 알파고제로는 TPU 5000개를 사용했다.

FP32벤치 마크 자료를 살펴보면 1TPU를 1.0으로 계산 시에, V100이 0.9정도, 1080TI가 0.4 정도 되는 것으로 추정된다. 이 데이터를 토대로 연산에 사용된 비용을 계산해보면 다소 충격적이다.

카타고의 경우 줄여서 V100 28개 5개월로 계산할 경우 (28 x 5 x 30) / 365 = 11.5년에 해당하는 GPU 시간을 사용했다고 볼 수 있다. aws에서 v100을 8개 탑재한 p3.16xlarge의 경우 시간당 사용 비용이 24.48불이다. 단순 계산할 경우 5개월간 총 308,448불이 사용되었다고 볼 수 있다. 1200원 환율로 계산할 경우 3억 7천만원에 해당하는 금액이다.

엘프고의 경우 동일한 장비로 74년 GPU 시간을 썼다고 나와 있기 때문에 계산해보면 1,983,614불을 썼고, 한화로 23억 8천만원 정도를 썼다고 볼 수 있다.

구글 TPU의 경우 선점형 v2 8코어가 시간당 1.35불이다. 이걸 토대로 41년 TPU시간을 계산해보면 60,608불, 7300만원 가량 사용한걸로 보여진다. 선점형이 아닌 주문형으로 할 경우 시간당 가격이 4.45로 올라가기 때문에 계산해보면 199,782불, 한화로 2억 4000만원 가량이 된다. 1대 0.9로 GPU 환산 계산시 45.51년 GPU 시간이 나오고 aws 비용으로 환산해 보면 1,219,922불, 한화로 14억 6400만원 가량이다.

아마 이건 최적화된 경로로 계산을 하는 걸 밝힌 것이기 때문에 실질적으로 테스트에 사용되거나 폐기되거나 한 걸 감안한다면 훨씬 더 천문학적인 비용이 지출된다는 걸 알 수 있다. 그리고 왜 학습을 멈추는지도 이해할 수 있다.

#3

우리가 바둑 인공지능을 만든다고 한다면 적어도 사람과는 대등하거나 잘 두는 수준이 되어야 쓸 만 하다고 인정을 해 줄 것이다. 이를 카타고 데이터를 토대로 최적화 시켜서 3일 걸린다고 가정을 하더라도 최적화된 계산 비용만 49,351불 한화로 6000만원 가까이를 써야 가능하다. 물론 이 또한 실패는 전혀 없는 모든 게 아마도 완벽한 상태에서의 계산 시간만을 가정했을 때 그렇다는 이야기일 것이다.

재미삼아 또는 가능성만 보고 하기에는 쉽지 않은 분야라는 답이 나온다. 그리고 너와 나의 인공지능이 왜 그렇게 바보같은지도 어느 정도 이해가 된다. 구글이 왜 TPU를 만들었는지도 답이 나온다. 카타고가 더 강하게 만들지 않는 이유도 알 수 있고, 언제 새로 돌리기 시작할지도 예측해 볼 수 있다. 알파고 제로 가중치 파일을 공개하지 않는 이유도 추측해 볼 수 있고, 절예의 최신 가중치 파일을 왜 중국 프로 기사에게만 제공하는지도 납득이 된다. 심지어는 똑똑한 사람들이 돈을 많이 넣어도 결과가 좋지 않을 수 있다는 사실도 참고할 수 있다. 끝으로 몇년전 우리가 몇 백만원에 망설였던 게 얼마나 조족지혈인지도 알게 되었다.

@codemaru
돌아보니 좋은 날도 있었고, 나쁜 날도 있었다. 그런 나의 모든 소소한 일상과 배움을 기록한다. 여기에 기록된 모든 내용은 한 개인의 관점이고 의견이다. 내가 속한 조직과는 1도 상관이 없다.
(C) 2001 YoungJin Shin, 0일째 운영 중