本文へ移動
cccskills
無料GitHub で公開

modal-serverless-gpu

Plataforma GPU serverless em nuvem para executar workloads de ML. Use quando você precisar de acesso GPU sob demanda sem gerenciamento de infraestrutura, fazendo deploy de modelos de ML como APIs, ou executando jobs em batch com auto-scaling.

インストール方法を見る

含まれるファイル(3)

  • SKILL.md9.0 KB
  • references/advanced-usage.md10.6 KB
  • references/troubleshooting.md10.3 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Modal Serverless GPU

Guia completo para executar workloads de ML na plataforma GPU serverless em nuvem do Modal.

Quando usar Modal

Use Modal quando:

  • Executar workloads de ML intensivos em GPU sem gerenciar infraestrutura
  • Fazer deploy de modelos de ML como APIs com auto-scaling
  • Executar jobs de processamento em batch (treinamento, inferência, processamento de dados)
  • Precisar de preços GPU pay-per-second sem custos de ociosidade
  • Prototipando aplicações de ML rapidamente
  • Executar jobs agendados (workloads tipo cron)

Funcionalidades-chave:

  • GPUs Serverless: T4, L4, A10G, L40S, A100, H100, H200, B200 sob demanda
  • Nativo em Python: Define infraestrutura em código Python, sem YAML
  • Auto-scaling: Escale a zero, escale para 100+ GPUs instantaneamente
  • Cold starts sub-segundo: Infraestrutura baseada em Rust para lançamentos rápidos de containers
  • Cache de containers: Camadas de imagem em cache para iteração rápida
  • Web endpoints: Faça deploy de funções como APIs REST com atualizações sem downtime

Use alternativas em vez disso:

  • RunPod: Para pods de execução mais longa com estado persistente
  • Lambda Labs: Para instâncias GPU reservadas
  • SkyPilot: Para orquestração multi-cloud e otimização de custos
  • Kubernetes: Para arquiteturas complexas multi-serviço

Quick start

Instalação

pip install modal
modal setup  # Abre navegador para autenticação

Hello World com GPU

import modal

app = modal.App("hello-gpu")

@app.function(gpu="T4")
def gpu_info():
    import subprocess
    return subprocess.run(["nvidia-smi"], capture_output=True, text=True).stdout

@app.local_entrypoint()
def main():
    print(gpu_info.remote())

Execute: modal run hello_gpu.py

Endpoint básico de inferência

import modal

app = modal.App("text-generation")
image = modal.Image.debian_slim().pip_install("transformers", "torch", "accelerate")

@app.cls(gpu="A10G", image=image)
class TextGenerator:
    @modal.enter()
    def load_model(self):
        from transformers import pipeline
        self.pipe = pipeline("text-generation", model="gpt2", device=0)

    @modal.method()
    def generate(self, prompt: str) -> str:
        return self.pipe(prompt, max_length=100)[0]["generated_text"]

@app.local_entrypoint()
def main():
    print(TextGenerator().generate.remote("Hello, world"))

Conceitos principais

Componentes-chave

ComponentePropósito
AppContainer para funções e recursos
FunctionFunção serverless com especificações de compute
ClsFunções baseadas em classe com lifecycle hooks
ImageDefinição de imagem de container
VolumeArmazenamento persistente para modelos/dados
SecretArmazenamento seguro de credenciais

Modos de execução

ComandoDescrição
modal run script.pyExecuta e sai
modal serve script.pyDesenvolvimento com live reload
modal deploy script.pyDeploy persistente em nuvem

Configuração de GPU

GPUs disponíveis

GPUVRAMMelhor para
T416GBInferência com orçamento limitado, modelos pequenos
L424GBInferência, arquitetura Ada Lovelace
A10G24GBTreinamento/inferência, 3.3x mais rápido que T4
L40S48GBRecomendado para inferência (melhor custo/performance)
A100-40GB40GBTreinamento de modelos grandes
A100-80GB80GBModelos muito grandes
H10080GBMais rápido, FP8 + Transformer Engine
H200141GBAuto-upgrade do H100, 4.8TB/s de largura de banda
B200LatestArquitetura Blackwell

Padrões de especificação de GPU

# GPU única
@app.function(gpu="A100")

# Variante de memória específica
@app.function(gpu="A100-80GB")

# Múltiplas GPUs (até 8)
@app.function(gpu="H100:4")

# GPU com fallbacks
@app.function(gpu=["H100", "A100", "L40S"])

# Qualquer GPU disponível
@app.function(gpu="any")

Imagens de container

# Imagem básica com pip
image = modal.Image.debian_slim(python_version="3.11").pip_install(
    "torch==2.1.0", "transformers==4.36.0", "accelerate"
)

# Baseado em CUDA
image = modal.Image.from_registry(
    "nvidia/cuda:12.1.0-cudnn8-devel-ubuntu22.04",
    add_python="3.11"
).pip_install("torch", "transformers")

# Com pacotes de sistema
image = modal.Image.debian_slim().apt_install("git", "ffmpeg").pip_install("whisper")

Armazenamento persistente

volume = modal.Volume.from_name("model-cache", create_if_missing=True)

@app.function(gpu="A10G", volumes={"/models": volume})
def load_model():
    import os
    model_path = "/models/llama-7b"
    if not os.path.exists(model_path):
        model = download_model()
        model.save_pretrained(model_path)
        volume.commit()  # Persistir mudanças
    return load_from_path(model_path)

Web endpoints

Decorator FastAPI endpoint

@app.function()
@modal.fastapi_endpoint(method="POST")
def predict(text: str) -> dict:
    return {"result": model.predict(text)}

App ASGI completo

from fastapi import FastAPI
web_app = FastAPI()

@web_app.post("/predict")
async def predict(text: str):
    return {"result": await model.predict.remote.aio(text)}

@app.function()
@modal.asgi_app()
def fastapi_app():
    return web_app

Tipos de web endpoint

DecoratorCaso de uso
@modal.fastapi_endpoint()Função simples → API
@modal.asgi_app()Apps FastAPI/Starlette completos
@modal.wsgi_app()Apps Django/Flask
@modal.web_server(port)Servidores HTTP arbitrários

Dynamic batching

@app.function()
@modal.batched(max_batch_size=32, wait_ms=100)
async def batch_predict(inputs: list[str]) -> list[dict]:
    # Inputs automaticamente agrupados em batch
    return model.batch_predict(inputs)

Gerenciamento de segredos

# Criar segredo
modal secret create huggingface HF_TOKEN=hf_xxx
@app.function(secrets=[modal.Secret.from_name("huggingface")])
def download_model():
    import os
    token = os.environ["HF_TOKEN"]

Agendamento

@app.function(schedule=modal.Cron("0 0 * * *"))  # Diariamente à meia-noite
def daily_job():
    pass

@app.function(schedule=modal.Period(hours=1))
def hourly_job():
    pass

Otimização de performance

Mitigação de cold start

@app.function(
    container_idle_timeout=300,  # Mantém aquecido por 5 min
    allow_concurrent_inputs=10,  # Processa requests concorrentes
)
def inference():
    pass

Melhores práticas para carregamento de modelos

@app.cls(gpu="A100")
class Model:
    @modal.enter()  # Executado uma vez no início do container
    def load(self):
        self.model = load_model()  # Carrega durante warm-up

    @modal.method()
    def predict(self, x):
        return self.model(x)

Processamento paralelo

@app.function()
def process_item(item):
    return expensive_computation(item)

@app.function()
def run_parallel():
    items = list(range(1000))
    # Distribui para containers paralelos
    results = list(process_item.map(items))
    return results

Configuração comum

@app.function(
    gpu="A100",
    memory=32768,              # 32GB RAM
    cpu=4,                     # 4 cores de CPU
    timeout=3600,              # 1 hora máximo
    container_idle_timeout=120,# Mantém aquecido 2 min
    retries=3,                 # Retry em caso de falha
    concurrency_limit=10,      # Máximo de containers concorrentes
)
def my_function():
    pass

Debug

# Teste localmente
if __name__ == "__main__":
    result = my_function.local()

# Ver logs
# modal app logs my-app

Problemas comuns

ProblemaSolução
Latência de cold startAumente container_idle_timeout, use @modal.enter()
GPU OOMUse GPU maior (A100-80GB), ative gradient checkpointing
Falha no build de imagemFixe versões de dependências, verifique compatibilidade CUDA
Erros de timeoutAumente timeout, adicione checkpointing

Referências

Recursos

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Especialista em construir experiências 3D para a web - Three.js, React Three Fiber, Spline, WebGL e cenas 3D interativas. Cobre configuradores de produtos, portfólios 3D, websites imersivos e adição de profundidade às experiências web. Use quando: website 3D, three.js, WebGL, react three fiber, experiência 3D.

日本語の概要は準備中です。原文の説明を表示しています。

artubss/SKILLS-CLAUDE-CODE112026年5月17日 更新

Quando o usuário quer planejar, projetar ou implementar um teste A/B ou experimento. Também use quando o usuário menciona "teste A/B", "split test", "experimento", "testar essa mudança", "copy variante", "teste multivariado" ou "hipótese". Para implementação de rastreamento, veja analytics-tracking.

日本語の概要は準備中です。原文の説明を表示しています。

artubss/SKILLS-CLAUDE-CODE112026年5月17日 更新

Auditar e melhorar a acessibilidade web seguindo as diretrizes WCAG 2.1. Use quando solicitado para "melhorar acessibilidade", "auditoria a11y", "conformidade WCAG", "suporte a leitor de tela", "navegação por teclado" ou "tornar acessível".

日本語の概要は準備中です。原文の説明を表示しています。

artubss/SKILLS-CLAUDE-CODE112026年5月17日 更新

Testes e benchmarking de agentes LLM incluindo testes comportamentais, avaliação de capacidades, métricas de confiabilidade e monitoramento em produção—onde até os melhores agentes alcançam menos de 50% em benchmarks do mundo real. Use quando: testes de agentes, avaliação de agentes, benchmark de agentes, confiabilidade de agentes, teste de agentes.

日本語の概要は準備中です。原文の説明を表示しています。

artubss/SKILLS-CLAUDE-CODE112026年5月17日 更新

Criar, gerenciar e orquestrar agentes de IA usando o CLI AI Maestro. Use quando o usuário pedir para "criar agente", "listar agentes", "deletar agente", "hibernar agente", "despertar agente", "instalar plugin", "mostrar agente", "reiniciar agente" ou qualquer tarefa de gerenciamento do ciclo de vida do agente.

日本語の概要は準備中です。原文の説明を表示しています。

artubss/SKILLS-CLAUDE-CODE112026年5月17日 更新

Gerencie múltiplos agentes CLI locais via sessões tmux (iniciar/parar/monitorar/atribuir) com agendamento compatível com cron.

日本語の概要は準備中です。原文の説明を表示しています。

artubss/SKILLS-CLAUDE-CODE112026年5月17日 更新

artubss のスキルをすべて見る

このスキルの問題を報告する