在租用的 GPU 上训练一个 SDXL 或小型 Flux 模型的 LoRA,花费远低于 $10。2026 年 9 月,RTX 4090 在 Vast.ai 上每小时约 $0.31,在 RunPod 上每小时 $0.74,一次 SDXL LoRA 训练连同准备和测试一个多小时。每次尝试 $0.34 到 $0.80,$10 的预算够试十几次。
难的不是钱,而是图片、标注,以及知道什么时候该停。本文把这些都讲到,命令可以直接复制。价格和工具版本均于 2026 年 9 月核实,出处附在文末。
五个步骤
LoRA 是什么,为什么便宜
LoRA(Low-Rank Adaptation,低秩适配)冻结基础模型,只在其中部分层旁边训练两个小矩阵。原始论文报告,与对 GPT-3 175B 做全量微调相比,可训练参数减少了 10,000 倍,显存占用减少到三分之一。图像模型也是同样的道理:SDXL 基础检查点是一个 6.9 GB 的文件,而你训练出的 LoRA 是一个单独的小文件,加载到基础模型上,强度随你调。
所以一块消费级 GPU 就够用,一次训练只要几十分钟,而不是几天。
按显存选 GPU
显存决定你能训练什么,速度决定一次训练要计费多少分钟。所以每小时贵一些的快卡,算到每次训练上,花费可能差不多。
| 模型系列 | 文档给出的最低要求 | 宽裕配置 | 说明 |
|---|---|---|---|
| SD 1.5 | 8 GB | 12 GB 以上 | 在 512x512 下训练,最便宜也最快 |
| SDXL | 8 GB(推荐 10 GB) | 24 GB | 只训练 U-Net,缓存 latent 和文本编码器输出 |
| FLUX.1 [dev](12B) | 8 GB,需大量块交换 | 24 GB | sd-scripts 给出了 24、16、12、10 和 8 GB 的设置 |
| FLUX.2 [klein] 4B/9B | 未说明 | 24 GB | BFL:bf16 权重约 13 GB,LoRA 训练可在 24 GB 以内完成 |
低显存设置能用,但慢。sd-scripts 靠在 GPU 和系统内存之间交换 transformer 块,把 FLUX.1 塞进 8 到 16 GB,而每次交换都要花时间,这些时间都在计费。租机器时,24 GB 显卡是合理的默认选择:RTX 3090 或 4090。RTX 5090(32 GB)也可以,但 sd-scripts 注明它需要 PyTorch 2.8.0 配 CUDA 12.8 或 12.9,所以要确认你的模板里的软件栈够新。

数据中心显卡更快,但 RunPod 上 A100 80 GB 标价每小时 $1.59,是 4090 的两倍多。对于 20 或 30 张图片的 LoRA,多出来的速度很少能抵得上这个差价;它们更适合大数据集或全量微调。
去哪里租,要花多少钱
你需要一个给你整台机器的平台:有 shell 或 Jupyter notebook,有磁盘,能把文件传进传出。这类任务最常见的两个选择是 Vast.ai 和 RunPod。
| GPU | 显存 | Vast.ai(起价) | RunPod 价格页面 | RunPod 最低追踪价 |
|---|---|---|---|---|
| RTX 3090 | 24 GB | 约 $0.11–0.13/小时 | $0.50/小时 | $0.22/小时 |
| RTX 4090 | 24 GB | 约 $0.31–0.33/小时 | $0.74/小时 | $0.34/小时 |
| RTX 5090 | 32 GB | 约 $0.41–0.47/小时 | $0.99/小时 | $0.69/小时 |
价格截至 2026 年 9 月。“Vast.ai(起价)”和“RunPod 最低追踪价”来自 getdeploying.com 的价格追踪;中间一列是 RunPod 自己的价格页面。Vast.ai 的价格由各主机自行设定,你看到的报价会因地区和可靠性评分而不同。
两家都按秒计费。附加费用各不相同,对一个一小时的任务来说,它们比小时价显示的更要紧:
- Vast.ai 对存储的计费是“只要实例存在,无论是否在运行”,带宽按字节收费,价格由各主机设定。在带宽贵的主机上下载一个 7 GB 的基础模型,费用会累积起来。用完要删除实例,不要只是停止。
- RunPod 在运行时对容器磁盘按每 GB 每月 $0.10 收费,停止后不收;已停止的卷磁盘按每 GB 每月 $0.20 收费。数据进出不收费。
两家都有现成的模板。ai-toolkit 的作者维护着一个官方 RunPod 模板,kohya_ss 的 README 也把 RunPod 列为支持的环境。用模板能省下十几分钟在计费时间里装 PyTorch 的功夫。更全面的价格对比见 GPUFlow、Vast.ai、RunPod 与 SaladCloud 对比和 GPU 租用的隐藏成本。
准备数据集和标注
这些都在租机器之前,在你自己的电脑上完成。
图片
- 数量。 一个人物、物体或风格,15 到 40 张。Black Forest Labs 建议 FLUX.2 [klein] 使用“15–40 张风格统一的图片”。多出来的图片如果质量更差,多并不好。
- 一致与多样。 每张图片都要体现这个概念,其余的都应该变化:角度、光线、背景、构图。如果你产品的每张照片都放在同一张白桌子上,LoRA 学到的就是那张桌子。
- 质量。 清晰、曝光正常,没有水印或叠加文字。LoRA 学噪点和 JPEG 色块,跟学其他东西一样认真。
- 分辨率。 SDXL 和 Flux 短边至少 1024 像素,SD 1.5 至少 512。不用裁成正方形:启用分桶后,sd-scripts 会按宽高比给图片分组。
标注
每张图片配一个同名文本文件(photo01.jpg、photo01.txt)。标注告诉模型哪些东西已经用文字说明了,这样 LoRA 学的就是文字没说明的部分。开头放一个少见的触发词,然后描述所有你希望保持可变的内容:
zxq_mug, a ceramic coffee mug on a wooden desk, morning light from the left, shallow depth of field
有两个工具可以帮你写初稿:
-
WD14 tagger,sd-scripts 自带,生成逗号分隔的标签。适合动漫风格模型,以及用标签训练的 SDXL 微调模型:
python finetune/tag_images_by_wd14_tagger.py --onnx \ --repo_id SmilingWolf/wd-swinv2-tagger-v3 --batch_size 4 /workspace/dataset/img -
JoyCaption,一个开源(Apache 2.0)的图片描述模型,专为训练扩散模型而做,写出的是自然语言句子,比标签更适合 Flux。它的 README 说 bf16 下需要约 17 GB 显存,另有 8 位和 4 位版本供小显存显卡使用。
OneTrainer 也内置了自动标注,支持 BLIP、BLIP2 和 WD-1.4。不管初稿是谁写的,每一条标注都要亲自读一遍、改一遍。这是整个项目里最值的半小时。
选择训练工具
四个工具基本能覆盖所有人,全部免费开源。
| 工具 | 界面 | 支持的模型(2026 年 9 月) | 适合 |
|---|---|---|---|
| kohya-ss/sd-scripts | 命令行 | SD 1.x/2.x、SDXL、SD3/3.5、FLUX.1、Lumina、HunyuanImage-2.1、Anima | 可复现的训练,完全掌控 |
| bmaltais/kohya_ss | 基于 sd-scripts 的网页界面 | 与 sd-scripts 相同 | 用 sd-scripts 又不想背参数 |
| Nerogar/OneTrainer | 桌面界面和 CLI | SD 1.5 到 3.5、SDXL、FLUX.1、FLUX.2、Chroma、Qwen Image 等 | 内置自动标注和蒙版 |
| ostris/ai-toolkit | 网页界面和 YAML 配置 | SD 1.5、SDXL、FLUX.1、FLUX.2、Qwen-Image、Wan 视频等 | Flux 和较新的模型,有 RunPod 模板 |
sd-scripts 当前版本为 0.11.1(2026 年 6 月),在 Python 3.10 下测试,需要 PyTorch 2.6.0 或更高版本。ai-toolkit 推荐 Python 3.12,目前安装的是针对 CUDA 13.0 构建的 PyTorch 2.13.0。OneTrainer 需要 Python 3.10 到 3.13。
我训练 SDXL 用 sd-scripts,因为一条命令行就是全部配置,训练很容易重复和比较;训练 Flux 用 ai-toolkit。
用 sd-scripts 训练 SDXL LoRA
在一台装好 NVIDIA 驱动的全新 Linux 实例上,几条命令就能装好:
git clone https://github.com/kohya-ss/sd-scripts.git
cd sd-scripts
python -m venv venv && source venv/bin/activate
pip install torch==2.6.0 torchvision==0.21.0 --index-url https://download.pytorch.org/whl/cu124
pip install --upgrade -r requirements.txt
accelerate config default --mixed_precision bf16
# SDXL base model (not gated, CreativeML Open RAIL++-M license)
hf download stabilityai/stable-diffusion-xl-base-1.0 sd_xl_base_1.0.safetensors \
--local-dir /workspace/models
用 scp、rsync 或平台的文件浏览器,把装有图片和 .txt 标注的文件夹复制到 /workspace/dataset/img。然后在 /workspace/dataset.toml 里描述数据集:
[general]
caption_extension = ".txt"
enable_bucket = true
[[datasets]]
resolution = 1024
batch_size = 1
[[datasets.subsets]]
image_dir = "/workspace/dataset/img"
num_repeats = 10
开始训练:
accelerate launch --num_cpu_threads_per_process 1 sdxl_train_network.py \
--pretrained_model_name_or_path=/workspace/models/sd_xl_base_1.0.safetensors \
--dataset_config=/workspace/dataset.toml \
--output_dir=/workspace/output --output_name=zxq_mug \
--save_model_as=safetensors \
--network_module=networks.lora --network_dim=16 --network_alpha=8 \
--network_train_unet_only \
--optimizer_type=AdamW8bit --learning_rate=1e-4 \
--lr_scheduler=constant_with_warmup --lr_warmup_steps=100 \
--max_train_epochs=8 --save_every_n_epochs=2 \
--mixed_precision=bf16 --save_precision=bf16 \
--cache_latents --cache_latents_to_disk --cache_text_encoder_outputs \
--gradient_checkpointing --sdpa --seed=42 \
--sample_prompts=/workspace/prompts.txt --sample_every_n_epochs=2
prompts.txt 每行一个测试提示词,用 sd-scripts 的行内选项指定尺寸、种子和步数:
zxq_mug, a ceramic coffee mug on a kitchen counter --w 1024 --h 1024 --d 42 --s 28
zxq_mug, a ceramic coffee mug held by a hiker on a mountain top --w 1024 --h 1024 --d 42 --s 28
这些参数的作用
- 步数。 图片数 × 重复次数 × 轮数 ÷ 批大小。25 张图片:25 × 10 × 8 = 2,000 步。
network_dim16,network_alpha8。 LoRA 的容量。一个物体或一张脸,16 足够;风格有时需要 32。秩越高,越容易过拟合,文件也越大。--network_train_unet_only。 这里必须加:sd-scripts 不允许在训练文本编码器的同时缓存其输出,而且它的文档本来就把只训练 U-Net 列为 SDXL LoRA 的“强烈推荐”做法。- 缓存和梯度检查点。 SDXL 能塞进 8 到 10 GB 就靠这两项。缓存还会关闭标注打乱和标注丢弃,所以数据集文件里没有这两项。
learning_rate1e-4 配 AdamW8bit。 这是 sd-scripts 自己的 SDXL LoRA 示例里的值。如果四轮之后样图几乎没变化,试试 2e-4;如果样图变成了训练图片的翻版,就调低学习率或提前停止。- 每 2 轮保存一次检查点。 你会得到第 2、4、6、8 轮的文件,从中挑最好的。最好的 LoRA 往往不是最后一个。
要多长时间
kohya_ss 一个 issue 帖子里,用户报告在 RTX 4090 上以 1024x1024、批大小 1、开启梯度检查点训练 SDXL LoRA,速度约为每秒 1.1 到 1.4 次迭代。按这个速度,2,000 步要 24 到 30 分钟,再加上几分钟缓存 latent。同一个帖子也显示了显卡显存不够、溢出到共享内存时有多糟:每步 50 秒甚至更久。如果你的速度远低于预期范围,先看 nvidia-smi,再去怀疑参数。
用 ai-toolkit 训练 Flux 和更新的模型
训练 Flux,ai-toolkit 是最省事的办法。在租来的机器上:
git clone https://github.com/ostris/ai-toolkit.git
cd ai-toolkit
python3 -m venv venv && source venv/bin/activate
pip3 install --no-cache-dir torch==2.13.0 torchvision==0.28.0 torchaudio==2.11.0 \
--index-url https://download.pytorch.org/whl/cu130
pip3 install -r requirements.txt
cp config/examples/train_lora_flux_24gb.yaml config/zxq_mug.yml
# edit the dataset path, trigger word and steps, then:
python run.py config/zxq_mug.yml
也可以用 cd ui && npm run build_and_start 启动网页界面,打开 8675 端口。如果服务器别人也能访问,先按 README 的建议把 AI_TOOLKIT_AUTH 设为一个密码。
选 Flux 模型之前,关于许可证有两点要知道:
- FLUX.1 [dev] 在 Hugging Face 上需要申请访问。你要接受 FLUX.1 [dev] 非商业许可证,并用 Hugging Face 读取令牌下载。它的模型卡说生成的图片可以商用;但权重和你训练的 LoRA 受非商业许可证约束。
- FLUX.2 [klein] 4B 采用 Apache 2.0 许可证,无需申请。9B 版本使用 FLUX 非商业许可证。
Black Forest Labs 在 2026 年 6 月发布了一份用 ai-toolkit 训练 FLUX.2 [klein] LoRA 的指南:在 RTX 4090 上跑 1,800 步“不到一小时”,并建议查看第 750 到 1,500 步左右的检查点。FLUX.1 [dev] 的大小是 klein 4B 的三倍,我还没找到同样可靠的公开耗时数据;多留些时间预算,第一次训练时自己测一下。
停止付费之前先测试 LoRA
趁机器还在运行,看看每个保存的轮次生成的样图。它们能让你不花额外的钱就知道 LoRA 有没有学会这个概念,以及从什么时候开始过拟合。然后下载你满意的检查点:
rsync -avP user@your-instance:/workspace/output/*.safetensors ./loras/
回到自己的电脑上,把文件放进 ComfyUI 的 models/loras 文件夹或 Forge 的 models/Lora,用固定种子测试:
- 强度。 试 0.6、0.8 和 1.0。有些 LoRA 在低于 1.0 时效果最好。
- 泛化。 把触发词放到训练数据里没有的场景中:山顶上的杯子,油画里的人脸。如果只有在和训练图片相似的场景里才有效,就是过拟合了:换一个更早的轮次,或减少重复次数。
- 泄漏。 不加触发词生成。如果这个概念还是出现了,说明你的标注对图片描述得不够。
效果不对时,问题通常出在数据集上:删掉几张质量差的图片,或者在标注里写明你希望能变化的东西。调学习率是第二步,不是第一步。
成本算例
一个 SDXL LoRA,25 张图片,2,000 步,RTX 4090:
| 步骤 | 时间 |
|---|---|
| 从模板启动,安装 sd-scripts | 10 分钟 |
| 下载 SDXL 基础模型,上传数据集,缓存 | 10 分钟 |
| 训练(2,000 步,每秒 1.1 到 1.4 次迭代) | 30 分钟 |
| 查看样图,下载检查点,删除实例 | 15 分钟 |
| 合计 | 65 分钟(1.08 小时) |
- Vast.ai,每小时 $0.31:1.08 × $0.31 = $0.34,另加存储费和主机的带宽费。
- RunPod,每小时 $0.74:1.08 × $0.74 = $0.80。一块 50 GB 的容器磁盘用一小时,另加 50 × $0.10 ÷ 730 小时,不到 1 美分。
一个 FLUX.2 [klein] LoRA,训练一小时,准备和测试 30 分钟,在 RunPod 上是 1.5 × $0.74 = $1.11,在 Vast.ai 上是 1.5 × $0.31 = $0.47。
真正把 $10 预算花光的很少是训练本身,而是忘了关、跑了一整夜的实例(按每小时 $0.74 算,12 小时就是 $8.88),是停止后仍在交存储费的 Vast.ai 实例,或者是在计费时间里花一小时给图片写标注。按秒计费只有在你用完就删机器时才省钱。
GPUFlow 在其中的位置
这件事它帮不上。GPUFlow 出租的是提供商在自己 GPU 上(通常用 Ollama)运行的语言模型,通过 OpenAI 兼容 API 密钥访问。没有 shell,没有 SSH,也不能访问文件,所以你没法安装训练工具、上传图片或下载 LoRA。而且它提供的是聊天模型,不是图像模型。请在 Vast.ai、RunPod 或类似的出租整台机器的平台上训练。
如果你处理的是文本而不是图片,同样的“租机器、训练、删除”做法也适用于语言模型:见在租用的 GPU 上私密微调 LLM。
资料来源
均于 2026 年 9 月核实。
- LoRA 论文:Hu 等,LoRA: Low-Rank Adaptation of Large Language Models
- sd-scripts:README 和发布版本、SDXL LoRA 训练、SDXL 说明与显存、数据集配置、FLUX.1 LoRA 训练、WD14 tagger
- bmaltais/kohya_ss、Nerogar/OneTrainer、ostris/ai-toolkit、JoyCaption
- SDXL 在 4090 上的速度:kohya_ss issue #1288
- Black Forest Labs:60 分钟内用 LoRA 微调 FLUX.2 [klein],模型卡:FLUX.1 [dev]、FLUX.2 [klein] 4B、FLUX.2 [klein] 9B
- Stable Diffusion XL base 1.0 模型卡
- 价格:RunPod 价格、RunPod pod 价格和存储、Vast.ai 价格,getdeploying.com 上的 RTX 3090、RTX 4090、RTX 5090 和 Vast.ai
- GPUFlow:API 快速入门