GPU 가속 (GPU acceleration)

GPU 가속 (GPU acceleration)

Modal에서는 코드에 GPU 지정만 살짝 넣으면 그대로 GPU에서 실행돼요. 별도로 GPU 인스턴스를 관리할 필요 없이 @app.function(gpu=...) 같은 데코레이터 인자만 바꾸면 되죠. 그래서 LLM 추론처럼 GPU가 필요한 연산을 로컬 코드와 가까운 형태로, 인프라 고민 없이 돌릴 수 있어요. 어떤 GPU를 고를지, 몇 개나 쓸지, fallback은 어떻게 둘지 순서대로 알아볼게요.

출처: https://modal.com/docs/guide/gpu

GPU 타입 지정하기

함수에서 GPU 타입은 gpu 인자로 고릅니다. Modal이 지원하는 주요 값은 다음과 같아요.

  • T4
  • L4
  • A10
  • L40S
  • A100
  • A100-40GB
  • A100-80GB
  • RTX-PRO-6000
  • H100 / H100!
  • H200
  • B200 / B200+
  • B300

예를 들어 B200을 쓰려면 @app.function(gpu="B200")처럼 하면 돼요. 각 GPU 타입의 최신 요금은 Modal의 pricing 페이지에서 확인하는 게 좋아요.

GPU 개수 지정하기

컨테이너당 1개보다 많은 GPU를 쓰려면 gpu 인자 뒤에 :n을 붙여요. 예를 들어 8개의 H100으로 함수를 돌리려면 gpu="H100:8"처럼 작성하죠.

현재 B300, B200, H200, H100, A100, L4, T4, L40S는 컨테이너당 최대 8개(최대 2,304GB GPU RAM)를, A10은 최대 4개(최대 96GB GPU RAM)를 지원해요. 컨테이너당 2개가 넘는 GPU를 요청하면 대기 시간이 길어지는 경우가 많다는 점은 참고해 두세요. 할당된 GPU는 항상 같은 물리 머신에 붙어요.

GPU 고르기

신경망을 학습이 아니라 실행하는 용도라면 L40S를 시작점으로 추천해요. 모델 가중치와 활성화를 담을 48GB GPU RAM을 주면서 가격 대비 성능이 훌륭하거든요. LLaMA 같은 신경망에 어떤 GPU가 어울리는지는 Tim Dettmers의 블로그 포스트나 Full Stack Deep Learning의 Cloud GPUs 문서를 참고하면 좋아요.

B300 GPU

B300은 NVIDIA Blackwell Ultra GPU로 Blackwell 아키텍처 기반이에요. 요청하려면 gpu 인자를 "B300"으로 설정하면 돼요. B300은 CUDA 13.1 이상이 필요하니 컨테이너 Image와 라이브러리가 CUDA 13과 호환되는지 먼저 확인해야 해요.

B200 GPU

B200도 Blackwell 아키텍처 기반 NVIDIA 데이터센터 GPU예요. gpu 인자를 "B200"으로 설정하면 쓰고, llm_inference 예제에서 LLaMA 3.1-8B의 vLLM 서빙 성능을 B200으로 끌어올리는 방법을 확인할 수 있어요.

이 강력한 GPU를 쓰기 전에 계산의 병목이 어디인지 짚어볼 필요가 있어요. 예를 들어 프롬프트 하나씩 처리하는 작은 배치로 언어 모델을 돌리면 산술 연산이 아니라 메모리가 병목이 돼요. 하드웨어 세대를 거듭하며 산술 처리량이 메모리 처리량보다 빠르게 올랐기 때문에, 메모리 바운드 GPU 잡에서의 속도 향상은 극적이지 않고 추가 비용만큼 가치가 없을 수 있어요.

B300으로의 옵트인 업그레이드

gpu="B200+"를 쓰면 Modal이 요청을 B200 또는 B300 어디에서든 실행해요. B200+는 어떤 GPU가 쓰였든 B200으로 청구돼요. 두 GPU 타입 모두와 호환되는 코드일 때만 사용하고, B300은 CUDA 13.1+가 필요하다는 점을 고려해 더 큰 용량 풀에 자동으로 접근할 때 써요.

H200과 H100 GPU

H200과 H100은 NVIDIA 최상위 데이터센터 칩의 이전 세대로 Hopper 아키텍처 기반이에요. Blackwell보다 소프트웨어 지원이 더 좋아서(인기 라이브러리가 Hopper용 컴파일 커널을 포함하는 경우가 많지만 Blackwell은 아닌 편), Modal 안팎에서 흔한 가속기 선택이에요. Modal의 모든 H100/H200 GPU는 SXM 변형이고, 대시보드의 전력 소비(power draw)나 nvidia-smi로 확인할 수 있어요.

Modal은 gpu="H100" 요청을 자동으로 H200으로 업그레이드할 수 있는데, 비용은 바뀌지 않아요. H200 호환 커널은 H100에서도 돌아가서 메모리 용량에 대한 엄격한 가정만 없다면 코드는 그대로 더 빨라지죠. H200의 HBM3e 메모리는 141GB 용량·4.8TB/s 대역폭으로, HBM3의 H100보다 1.75배 크고 1.4배 빠른데, 벤치마크처럼 업그레이드가 도움 안 되는 경우에만 gpu="H100!"을 넘겨 방지할 수 있어요.

A100 GPU

A100은 Ampere 아키텍처 기반이고, Modal은 40GB와 80GB RAM 두 버전을 제공해요. 40GB는 gpu="A100"으로 요청하며, Modal은 자동으로 80GB A100으로 업그레이드할 수 있어요(비용 불변). 정확히 40GB를 원하면 A100-40GB, 80GB를 원하면 A100-80GB 문자열을 쓰면 돼요.

GPU fallback (대체)

Modal은 여러 GPU 유형의 리스트를 지정할 수 있도록 지원해요. 여러 옵션과 호환되는 함수에 적합하죠. 리스트의 순서를 존중해서 가장 선호하는 GPU 유형을 먼저 할당하려 시도하고, 안 되면 덜 선호하는 것들로 차례차례 넘어가요. 자세한 예는 gpu_fallbacks 예제에서 확인할 수 있어요.

멀티 GPU 학습

Modal은 현재 단일 노드에서의 멀티 GPU 학습을 지원하고, 멀티 노드 학습은 비공개 베타예요. 프레임워크가 Python 프로세스의 엔트리포인트를 다시 실행한다면(예: PyTorch Lightning) ddp_spawn이나 ddp_notebook 전략을 설정하거나, 학습 스크립트를 서브프로세스로 실행하는 방식을 쓸 수 있어요.

더 알아보기