

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用扩散模型批量生成图像
<a name="tutorial-text-to-image-batch"></a>

本教程将引导您使用扩散模型在 JSONL 提示文件上运行高吞吐量批量图像生成。您将[文本到图像的批处理任务包提交到您的 Deadline Cl GitHub ](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/text_to_image_batch) oud 农场上的 GPU 队列。默认型号是 Hugging Face 上的 [ FLUX.2 Klein 4B](https://huggingface.co/black-forest-labs/FLUX.2-klein-4B)，它已获得 Apache 2.0 许可，未加限制，精简为 4 个步骤，需要大约 13 GB 的视频内存 (VRAM)。

JSONL 中的每个选定行都将成为生成任务。调度器将任务分配给可用的 GPU 工作线程，每个工作程序加载一次扩散管道，然后将其重复用于其运行的每项任务。当一条线包含一个`caption`字段或一个从 vLLM 批量推理包的输出中链接的`generated_text`字段时，作业会将文本合成在生成的图像上，形成清晰的排版。没有标题的线条会生成纯图像，因此该包同样可以很好地用作纯文本到图像的批处理生成器。

**预计时间：**30—60 分钟，包括农场设置。第一次运行还会为每位工作人员下载大约 13 GB 的模型权重。

运行本教程会产生处理任务的 GPU 工作实例的费用。

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

要完成本教程，请按照以下步骤操作：

1. 设置你的农场。

1. 准备输入文件。

1. 提交图像生成作业。

1. 下载并浏览图库。

1. 清理资源。

## 设置你的农场
<a name="tutorial-t2i-setup"></a>

您需要一个具有 NVIDIA GPU 和至少 32 GB RAM 的服务管理队列，以及一个附加了用于读取`CondaPackages`和`CondaChannels`作业参数的 conda 队列环境的队列。 FLUX.2 由于 CPU 卸载，Klein 4B 可轻松适用于 16 GB 及更大的 GPU（例如 L4 或 A10G）。

获得兼容农场的最快方法是在其上部署 [ CUDA 农场 CloudFormation 模板 GitHub](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/cloudformation/farm_templates/cuda_farm)，这与 vLLM 批量推理包使用的模板相同。堆栈到达后`CREATE_COMPLETE`，将 Deadline Cloud CLI 配置为使用新农场：

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

**注意**  
该捆绑包中包括一个可在每次会话中安装的`InstallDeps`作业环境 PyTorch 以及队列的 conda 环境之上来自 git 的最新扩散器库，此外还为字幕叠加层下载了四种小型 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` bundle 目录中，打开提交者：

   ```
   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 和 Stable Diffusion 3.5。有关完整的参数列表和其他模型的设置，请参阅[示例 README 中的参数表。 GitHub ](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`原始的 PNG 已输入`output/images/`，组合的元数据已输入`output/output.jsonl`，并且`output/gallery.html`是一个具有搜索和 CSV 导出功能的静态图库查看器。

1. 如果在您`gallery.html`直接打开图库时无法加载图库的图片，则这是浏览器对`file://`网址的安全限制。改为提供目录：

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

## 来自 vLLM 批量推断的链
<a name="tutorial-t2i-chaining"></a>

经典流程将此包与 vLLM 批量推理包配对：

1. 使用 vLLM 批量推理包生成文本：口号、字幕、场景描述或替代文本。输出为每`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)