답을 만드는 두 단계를 다른 기계로 갈라 놓는 것만으로 같은 H100 열여섯 장에서 고정 지연 기준 GPU당 처리량이 최대 두 배가 된 사례. 그것이 안 통하는 구간까지 함께 밝히는 대목, 작은 모델을 서너 번 다시 물으면 한 판 큰 모델과 품질이 엇비슷해지면서 값은 더 싸다는 대비, 그리고 도구를 기다리는 동안 캐시를 옆으로 옮겼다 되돌리는 요령이 나옴.
한줄 코멘트. 품질·지연·값 셋 중에서 내 앱이 서야 할 한 점을 먼저 정하라는 것이 이 발표의 틀이다. 값나가는 대목은 자기 기법이 안 통하는 구간을 함께 그려 놓은 것 — 입력이 짧으면 거의 안 빨라지고, 아주 느리거나 아주 빠른 양 끝에서는 나누지 않은 쪽이 도로 낫다고 말한다.
큰 회사에서 가장 큰 추론 판을 맡았고 지금은 그 회사가 연 오픈소스 프로젝트를 이끈다는 사람이 발표한다. 분기 클라우드 청구서가 수천만 달러대였다고 밝힌다.
배포할 수 있는지를 정하는 것으로 셋을 든다. 품질, 지연, 값이다. 지연은 사람이 만족하거나 로봇처럼 안전 기준을 맞출 만큼 빠른지이고, 값은 요청 하나를 마진에 맞게 처리할 수 있는지다.
셋을 견주는 방법으로 *파레토 경계를 든다. 한 축은 GPU 한 장이 초당 내놓는 양(값에 해당)이고 다른 축은 사용자가 체감하는 속도다.
여기서 실무적인 한 줄이 나온다. 경계 전체가 필요한 것이 아니라 그 위의 한 점만 필요하다. 내 앱이 서야 할 지연과 품질을 정하고 거기서 값을 최소로 만드는 것이 전부라는 것이다.
예를 셋 든다. 개인 맞춤 치료제를 찾는 일이라면 지연도 값도 사실상 문제가 아니다. 편집기에서 눌러 쓰는 자동완성은 바로 나와야 한다. 코드를 뒤에서 고쳐 두는 쪽은 지연보다 품질과 값이 걸린다.
흔한 기법이 셋에 어떻게 작용하나
| 기법 | 품질 | 지연 | 값 |
|---|---|---|---|
| 자리수를 줄여 담기 | — | 빨라진다 | 싸진다 |
| 찾아와 붙이기 | 올라간다 | 느려진다 | 비싸진다 |
| 더 생각하게 하기 | 올라간다 | 느려진다 | 비싸진다 |
| 나눠 얹는 방식 바꾸기 | 달라질 수 있다 | 크게 달라진다 | 크게 달라진다 |
이것들을 겹쳐 쓸 수 있다고 말한다. 찾아와 붙여 품질을 올리고, 그 위에 자리수를 줄여 속도를 되찾는 식이다.
채우는 일과 뽑는 일
한 번의 답에 성격이 다른 두 일이 있다
바탕은 *KV 캐시다. 토큰마다 나오는 값을 담아 두어 이어 만들 때 처음부터 다시 안 만들게 하는 것이다.
그래서 답 만들기가 두 단계다. 캐시를 채우는 일과 새 토큰을 뽑아 내놓는 일이다.
이 둘을 다른 기계 무리에 나눠 두는 것이 발표가 미는 기법이다. 근거가 둘이다. 하나는 성격이 달라서다 — 채우는 쪽은 계산에, 뽑는 쪽은 메모리에 발목이 잡힌다. 다른 하나는 순서 다툼이다. 한 기계에 섞이면 채우려는 요청과 뽑으려는 요청이 서로 순서를 다툰다.
수가 나온다. 같은 H100 열여섯 장에서 지연을 한 점에 고정해 놓고 보면 GPU 한 장이 내놓는 양이 최대 두 배가 된다. 곧 값이 절반이다.
정직한 대목이 바로 붙는다.
안 통하는 자리
| 언제 | 어떻게 되나 |
|---|---|
| 넣는 말이 짧을 때 | 순서 다툼 자체가 적어 거의 안 빨라진다 |
| 아주 느리고 많이 뽑는 구간 | 나누지 않은 쪽이 도로 따라잡는다 |
| 아주 빠르고 적게 뽑는 구간 | 여기서도 나누지 않은 쪽이 조금 낫다 |
그러면서 사람이 쓰는 앱은 대개 초당 20~200 토큰 언저리를 신경 쓴다며, 그 구간이 이 기법이 듣는 자리라고 말한다.
값도 밝힌다. 나누면 캐시를 기계 사이로 옮겨야 하고, 채우는 쪽과 뽑는 쪽의 머릿수를 맞춰야 한다. 어긋나면 한쪽이 놀게 된다. 그 균형을 다시 잡는 일이 비싸고 어렵다고 말한다 — 각 단계를 어떻게 나눠 얹었는지에 따라 달라져서 경우의 수가 넓기 때문이다.
길잡이도 필요해진다. 이미 채워 둔 것과 겹치는 정도를 크게 잡으면서 그 기계에 이미 걸린 부하도 함께 보는 쪽으로 보낸다. 그리고 판이 클수록 담아 둔 것이 많아져 다시 채울 일이 줄어든다고 말한다. 이 길잡이는 하는 일 자체를 안 바꾸므로 품질에는 영향이 없다.
작은 모델에게 여러 번 묻는다
다른 축은 다시 묻기다.
크기가 다른 모델 셋을 놓고 잰 그림을 든다. 서너 번 다시 물으면 작은 것이 한 판 큰 것과, 그 한 판 큰 것이 또 그 위와 품질에서 엇비슷해진다.
값이 뒤집히는 자리가 여기다. 여러 번 물어도 큰 것에 한 번 묻는 것보다 싸다. 그러니 품질을 고정해 놓고 보면 작은 것을 여러 번 부르는 쪽이 더 빠르고 더 싸다.
붙는 요령도 있다. 다시 묻기를 바깥에서 하지 말고 길잡이 쪽에서 만들면 오가는 왕복이 줄어 지연이 낫다. 그리고 되풀이하는 일이라는 것을 길잡이와 일정 잡는 쪽이 알게 하면 이득이 더 붙는다.
도구를 부를 때의 요령도 든다. 도구가 도는 시간이 어느 정도 정해져 있으면, 밀려나기 전에 캐시를 옆 메모리로 옮겼다가 끝날 때쯤 도로 올려 둔다.
마지막 축이 변동이다.
쓰는 사람들의 씀씀이가 달라지면 채우는 쪽과 뽑는 쪽의 수요 비율이 바뀐다. 그러면 애써 맞춰 둔 균형이 어긋난다. 이것은 여러 곳이 낸 자료로 실제로 확인된 것이라고 말한다.
그래서 두 갈래를 실시간으로 늘리고 줄여야 한다. 그리고 못 박는다 — 이것은 그냥 좋은 것이 아니라 나눠 두는 기법이 제 힘을 내려면 반드시 있어야 하는 것이다.
두 배가 어느 조건에서 나온 값인지 얇다. 어떤 입력·출력 길이에서, 어느 지연 점에서 잰 것인지가 없다. 「최대」라고 붙여 놓았을 뿐이다.
모델 이름이 어긋난다. 예로 들 모델을 하나로 말해 놓고 뒤의 그림에는 다른 크기 셋이 나온다. 자막이 뭉갠 자리라 어느 것으로 잰 값인지가 원문에서 갈린다.
다시 묻기의 과제가 하나뿐이다. 어느 자료로 쟀는지가 한 번 나오고, 다른 종류의 일에서도 그런지가 없다. 서너 번이면 된다는 것도 그 과제에서의 값이다.
옮기는 값이 없다. 캐시를 기계 사이로 나르는 데 드는 시간과 대역폭이 나오지 않는다. 옆 메모리로 옮겼다 되돌리는 요령도 마찬가지다.
균형을 어떻게 잡는지가 없다. 어렵고 비싸다고만 하고 어떤 기준으로 머릿수를 정하는지가 안 나온다.
전부 자기네 도구 위의 이야기다. 다른 서빙 방식과 나란히 놓고 잰 자리가 없다.
용어