# Hugging Face Jobs

[Hugging Face Jobs](https://huggingface.co/docs/hub/jobs) работает на GPU Hugging Face, поэтому вам не нужно настраивать машину, и выполнение продолжается, даже если вы закроете терминал. Скрипты обучения Diffusers запускаются в Jobs напрямую по их URL из GitHub без необходимости клонировать репозиторий или устанавливать что-либо локально.

Прежде чем начать, выполните инструкции из раздела [Быстрый старт с Jobs](https://huggingface.co/docs/hub/jobs-quickstart), чтобы установить CLI `hf`, войти в систему и пополнить баланс вашего аккаунта.

## Обучение LoRA на Jobs

Команда ниже обучает LoRA для [FLUX.2-klein-4B](https://huggingface.co/black-forest-labs/FLUX.2-klein-4B) на пяти фотографиях собак из [diffusers/dog-example](https://huggingface.co/datasets/diffusers/dog-example). Она выполняется на одном A10G и публикует LoRA в вашем пространстве имён на 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` устанавливает зависимости, перечисленные в заголовке `# /// script` скрипта, включая Diffusers из ветки `main`. По умолчанию Jobs не получают токен Hugging Face, поэтому `-s HF_TOKEN` передаёт ваш токен, чтобы скрипт мог отправить LoRA. Диск Job удаляется по завершении Job, и всё, что не было отправлено, теряется. Руководства по [DreamBooth](./dreambooth) и [LoRA](./lora) описывают аргументы обучения.

## Управление задачей

Журналы обучения выводятся в терминал во время выполнения Job. Закрытие терминала или нажатие `Ctrl+C` не останавливает обучение, поскольку Job выполняется на машинах Hugging Face. Чтобы запустить длительную работу, не блокируя терминал, добавьте `-d` перед `--`. Команда выводит ID Job и завершает работу.

Используйте Job ID, чтобы повторно подключиться к журналам, проверить использование и загрузку памяти GPU во время обучения модели или остановить выполнение.

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

Если выполнение не удалось, `hf jobs inspect <job_id>` отобразит сообщение об ошибке. Остальные команды описаны в разделе [Управление заданиями](https://huggingface.co/docs/hub/jobs-manage).

## Обучение на собственных изображениях

Чтобы обучать модель на своих изображениях, смонтируйте их папку в Job с помощью `-v` и передайте путь к точке монтирования в `--instance_data_dir` вместо `--dataset_name`. Jobs загружает папку в приватный бакет перед запуском Job и монтирует её в режиме только для чтения. При повторной загрузке той же папки передаются только новые или изменённые файлы.

```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
```

Скрипт открывает каждый файл в `--instance_data_dir` как изображение, поэтому в папке должны находиться только изображения. Скрытый файл, например `.DS_Store`, приводит к сбою выполнения. Подробнее о монтировании папки см. в разделе [Локальные каталоги](https://huggingface.co/docs/hub/jobs-configuration#local-directories).

С флагом `--with_prior_preservation` скрипт генерирует изображения классов в `--class_data_dir` перед началом обучения. Укажите путь, в который Job может записывать данные. Чтобы переиспользовать изображения классов в последующих запусках, разместите их в точке монтирования с правами чтения и записи, как описано в разделе [Сохранение контрольных точек для длительных запусков](#save-checkpoints-for-long-runs).

## Обучение в FP8

Скрипты DreamBooth LoRA для FLUX.2, Z-Image, Ideogram 4 и Krea 2 принимают `--do_fp8_training` для обучения в FP8 с помощью [torchao](https://github.com/pytorch/ao), что снижает потребление памяти. В заголовках скриптов нет torchao, поэтому добавьте `--with torchao` перед `--`. Для FP8 также требуется GPU с вычислительной мощностью 8.9 или выше, например L4 (`l4x1`) или L40S (`l40sx1`). A10G (8.6) и A100 (8.0) не поддерживают этот режим.

## Запуск скрипта без заголовка зависимостей

Зависимости в блоке `# /// script` в начале файла объявлены только в скриптах из [examples/dreambooth](https://github.com/huggingface/diffusers/tree/main/examples/dreambooth) и [examples/advanced_diffusion_training](https://github.com/huggingface/diffusers/tree/main/examples/advanced_diffusion_training). У некоторых скриптов в этих папках, например `train_dreambooth_lora_sdxl.py`, такого блока нет.

Для скрипта без заголовка передавайте каждую зависимость с помощью `--with`. Установите Diffusers из исходного кода, так как скрипты обучения требуют версии для разработки. Остальные зависимости берутся из файла `requirements.txt` скрипта и из его импортов.

```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
```

## Сохранение контрольных точек для длительных запусков

Запуск, длящийся несколько часов, может завершиться по таймауту или с ошибкой до окончания. Чтобы сохранить прогресс, примонтируйте [Storage Bucket](https://huggingface.co/docs/hub/storage-buckets) в Job с помощью `-v` и укажите его в параметре `--output_dir`. Сначала создайте бакет командой `hf buckets create`.

Скрипт сохраняет папку `checkpoint-<step>` в `--output_dir` каждые `--checkpointing_steps` шагов (по умолчанию 500), поэтому контрольные точки появляются в бакете по мере обучения. `--checkpoints_total_limit` ограничивает количество сохраняемых контрольных точек. `--resume_from_checkpoint latest` продолжает обучение с последней контрольной точки в `--output_dir`, а если её нет — начинает с нуля, поэтому одна и та же команда подходит как для первого запуска, так и для каждого последующего перезапуска.

```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
```

По завершении обучения LoRA сохраняется в бакет в виде `pytorch_lora_weights.safetensors`. См. [Тома](https://huggingface.co/docs/hub/jobs-configuration#volumes) для вариантов монтирования.

> [!NOTE]
> Не добавляйте `--push_to_hub`, если `--output_dir` содержит контрольные точки. Загрузка пропускает только папки `step_*` и `epoch_*`, поэтому папки `checkpoint-<step>` будут отправлены в репозиторий модели вместе с LoRA. Вместо этого самостоятельно загрузите `pytorch_lora_weights.safetensors` в репозиторий модели.

## Дальнейшие шаги

- См. раздел [Обучение моделей на Jobs](https://huggingface.co/docs/hub/jobs-training) в документации Hub, чтобы узнать о проверках, которые необходимо выполнить перед запуском длительной задачи, и о том, как анализировать результаты неудачного запуска.
- Загрузите обученный LoRA для инференса с помощью руководства [LoRA](../tutorials/using_peft_for_inference).
- Ознакомьтесь с [файлами README DreamBooth](https://github.com/huggingface/diffusers/tree/main/examples/dreambooth) для получения команд и параметров памяти, специфичных для каждой модели.

