추론
고친 사람 github-actions[bot]
추론은 훈련을 마친 모델에 새 입력을 넣어 답을 받아 내는 일입니다. 서비스에 올라간 머신러닝 모델이 요청마다 하는 일이 이것입니다. 논리학이나 프로그래밍 언어에서는 아는 사실에서 결론을 끌어내는 일을 같은 이름으로 부릅니다. 이 항목은 머신러닝의 뜻을 중심으로 다룹니다.
쉽고 빠른 이해
무슨 일을 하는 물건인가 — 다 만든 모델로 답을 내는 일입니다. 사진 한 장을 넣고 「고양이」라는 답을 돌려받는 것이 추론 한 번입니다.
왜 이렇게 하나 — 모델을 만드는 목적은 처음 보는 입력에 답하는 데 있습니다. 모델을 만드는 훈련은 오래 걸리니 미리 한 번 해 둡니다. 서비스는 다 만든 모델로 계산만 해서 빠르게 답합니다.
어떻게 도나
- 서버가 모델 파일을 메모리에 올려 둡니다
- 요청이 오면 입력을 숫자로 바꿉니다
- 모델 안의 고정된 숫자로 계산을 한 번 합니다
- 나온 숫자를 사람이 읽을 답으로 바꿔 돌려줍니다
대가 — 요청마다 계산이 들어 응답이 느려집니다. 계산 장비도 비쌉니다. 모델이 클수록 메모리도 많이 먹습니다. 요청을 묶어 한꺼번에 계산하면 많이 처리하는 대신 한 요청이 기다리는 시간이 늘어납니다.
상세
이 절은 추론이 훈련과 어떻게 갈리는지부터 보고, 서버에서 돌리는 방식과 비용을 거쳐 같은 이름을 쓰는 다른 분야로 끝납니다.
공부와 시험
수험생은 문제집을 풀며 몇 달 동안 공부합니다. 시험장에서는 새로 공부하지 않습니다. 이미 익힌 것만으로 처음 보는 문제를 풉니다.
머신러닝에서 공부하는 시간이 훈련이고, 시험장에서 문제를 푸는 일이 추론입니다.
훈련과 추론
머신러닝의 모델은 입력을 받아 답을 내는 계산식입니다. 식 안에는 곱하고 더할 숫자가 많이 들어 있습니다.
이 숫자들을 파라미터라고 부릅니다. 같은 식이라도 파라미터가 다르면 다른 답을 냅니다.
훈련은 파라미터를 찾는 과정입니다. 정답이 붙은 예시를 모델에 넣어 봅니다. 모델의 답이 정답과 가까워지도록 숫자를 조금씩 고칩니다. 이 일을 예시 수만큼, 그것도 여러 바퀴 되풀이합니다.
추론은 훈련이 끝난 뒤의 일입니다. 파라미터를 더는 고치지 않고 고정합니다. 그 숫자로 처음 보는 입력에 대해 식을 한 번 계산합니다. 이렇게 받은 답을 예측이라고 부릅니다.
두 단계는 하는 일이 달라서 드는 비용도 다릅니다. 아래 표가 둘을 나란히 놓습니다.
| 훈련 | 추론 | |
|---|---|---|
| 하는 일 | 파라미터를 찾는다 | 고정된 파라미터로 답을 낸다 |
| 입력 | 정답이 붙은 예시 | 정답을 모르는 새 입력 |
| 횟수 | 모델을 만들 때 한 번 | 요청이 올 때마다 |
| 한 번에 드는 시간 | 길다 | 짧다 |
| 누가 주로 다루나 | 모델을 만드는 쪽 | 모델을 서비스에 올리는 쪽 |
한 번에 드는 시간은 훈련이 훨씬 깁니다. 하지만 추론은 서비스가 살아 있는 동안 끝없이 되풀이됩니다. 그래서 오래 굴리는 서비스에서는 추론에 드는 비용이 훈련보다 커지기도 합니다.
추론 한 번의 계산
가장 작은 모델로 추론 한 번을 보겠습니다. 집 넓이를 넣으면 집값을 짐작해 주는 모델입니다. 식의 모양은 「넓이에 w 를 곱하고 b 를 더한다」입니다. w 와 b 는 훈련이 이미 찾아 둔 파라미터입니다.
w, b = 0.5, 1.0 # 훈련이 정한 값
def predict(area):
return w * area + b
predict(30) # 16.0
predict(84) # 43.0
predict 를 부를 때마다 추론이 한 번 일어납니다. w 와 b 는 몇 번을 불러도 바뀌지 않습니다. 입력만 바뀌고 답도 그에 따라 바뀝니다.
실무의 모델은 식이 훨씬 길고 파라미터가 수백만 개를 넘기도 합니다. 그래도 「고정된 숫자로 식을 계산한다」는 짜임은 같습니다.
신경망의 추론
요즘 많이 쓰는 모델은 신경망입니다. 신경망은 곱하고 더하는 작은 계산 단위를 여러 겹으로 쌓은 모델입니다. 한 겹을 레이어라고 부릅니다.
신경망의 추론은 입력이 레이어를 앞에서 뒤로 차례로 지나가는 계산입니다. 이 계산을 순전파라고 부릅니다. 추론 한 번은 순전파 한 번입니다.
훈련 때는 순전파 뒤에 계산이 하나 더 붙습니다. 답이 정답과 얼마나 다른지 잽니다. 그 차이를 뒤에서 앞으로 거꾸로 보내 숫자마다 얼마나 고칠지 구합니다. 이 계산이 역전파입니다. 추론에는 역전파가 없습니다. 그래서 같은 입력 하나를 처리해도 추론이 훈련보다 가볍습니다.
입력에서 답까지
모델은 숫자만 받고 숫자만 내놓습니다. 그런데 요청에 실려 오는 것은 글이나 사진입니다. 그래서 모델 앞뒤로 바꾸는 단계가 하나씩 붙습니다.
모델에 넣기 전에 입력을 숫자로 바꾸는 단계가 전처리입니다. 사진이면 먼저 크기를 맞춥니다. 그다음 점 하나하나의 색을 숫자로 늘어놓습니다.
모델은 답 후보마다 점수를 하나씩 내놓습니다. 이 숫자를 사람이 읽을 답으로 바꾸는 단계는 후처리입니다. 「고양이 0.9, 개 0.1」 같은 숫자에서 가장 큰 쪽을 골라 「고양이」라고 답하는 일이 그렇습니다.
flowchart TD
A["요청 · 사진 한 장"] --> B["전처리 · 사진을 숫자로 바꾼다"]
B --> C["모델 · 고정된 파라미터로 계산한다"]
C --> D["후처리 · 가장 큰 숫자를 고른다"]
D --> E["응답 · 고양이"]
그림의 전처리·모델·후처리 세 단계가 모두 요청 하나 안에서 돕니다. 응답이 느릴 때 모델 계산만 의심하기 쉽습니다. 하지만 전처리와 후처리도 같은 요청 안에서 시간을 씁니다.
서버에서 돌리는 추론
백엔드 개발자가 추론을 만나는 곳은 대개 서버입니다. 훈련이 끝난 모델은 식의 모양과 파라미터 값을 담은 파일로 저장됩니다. 서버는 시작할 때 이 파일을 메모리에 올립니다. 그 뒤로는 요청이 올 때마다 추론을 돌려 답합니다.
이렇게 모델을 띄워 두고 요청에 답하게 하는 일을 모델 서빙이라고 부릅니다. 모델 파일을 올리는 데는 시간이 걸립니다. 그래서 요청마다 파일을 다시 읽지 않고, 한 번 올린 모델을 계속 씁니다.
추론을 돌리는 방식은 답이 언제 필요한지에 따라 둘로 갈립니다.
| 온라인 추론 | 배치 추론 | |
|---|---|---|
| 언제 답하나 | 요청이 오자마자 | 정해 둔 때에 한꺼번에 |
| 예 | 사용자가 올린 사진을 바로 분류한다 | 밤마다 전체 회원의 추천 목록을 미리 만든다 |
| 먼저 챙기는 것 | 한 요청의 응답 시간 | 전체 작업이 끝나는 시간 |
배치 추론은 배치 처리의 한 갈래입니다. 답을 미리 만들어 데이터베이스에 넣어 두면, 요청이 왔을 때는 꺼내 읽기만 합니다. 대신 미리 만든 뒤에 들어온 정보는 다음 배치까지 답에 반영되지 않습니다.
추론 비용을 정하는 요인
온라인 추론에서 가장 먼저 재는 값은 지연입니다. 요청을 보낸 뒤 답이 돌아올 때까지 걸린 시간입니다. 사용자가 화면 앞에서 기다리는 시간이라 짧을수록 좋습니다.
두 번째 값은 처리량입니다. 정해진 시간 동안 처리한 요청 수입니다. 같은 장비로 더 많은 요청을 받으면 요청 하나에 드는 돈이 줄어듭니다.
두 값은 서로 당깁니다. 요청 여럿을 묶어 한 번에 계산하면 장비를 쉬지 않고 쓰므로 처리량이 늘어납니다. 대신 먼저 온 요청은 묶음이 찰 때까지 기다리므로 지연이 늘어납니다. 이렇게 묶은 입력 한 덩이를 배치라고 부릅니다. 앞 절의 배치 추론과는 다른 묶음입니다. 이 배치는 막 들어온 요청 몇 개를 잠깐 모은 것입니다.
신경망의 계산은 대부분 곱셈과 덧셈입니다. 이 곱셈들은 서로를 기다리지 않고 따로 할 수 있습니다. 그래서 곱셈을 동시에 아주 많이 하는 GPU(Graphics Processing Unit, 그래픽 처리 장치)로 추론을 돌리는 경우가 많습니다. 작은 모델은 일반 CPU(Central Processing Unit, 중앙 처리 장치)로도 충분히 돌아갑니다.
모델이 클수록 파라미터를 담을 메모리가 많이 듭니다. 이 부담을 줄이는 방법으로 양자화가 있습니다. 파라미터를 더 적은 비트의 숫자로 바꿔 담는 일입니다. 메모리와 계산이 줄어드는 대신 답이 원래 모델과 조금 달라질 수 있습니다.
글을 이어 쓰는 모델의 추론
대규모 언어 모델은 글을 넣으면 그 뒤를 이어 쓰는 큰 모델입니다. 대화형 인공지능이 대개 이런 모델로 돌아갑니다. 이 모델은 답을 한 번에 내지 않습니다.
이 모델은 글을 작은 조각으로 잘라 다룹니다. 이 조각이 토큰입니다. 모델은 지금까지의 글을 보고 다음 토큰 하나를 고릅니다.
고른 토큰을 글 끝에 붙이고 다시 다음 토큰을 고릅니다. 이 일을 답이 끝날 때까지 되풀이합니다. 그래서 답이 길수록 추론 계산도 그만큼 여러 번 돕니다.
이런 모델을 서비스에 붙이면 답을 다 만들 때까지 기다리지 않는 경우가 많습니다. 토큰이 나오는 대로 조금씩 보냅니다. 이 방식을 스트리밍이라고 합니다. 사용자는 첫 글자를 일찍 보게 됩니다.
다른 분야의 추론
「추론」은 머신러닝보다 훨씬 오래된 낱말입니다. 본래 뜻은 아는 사실에서 모르는 결론을 끌어내는 일입니다. 개발자가 만나는 맥락만 해도 여럿입니다. 그래서 대화에서 어느 뜻인지 가려 들어야 합니다.
| 맥락 | 「추론」이 가리키는 일 | 예 |
|---|---|---|
| 머신러닝 | 훈련을 마친 모델로 새 입력의 답을 낸다 | 사진을 넣어 「고양이」를 받는다 |
| 논리학 | 전제에서 결론을 끌어낸다 | 「사람은 죽는다, 그는 사람이다」에서 「그는 죽는다」 |
| 프로그래밍 언어 | 타입을 안 적어도 컴파일러가 알아낸다 | 오른쪽 값이 정수면 변수도 정수로 본다 |
| 통계학 | 표본으로 모집단의 성질을 짐작한다 | 천 명을 조사해 전체의 지지율을 짐작한다 |
| 대규모 언어 모델의 능력 | 단계를 밟아 생각한 뒤 결론을 낸다 | 수학 문제를 풀이 과정부터 적고 답한다 |
논리학의 추론에는 두 갈래가 있습니다. 일반 규칙에서 개별 결론을 끌어내는 일이 연역입니다. 위 표의 예가 연역입니다.
개별 사례를 모아 일반 규칙을 세우는 일은 귀납입니다. 「지금까지 본 백조가 모두 희니 백조는 모두 희다」처럼 결론을 끌어냅니다.
프로그래밍 언어의 뜻은 타입 추론이라는 이름으로 따로 부릅니다. 컴파일러가 코드에 적힌 값과 쓰임에서 타입을 끌어내는 일이라 논리학의 뜻에 가깝습니다.
통계학의 뜻은 추론 통계가 다룹니다. 이름은 같아도 짐작하는 대상이 머신러닝의 추론과 다릅니다.
통계의 추론은 표본을 보고 모집단의 성질을 짐작합니다. 모델로 치면 데이터로 파라미터를 찾는 일이라 오히려 머신러닝의 훈련과 닮았습니다. 머신러닝의 추론은 파라미터를 이미 안다고 두고 새 입력의 답을 냅니다.
마지막 줄은 영어 낱말이 다릅니다. 머신러닝의 추론은 영어로 inference 입니다. 대규모 언어 모델이 생각을 거쳐 답하는 능력은 reasoning 입니다. 우리말로는 둘 다 「추론」이라 섞이기 쉽습니다. 「추론 비용」·「추론 서버」는 앞의 뜻이고, 「추론 능력」·「추론 모델」은 대개 뒤의 뜻입니다.
관련 항목
추론의 앞뒤에 서는 머신러닝 단계
머신러닝 · 훈련 · 훈련 데이터 · 예측 · 일반화 · 재학습 · 분포 이동
추론이 계산하는 모델의 구성 요소
모델 · 파라미터 · 가중치 · 편향 · 신경망 · 레이어 · 순전파 · 역전파 · 행렬 곱셈
추론 한 번이 거치는 처리 단계
전처리 · 후처리 · 토큰화 · 토큰 · 임베딩 · 소프트맥스
추론을 서비스에 올리고 굴리는 수단
모델 서빙 · 배치 추론 · 온라인 추론 · 배치 처리 · 스트리밍 · MLOps · 모델 레지스트리 · ONNX · 직렬화
추론 비용을 재는 지표
지연 · 처리량 · 배치 · 꼬리 지연 · 첫 토큰까지의 시간
추론을 빠르고 싸게 만드는 장비와 기법
GPU · CPU · NPU · 양자화 · 지식 증류 · 가지치기 · KV 캐시 · 동적 배칭
추론을 돌리는 모델의 하위 종류
대규모 언어 모델 · 언어 모델 · 임베딩 모델 · 분류기 · 딥러닝
추론과 이름이 겹치는 다른 뜻
연역 · 귀납 · 타입 추론 · 추론 통계 · 추론 모델 · 사고의 사슬 · 논리학
다른 이름: inference · 인퍼런스