2화
목요일 오후 2시.
샌프란시스코, OpenAI 사무실의 한 회의실.
나는 얼음물을 들이켰다.
상황이 비현실적이었다.
어제, 줌으로 간단히 인사나 하자던 앨리스는 10분 만에 내 말을 끊었다.
'잠시만요, 서준님. 기술 리드가 직접 보고 싶어 하네요. 지금 바로 비행기 표 보낼게요.'
"서준 씨? 반가워요."
정장 소매를 걷어 올린 덩치 큰 남자가 악수를 청했다.
그렉 브록만.
스트라이프(Stripe) CTO 출신이자, OpenAI 공동 창립자.
"와줘서 고마워요. 너무 급하게 불렀죠?"
"안 그래도 샌프란시스코에 올 일이 있었습니다."
거짓말이었다.
정확히는 면접 도중에 비행기 표 링크를 던지는 그 광기가 마음에 들어서였다.
미친 회사 같았지만, 지루한 것보단 나으니까.
하지만 굳이 사실대로 말할 필요는 없었다.
"소개할게요. 이쪽은 미라 무라티 CTO, 그리고 저쪽은..."
소파에 비스듬히 앉아 노트북 화면에서 눈을 떼지 않고 있는 남자.
일리야 수츠케버.
그는 내가 들어와도 고개 한 번 까딱하고는 다시 모니터로 시선을 돌렸다.
AI 업계의 구루다운 오만함이었다.
옆에있던 미라 무라티가 부드럽게 웃으며 분위기를 풀었다.
"놀라셨죠? 면접에 임원진이 다 들어와서. 우리가 지금 시스템 엔지니어 채용이 아주 시급하거든요. 연구원들이 싸질러놓은 스파게티 코드를 정리해 줄 사람이 필요해서요."
그렉이 들고 있던 서류를 보더니 한 부분을 짚으며 말했다.
"아마존 AWS 시스템 코어팀에서 4년. 정말 안정적인 곳이죠. 왜 저희 면접에 흔쾌히 응해주셨는지 궁금하네요. 사실 우리는 아마존처럼 체계적이지 않아요. 오늘만 해도 서버가 두 번 터졌거든요."
"그래서 마음에 듭니다."
나는 짧게 대답했다.
"체계적인 곳에서는 제가 할 일은 기계적인 유지보수뿐이니까요. 저는 불을 끄거나, 불을 지르는 일을 좋아합니다."
그렉과 미라가 피식 웃음을 터뜨렸다.
일리야는 여전히 고개를 들지 않았다.
그렉이 서류를 탁자에 내려놓으며 다시 물었다.
"사실 이 부분이 핵심인데.. 작년 AWS 장애 때, 캐시 오염 문제를 잡아낸 역할을 크게 하셨다고 들었어요. 이게 당시에 저희 회사 엔지니어링팀에서도 꽤 화제가 되었던 사건이었죠."
"쉽지 않은 문제였죠. 다들 하드웨어 스위치 결함이라고 의심했으니까요. 로그상으로는 멀쩡한 패킷이 계속 유실되고 있었거든요."
"어떻게 알았죠?"
나는 잠시 호흡을 가다듬었다.
일주일간의 밤샘 야근 끝에, 모니터 너머로 보였던 그 기이한 감각을 떠올렸다.
"데이터가 흐르는 도로는 넓었습니다. 그런데 차들이 달리지 못하고 계속 브레이크를 밟고 있더군요. 병목은 네트워크가 아니라 CPU 내부, 정확히는 L3 캐시에서 일어나고 있었습니다."
"L3 캐시요?"
미라가 흥미로운 듯 되물었다.
"네. 서로 전혀 상관없는 두 개의 프로세스가, 우연히 물리적으로 같은 통로를 공유하고 있었습니다. 거짓 공유 현상이었죠. 마치 좁은 책상에서 두 사람이 각자 글씨를 쓰는데, 서로 팔꿈치가 닿아 멈칫거리는 것처럼요."
나는 주먹을 쥐었다 폈다 하며 설명을 이었다.
"모니터링 툴은 1초 단위의 평균 속도만 보여주니 아무도 몰랐던 겁니다. 저는 변수들 사이에 더미 데이터를 채워 넣어서 물리적 거리를 강제로 벌렸습니다. 책상 거리를 띄운거죠. 그러자 지연 시간이 0 퍼센트 단위로 떨어지더군요."
미라는 흥미롭다는 듯 아이패드에 무언가를 적었고, 그렉은 고개를 끄덕였다.
타닥 소리와 함께 옆에 있던 노트북이 닫혔다.
일리야 수츠케버였다.
그가 천천히 고개를 들어 나를 응시했다. 두꺼운 안경 너머의 눈빛이 형형하게 빛났다.
"팔꿈치가 닿아 멈칫거리는 것..."
일리야가 낮은 목소리로 중얼거렸다.
"보통은 단순히 병목이라고 하죠. 하지만 당신은 기계 안에서 그 좁아터진 공간을 직접 본 것처럼 말하는군요. 마음에 듭니다. 과거의 이야기는 이걸로 충분합니다."
그가 자리에서 일어나 화이트보드로 성큼성큼 걸어갔다.
보드마카 뚜껑을 열며 말했다.
"미래의 문제를 풀어보죠. 아마존의 쇼핑 카트와는 차원이 다른, 우리를 미치게 만드는 문제입니다."
그가 칠판에 거대한 사각형과 수많은 막대기를 그렸다.
"우리가 훈련시킨 AI 모델입니다. GPT 시리즈. 파라미터 약 1,750억 개. 이걸 수천 명의 사용자가 동시에 쓴다고 가정합시다. 그렇다면 바로 서버가 터져요. 연산 속도 때문에? 아니요."
그가 칠판을 툭 쳤다.
"메모리 입니다."
시스템 엔지니어링의 난제중 하나인 키-밸류 캐시 파편화 문제였다.
"사용자가 질문을 할 때마다, AI는 이전 대화의 문맥을 기억해야 합니다. 대화가 길어질수록 이 기억의 용량은 커지죠. 문제는 우리가 이 기억을 저장할 공간을 미리 예약해야 한다는 겁니다."
일리야가 칠판에 긴 막대를 그렸다.
"사용자가 10마디를 할지, 1000마디를 할지 모르니, 우리는 일단 최대치만큼 메모리를 통째로 잡아둡니다. 마치 손님 한 명 받으려고 호텔 한 층을 다 비워두는 꼴이죠. 덕분에 낭비되는 메모리가 60%가 넘어요."
그렉이 거들었다.
"당연히 메모리 부족으로 서버가 터지겠죠. 이걸 해결해야 합니다. 물론 속도는 늦추지 않고."
"어떻게 하겠습니까?"
일리야가 마커를 내 쪽으로 건넸다.
"메모리 효율을 잡는 아이디어가 있을까요? 모호한 부분이 있다면 질문하셔도 됩니다."
어려운 질문이었다.
단순한 코딩 문제처럼 보이진 않았다. 컴퓨터 구조의 근본적인 한계를 고려해야했다.
나는 화이트보드 앞으로 나갔다.
마커를 쥐었다.
등 뒤에서 세 쌍의 눈이 나를 지켜보고 있었다.
눈을 감고 가볍게 숨을 들이켰다.
'보자.'
머릿속에서 거대한 파이프라인을 구축했다.
중앙에는 GPT라는 거대한 뇌가 있고, 수천 개의 대화 데이터가 빗방울처럼 쏟아진다.
현재의 메모리 구조가 보였다.
구멍이 숭숭 뚫려 있었다.
어떤 사용자는 한 마디만 하고 나갔는데, 시스템은 그를 위해 거대한 운동장을 비워두고 있었다.
마치 스위스 치즈처럼 구멍이 송송 난 상태였다.
이윽고 데이터가 흐르기 시작했다.
흘러가던 데이터들이 점점 쌓이면서 어떤 운동장은 텅 비고 어떤 운동장은 꽉 차기 시작했다.
새로 들어오는 데이터들이 이제 점점 막힌다.
메모리에서 GPU로 데이터를 옮기는 통로가 병목으로 인해 열기를 뿜어내고 있었다.
그 열기가 내 손등을 타고 실제로 느껴졌다.
'낭비야.. 엄청난 낭비인데.. 유연하지 못해.'
어떻게 해야 하지?
연속된 메모리를 할당하는 방식자체가 문제였다.
하지만 GPU에 할당된 텐서 연산은 연속된 공간에서 빨랐다.
이걸 깨면 해결할 수 있겠지만 속도가 느려진다.
5분.
10분.
시간이 흘렀다.
회의실의 공기가 무거워졌다.
그렉이 시선을 돌리며 시계를 봤다.
미라는 아이패드로 눈길을 돌렸다.
일리야마저 흥미를 잃은 듯 다시 소파에 기대앉으려 했다.
'아니야.'
나는 눈을 뜨지 않고서 더 깊이 들어갔다.
관자놀이 혈관이 팽창했다.
두통이 시작됐다.
뇌가 과부하 걸린다는 신호였다.
-쿵. 쿵. 쿵
심장 박동 소리가 귓가에 울렸다.
시야 속에서 메모리 블록들이 춤을 췄다.
긴 막대기를 억지로 끼워 맞추려 하지 마.
부러뜨려?
더욱 잘게 부러뜨린다면?
'블록'
거대한 운동장을 예약할 필요가 있을까?
작은 쪽지를 수천 장을 준비해보자.
사용자가 말을 할 때마다 쪽지를 한 장씩 준다면?
그 쪽지가 어디에 있든 상관없어.
순서만 적어두면 돼.
'찾았다.'
운영체제의 페이징 기법.
그걸 GPU 메모리에 적용한다.
막혀있던 데이터들이 둑이 뚫린듯 들어가기 시작했다.
나는 눈을 번쩍 떴다.
코끝이 뜨끈했다.
철 냄새가 났다.
주륵-
붉은 방울이 바닥에 떨어졌다.
"저런..."
미라가 놀라서 휴지를 찾으려 했지만, 나는 멈추지 않고 칠판에 마커를 찍었다.
"메모리를 속이죠."
세 사람의 시선이 다시 내게 꽂혔다.
"아마 지금 모델은 대화의 문맥을 연속된 긴 띠로 저장하려고 하겠죠? 그래서는 낭비가 생깁니다."
나는 보드에 그림을 그렸다.
긴 막대기를 잘게 토막 냈다.
테트리스 블록처럼.
"운영체제가 가상 메모리를 관리하는 것처럼, 대화 문맥을 고정된 크기의 블록으로 쪼개야 합니다. 그리고 메모리의 빈 공간 아무 데나 쑤셔 박습니다. 물리적으로는 흩어져 있지만..."
마커로 옆에 별도의 표를 그렸다.
"논리적으로는 이어져 있다고, 이 주소록을 통해 모델을 속이는 겁니다."
그렉이 눈을 가늘게 떴다. 몸을 앞으로 기울였다.
"잠깐, 그거 운영체제의 페이징 기법이잖아요. 그걸 GPU에서 돌린다고요? 연산할 때마다 주소를 찾으러 갔다 오면 지연되는 시간이 생길 텐데?"
"맞습니다. 하지만..."
나는 자신 있게 웃었다.
이미 계산은 끝나있었다.
"메모리 낭비가 사라지면, 한 번에 처리할 수 있는 사용자가 10배 늘어납니다. 그렇다면 전체 처리량이 압도적으로 늘어나서, 미세한 지연은 상쇄되고도 남습니다."
정적이 흘렀다.
시계 바늘 소리만 들렸다.
그렉은 팔짱을 낀 채, 내가 그린 테트리스 블록 그림을 뚫어져라 쳐다봤다.
머릿속으로 계산기를 두드리는 눈치였다.
그리고 일리야.
그가 천천히 자리에서 일어났다.
화이트보드 앞으로 다가와 내가 그린 주소록 테이블을 손가락으로 훑었다.
그러더니 처음으로 입가에 진짜 미소를 띠었다.
"아름답군."
그때서야 현기증이 몰려왔다.
내가 살짝 휘청거리자 미라가 급히 티슈 통째로 건네줬다.
"일단 화장실부터 다녀오시는 게 좋겠어요. 복도 끝에 있습니다."
"아... 그래야겠군요."
나는 코를 틀어막고 회의실을 나갔다.
등 뒤에서 문이 닫히기전에, 격양된 목소리들이 들렸던 것 같다.
* * *
찬물로 얼굴을 씻었다.
거울 속의 나는 창백했지만 살아 있었다.
오랜만에 느껴보는 기분좋은 감각이었다.
휴지로 코를 틀어막고 다시 회의실 문을 열었다.
-끼익
세 사람은 나란히 서있었다.
그렉은 팔짱을 낀 채 웃고 있었고, 미라는 아이패드를 정리하고 있었다.
그리고 일리야는 처음으로 나를 동료를 보는 눈빛으로 바라보고 있었다.
"서준 씨."
그렉이 말했다.
"아마존에는 퇴사 통보 언제 할 수 있죠?"
"네?"
"연봉, 스톡옵션, 원하는 대로 맞춰줄게요. 대신 조건이 하나 있어요."
그렉이 윙크하며 덧붙였다.
"최대한 빨리 출근하세요. 11월에 뭔가 큰 걸 터뜨릴 예정인데, 지금 속도로는 턱도 없거든요."
나는 얼얼한 코를 부여잡고 멍하니 그들을 바라봤다.
여긴 항상 예측할 수 없는 곳이었다.
"웰컴!"







Comment ' 1