通过API微调FLUX.1模型的完整技术指南

通过API微调FLUX.1模型

您现在可以使用某平台上的快速FLUX训练器来微调模型了。它速度快(不到2分钟)、成本低(低于2美元),并为您提供一个可运行的温暖模型以及可供下载的LoRA权重。

FLUX.1目前风靡一时,这是有充分理由的。它是一个快速、强大的图像生成模型,易于使用和微调,并能生成令人惊叹的图像。

上周我们带来了使用人脸微调Flux的指南。该指南使用了完全基于网络的工作流程来创建微调后的Flux模型,无需编写任何一行代码。

我们听到一些用户希望使用API来微调Flux,因此本周我们带来了另一个教程,向您展示如何做到这一点。

在本指南中,您将使用某平台的HTTP API以编程方式创建和运行自己的微调Flux模型。

使用某平台的HTTP API以编程方式启动您的Flux训练。

步骤0:先决条件

以下是开始之前需要准备的内容:

  • 一个某平台账户
  • 少量训练图像
  • 约2-3美元的训练预算
  • cURL,这款自20世纪90年代以来就存在的、用于发起HTTP请求的命令行工具

步骤1:收集训练图像

需要一些自己的图像才能开始。
您可以使用少至两张训练图像来微调Flux,但为了获得最佳效果,建议至少使用10张或更多图像。理论上,训练数据中包含的图像越多,得到的结果会持续改善,但添加的图像越多,训练过程可能耗时越长。

收集训练图像时请考虑以下事项:

  • 支持WebP、JPG和PNG格式。
  • 尽可能使用1024x1024或更高分辨率。
  • 文件名不重要。可以随意命名文件。
  • 图像的宽高比可以不同;它们不需要都是正方形、横向或纵向。
  • 10张图像是一个良好的最低标准。

收集好图像后,将它们放入一个zip文件中。假设您将所有图像放在一个名为data的文件夹中,运行以下命令来生成一个名为data.zip的文件:

zip -r data.zip data

步骤2:在环境中设置API令牌

需要API令牌才能向某平台API发出请求。
访问某平台的API令牌页面以创建新的API令牌,然后将其复制到剪贴板。
大多数某平台工具(如客户端库和某平台CLI)遵循的惯例是在名为REPLICATE_API_TOKEN的环境变量中查找API令牌。

在终端中运行以下命令来设置REPLICATE_API_TOKEN环境变量:

export REPLICATE_API_TOKEN="r8_..."

提示: 如果打算使用自己计算机上的cURL命令或代码发出大量API请求,可以考虑在shell配置文件或dotfiles中设置REPLICATE_API_TOKEN环境变量,这样就不必每次打开新终端窗口时都输入它。

步骤3:创建目标模型

接下来,将在某平台上为训练好的模型创建一个空模型。训练完成后,训练结果将作为新版本推送到此模型。
可以在个人账户下创建模型,也可以在一个组织内创建模型,以便与团队或其他协作者共享访问权限。

在某平台上创建模型有几种方法,例如使用某平台Web UI或某平台CLI,但在本指南中,将通过向models.create API端点发起cURL请求来创建模型。

为模型选择一个描述性的名称,例如flux-my-cool-finetuneflux-my-dog-fluffy。Flux模型的一个流行惯例是在名称中包含flux,但这不是必需的。

在终端中运行以下命令来创建模型,请将your-usernameyour-model-name替换为正确的值:

curl -s -X POST \
  -H "Authorization: Bearer $REPLICATE_API_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"owner": "your-username", "name": "your-model-name", "description": "An example model", "visibility": "public", "hardware": "gpu-a40-large"}' \
  https://api.replicate.com/v1/models

步骤4:上传训练数据

接下来需要将zip文件上传到互联网上可公开访问的某个位置,例如S3存储桶或GitHub Pages站点。
也可以使用某平台的Files API来上传训练数据。以下是如何使用cURL执行此操作的示例,假设训练数据文件命名为data.zip

curl -s -X POST "https://api.replicate.com/v1/files" \
  -H "Authorization: Bearer $REPLICATE_API_TOKEN" \
  -H "Content-Type: multipart/form-data" \
  -F "content=@data.zip;type=application/zip;filename=data.zip"

输出将是一个包含已上传文件URL的JSON响应:

{"id":"MThjNTQwOTEtNDJmNS00Mjc2LWIzMTUtMzczMTNmNzYyYTEw","name":"data.zip","content_type":"application/zip","size":1431986,"etag":"9c5b5aa1178bd843722a8cce85ba778b","checksums":{"sha256":"9d0efe1c32d02fd8a0b01af67bea357d7279522aff8b4158a37529abe4713103","md5":"9c5b5aa1178bd843722a8cce85ba778b"},"metadata":{},"created_at":"2024-09-09T20:17:37.031Z","expires_at":"2024-09-10T20:17:37.031Z","urls":{"get":"https://api.replicate.com/v1/files/MThjNTQwOTEtNDJmNS00Mjc2LWIzMTUtMzczMTNmNzYyYTEw"}}

找到该输出中以https://api.replicate.com/v1...开头的URL,并将其复制到剪贴板。将在下一步中将其作为训练过程的输入。

提示: 如果安装了jq命令行JSON处理器,可以一步上传文件并输出URL,如下所示:

curl -s -X POST "https://api.replicate.com/v1/files" \
  -H "Authorization: Bearer $REPLICATE_API_TOKEN" \
  -H "Content-Type: multipart/form-data" \
  -F "content=@data.zip;type=application/zip;filename=data.zip" | jq -r '.urls.get'

步骤5:启动训练过程

现在训练数据已上传到可公开访问的URL,下一步是使用API启动训练过程。
将按训练过程运行的时间(秒)计费。Flux模型的训练在Nvidia H100 GPU硬件上运行,撰写本文时成本为每秒$0.001528。对于一次20分钟的训练(使用大约20张训练图像和1000步时典型),预计需支付约1.85美元。模型训练完成后,可以像使用任何其他某平台模型一样使用API运行它,并且仅按生成图像所需的计算时间计费。

训练过程有许多输入参数,例如训练步数、LoRA秩、学习率等,但只有两个输入需要明确设置:

  • input_images:先前上传的训练数据zip文件的URL。
  • trigger_word:一个唯一的字符串,如CYBRPNK3000,它不是任何语言中的单词或短语。

现在是用cURL发起训练请求的时候了,请将your-usernameyour-model-name替换为正确的值,以及input_imagestrigger_word输入:

curl -X POST \
  -H "Authorization: Bearer $REPLICATE_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
        "destination": "your-username/your-model-name",
        "input": {
            "input_images": "<your-training-data-url>",
            "trigger_word": "<some-unique-string>"
        }
    }' \
  https://api.replicate.com/v1/models/ostris/flux-dev-lora-trainer/versions/d995297071a44dcb72244e6c19462111649ec86a9646c32df56daa7f14801944/trainings

步骤6:检查训练状态

训练过程相当快,但仍需要几分钟。如果使用十张图像和1000步,大约需要20分钟。可以利用这个机会离开电脑,伸展手臂和腿脚,喝点水等。

前往某平台的训练状态页面检查训练状态。完成后,将看到一个类似以下的页面,其中包含在Web上运行模型的选项,以及用于使用API运行模型的不同编程语言的代码片段:
当训练完成时,模型的新版本会自动发布。现在可以在Web上查看和运行新模型,或者使用API。

如果是高级用户,并希望获取训练过程中生成的实际LoRA权重作为产物,可以在训练输出的.output.weights属性中找到它们。以下是如何使用cURL和jq从API获取权重URL的示例:

curl -s \
  -H "Authorization: Bearer $REPLICATE_API_TOKEN" \
  https://api.replicate.com/v1/trainings/b238f3fypdrm00chv87srwwb44 | jq ".output.weights"

# https://replicate.delivery/yhqm/khgdfEhsFfqL5Elzfojdg0nhcwOxHTOafvnOtVVEPPPvWeXyz/trained_model.tar

步骤7:在Web上生成图像

训练过程完成后,模型就可以运行了。最简单的入门方法是在Web上运行它。
唯一需要输入的参数是提示词。其余的可以暂时保持不变。Flux非常擅长遵循长提示词,因此提示词越详细、描述性越强,效果就越好。
务必在提示词中包含trigger_word,以便在生成的图像中激活新训练的概念。在提示词中包含触发词是一种告诉模型“你应该把输出集中在我们训练过的东西上”的方式。假设您有一个以Minecraft电影风格生成图像的模型,触发词是MNCRFTMOV。您的提示词可能是“a MNCRFTMOV film render of a blocky weird toad, minecraft style”。可以尝试不同的提示词,但要始终包含触发词。
在某平台的Web游乐场中运行您的新微调模型。

步骤8:使用API生成图像

Web游乐场是开始试用新模型的好地方,但每次点击生成图像很快就会变得乏味。幸运的是,您的模型也通过API托管在云端,因此可以使用您选择的编程语言从自己的代码中运行它。
运行模型时,会看到不同语言的标签页,如Node.js和Python。这些标签页包含代码片段,向您展示如何构造API调用来复制刚刚在浏览器表单中输入的完全相同输入。

单击Web游乐场中的Node.js标签页以查看API代码:
为方便起见提供的预制API代码片段。
这将显示在自己的环境中运行模型所需的确切设置步骤和代码片段。以下是Node.js代码的简化版本(触发词为ZIKI),供您入门:

import Replicate from "replicate"
const replicate = new Replicate()
const model = "zeke/ziki-flux:dadc276a9062240e68f110ca06521752f334777a94f031feb0ae78ae3edca58e"
const prompt = "ZIKI, an adult man, standing atop Mount Everest at dawn..."
const output = await replicate.run(model, { input: { prompt } })
console.log(output)

步骤9:使用语言模型编写更好的提示词

有时很难从头开始想出一个好的提示词,而使用一个非常简单的提示词,如“ZIKI wearing a turtleneck holiday sweater”不会产生非常有趣的结果。
这就是语言模型发挥作用的地方。以下是一个语言模型提示词示例,可以帮助产生一些有趣的图像生成提示词创意:

Write ten prompts for an image generation model. The prompts should describe a fictitious person named ZIKI in various scenarios. Make sure to use the word ZIKI in all caps in every prompt. Make the prompts highly detailed and interesting, and make them varied in subject matter. Make sure the prompts will generate images that include unobscured facial details. ZIKI is a 43 year old adult male. Include some reference to this in prompt to avoid misrepresenting ZIKI’s  age or gender. Do not allude to ZIKI’s eye color.

这会生成一些有趣的提示词:

  • Close-up of ZIKI, a male street artist in his 40s, spray-painting a vibrant mural on a city wall. His face shows intense concentration, with flecks of paint on his cheeks and forehead. He wears a respirator mask around his neck and a beanie on his head. The partially completed mural is visible behind him.
  • ZIKI, a dapper gentleman spy in his 40s, engaged in a high-stakes poker game in a luxurious Monte Carlo casino. His face betrays no emotion as he studies his cards, one eyebrow slightly raised. He wears a tailored tuxedo and a bow tie, with a martini glass on the table in front of him.
  • ZIKI, a distinguished-looking gentleman in his 40s, conducting a symphony orchestra. His expressive face shows intense concentration as he gestures dramatically with a baton. He wears a crisp tuxedo, and his salt-and-pepper hair is slightly disheveled from his passionate movements.

要开始编写自己的提示词,请查看Meta Llama 3.1 405b,这是一个快速强大的语言模型,可以在某平台的Web上或通过API使用:

import Replicate from "replicate"
const replicate = new Replicate()
const model = "meta/meta-llama-3.1-405b-instruct"
const prompt = "Write ten prompts for an image generation model..."
const output = await replicate.run(model, { input: { prompt } })
console.log(output)

步骤10:根据需要重新训练

如果发现第一次微调的结果没有完全达到预期,可以尝试使用更多的训练步数、更高质量的图像或更多的图像重新进行训练过程。无需每次都创建新模型:可以继续使用现有模型作为目标,每个新的训练完成后都会向其推送为新版本。

步骤11:尽情享受

如果需要灵感,可以查看某平台上的Flux微调作品集,看看其他人创造了什么。
玩得开心,并在X或Discord上与社区分享您的成果。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)或者 我的个人博客 https://blog.qife122.com/
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

公众号二维码

公众号二维码

posted @ 2026-01-07 19:59  CodeShare  阅读(0)  评论(0)    收藏  举报