작성자: Databricks AI 연구팀
소형 모델은 다양한 엔터프라이즈 사용 사례에 걸쳐 빠르게 더 많은 기능을 갖추고 적용 가능해지고 있습니다. 동시에 각각의 새로운 GPU 세대는 훨씬 더 많은 컴퓨팅 및 메모리 대역폭을 제공합니다. 그 결과 동시성이 높은 워크로드에서도 소형 LLM은 GPU 컴퓨팅 및 메모리 대역폭의 상당 부분을 유휴 상태로 두는 경우가 많습니다.
코드 완성, 검색, 문법 교정 또는 특화된 모델과 같은 사용 사례를 통해 저희 엔터프라이즈 고객은 Databricks에서 이러한 소규모 언어 모델을 다수 서빙하고 있으며, 저희는 끊임없이 GPU를 한계까지 사용하고 있습니다. NVIDIA의 다중 프로세스 서비스(MPS)는 유망한 도구처럼 보였습니다. 이는 여러 추론 프로세스가 단일 GPU 컨텍스트를 공유하여 메모리 및 compute 운영이 중첩되도록 함으로써 동일한 하드웨어에서 훨씬 더 많은 작업을 효과적으로 처리할 수 있게 합니다.
저희는 프로덕션 환경에서 MPS가 GPU당 더 높은 처리량을 제공하는지 엄격하게 테스트하기 시작했습니다. 그 결과 MPS가 다음과 같은 경우에 의미 있는 처리량 향상을 제공한다는 것을 발견했습니다.
저희의 절제 연구에 기반한 핵심 설명은 두 가지입니다. GPU 수준에서 MPS는 개별 엔진이 컴퓨팅 또는 메모리 대역폭을 충분히 활용하지 못할 때, 특히 소형 모델의 어텐션 지배적 단계에서 의미 있는 커널 중첩을 가능하게 합니다. 또한 유용한 부수 효과로, 멀티모달 워크로드에서 총 배치을 엔진 간에 샤딩하여 엔진별 CPU 부하를 줄임으로써 스케줄러 오버헤드나 이미지 처리 오버헤드 같은 CPU 병목 현상을 완화할 수 있습니다.
NVIDIA의 다중 프로세스 서비스(MPS)는 여러 프로세스가 CUDA 커널을 하드웨어에 멀티플렉싱하여 단일 GPU를 더 효율적으로 공유할 수 있게 해주는 기능입니다. NVIDIA의 공식 문서에서는 다음과 같이 설명합니다.
다중 프로세스 서비스(MPS)는 CUDA 애플리케이션 프로그래밍 인터페이스(API)의 대안적인 바이너리 호환 구현입니다. MPS 런타임 아키텍처는 협력적인 다중 프로세스 CUDA 애플리케이션을 투명하게 활성화하도록 설계되었습니다.
간단히 말해, MPS는 드라이버 내에서 바이너리 호환 CUDA 구현을 제공하여 여러 프로세스(추론 엔진 등)가 GPU를 더 효율적으로 공유할 수 있도록 합니다. 프로세스가 액세스를 직렬화하는 대신(그리고 차례 사이에 GPU를 유휴 상태로 두는 대신), 리소스가 사용 가능할 때 MPS 서버에 의해 커널과 메모리 운영이 다중화되고 중첩됩니다.
주어진 하드웨어 설정에서 효과적인 활용도는 모델 크기, 아키텍처, 컨텍스트 길이에 따라 크게 달라집니다. 최신 대규모 언어 모 델은 유사한 아키텍처로 수렴하는 경향이 있으므로, Qwen2.5 모델 제품군을 대표적인 예로 사용하여 모델 크기와 컨텍스트 길이가 미치는 영향을 탐구합니다.
아래 Experiment에서는 완벽하게 균형 잡힌 동종 워크로드를 사용하여 (MPS가 활성화된) 동일한 NVIDIA H100 GPU에서 실행되는 두 개의 동일한 추론 엔진을 단일 인스턴스 기준선과 비교했습니다.

스케일링 연구의 주요 관찰 결과:

프리필 중심 워크로드에 대한 스케일링 연구의 주요 관찰 사항
위의 스케일링 결과는 MPS의 이점이 효과적인 중첩을 용이하게 하는, 즉 GPU 활용도가 낮은 설정, 소형 모델 및 짧은 컨텍스트에서 가장 두드러지게 나타남을 보여줍니다.
정확한 원인을 파악하기 위해 최신 트랜스포머의 두 가지 핵심 구성 요소인 MLP(다층 퍼셉트론) 계층과 어텐션 메커니즘을 따라 문제를 분석했습니다. 각 구성 요소를 분리하고(CPU 오버헤드와 같은 다른 교란 요인을 제거함으로써) 이득을 더 정확하게 귀속시킬 수 있었습니다.
필요한 GPU 리소스 | |||
| N = 컨텍스트 길이 | 프리필(compute) | 디코딩(메모리 대역폭) | 디코딩(compute) |
| MLP | O(N) | O(1) | O(1) |
| Attn | O(N^2) | O(N) | O(N) |
트랜스포머는 서로 다른 스케일링 동작을 보이는 Attention 및 MLP 레이어로 구성됩니다.
이를 염두에 두고 목표 제거 실험을 진행했습니다.
소규모 모델의 경우 배치당 토큰 수가 많아도 MLP 계층이 compute를 포화시키지 못할 수 있습니다. 모델에서 어텐션 블록을 제거하여 MLP의 영향을 분리했습니다.

위 그림에서 볼 수 있듯이 이점은 미미하며 빠르게 사라집니다. 모델 크기나 컨텍스트 길이가 증가함에 따라 단일 엔진은 이미 compute를 포화시킵니다(더 큰 MLP에서는 토큰당 더 많은 FLOPs, 더 긴 시퀀스에서는 더 많은 토큰). 엔진이 컴퓨팅 바운드 상태가 되면 두 개의 포화된 엔진을 실행해도 거의 이점이 없습니다 — 1 + 1 <= 1.
MLP의 이득이 제한적인 것을 확인한 후, Qwen2.5-3B를 사용하여 어텐션 전용 설정을 유사하게 측정했습니다.
