학습 자료

모델을 서비스한다는 것 — API · 서빙 · 추론


Article

지금까지 5부는 모델이 어떻게 배우고(1~3부), 어떻게 답을 잇고(4부), 모르는 문서를 어떻게 붙이는지(5부)를 다뤘다. 그런데 그 모델이 채팅창이나 앱 안에서 실제로 우리와 대화하기까지는 한 단계가 더 있다. 학습을 마친 모델을, 누군가 언제든 불러 쓸 수 있는 서비스로 만드는 일이다.

6부가 여기서 시작된다. 모델 자체가 아니라, 모델을 둘러싼 인프라로 방향을 튼다.

학습은 한 번, 추론은 매번

11강에서 본 경사하강은 모델이 답을 맞히도록 가중치를 조금씩 고치는 과정이었다. 이 과정을 **학습(training)**이라 부른다. 반면 지금 이 순간 ChatGPT 창에 질문을 던져 답을 받는 것은 학습이 아니다. **추론(inference)**이다.

학습 vs 추론

학습 (training)

가중치를 고치는 과정

  • 수백만~수십억 개의 데이터를 몇 주씩 돌려 가중치를 조금씩 고친다
  • GPU 수백~수천 대가 며칠~몇 달 동안 붙는다
  • 한 모델을 두고 보통 한 번(또는 드물게) 일어난다
  • 결과물은 숫자 뭉치 — 학습이 끝난 가중치 파일이다

추론 (inference)

가중치는 그대로 두고 답만 계산한다

  • 이미 다 학습된 가중치를 놓고, 입력에 대한 출력만 계산한다
  • 질문 하나마다, 초 단위로 일어난다
  • 전 세계에서 하루에도 몇억 번씩 반복된다
  • 가중치는 이 과정에서 전혀 바뀌지 않는다
11강의 경사하강은 학습 쪽 이야기였다. 이번 강의부터는 이미 학습이 끝난 가중치를 어떻게 계속 불러 쓰는가를 다룬다.

모델을 한 번 학습시키는 것과, 그 모델을 계속 불러 쓰게 만드는 것은 완전히 다른 일이다. 학습은 비싸고 드물다. 추론은 상대적으로 싸지만 끊임없이, 대량으로 일어난다. 이 편의 6부와 7부에서 마주치는 용어 대부분은 후자 — 이미 만들어진 모델을 어떻게 서비스로 운영하느냐 — 쪽에 몰려 있다.

질문 하나가 답이 되어 돌아오기까지

앱에서 채팅창에 메시지를 치면 벌어지는 일을 그림으로 본다.

API 호출 한 번의 여정
  1. 앱이 질문을 API 로 보낸다채팅창의 "전송" 버튼이 사실 이 요청을 쏘는 방아쇠다
  2. 서빙 서버가 요청을 받는다가중치를 이미 GPU 메모리에 올려둔 채 대기 중인 프로그램
  3. 모델이 추론을 실행한다12강에서 본 그 과정 — 다음 토큰을 하나씩 확률로 고른다
  4. 생성된 토큰을 다시 글자로 바꾼다토큰 하나가 완성될 때마다 순서대로 돌려보낸다 (스트리밍)
  5. 앱이 답을 화면에 그린다채팅창에 글자가 한 자씩 나타나는 그 연출이 이 과정이다
이 다섯 단계를 안정적으로, 대량으로, 빠르게 돌아가게 만드는 일 전체를 "서빙(serving)"이라 부른다.

여기서 "서버"는 우리가 흔히 쓰는 웹 서버와 크게 다르지 않다. 다만 GPU 위에 무거운 가중치 파일을 이미 올려둔 채 요청을 기다린다는 점이 다르다. 모델을 매번 새로 불러오면 너무 느리기 때문에, 서빙 서버는 대개 가중치를 메모리에 켜둔 채로 대기한다.

서빙을 둘러싼 용어들

서빙 관련 용어
용어
API"이런 형식으로 요청을 보내면 이런 형식으로 답을 준다"는 약속. 채팅 앱은 대개 이 약속을 통해 모델을 부른다
엔드포인트 (endpoint)요청을 받는 구체적인 주소. 모델마다, 기능마다 주소가 나뉘어 있는 경우가 많다
지연시간 (latency)요청을 보내고 첫 답이 오기까지 걸리는 시간. 짧을수록 체감이 빠르다
처리량 (throughput)동시에 몇 명의 요청을 감당할 수 있는가. 사용자가 몰릴 때 중요해진다
스트리밍 (streaming)답 전체를 한 번에 주지 않고, 토큰이 만들어지는 대로 조금씩 흘려보낸다
지연시간과 처리량은 서로 종종 줄다리기 관계다. 한 요청을 더 빠르게 하려는 최적화가, 동시에 처리할 수 있는 요청 수를 줄이기도 한다.

실제 API 호출이 어떤 모양인지 형태만 본다. 실행해서 결과를 확인하는 실습은 이 편의 범위 밖이다.

POST /v1/chat
{
  "model": "some-model",
  "messages": [{ "role": "user", "content": "환불 정책이 뭔가요?" }]
}

요청 안의 messages 가 바로 15강에서 본 컨텍스트 윈도우를 채우는 재료다. 서버는 이 재료를 가중치 위에 흘려 추론을 돌리고, 만들어진 토큰을 다시 응답으로 돌려준다.

정리하면

학습과 추론은 다른 일이다. 학습은 가중치를 고치는, 비싸고 드문 과정이고, 추론은 그 가중치를 그대로 둔 채 답만 계산하는, 매 순간 반복되는 과정이다. 서빙은 이 추론을 API 로 누구나 불러 쓸 수 있게 만드는 인프라 전체를 가리킨다.

다시 짚어보기
  1. 01

    학습은 가중치를 고친다, 추론은 고치지 않는다

    11강의 경사하강이 학습, 지금 강의의 API 호출이 추론이다.

  2. 02

    서빙은 추론을 서비스로 만드는 인프라다

    가중치를 GPU 메모리에 올려두고, 요청이 올 때마다 추론을 돌려 답을 돌려준다.

  3. 03

    대화가 이어져 보이는 건 컨텍스트 윈도우 덕분이다

    15강에서 본 그 창 — 이전 대화를 매번 다시 넣어 보내는 것이지, 모델이 고쳐지는 게 아니다.

  4. 04

    지연시간과 처리량이 서빙의 핵심 지표다

    얼마나 빨리 답하는가, 동시에 몇 명을 감당하는가. 23강에서 비용과 함께 다시 나온다.

지금까지는 모델이 이미 다 학습을 마쳤다고 가정하고 이야기했다. 그런데 애초에 그 모델은 무엇을 먹고 배웠나. 다음 강의에서는 서빙 반대편 — 모델이 학습되기 전, 데이터가 어디서 와서 어떻게 흘러가는지를 되짚는다.