View a markdown version of this page

使用扩散模型批量生成图像 - 截止日期云

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

使用扩散模型批量生成图像

本教程将引导您使用扩散模型在 JSONL 提示文件上运行高吞吐量批量图像生成。您将文本到图像的批处理任务包提交到您的 Deadline Cl GitHub oud 农场上的 GPU 队列。默认型号是 Hugging Face 上的 FLUX.2 Klein 4B,它已获得 Apache 2.0 许可,未加限制,精简为 4 个步骤,需要大约 13 GB 的视频内存 (VRAM)。

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

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

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

概述

要完成本教程,请按照以下步骤操作:

  1. 设置你的农场。

  2. 准备输入文件。

  3. 提交图像生成作业。

  4. 下载并浏览图库。

  5. 清理资源。

设置你的农场

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

获得兼容农场的最快方法是在其上部署 CUDA 农场 CloudFormation 模板 GitHub,这与 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 通道中,或者打开出口。

准备输入文件

输入是一个 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"}

可选的每行字段包括叠加文本、captionstyle用于覆盖作业级别样式后缀、、fontwidthheightsteps seed该软件包包含与 vLLM 批处理包相同的零依赖提示生成器工具。打开tools/prompt_builder.html以生成输入文件,通过拖放导入 JSONL,并添加每个提示符的覆盖。

捆绑sample_prompts.jsonl文件是一个 10 张图片的面包店活动演示:由 vLLM 批量推理包生成的面包店口号,上面有风格提示,可提供令人回味的视觉效果。

提交图像生成作业

与 GUI 提交者一起提交
  1. text_to_image_batch bundle 目录中,打开提交者:

    deadline bundle gui-submit .
  2. 选择您的输入 JSONL 文件。试sample_prompts.jsonl试面包店活动演示。

  3. 设置提示范围1-10例如,前 10 个提示音)并选择一个输出目录。

  4. (可选)调整StyleSuffix宽度和高度true如果您的 JSONL 有字幕或口号,请将叠加标题保留在,或者将其设置为纯图像生成。false

  5. 选择提交

或者,使用 CLI 提交:

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

使用截止日期云任务分块功能,PromptsChunkSize参数的工作方式与 vLLM 批量推理包中的工作方式相同。有关更多信息,请参阅 作业模板的任务分块。该ModelName参数接受扩散器库可以加载的任何内容,包括 SDXL Turbo 和 Stable Diffusion 3.5。有关完整的参数列表和其他模型的设置,请参阅示例 README 中的参数表。 GitHub

下载并浏览图库

下载和浏览结果
  1. 作业完成后,从您在提交时使用的相同目录运行下载命令,这样OutputDir路径就会解析到相同的位置:

    deadline job download-output --job-id job-id
  2. 每个工件都位于您设置的路径的output/子目录下。OutputDir原始的 PNG 已输入output/images/,组合的元数据已输入output/output.jsonl,并且output/gallery.html是一个具有搜索和 CSV 导出功能的静态图库查看器。

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

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

来自 vLLM 批量推断的链

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

  1. 使用 vLLM 批量推理包生成文本:口号、字幕、场景描述或替代文本。输出为每output.jsonl行一个generated_text字段。请参阅使用 vLLM 运行批处理 LLM 推理

  2. (可选)打开tools/prompt_builder.html、放入output.jsonl、添加或编辑每提示字幕、样式或视觉描述,然后重新导出。

  3. 以 JSONL 的身份提交此捆绑包。InputFile每项任务的脚本自动用generated_text作叠加标题。

当一行既有generated_text口号又有原始 LLM 时prompt,任务脚本会尝试将该主题从请求中提取出来,并将其用作扩散模型的视觉提示,因为口号通常过于抽象,无法为模型提供具体的主题。工作人员会记录每个任务的可视提示源,这样你就可以发现错误解压的情况。

清理

为避免持续收费,请清理您为本教程创建的资源:

清理教程资源
  1. 如果您部署了 CUDA 农场 CloudFormation 模板,请从 CloudFormation 控制台中删除 CloudFormation 堆栈。

  2. 如果您使用现有农场并专门为本教程创建了 GPU 队列,请停止或删除该队列。如果您使用的是预先存在的共享队列,请将其保留在原处。

  3. 如果您不再需要本地输出文件,请将其删除。

以下资源提供了其他信息: