Scalability
A escalabilidade é a capacidade de um sistema processar mais dados, utilizadores ou computação através da adição de recursos. Abrange escalabilidade vertical e horizontal, a lei de Amdahl e IA com várias GPUs.
Escalabilidade é a capacidade de um sistema lidar com uma quantidade crescente de trabalho — como mais dados, mais usuários, mais solicitações ou um modelo maior — adicionando recursos e mantendo aceitáveis o desempenho e o custo por unidade de trabalho. Um sistema escala bem quando dobrar o hardware quase dobra a quantidade de trabalho que ele pode realizar; escala mal quando as máquinas adicionais passam o tempo esperando umas pelas outras. Na inteligência artificial, a escalabilidade se aplica em três pontos: pipelines de dados que precisam ingerir big data e fazer seu pré-processamento, tarefas de treinamento distribuídas por muitos aceleradores e serviços de inferência que precisam responder a mais solicitações sem aumentar a latência de inferência.
Escalabilidade vertical e horizontal#
A escalabilidade vertical, ou expansão vertical, transfere uma carga de trabalho para uma máquina maior: mais núcleos de CPU, mais RAM ou uma GPU com mais memória. Não exige alterações no código, mas é limitada à maior máquina disponível e deixa um único ponto de falha. A escalabilidade horizontal, ou expansão horizontal, adiciona mais máquinas e divide o trabalho entre elas. Não tem um limite fixo, mas exige que o software divida o trabalho, equilibre a carga e coordene os resultados. Serviços Web e de inferência escalam horizontalmente com facilidade quando não têm estado, mantendo sessões e dados em armazenamentos compartilhados para que qualquer réplica possa responder a qualquer solicitação; bancos de dados escalam horizontalmente por fragmentação, dividindo os dados por chave entre máquinas.
As plataformas de nuvem automatizam a escalabilidade horizontal. No Kubernetes, o Horizontal Pod Autoscaler calcula o número de réplicas multiplicando as réplicas atuais pela razão entre a métrica observada e a meta, e arredondando para cima: 4 réplicas com média de 90% de CPU diante de uma meta de 60% passam a ser 6. Essa automação é o que a computação em nuvem chama de elasticidade, e a computação sem servidor estende essa capacidade até zero réplicas quando o tráfego para.
Limites da escalabilidade#
Todo trabalho paralelo contém tarefas que não podem ser divididas, como ler o próximo lote, sincronizar resultados ou gravar um checkpoint. Em 1967, Gene Amdahl mostrou que essa fração serial limita o ganho de velocidade, não importa quantos processadores sejam adicionados — um resultado hoje conhecido como lei de Amdahl:
# 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")Com 95% do trabalho paralelizável, 8 trabalhadores proporcionam um ganho de velocidade de 5,9x com eficiência de 74%; 64 trabalhadores, 15,4x com eficiência de 24%; e 512 trabalhadores, 19,3x com eficiência de 4%. Nenhum número de trabalhadores pode ultrapassar 20x. Em 1988, John Gustafson observou que os usuários reais aumentam o problema junto com a máquina, fazendo crescer a parte paralela e diminuir a parcela serial. Medir o ganho de velocidade em um problema fixo é chamado de escalabilidade forte; aumentar o problema junto com o hardware é chamado de escalabilidade fraca, o regime em que operam grandes execuções de treinamento. A comunicação impõe outro limite: cada GPU adicionada ao treinamento paralelo de dados precisa trocar gradientes com as demais em cada etapa, por isso a largura de banda da rede muitas vezes determina até onde uma tarefa pode escalar.
Escalonamento de treinamento e inferência#
O treinamento distribuído escolhe uma estratégia de paralelismo com base em o modelo caber ou não em um único dispositivo. No paralelismo de dados, cada GPU mantém uma cópia completa do modelo, processa sua própria parte de cada lote e calcula a média dos gradientes com as demais por meio de uma operação all-reduce, como no DistributedDataParallel do PyTorch. Modelos grandes demais para uma única GPU são divididos com paralelismo de dados totalmente fragmentado, paralelismo de tensores ou paralelismo de pipeline; a acumulação de gradientes permite alcançar tamanhos efetivos de lote grandes em menos dispositivos.
O Ultralytics YOLO usa paralelismo de dados para o treinamento multi-GPU: passar device=[0, 1] inicia processos de trabalho DistributedDataParallel por meio de torch.distributed.run e divide o lote igualmente. Assim, batch=64 em duas GPUs fornece 32 imagens a cada GPU por etapa.
A inferência escala de outra forma, pois cada solicitação é pequena e independente. Agrupar solicitações em lotes aumenta a utilização da GPU e o rendimento com um pequeno custo de latência; o agrupamento contínuo faz o mesmo na geração de LLMs token a token; e os sistemas de serviço de modelos adicionam réplicas atrás de um balanceador de carga à medida que o tráfego aumenta. A quantização de modelos e a poda reduzem o custo de cada réplica, permitindo que o mesmo hardware processe mais solicitações; a IA de borda escala distribuindo a inferência por milhares de dispositivos em vez de concentrá-la em um único centro de dados.
Escalabilidade e termos relacionados#
- Desempenho: A velocidade ou precisão de um sistema sob uma carga específica, medida pela latência, pelo rendimento ou pela precisão. A escalabilidade descreve como essas métricas se mantêm à medida que a carga e os recursos aumentam.
- Elasticidade: Adição e remoção automáticas de recursos à medida que a demanda muda ao longo do dia, geralmente pela adição e remoção de réplicas de um serviço escalado horizontalmente.
- Leis de escala: Relações empíricas entre a perda de um modelo, seus parâmetros, os dados de treinamento e a computação. Elas preveem a qualidade do modelo, e a escalabilidade do sistema determina se os recursos computacionais necessários podem ser usados com eficiência.










