# Việc làm tại Hugging Face

[Hugging Face Jobs](https://huggingface.co/docs/hub/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](https://huggingface.co/docs/hub/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](https://huggingface.co/black-forest-labs/FLUX.2-klein-4B) trên năm bức ảnh chó trong [diffusers/dog-example](https://huggingface.co/datasets/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.

```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` 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ể đẩy LoRA lên. Ổ đĩa của Job sẽ bị xóa khi Job kết thúc, và bất kỳ thứ gì bạn không đẩy lên sẽ bị mất. Hướng dẫn [DreamBooth](./dreambooth) và [LoRA](./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.

```bash
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](https://huggingface.co/docs/hub/jobs-manage) để 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.

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

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ộ](https://huggingface.co/docs/hub/jobs-configuration#local-directories) để 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](#save-checkpoints-for-long-runs).

## Huấn luyện ở FP8

Các script DreamBooth LoRA cho FLUX.2, Z-Image, Ideogram 4 và Krea 2 sử dụng `--do_fp8_training` để huấn luyện ở FP8 với [torchao](https://github.com/pytorch/ao), giúp giảm mức sử dụng bộ nhớ. Phần tiêu đề script không 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](https://github.com/huggingface/diffusers/tree/main/examples/dreambooth) và [examples/advanced_diffusion_training](https://github.com/huggingface/diffusers/tree/main/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ừ file `requirements.txt` của script và các import của nó.

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

## 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](https://huggingface.co/docs/hub/storage-buckets) 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.

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

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](https://huggingface.co/docs/hub/jobs-configuration#volumes) để biết các tùy chọn gắn (mount).

> [!NOTE]
> Đừ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](https://huggingface.co/docs/hub/jobs-training) 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](../tutorials/using_peft_for_inference).
- Xem các [tệp README của DreamBooth](https://github.com/huggingface/diffusers/tree/main/examples/dreambooth) để biết các lệnh và tùy chọn bộ nhớ cụ thể cho từng mô hình.

