Transformers documentation

CPU

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

CPU

CPUs executam modelos do Transformers com a string de dispositivo cpu, sem um acelerador. Elas funcionam para inferência e treinamento quando GPUs não estão disponíveis, ou quando você deseja uma configuração economicamente viável.

Executar inferência

Os modelos são carregados na CPU por padrão quando você não passa device_map, e o pipeline() usa a CPU quando nenhum acelerador está disponível. Passe device_map="cpu" ou device="cpu" para usar a CPU em uma máquina que também possui um acelerador.

from transformers import pipeline

generator = pipeline("text-generation", model="Qwen/Qwen3-0.6B", device="cpu")
print(generator("CPUs are", max_new_tokens=50, do_sample=False)[0]["generated_text"])

Treinar com o Trainer

CPUs com suporte a bf16, como os processadores Intel e AMD mais recentes, podem usar treinamento de precisão mista em bf16 com AMP do PyTorch, o que reduz o uso de memória e acelera o treinamento.

Os exemplos abaixo cobrem três configurações, de uma única CPU a vários computadores, quando uma única CPU é muito lenta:

  • uma única CPU
  • vários processos em uma única máquina (um por soquete de CPU)
  • vários processos em várias máquinas

Os exemplos de nó único e multi-nó iniciam processos com mpirun do Intel MPI, parte do Intel oneAPI HPC Toolkit, e o Trainer executa DDP sobre o backend gloo.

CPU única
CPU distribuída (nó único)
CPU distribuída (vários nós)

Defina bf16=True e use_cpu=True em TrainingArguments, ou passe --bf16 e --use_cpu para um script de treinamento. Prefira bf16 em vez de fp16 em CPU, pois é mais numericamente estável.

from transformers import TrainingArguments

training_args = TrainingArguments(
    output_dir="./outputs",
    bf16=True,
    use_cpu=True,
)

Ajustar o desempenho da CPU

Pré-carregue um alocador de memória mais rápido e o runtime OpenMP da Intel para reduzir o overhead no treinamento em CPU. Instale o google-perftools (para o libtcmalloc) e o pacote Python intel-openmp (para o libiomp5), e em seguida adicione ambas as bibliotecas à variável de ambiente LD_PRELOAD antes de iniciar o treinamento.

Defina OMP_NUM_THREADS para o número de núcleos que cada processo pode usar. Em um contêiner ou em um trabalho de cluster com limites de CPU, esse é o número de unidades de CPU alocadas, portanto, deixe alguns núcleos não alocados para os processos do sistema.

Próximas etapas

  • Leia o post no blog Acelerando Transformers do PyTorch com Intel Sapphire Rapids para uma análise mais aprofundada do desempenho BF16 em hardware Intel moderno.
  • Leia DDP para saber mais sobre a estratégia distribuída usada nos exemplos multiprocessos.
  • Leia as notas de threading de CPU do PyTorch para entender como OMP_NUM_THREADS afeta o desempenho.
  • Leia o guia PyTorchJob do Kubeflow para executar treinamento distribuído de CPU no Kubernetes.
Update on GitHub