# Hugging Face Jobs

[Hugging Face Jobs](https://huggingface.co/docs/hub/jobs) は Hugging Face の GPU で実行されるため、マシンのセットアップは不要です。また、ターミナルを閉じても実行は継続されます。Diffusers の学習スクリプトは、リポジトリをクローンしたりローカルに何かをインストールしたりすることなく、GitHub の URL からそのまま Jobs で実行できます。

開始する前に、[Jobs クイックスタート](https://huggingface.co/docs/hub/jobs-quickstart)に従って、`hf` CLI をインストールし、ログインして、アカウントにクレジットを追加してください。

## JobsでLoRAを学習

以下のコマンドは、[diffusers/dog-example](https://huggingface.co/datasets/diffusers/dog-example) にある5枚の犬の写真で [FLUX.2-klein-4B](https://huggingface.co/black-forest-labs/FLUX.2-klein-4B) の LoRA を学習します。単一の 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` ヘッダーにリストされている依存関係をインストールします。これには `main` からの Diffusers も含まれます。ジョブにはデフォルトで Hugging Face トークンが与えられないため、`-s HF_TOKEN` を使用してあなたのトークンを転送し、スクリプトが LoRA をプッシュできるようにします。ジョブのディスクはジョブ終了時に破棄されるため、プッシュしないものはすべて失われます。[DreamBooth](./dreambooth) と [LoRA](./lora) のガイドでは、トレーニング引数について説明しています。

## ジョブの管理

Jobの実行中、トレーニングログはターミナルに出力されます。ターミナルを閉じたり`Ctrl+C`を押したりしても、JobはHugging Faceのマシン上で実行されるため、トレーニングは停止しません。ターミナルを占有せずに長時間の実行を開始するには、`--`の前に`-d`を追加します。すると、コマンドはJob IDを出力して返ります。

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)を参照してください。

## 自分の画像で学習

画像で学習するには、`-v` を使用してそのフォルダを Job にマウントし、`--dataset_name` の代わりにマウントパスを `--instance_data_dir` に渡します。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で学習

FLUX.2、Z-Image、Ideogram 4、および Krea 2 の DreamBooth LoRA スクリプトは、`--do_fp8_training` を指定することで [torchao](https://github.com/pytorch/ao) を使用して FP8 で学習し、メモリ使用量を削減できます。スクリプトのヘッダーには torchao が含まれていないため、`--` の前に `--with torchao` を追加してください。また、FP8 には L4 (`l4x1`) や L40S (`l40sx1`) のような、計算能力 8.9 以上の GPU が必要です。A10G (8.6) と A100 (8.0) はサポートされていません。

## 依存関係ヘッダーなしでスクリプトを実行する

[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) にあるスクリプトのみ、ファイルの先頭に `# /// script` ブロックで依存関係を宣言しています。これらのフォルダ内の `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
```

## 長時間の実行用にチェックポイントを保存する

数時間かかる実行は、完了前にタイムアウトやクラッシュが発生する可能性があります。進捗を保持するには、`-v` を使用してジョブに [Storage Bucket](https://huggingface.co/docs/hub/storage-buckets) をマウントし、`--output_dir` をそのバケットに向けます。まず、`hf buckets create` でバケットを作成してください。

スクリプトは、`--checkpointing_steps` ステップ（デフォルトは 500）ごとに `checkpoint-<step>` フォルダを `--output_dir` に保存するため、トレーニングの進行に伴ってチェックポイントがバケットに格納されます。`--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]
> `--output_dir` にチェックポイントが含まれている場合は、`--push_to_hub` を追加しないでください。アップロードは `step_*` と `epoch_*` フォルダのみをスキップするため、`checkpoint-<step>` フォルダは LoRA と一緒にモデルリポジトリにプッシュされてしまいます。代わりに、`pytorch_lora_weights.safetensors` を自分でモデルリポジトリにアップロードしてください。

## 次のステップ

- Hub のドキュメントにある [Train Models on Jobs](https://huggingface.co/docs/hub/jobs-training) を参照し、長時間のジョブ実行前に実施すべきチェック項目や、失敗したジョブの読み取り方法を確認してください。
- [LoRA](../tutorials/using_peft_for_inference)ガイドに従って、学習済みのLoRAを読み込んで推論を実行してください。
- モデル固有のコマンドやメモリオプションについては、[DreamBoothのREADMEファイル](https://github.com/huggingface/diffusers/tree/main/examples/dreambooth)を参照してください。

