

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

# 使用擴散模型批次產生映像
<a name="tutorial-text-to-image-batch"></a>

本教學課程會逐步引導您使用擴散模型，在提示的 JSONL 檔案上執行高輸送量批次映像產生。您可以將 [ GitHub text-to-image批次任務套件](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/text_to_image_batch)提交至截止日期雲端陣列上的 GPU 機群。預設模型是 [Hugging Face 上的 FLUX.2 Klein 4B](https://huggingface.co/black-forest-labs/FLUX.2-klein-4B)，這是 Apache 2.0 授權、無門控、已分段至 4 個步驟，且需要約 13 GB 的視訊 RAM (VRAM)。

JSONL 中每個選取的行都會成為產生任務。排程器會將任務分配到可用的 GPU 工作者，每個工作者會載入擴散管道一次，並針對其執行的每個任務重複使用。當行攜帶`caption`欄位，或從 vLLM 批次推論套件輸出鏈結`generated_text`的欄位時，任務會將產生影像上的文字複合為清晰的排版。沒有字幕的行會產生純影像，因此套件的運作方式與純text-to-image批次產生器相同。

**預估時間：**30-60 分鐘，包括陣列設定。第一次執行也會下載每個工作者約 13 GB 的模型權重。

執行本教學課程會產生處理任務的 GPU 工作者執行個體費用。

## 概觀
<a name="tutorial-t2i-overview"></a>

若要完成本教學課程，請遵循下列步驟：

1. 設定您的陣列。

1. 準備輸入檔案。

1. 提交映像產生任務。

1. 下載並瀏覽圖庫。

1. 清除資源。

## 設定您的陣列
<a name="tutorial-t2i-setup"></a>

您需要具有 NVIDIA GPUs 和至少 32 GB RAM 的服務受管機群，以及連接讀取`CondaPackages`和`CondaChannels`任務參數之 conda 佇列環境的佇列。由於 CPU 卸載，FLUX.2 Klein 4B 可輕鬆地安裝在 16 GB 和更大的 GPUs 上 （例如 L4 或 A10G)。

取得相容陣列的最快方法是在 [ GitHub 上部署 CUDA 陣列 CloudFormation 範本](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/cloudformation/farm_templates/cuda_farm)，這是 vLLM 批次推論套件使用的相同範本。堆疊到達 後`CREATE_COMPLETE`，設定截止日期雲端 CLI 以使用新的陣列：

```
deadline config set defaults.farm_id {{FarmId-from-stack-outputs}}
deadline config set defaults.queue_id {{CUDAQueueId-from-stack-outputs}}
```

**注意**  
套件包含一個`InstallDeps`任務環境，可將 PyTorch 和最新的擴散器程式庫從 git 安裝在每個工作階段的佇列 conda 環境之上，並下載四個小型 Google 字型作為字幕浮水印。第一次使用時，每個工作者預計會有 30–90 秒的額外設定時間，以及在第一次執行時下載模型。如果您的機群在網路限制的 VPC 中執行，您需要將相依性預先封裝到自訂 AMI 或 conda 頻道，或開啟輸出。

## 準備輸入檔案
<a name="tutorial-t2i-input"></a>

輸入是 JSONL 檔案，每行一個 JSON 物件。每一行都必須有一個`prompt`欄位或一個欄位從 vLLM 批次推論套件的輸出`generated_text`鏈結：

```
{"prompt": "A golden hour photo of a sourdough loaf on a linen-covered table", "id": "loaf_01"}
{"prompt": "A bakery storefront at sunrise, photorealistic", "caption": "OPEN AT DAWN", "id": "shop_01"}
{"prompt": "Write a slogan for sourdough", "id": "001", "generated_text": "Real grain. Real fermentation. Real you.", "style": "rustic flat lay, warm tones"}
```

選用的每行欄位包含`caption`浮水印文字，`style`以覆寫任務層級樣式尾碼、 `font``width`和 `height`、 `steps`和 `seed`。套件包含與 vLLM 批次套件相同的零相依性提示建置器工具。開啟 `tools/prompt_builder.html` 以建置輸入檔案、透過拖放匯入 JSONL，以及新增每個提示覆寫。

套件`sample_prompts.jsonl`檔案是 10 影像的烘焙行銷活動示範：由 vLLM 批次推論套件產生的烘焙標語，搭配分層的樣式提示，用於叫用視覺效果。

## 提交映像產生任務
<a name="tutorial-t2i-submit"></a>

**使用 GUI 提交者提交**

1. 從`text_to_image_batch`套件目錄中，開啟提交者：

   ```
   deadline bundle gui-submit .
   ```

1. 選擇您的輸入 JSONL 檔案。嘗試進行`sample_prompts.jsonl`烘焙行銷活動示範。

1. 設定**提示範圍** （例如，`1-10`前 10 個提示） 並挑選輸出目錄。

1. 選擇性地調整 **StyleSuffix**、**寬度**和**高度**。`true` 如果您的 JSONL 有字幕或標語，請將**重疊**字幕保留在 ，或將其設定為 `false` 以產生純影像。

1. 選擇**提交**。

或者，使用 CLI 提交：

```
deadline bundle submit . \
  --parameter InputFile=$PWD/sample_prompts.jsonl \
  --parameter Prompts=1-10 \
  --parameter OutputDir=$PWD/output
```

`Prompts` 和 `ChunkSize` 參數的運作方式與 vLLM 批次推論套件相同，使用截止日期雲端任務區塊功能。如需詳細資訊，請參閱[任務範本的任務區塊](build-job-bundle-chunking.md)。`ModelName` 參數接受擴散器程式庫可以載入的任何內容，包括 SDXL Turbo 和穩定擴散 3.5。如需完整參數清單和其他模型的設定，請參閱 [ GitHub 上 README 範例中的參數表](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/text_to_image_batch#parameters)。

## 下載並瀏覽圖庫
<a name="tutorial-t2i-results"></a>

**下載並瀏覽結果**

1. 任務完成後，從您在提交時使用的相同目錄執行下載命令，因此`OutputDir`路徑會解析為相同的位置：

   ```
   deadline job download-output --job-id {{job-id}}
   ```

1. 每個成品都會落在您設定為 之路徑的`output/`子目錄中`OutputDir`。原始 PNGs 位於 中`output/images/`，合併的中繼資料位於 中`output/output.jsonl`，`output/gallery.html`並且是具有搜尋和 CSV 匯出的靜態圖庫檢視器。

1. 如果您`gallery.html`直接開啟時未載入圖庫的影像，則這是 `file://` URLs的瀏覽器安全限制。請改為提供 目錄：

   ```
   cd {{OutputDir}}/output && python3 -m http.server 8080
   # open http://localhost:8080/gallery.html
   ```

## 來自 vLLM 批次推論的鏈結
<a name="tutorial-t2i-chaining"></a>

傳統流程會將此套件與 vLLM 批次推論套件配對：

1. 使用 vLLM 批次推論套件產生文字：標語、字幕、場景描述或 alt-text。輸出是每行`output.jsonl`一個`generated_text`欄位。請參閱 [使用 vLLM 執行批次 LLM 推論](tutorial-vllm-batch.md)。

1. （選用） 開啟 `tools/prompt_builder.html`、放入 `output.jsonl`、新增或編輯每個提示字幕、樣式或視覺描述，然後重新匯出。

1. 將此套件與 JSONL 一起提交為 `InputFile`。每個任務指令碼會自動使用 `generated_text`做為覆蓋字幕。

當一行同時具有`generated_text`標語和原始 LLM 時`prompt`，任務指令碼會嘗試將主體從請求中提取，並將其用作擴散模型的視覺提示，因為標語通常過於抽象，無法為模型提供具體主體。工作者會記錄每個任務的視覺化提示來源，以便您可以發現擷取錯誤。

## 清除
<a name="tutorial-t2i-cleanup"></a>

為了避免持續收費，請清除您為此教學課程建立的資源：

**清除教學課程資源**

1. 如果您已部署 CUDA 陣列 CloudFormation 範本，請從 CloudFormation 主控台刪除 CloudFormation 堆疊。

1. 如果您使用現有的陣列並特別為此教學課程建立 GPU 機群，請停止或刪除該機群。如果您使用預先存在的共用機群，請將其保留在原處。

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

## 相關資源
<a name="tutorial-t2i-related"></a>

下列資源提供其他資訊：
+ [GitHub 上的範例原始程式碼](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/text_to_image_batch)
+ [使用 vLLM 執行批次 LLM 推論](tutorial-vllm-batch.md)
+ [任務範本的任務區塊](build-job-bundle-chunking.md)
+ [FLUX.2 Klein LoRA 微調和產生影像](flux2-klein-lora.md)
+ [Hugging Face 擴散器文件](https://huggingface.co/docs/diffusers)