Diffusers documentation

Việc làm tại Hugging Face

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Việc làm tại Hugging Face

Hugging Face Jobs chạy trên GPU của Hugging Face, vì vậy bạn không cần thiết lập máy, và quá trình chạy sẽ tiếp tục ngay cả khi bạn đóng terminal. Các script huấn luyện của Diffusers chạy trên Jobs trực tiếp từ URL GitHub mà không cần clone repository hay cài đặt gì đó cục bộ.

Trước khi bắt đầu, hãy làm theo Jobs quickstart để cài đặt CLI hf, đăng nhập và thêm tín dụng vào tài khoản của bạn.

Huấn luyện một LoRA trên Jobs

Lệnh bên dưới huấn luyện một LoRA cho FLUX.2-klein-4B trên năm bức ảnh chó trong diffusers/dog-example. Nó chạy trên một A10G duy nhất và đẩy LoRA lên namespace của bạn trên 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-lora

uv cài đặt các phụ thuộc được liệt kê trong phần đầu # /// script của script, bao gồm Diffusers từ main. Các Job không nhận token Hugging Face theo mặc định, do đó -s HF_TOKEN chuyển token của bạn để script có thể push LoRA. Ổ đĩa của Job sẽ bị xóa khi Job kết thúc, và bất kỳ thứ gì bạn không push sẽ bị mất. Hướng dẫn DreamBooth và LoRA giải thích các đối số huấn luyện.

Quản lý một Job

Nhật ký huấn luyện được in ra terminal của bạn trong khi Job đang chạy. Việc đóng terminal hoặc nhấn Ctrl+C sẽ không dừng quá trình huấn luyện, vì Job chạy trên các máy của Hugging Face. Để khởi chạy một phiên dài mà không chiếm dụng terminal, hãy thêm -d trước --. Lệnh sẽ in ra Job ID và trả về.

Sử dụng Job ID để gắn lại vào nhật ký, kiểm tra bộ nhớ và mức sử dụng GPU trong khi mô hình đang huấn luyện, hoặc dừng một lần chạy.

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

Nếu run thất bại, hf jobs inspect <job_id> sẽ hiển thị thông báo lỗi. Xem Quản lý Jobs để biết các lệnh khác.

Huấn luyện trên hình ảnh của bạn

Để huấn luyện trên các hình ảnh của bạn, hãy gắn (mount) thư mục chứa chúng vào Job bằng -v và truyền đường dẫn gắn vào --instance_data_dir thay vì --dataset_name. Jobs sẽ tải thư mục lên một bucket riêng tư trước khi Job bắt đầu và gắn nó ở chế độ chỉ đọc. Việc tải cùng một thư mục lên lần nữa chỉ gửi các tệp mới hoặc đã thay đổi.

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

Script mở mọi tệp trong --instance_data_dir như một hình ảnh, vì vậy chỉ giữ các tệp hình ảnh trong thư mục. Một tệp ẩn như .DS_Store sẽ khiến quá trình chạy thất bại. Xem Thư mục cục bộ để biết thêm về việc gắn (mount) một thư mục.

Với --with_prior_preservation, script sẽ tạo các ảnh lớp vào --class_data_dir trước khi quá trình huấn luyện bắt đầu. Hãy trỏ đến một đường dẫn mà Job có thể ghi được. Để tái sử dụng các ảnh lớp trong các lần chạy sau, hãy đặt chúng trong một bucket mount đọc-ghi như trong Lưu checkpoint cho các lần chạy dài.

Huấn luyện ở FP8

Các script DreamBooth LoRA của FLUX.2, Z-Image, Ideogram 4 và Krea 2 nhận --do_fp8_training để huấn luyện ở FP8 bằng torchao, giúp giảm mức sử dụng bộ nhớ. Không có header script nào bao gồm torchao, vì vậy hãy thêm --with torchao trước --. FP8 cũng yêu cầu GPU có khả năng tính toán từ 8.9 trở lên, chẳng hạn như L4 (l4x1) hoặc L40S (l40sx1). A10G (8.6) và A100 (8.0) không hỗ trợ tính năng này.

Chạy một script không có phần tiêu đề phụ thuộc

Chỉ các script trong examples/dreambooth và examples/advanced_diffusion_training khai báo các phụ thuộc của chúng trong khối # /// script ở đầu tệp. Một số script trong các thư mục đó, chẳng hạn như train_dreambooth_lora_sdxl.py, không có khối này.

Đối với script không có header, hãy truyền từng dependency bằng --with. Cài đặt Diffusers từ source, vì các script huấn luyện yêu cầu phiên bản phát triển. Các dependency khác đến từ tệp requirements.txt của script và các import của nó.

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

Lưu checkpoint cho các lần chạy dài

Một lần chạy mất hàng giờ có thể bị hết thời gian hoặc gặp sự cố trước khi hoàn tất. Để giữ lại tiến độ, hãy gắn Storage Bucket vào Job bằng -v và trỏ --output_dir đến bucket đó. Trước tiên, hãy tạo bucket bằng hf buckets create.

Script lưu một thư mục checkpoint-<step> vào --output_dir mỗi --checkpointing_steps bước (mặc định là 500), do đó các checkpoint sẽ được đưa vào bucket trong khi huấn luyện đang diễn ra. --checkpoints_total_limit giới hạn số lượng checkpoint được giữ lại. --resume_from_checkpoint latest tiếp tục từ checkpoint mới nhất trong --output_dir, và bắt đầu từ đầu nếu không có checkpoint nào, nhờ đó cùng một lệnh hoạt động cho lần chạy đầu tiên cũng như cho mỗi lần khởi động lại.

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

Khi quá trình huấn luyện kết thúc, LoRA sẽ được lưu vào bucket dưới dạng pytorch_lora_weights.safetensors. Xem Volumes để biết các tùy chọn gắn (mount).

Đừng thêm --push_to_hub khi --output_dir chứa các checkpoint. Việc tải lên chỉ bỏ qua các thư mục step_* và epoch_*, do đó các thư mục checkpoint-<step> sẽ được đẩy lên kho mô hình cùng với LoRA. Thay vào đó, hãy tự tải pytorch_lora_weights.safetensors lên kho mô hình.

Các bước tiếp theo

  • Đọc Train Models on Jobs trong tài liệu Hub để biết các bước kiểm tra cần thực hiện trước một tác vụ dài và cách đọc một tác vụ đã thất bại.
  • Tải LoRA đã được huấn luyện của bạn để suy luận với hướng dẫn LoRA.
  • Xem các tệp README của DreamBooth để biết các lệnh và tùy chọn bộ nhớ cụ thể cho từng mô hình.
Update on GitHub