Diffusers documentation
Hugging Face Jobs
Hugging Face Jobs
Hugging Face Jobs работает на GPU Hugging Face, поэтому вам не нужно настраивать машину, и выполнение продолжается, даже если вы закроете терминал. Скрипты обучения Diffusers запускаются в Jobs напрямую по их URL из GitHub без необходимости клонировать репозиторий или устанавливать что-либо локально.
Прежде чем начать, выполните инструкции из раздела Быстрый старт с Jobs, чтобы установить CLI hf, войти в систему и пополнить баланс вашего аккаунта.
Обучение LoRA на Jobs
Команда ниже обучает LoRA для FLUX.2-klein-4B на пяти фотографиях собак из diffusers/dog-example. Она выполняется на одном A10G и публикует LoRA в вашем пространстве имён на Hub.
# 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-lorauv устанавливает зависимости, перечисленные в заголовке # /// script скрипта, включая Diffusers из ветки main. По умолчанию Jobs не получают токен Hugging Face, поэтому -s HF_TOKEN передаёт ваш токен, чтобы скрипт мог отправить LoRA. Диск Job удаляется по завершении Job, и всё, что не было отправлено, теряется. Руководства по DreamBooth и LoRA описывают аргументы обучения.
Управление задачей
Журналы обучения выводятся в терминал во время выполнения Job. Закрытие терминала или нажатие Ctrl+C не останавливает обучение, поскольку Job выполняется на машинах Hugging Face. Чтобы запустить длительную работу, не блокируя терминал, добавьте -d перед --. Команда выведет ID Job и вернёт управление.
Используйте Job ID, чтобы повторно подключиться к журналам, проверить использование и загрузку памяти GPU во время обучения модели или остановить выполнение.
hf jobs logs -f <job_id>
hf jobs stats <job_id>
hf jobs cancel <job_id>Если выполнение не удалось, hf jobs inspect <job_id> отобразит сообщение об ошибке. Остальные команды описаны в разделе Управление заданиями.
Обучение на собственных изображениях
Чтобы обучать модель на своих изображениях, смонтируйте их папку в Job с помощью -v и передайте путь к точке монтирования в --instance_data_dir вместо --dataset_name. Jobs загружает папку в приватный бакет перед запуском Job и монтирует её в режиме только для чтения. При повторной загрузке той же папки передаются только новые или изменённые файлы.
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, приводит к сбою выполнения. Подробнее о монтировании папки см. в разделе Локальные каталоги.
С флагом --with_prior_preservation скрипт генерирует изображения классов в --class_data_dir перед началом обучения. Укажите путь, в который Job может записывать данные. Чтобы переиспользовать изображения классов в последующих запусках, разместите их в точке монтирования с правами чтения и записи, как описано в разделе Сохранение контрольных точек для длительных запусков.
Обучение в FP8
Скрипты DreamBooth LoRA для FLUX.2, Z-Image, Ideogram 4 и Krea 2 принимают --do_fp8_training для обучения в FP8 с помощью torchao, что снижает потребление памяти. В заголовках скриптов нет torchao, поэтому добавьте --with torchao перед --. Для FP8 также требуется GPU с вычислительной мощностью 8.9 или выше, например L4 (l4x1) или L40S (l40sx1). A10G (8.6) и A100 (8.0) не поддерживают этот режим.
Запуск скрипта без заголовка зависимостей
Зависимости в блоке # /// script в начале файла объявлены только в скриптах из examples/dreambooth и examples/advanced_diffusion_training. У некоторых скриптов в этих папках, например train_dreambooth_lora_sdxl.py, такого блока нет.
Для скрипта без заголовка передавайте каждую зависимость с помощью --with. Установите Diffusers из исходного кода, так как скрипты обучения требуют версии для разработки. Остальные зависимости берутся из файла requirements.txt скрипта и из его импортов.
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 в Job с помощью -v и укажите его в параметре --output_dir. Сначала создайте бакет командой hf buckets create.
Скрипт сохраняет папку checkpoint-<step> в --output_dir каждые --checkpointing_steps шагов (по умолчанию 500), поэтому контрольные точки появляются в бакете по мере обучения. --checkpoints_total_limit ограничивает количество сохраняемых контрольных точек. --resume_from_checkpoint latest продолжает обучение с последней контрольной точки в --output_dir, а если её нет — начинает с нуля, поэтому одна и та же команда подходит как для первого запуска, так и для каждого последующего перезапуска.
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. См. Тома для вариантов монтирования.
Не добавляйте
--push_to_hub, если--output_dirсодержит контрольные точки. Загрузка пропускает только папкиstep_*иepoch_*, поэтому папкиcheckpoint-<step>будут отправлены в репозиторий модели вместе с LoRA. Вместо этого самостоятельно загрузитеpytorch_lora_weights.safetensorsв репозиторий модели.
Дальнейшие шаги
- См. раздел Обучение моделей на Jobs в документации Hub, чтобы узнать о проверках, которые необходимо выполнить перед запуском длительной задачи, и о том, как анализировать результаты неудачного запуска.
- Загрузите обученный LoRA для инференса с помощью руководства LoRA.
- Ознакомьтесь с файлами README DreamBooth для получения команд и параметров памяти, специфичных для каждой модели.