# Vagas na Hugging Face

[Hugging Face Jobs](https://huggingface.co/docs/hub/jobs) roda em GPUs da Hugging Face, então você não precisa configurar uma máquina, e a execução continua mesmo se você fechar o terminal. Os scripts de treinamento do Diffusers rodam nos Jobs diretamente da URL do GitHub, sem a necessidade de clonar o repositório ou instalar algo localmente.

Antes de começar, siga o [Jobs quickstart](https://huggingface.co/docs/hub/jobs-quickstart) para instalar o CLI `hf`, fazer login e adicionar créditos à sua conta.

## Treinar um LoRA em Jobs

O comando abaixo treina um LoRA para [FLUX.2-klein-4B](https://huggingface.co/black-forest-labs/FLUX.2-klein-4B) com as cinco fotos de cachorro em [diffusers/dog-example](https://huggingface.co/datasets/diffusers/dog-example). Ele roda em um único A10G e envia o LoRA para o seu namespace no Hub.

```bash
# 20 steps is a test run. For a real run, raise --max_train_steps
# (the FLUX.2 README uses 500) and --timeout to match.
hf jobs uv run --flavor a10g-small --timeout 30m -s HF_TOKEN -- \
  https://raw.githubusercontent.com/huggingface/diffusers/main/examples/dreambooth/train_dreambooth_lora_flux2_klein.py \
  --pretrained_model_name_or_path black-forest-labs/FLUX.2-klein-4B \
  --dataset_name diffusers/dog-example \
  --instance_prompt "a photo of sks dog" \
  --resolution 512 --mixed_precision bf16 --guidance_scale 1 \
  --gradient_checkpointing --cache_latents \
  --optimizer adamW --use_8bit_adam --learning_rate 1e-4 \
  --max_train_steps 20 --seed 0 \
  --output_dir /tmp/out \
  --push_to_hub --hub_model_id your-username/klein-dog-lora
```

`uv` instala as dependências listadas no cabeçalho `# /// script` do script, incluindo o Diffusers a partir do `main`. Os Jobs não recebem um token do Hugging Face por padrão, portanto `-s HF_TOKEN` encaminha o seu para permitir que o script faça o push do LoRA. O disco do Job é descartado quando o Job termina, e qualquer coisa que você não fizer push será perdida. Os guias de [DreamBooth](./dreambooth) e [LoRA](./lora) explicam os argumentos de treinamento.

## Gerenciando um Job

Os logs de treinamento são exibidos no seu terminal enquanto o Job está em execução. Fechar o terminal ou pressionar `Ctrl+C` não interrompe o treinamento, pois o Job é executado nos servidores da Hugging Face. Para iniciar uma execução longa sem ocupar seu terminal, adicione `-d` antes de `--`. O comando exibe o ID do Job e retorna.

Use o ID do Job para se reconectar aos logs, verificar a memória e a utilização da GPU durante o treinamento do modelo, ou interromper uma execução.

```bash
hf jobs logs -f <job_id>
hf jobs stats <job_id>
hf jobs cancel <job_id>
```

Se a execução falhar, `hf jobs inspect <job_id>` exibe a mensagem de erro. Consulte [Gerenciar Jobs](https://huggingface.co/docs/hub/jobs-manage) para os outros comandos.

## Treine com suas próprias imagens

Para treinar com suas imagens, monte a pasta delas no Job com `-v` e passe o caminho de montagem para `--instance_data_dir` em vez de `--dataset_name`. O Jobs faz o upload da pasta para um bucket privado antes de o Job iniciar e a monta somente para leitura. Fazer o upload da mesma pasta novamente envia apenas arquivos novos ou alterados.

```bash
hf jobs uv run --flavor a10g-small --timeout 30m -s HF_TOKEN \
  -v ./my-dog:/data -- \
  https://raw.githubusercontent.com/huggingface/diffusers/main/examples/dreambooth/train_dreambooth_lora_flux2_klein.py \
  --pretrained_model_name_or_path black-forest-labs/FLUX.2-klein-4B \
  --instance_data_dir /data \
  --instance_prompt "a photo of sks dog" \
  --resolution 512 --mixed_precision bf16 --guidance_scale 1 \
  --gradient_checkpointing --cache_latents \
  --optimizer adamW --use_8bit_adam --learning_rate 1e-4 \
  --max_train_steps 20 --seed 0 \
  --output_dir /tmp/out \
  --push_to_hub --hub_model_id your-username/klein-dog-lora
```

O script abre todos os arquivos em `--instance_data_dir` como imagens, portanto, mantenha apenas imagens na pasta. Um arquivo oculto, como `.DS_Store`, faz a execução falhar. Consulte [Local directories](https://huggingface.co/docs/hub/jobs-configuration#local-directories) para mais informações sobre o montamento de uma pasta.

Com `--with_prior_preservation`, o script gera as imagens de classe em `--class_data_dir` antes do início do treinamento. Aponte-o para um caminho em que o Job possa gravar. Para reutilizar as imagens de classe em execuções posteriores, coloque-as em um bucket montado com leitura e gravação, como o de [Salvar checkpoints para execuções longas](#save-checkpoints-for-long-runs).

## Treinar em FP8

Os scripts de DreamBooth LoRA para FLUX.2, Z-Image, Ideogram 4 e Krea 2 aceitam `--do_fp8_training` para treinar em FP8 com [torchao](https://github.com/pytorch/ao), o que reduz o uso de memória. Nenhum cabeçalho de script inclui o torchao, portanto, adicione `--with torchao` antes de `--`. O FP8 também requer uma GPU com capacidade de computação 8.9 ou superior, como uma L4 (`l4x1`) ou L40S (`l40sx1`). As A10G (8.6) e A100 (8.0) não têm suporte a isso.

## Execute um script sem um cabeçalho de dependência

Apenas os scripts em [examples/dreambooth](https://github.com/huggingface/diffusers/tree/main/examples/dreambooth) e [examples/advanced_diffusion_training](https://github.com/huggingface/diffusers/tree/main/examples/advanced_diffusion_training) declaram suas dependências em um bloco `# /// script` no topo do arquivo. Alguns scripts nessas pastas, como `train_dreambooth_lora_sdxl.py`, não possuem um.

Para um script sem cabeçalho, passe cada dependência com `--with`. Instale o Diffusers a partir do código-fonte, pois os scripts de treinamento exigem a versão de desenvolvimento. As outras dependências vêm do arquivo `requirements.txt` do script e de seus imports.

```bash
hf jobs uv run --flavor a10g-small --timeout 30m -s HF_TOKEN \
  --with "diffusers @ git+https://github.com/huggingface/diffusers.git" \
  --with torch --with torchvision --with accelerate --with transformers \
  --with peft --with datasets --with bitsandbytes \
  --with ftfy --with tensorboard --with Jinja2 -- \
  https://raw.githubusercontent.com/huggingface/diffusers/main/examples/dreambooth/train_dreambooth_lora_sdxl.py \
  --pretrained_model_name_or_path stabilityai/stable-diffusion-xl-base-1.0 \
  --pretrained_vae_model_name_or_path madebyollin/sdxl-vae-fp16-fix \
  --dataset_name diffusers/dog-example \
  --instance_prompt "a photo of sks dog" \
  --resolution 1024 --mixed_precision fp16 \
  --gradient_checkpointing --use_8bit_adam --learning_rate 1e-4 \
  --max_train_steps 20 --seed 0 \
  --output_dir /tmp/out \
  --push_to_hub --hub_model_id your-username/sdxl-dog-lora
```

## Salvar checkpoints para execuções longas

Uma execução que leva horas pode expirar ou falhar antes de terminar. Para preservar o progresso, monte um [Storage Bucket](https://huggingface.co/docs/hub/storage-buckets) no Job com `-v` e aponte `--output_dir` para ele. Crie o bucket primeiro com `hf buckets create`.

O script salva uma pasta `checkpoint-<step>` em `--output_dir` a cada `--checkpointing_steps` passos (500 por padrão), de modo que os checkpoints são enviados para o bucket conforme o treinamento avança. `--checkpoints_total_limit` limita a quantidade mantida. `--resume_from_checkpoint latest` retoma a partir do checkpoint mais recente em `--output_dir` e inicia do zero se não houver nenhum, de modo que o mesmo comando funciona para a primeira execução e para cada reinício.

```bash
hf jobs uv run --flavor a10g-small --timeout 8h -s HF_TOKEN \
  -v hf://buckets/your-username/checkpoints:/ckpt -- \
  https://raw.githubusercontent.com/huggingface/diffusers/main/examples/dreambooth/train_dreambooth_lora_flux2_klein.py \
  --pretrained_model_name_or_path black-forest-labs/FLUX.2-klein-4B \
  --dataset_name diffusers/dog-example \
  --instance_prompt "a photo of sks dog" \
  --resolution 1024 --mixed_precision bf16 --guidance_scale 1 \
  --gradient_checkpointing --cache_latents \
  --optimizer adamW --use_8bit_adam --learning_rate 1e-4 \
  --max_train_steps 5000 --seed 0 \
  --checkpointing_steps 500 --checkpoints_total_limit 3 \
  --resume_from_checkpoint latest \
  --output_dir /ckpt/klein-dog
```

Quando o treinamento termina, o LoRA é salvo no bucket como `pytorch_lora_weights.safetensors`. Consulte [Volumes](https://huggingface.co/docs/hub/jobs-configuration#volumes) para as opções de montagem.

> [!NOTE]
> Não adicione `--push_to_hub` quando `--output_dir` contiver checkpoints. O upload ignora apenas as pastas `step_*` e `epoch_*`, de modo que as pastas `checkpoint-<step>` são enviadas para o repositório do modelo junto com o LoRA. Envie o `pytorch_lora_weights.safetensors` para um repositório de modelo por sua conta.

## Próximas etapas

- Leia [Train Models on Jobs](https://huggingface.co/docs/hub/jobs-training) na documentação do Hub para saber quais verificações executar antes de um trabalho longo e como ler um trabalho que falhou.
- Carregue seu LoRA treinado para inferência com o guia [LoRA](../tutorials/using_peft_for_inference).
- Consulte os [arquivos README do DreamBooth](https://github.com/huggingface/diffusers/tree/main/examples/dreambooth) para obter comandos e opções de memória específicos do modelo.

