Scalability
확장성은 리소스를 추가해 더 많은 데이터, 사용자 또는 연산을 처리할 수 있는 시스템의 역량입니다. 스케일업과 스케일아웃, 암달의 법칙 및 멀티 GPU AI를 다룹니다.
확장성은 데이터, 사용자, 요청 또는 모델 규모가 증가할 때 리소스를 추가해 성능과 작업 단위당 비용을 적정 수준으로 유지하면서 작업량 증가를 처리하는 시스템의 능력입니다. 하드웨어를 두 배로 늘렸을 때 처리 가능한 작업량도 거의 두 배가 되면 확장성이 좋고, 추가한 머신들이 서로를 기다리는 데 시간을 쓴다면 확장성이 낮습니다. 인공지능에서는 세 단계에 확장성이 적용됩니다. 빅 데이터를 수집하고 전처리해야 하는 데이터 파이프라인, 여러 가속기에 분산되는 학습 작업, 그리고 추론 지연 시간을 늘리지 않고 더 많은 요청에 응답해야 하는 추론 서비스입니다.
수직 확장과 수평 확장#
수직 확장, 즉 스케일업은 워크로드를 더 큰 머신으로 옮기는 방식입니다. CPU 코어 수나 RAM을 늘리거나 메모리가 더 많은 GPU를 사용할 수 있습니다. 코드 변경이 필요 없지만 사용 가능한 최대 머신의 한계에 도달하며 단일 장애 지점이 남습니다. 수평 확장, 즉 스케일아웃은 머신을 추가하고 작업을 나누는 방식입니다. 고정된 상한은 없지만 소프트웨어가 작업을 분할하고 부하를 분산하며 결과를 조정해야 합니다. 웹 서비스와 추론 서비스는 상태를 유지하지 않을 때 손쉽게 스케일아웃할 수 있습니다. 세션과 데이터를 공유 저장소에 두어 어느 복제본이든 어느 요청에나 응답할 수 있게 하기 때문입니다. 데이터베이스는 키에 따라 데이터를 머신 간에 분할하는 샤딩 방식으로 스케일아웃합니다.
클라우드 플랫폼은 수평 확장을 자동화합니다. Kubernetes에서 Horizontal Pod Autoscaler는 현재 복제본 수에 관측된 메트릭과 목표 메트릭의 비율을 곱한 뒤 올림하여 복제본 수를 계산합니다. CPU 사용률이 평균 90%인 복제본 4개에 목표 사용률 60%를 적용하면 복제본 수는 6개가 됩니다. 이러한 자동화를 클라우드 컴퓨팅에서는 탄력성이라고 하며, 서버리스 컴퓨팅은 트래픽이 멈추면 복제본 수를 0개까지 줄입니다.
확장의 한계#
모든 병렬 작업에는 다음 배치 읽기, 결과 동기화, 체크포인트 저장처럼 분할할 수 없는 작업이 일부 포함됩니다. Gene Amdahl은 1967년에 프로세서를 아무리 많이 추가해도 이 직렬 비율이 최대 가속도를 제한한다는 사실을 밝혔으며, 이를 현재 암달의 법칙이라고 부릅니다:
# Amdahl's law: speedup on n workers when a fraction p of the work runs in parallel
p = 0.95 # parallel fraction; the other 5% runs on one worker
for n in (1, 8, 64, 512):
speedup = 1 / ((1 - p) + p / n)
efficiency = speedup / n # share of the added hardware doing useful work
print(f"{n:>4} workers: {speedup:5.1f}x speedup, {efficiency:4.0%} efficiency")
print(f"Limit with unlimited workers: {1 / (1 - p):.0f}x")작업의 95%가 병렬 처리 가능할 때 작업자 8명은 효율 74%로 5.9배 가속을 제공하고, 작업자 64명은 효율 24%로 15.4배, 작업자 512명은 효율 4%로 19.3배 가속을 제공합니다. 작업자 수를 아무리 늘려도 20배를 초과할 수는 없습니다. John Gustafson은 1988년에 실제 사용자는 머신과 함께 문제 규모도 키우므로 병렬 처리 부분은 늘고 직렬 비율은 줄어든다고 지적했습니다. 고정된 문제에서 가속도를 측정하는 것을 강한 확장이라고 하며, 하드웨어와 함께 문제 규모를 늘리는 것을 약한 확장이라고 합니다. 대규모 학습 작업은 약한 확장이 적용되는 영역에서 실행됩니다. 통신도 추가적인 한계를 만듭니다. 데이터 병렬 학습에서 GPU를 추가할 때마다 각 단계에서 다른 GPU와 그래디언트를 교환해야 하므로, 네트워크 대역폭이 작업의 확장 가능 범위를 좌우하는 경우가 많습니다.
학습과 추론의 확장#
분산 학습은 모델이 단일 장치에 들어가는지에 따라 병렬 처리 전략을 선택합니다. 데이터 병렬 처리에서는 각 GPU가 모델 전체의 복사본을 보유하고, 각 배치의 일부를 처리하며, 전체 축소 연산으로 다른 GPU와 그래디언트의 평균을 계산합니다. PyTorch의 DistributedDataParallel이 이에 해당합니다. 단일 GPU에 들어가지 않는 모델은 완전 샤딩 데이터 병렬 처리, 텐서 병렬 처리, 파이프라인 병렬 처리로 나눌 수 있으며, 그래디언트 누적을 사용하면 더 적은 장치로도 큰 유효 배치 크기를 달성할 수 있습니다.
Ultralytics YOLO는 멀티 GPU 학습에 데이터 병렬 처리를 사용합니다. device=[0, 1]을 전달하면 torch.distributed.run를 통해 DistributedDataParallel 작업자 프로세스를 시작하고 배치를 균등하게 나눕니다. 따라서 GPU 두 개에서 batch=64을 사용하면 각 GPU가 단계마다 이미지 32개를 처리합니다.
추론은 각 요청이 작고 독립적이므로 다른 방식으로 확장됩니다. 요청을 배치로 묶으면 지연 시간이 조금 늘어나는 대신 GPU 활용률과 처리량이 향상됩니다. 연속 배칭은 토큰 단위로 LLM을 생성할 때 같은 효과를 냅니다. 모델 서빙 시스템은 트래픽이 증가하면 로드 밸런서 뒤에 복제본을 추가합니다. 모델 양자화와 가지치기는 복제본 하나당 비용을 낮춰 동일한 하드웨어로 더 많은 요청을 처리하도록 합니다. 엣지 AI는 하나의 데이터 센터 대신 수천 개의 장치에 추론 작업을 분산해 확장합니다.
확장성과 관련 용어 비교#
- 성능: 특정 부하에서 시스템의 속도 또는 정확도를 나타내며, 지연 시간, 처리량, 정확도로 측정합니다. 확장성은 부하와 리소스가 증가할 때 이러한 지표가 어떻게 유지되는지를 나타냅니다.
- 탄력성: 수요 변화에 따라 리소스를 자동으로 추가하거나 제거하는 능력으로, 대개 수평 확장된 서비스의 복제본을 추가하거나 제거하는 방식으로 구현됩니다.
- 스케일링 법칙: 모델의 손실과 파라미터, 학습 데이터, 컴퓨팅 리소스 간의 경험적 관계입니다. 모델 품질을 예측하며, 시스템 확장성은 필요한 컴퓨팅 리소스를 효율적으로 사용할 수 있는지를 좌우합니다.










