GPU 서버, AI를 직접 돌린다는 선택
AI 모델을 직접 실행할 때는 계산 속도 외에도 메모리와 교체 시간이 필요해요. GPU의 역할부터 대체 경로를 두는 이유까지 풀어봐요.
이 글의 목차그림 그리던 장치가 계산기가 되기까지4
가정집 부엌의 요리는 대부분 가스레인지 하나로 돼요. 그런데 화덕에서 굽는 빵은 흉내가 잘 나지 않아요. 화덕은 비싸고 자리를 차지하며 불을 붙이고 온도가 오를 때까지 한참 기다려야 해요. 그래서 화덕을 들이는 결정은 요리를 잘하고 싶다는 마음만으로 내려지지 않아요.
AI를 직접 돌리는 일이 그래요. 필요한 계산 장치가 따로 있고, 그 장치는 비싸고, 예열 시간이 있으며, 켜 두는 동안 값이 나가요.
그림 그리던 장치가 계산기가 되기까지
컴퓨터의 두뇌라고 부르는 장치는 복잡한 판단을 순서대로 아주 빠르게 처리하는 데 강해요. 화면에 그림을 그리는 일은 성격이 달라요. 수백만 개의 점 색깔을 각각 정해야 하는데 계산 하나하나는 단순하고 서로를 기다릴 필요도 없어요. 어려운 문제 하나가 아니라 쉬운 문제 수백만 개예요.
이런 일에 맞춰 만들어진 것이 GPU예요. NVIDIA는 1999년에 이 이름을 붙인 제품을 내놓았다고 자사 연표에 적고 있어요. 처음에는 게임 화면을 위한 물건이었어요. 같은 연표는 2006년에 이 장치의 병렬 처리 능력을 과학과 연구에 열어 준 구조를 공개했다고 기록하고, 2012년에는 이 장치로 학습시킨 신경망이 이미지 인식에서 두각을 나타내며 지금의 AI 시대가 열렸다고 정리해요.
신경망 계산이 GPU에 맞는 이유는 그 계산의 대부분이 큰 행렬을 곱하는 일이기 때문이에요. 곱셈 하나하나는 단순하고 서로 독립적이라 화면의 점을 칠하는 일과 구조가 같아요. 게임을 위해 만든 장치가 인공지능의 기반이 된 것은 설계 목표가 맞아떨어져서가 아니라 계산의 모양이 우연히 닮아서였어요.
직접 돌릴 때 실제로 걸리는 것
지금은 AI를 쓰겠다고 장비를 살 필요가 없어요. 대형 업체가 모델을 서비스로 열어 두고 있어 요청을 보내고 답을 받으면 돼요. 대부분의 경우 이 편이 나아요.
직접 돌리면 모델과 배치 위치를 직접 고를 수 있어요. 확보한 장비 안에서는 요청마다 외부 사용료가 붙지 않을 수 있지만, 용량을 넘으면 장비 비용도 늘어요. 데이터가 어디로 가는지는 호스팅 위치와 로그, 외부 연동까지 봐야 해요. ‘직접 실행’이라는 말만으로 비용이나 정보 이동이 고정되는 것은 아니에요.
첫 번째 벽은 메모리예요. 모델의 수치와 계산 중간값을 둘 공간이 필요해요. vLLM의 메모리 절약 문서에는 여러 GPU에 나누거나 일부 데이터를 CPU 쪽 메모리로 옮기는 방법도 나와요. 반드시 모델 전체가 GPU 한 장에 들어가야 하는 것은 아니지만, 나누고 옮기는 만큼 통신과 관리가 늘어요. 수치의 정밀도를 낮춰 모델을 작게 만드는 양자화도 품질과 지원 형식을 함께 따져야 해요.
다음은 준비 시간이에요. 모델을 읽고 실행 준비를 마치기 전에는 요청을 받을 수 없어요. 구 모델과 새 모델을 함께 띄울 메모리가 부족하면 교체하는 동안 빈 구간이 생길 수 있죠. 장비가 한 대인가보다 두 버전을 겹쳐 실행할 여유가 있는지가 더 직접적인 조건이에요.
세 번째가 운영에서 가장 성가셔요. 설정 하나 바꾸는 일이 곧 다운타임이 되면, 바꾸는 일 자체를 미루게 돼요.
앞길이 비었을 때를 미리 정해 두기
해법은 앞길이 비었을 때 갈 곳을 미리 정해 두는 것이에요. 여기서 중요한 것은 전환을 무엇으로 판단하느냐예요. 응답이 아예 없는 경우뿐 아니라 정해진 시간 안에 오지 않는 경우도 실패로 다뤄야 하고, 실패가 이어지면 한동안 아예 시도하지 않고 곧바로 대체 경로로 보내는 편이 나아요. AWS가 회로 차단기라는 이름으로 정리해 둔 방식이 이것인데, 실패가 기준을 넘으면 회로를 열어 호출 자체를 보내지 않고 즉시 실패를 돌려준 뒤 주기적으로 살아났는지만 확인해요. 죽은 경로에 매번 요청을 보내며 응답을 기다리면 전체 지연이 그만큼 늘어나요.
그리고 반드시 함께 두어야 하는 것이 관측이에요. 대체 경로가 조용히 잘 동작하면 1차 경로가 며칠째 죽어 있어도 아무도 몰라요. 폴백은 실패를 감추는 장치가 아니라 시간을 버는 장치이므로, 얼마나 자주 어떤 이유로 넘어갔는지가 보여야 해요.
| 어떻게 할까 | 얻는 것 | 지는 위험 |
|---|---|---|
| 남의 서비스에 요청 | 장비도 예열도 없다 | 값이 사용량을 따라 오르고 모델 선택이 제한된다 |
| 직접 돌린다 | 모델과 비용과 데이터의 통제 | 장비가 멈추거나 교체하는 동안 기능이 멈춘다 |
| 둘을 함께 둔다 | 한쪽이 비어도 이어진다 | 두 경로와 전환 조건까지 관리해야 한다 |
저는 왜 둘 다 두었나
제가 만드는 앱에서 AI가 문장을 만드는 일은 직접 돌리는 쪽을 1차로 두고, 그 앞이 응답하지 못하면 외부 서비스로 넘어가게 했어요. 처음에는 안전장치라고 생각해서 붙인 구조인데 실제로 가장 크게 달라진 것은 안전이 아니라 자유였어요.
뒷길이 있으니 장비를 손볼 수 있어요. 모델을 바꾸거나 설정을 고치는 동안 서비스는 다른 길로 답을 만들고, 저는 공지를 붙이지 않아도 돼요. 뒷길이 없었다면 그 작업은 사람이 적은 새벽으로 밀렸을 것이고, 밀리다 보면 결국 하지 않게 됐을 것이에요. 대비책이 하는 일은 사고를 막는 것만이 아니라 평소에 손댈 용기를 주는 것이기도 했어요.