

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# FLUX.2 Klein LoRA 微調和產生影像
<a name="flux2-klein-lora"></a>

此範例示範如何使用 LoRA （低排名調整） 微調 FLUX.2 Klein 影像產生模型，並在截止日期雲端上大規模產生影像。工作流程會從小型影像資料集訓練輕量型轉接器。然後，它會使用該轉接器從文字提示產生新映像，所有文字提示都會協調為 GPU 機群上的截止日期雲端任務。

此範例的原始程式碼可在 GitHub 的 [deadline-cloud-samples](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/flux2_klein_lora) 儲存庫中使用。

下列影片示範在截止日期雲端上的 FLUX.2 Klein LoRA 工作流程。

[![AWS Videos](http://img.youtube.com/vi/3ziQqB19RSw/0.jpg)](http://www.youtube.com/watch?v=3ziQqB19RSw)


**預估時間：**30–60 分鐘 （包括 15–45 分鐘的訓練）。

## 概觀
<a name="examples-flux2-overview"></a>

此範例包含兩個任務套件：

1. **lora\_training** – 使用 [LoRA](https://huggingface.co/docs/peft/conceptual_guides/adapter#low-rank-adaptation-lora) 在影像資料集上微調 [FLUX.2Krein](https://huggingface.co/black-forest-labs/FLUX.2-klein-base-4B)，產生`.safetensors`轉接器檔案。

1. **image\_generation** – 使用訓練過的轉接器載入基本模型，並從文字提示產生影像。產生多個映像時，工作會跨工作者平行處理。

LoRA 是一種參數高效的微調技術，可訓練小型轉接器，而不是修改完整的模型權重。此方法可讓訓練快速 （在單一 GPU 上為 15–45 分鐘），而產生的轉接器便攜且易於版本。

任務套件使用[擴散器](https://github.com/huggingface/diffusers)和 [peft](https://github.com/huggingface/peft) 程式庫進行訓練和推論。

若要完成此範例，請遵循下列步驟：

1. 完成先決條件。

1. 準備訓練資料。

1. 提交訓練任務。

1. 提交映像產生任務。

1. 清除資源。

## 先決條件
<a name="examples-flux2-prerequisites"></a>

開始前，請確定您有下列項目：
+ 具有 GPU 機群的截止日期雲端陣列 (Linux建議使用 NVIDIA A10G GPU、13 GB\+ VRAM、64 GiB\+ 系統記憶體）。
+ 與 GPU 機群相關聯的佇列。
+ 工作站上安裝[的截止日期雲端 CLI](https://github.com/aws-deadline/deadline-cloud)。
+ 您主題的 20–50 張訓練影像 (`.jpg`、`.jpeg`、 `.png`或 `.webp`)。

## 任務套件結構
<a name="examples-flux2-structure"></a>

```
flux2_klein_lora/
├── lora_training/
│   ├── template.yaml       # OpenJD job template
│   └── train_lora.py       # Training script
└── image_generation/
    ├── template.yaml       # OpenJD job template
    └── generate_image.py   # Inference script
```

## 準備訓練資料
<a name="examples-flux2-training-data"></a>

**準備訓練資料**

1. 建立包含您主體影像的目錄。為了獲得最佳結果，請使用 20–50 張具有不同姿勢、照明和背景的影像。

1. 或者，為每個影像提供`.txt`字幕檔案，以獲得更細微的訓練：

   ```
   training_images/
   ├── IMG_001.jpeg
   ├── IMG_001.txt    # "a photo of ohwx dog sitting on grass"
   ├── IMG_002.jpeg
   ├── IMG_002.txt    # "a photo of ohwx dog running on beach"
   ```

   如果沒有字幕檔案，訓練指令碼會使用執行個體提示參數自動產生這些檔案。自訂字幕會產生更高品質的結果，因為它們會教導模型您的觸發詞和視覺特徵之間更具體的關聯。

1. 選擇唯一的觸發詞 （例如 `ohwx`)。這會將學到的概念繫結到不會與現有模型知識衝突的字符。

## 提交訓練任務
<a name="examples-flux2-submit-training"></a>

**提交訓練任務**

1. 導覽至您複製儲存`deadline-cloud-samples`庫中的`flux2_klein_lora`目錄。

1. 若要使用 GUI 提交訓練任務，請執行下列命令：

   ```
   deadline bundle gui-submit ./lora_training
   ```

   或者，若要直接使用 CLI 提交訓練任務，請執行下列命令：

   ```
   deadline bundle submit ./lora_training \
     --queue-id {{gpu-queue-id}} \
     --parameter DatasetPath=~/training_images \
     --parameter InstancePrompt="a photo of ohwx dog" \
     --parameter OutputDir=/tmp/lora_output \
     --parameter MaxTrainSteps=1500 \
     --parameter Resolution=512
   ```

1. 在截止日期雲端主控台或使用 `deadline job get`命令來監控任務狀態。

### 訓練參數
<a name="examples-flux2-training-params"></a>


**訓練參數**  

| 參數 | 描述 | 預設 | 
| --- | --- | --- | 
| 模型版本 | flux.2-klein-base-4b 或 flux.2-klein-4b | flux.2-klein-base-4b | 
| 資料集路徑 | 包含訓練映像的目錄 | — | 
| 執行個體提示 | 描述您的主體的文字 | — | 
| Resolution | 以像素為單位的訓練影像解析度 | 512 | 
| Network Dim | LoRA 排名 （較高 = 更多容量） | 16 | 
| 網路 Alpha | LoRA alpha 擴展係數 | 16 | 
| 訓練步驟上限 | 訓練反覆運算次數 | 1500 | 
| 輸出目錄 | 在何處儲存訓練過的權重 | — | 

### 訓練輸出
<a name="examples-flux2-training-output"></a>

訓練任務會產生下列成品：
+ `flux2_klein_lora.safetensors` – 具有內嵌中繼資料的訓練 LoRA 轉接器。
+ 每 300 個步驟儲存的檢查點。

若要在訓練完成後下載輸出，請執行下列命令：

```
deadline job download-output \
  --job-id {{training-job-id}} \
  --queue-id {{gpu-queue-id}}
```

## 提交映像產生任務
<a name="examples-flux2-submit-generation"></a>

**提交映像產生任務**

1. 導覽至您複製儲存`deadline-cloud-samples`庫中的`flux2_klein_lora`目錄。

1. 若要使用 GUI 提交映像產生任務，請執行下列命令：

   ```
   deadline bundle gui-submit ./image_generation
   ```

   或者，若要直接使用 CLI 提交映像產生任務，請執行下列命令：

   ```
   deadline bundle submit ./image_generation \
     --queue-id {{gpu-queue-id}} \
     --parameter LoRAPath=/tmp/lora_output/flux2_klein_lora.safetensors \
     --parameter Prompt="a photo of ohwx dog wearing a tuxedo" \
     --parameter OutputDir=/tmp/generated_images \
     --parameter NumImages=4
   ```

1. 在截止日期雲端主控台或使用 `deadline job get`命令來監控任務狀態。

當 `NumImages` 大於 1 時，Deadline Cloud 會將工作分散到多個工作者，以便更快速產生。

### 產生參數
<a name="examples-flux2-generation-params"></a>


**產生參數**  

| 參數 | 描述 | 預設 | 
| --- | --- | --- | 
| LoRA 路徑 | 訓練.safetensors檔案的路徑 | — | 
| 提示詞 | 文字描述 （包括您的觸發字詞） | — | 
| 影像數量 | 要產生的映像總數 | 1 | 
| Width | 輸出寬度，以像素為單位 | 1024 | 
| Height | 輸出高度，以像素為單位 | 1024 | 
| 推論步驟 | 雜訊消除步驟的數量 | 50 | 
| 指導規模 | 無分類器指引擴展 | 4.0 | 

### 產生輸出
<a name="examples-flux2-generation-output"></a>

影像會儲存為 `image_0001.png`、 `image_0002.png`等。若要下載它們，請執行下列命令：

```
deadline job download-output \
  --job-id {{generation-job-id}} \
  --queue-id {{gpu-queue-id}}
```

## 模型變體
<a name="examples-flux2-model-variants"></a>


**FLUX.2 Klein 模型變體**  

| 模型 | Parameters | 最適合 | 
| --- | --- | --- | 
| flux.2-klein-base-4b | 4B | 微調、商業用途 | 
| flux.2-klein-4b | 4B | 快速推論 (4 個雜訊消除步驟） | 

## 訓練建議
<a name="examples-flux2-recommendations"></a>

下列建議可協助您獲得最佳結果：
+ **資料集大小** – 20–50 張高品質影像非常適合大多數主體。
+ **解析度** – 針對具有 24 GB VRAM 的 GPUs 使用 512。較高的解析度需要更多記憶體。
+ **訓練步驟** – 從 1500 開始。如果輸出與您的主體不相似，請增加 。
+ **網路變暗** – 16 是良好的預設值。針對複雜或抽象概念使用 32。
+ **學習率** – 1e-4 的預設值適用於大多數情況。

## 清除
<a name="examples-flux2-cleanup"></a>

為了避免持續收費，請清除您為此範例建立的資源：

**清除範例資源**

1. 在截止日期雲端主控台中，停止或刪除您用於此範例的 GPU 機群。

1. 如果不再需要任務附件建立的任何 Amazon Simple Storage Service (Amazon S3) 物件，請將其刪除。

1. 如果不再需要本機輸出檔案，請將其移除：

   ```
   rm -rf /tmp/lora_output /tmp/generated_images
   ```

## 相關資源
<a name="examples-flux2-related"></a>

下列資源提供其他資訊：
+ [GitHub 上的原始程式碼範例](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/flux2_klein_lora)
+ [Hugging Face 上的 FLUX.2 Klein](https://huggingface.co/black-forest-labs/FLUX.2-klein-base-4B)
+ [開啟任務描述規格](https://github.com/OpenJobDescription/openjd-specifications)
+ [擴散器文件](https://huggingface.co/docs/diffusers)
+ [截止日期雲端架構指引](https://docs.aws.amazon.com/deadline-cloud/latest/developerguide/architecture-guidance.html)