Serverless GPU cloud platform for running ML workloads. Use when you need on-demand GPU access without infrastructure management, deploying ML models as APIs, or running batch jobs with automatic scaling.
Serverless GPU cloud platform for running ML workloads. Use when you need on-demand GPU access without infrastructure management, deploying ML models as APIs, or running batch jobs with automatic scaling.
# Single GPU@app.function(gpu="A100")# Specific memory variant@app.function(gpu="A100-80GB")# Multiple GPUs (up to 8)@app.function(gpu="H100:4")# GPU with fallbacks@app.function(gpu=["H100", "A100", "L40S"])# Any available GPU@app.function(gpu="any")
Container images
# Basic image with pip
image = modal.Image.debian_slim(python_version="3.11").pip_install(
"torch==2.1.0", "transformers==4.36.0", "accelerate"
)
# From CUDA base
image = modal.Image.from_registry(
"nvidia/cuda:12.1.0-cudnn8-devel-ubuntu22.04",
add_python="3.11"
).pip_install("torch", "transformers")
# With system packages
image = modal.Image.debian_slim().apt_install("git", "ffmpeg").pip_install("whisper")
@app.cls(gpu="A100")classModel:
@modal.enter() # Run once at container startdefload(self):
self.model = load_model() # Load during warm-up @modal.method()defpredict(self, x):
returnself.model(x)
Parallel processing
@app.function()defprocess_item(item):
return expensive_computation(item)
@app.function()defrun_parallel():
items = list(range(1000))
# Fan out to parallel containers
results = list(process_item.map(items))
return results
Common configuration
@app.function(
gpu="A100",
memory=32768, # 32GB RAM
cpu=4, # 4 CPU cores
timeout=3600, # 1 hour max
container_idle_timeout=120,# Keep warm 2 min
retries=3, # Retry on failure
concurrency_limit=10, # Max concurrent containers)defmy_function():
pass
Debugging
# Test locallyif __name__ == "__main__":
result = my_function.local()
# View logs# modal app logs my-app
Common issues
Issue
Solution
Cold start latency
Increase container_idle_timeout, use @modal.enter()
GPU OOM
Use larger GPU (A100-80GB), enable gradient checkpointing