FEATURED · 精选文章

自制角色模型本地部署指南:从WebUI加载到API批量生成

发布时间 / 2026/8/31 8:02:17
来源 / 创域科博编辑部
栏目 / 资讯中心
自制角色模型本地部署指南:从WebUI加载到API批量生成 这次来分享一个自制角色模型项目。我自己训练了一个叫“艾莉”的角色人物模型并把它接入本地 Stable Diffusion WebUI / ComfyUI 里做效果预览。整个流程最值得关注的不只是“训练”而是模型训练完之后的落地链路模型文件转换、目录放置、前端加载、批量出图、API 调用每一步都可能踩坑。对多数玩家来说自制角色模型最容易卡住的三个点模型文件格式不对导致加载失败、触发词写不对导致角色特征出不来、显存不够导致出图中途断掉。这篇文章按“环境检查 - 启动服务 - 加载模型 - 功能测试 - API 批量调用”的顺序给出一套可以直接复制的本地预览方案文末还会补上常见报错排查表。如果你正准备把自己训练的模型跑起来预览效果或是想把自制模型接入自己的工具链这篇可以直接收藏。1. 核心能力速览先给一张规格表快速确认这个项目适不适合你。能力项说明项目类型自制角色模型本地部署与效果预览模型格式safetensors / ckpt可放置为 LoRA 或 Checkpoint前端工具Stable Diffusion WebUI / ComfyUI 均可运行方式本地启动 Web 服务浏览器访问操作页核心功能角色一致性出图、多姿态多服装测试、批量生成、接口调用硬件门槛建议 NVIDIA 显卡显存 6G 起步具体取决于基础模型显存需求参考SD 1.5 系6G 可跑SDXL建议 8G 以上Flux 系列需要更高显存接口能力WebUI 提供 txt2img / img2img APIComfyUI 提供 /prompt 接口批量任务支持脚本批量生成推荐控制并发数防止显存溢出适用场景角色设定预览、素材预研、模型效果回归测试这里要特别说明显存区间是通用经验值不是硬性指标。实际占用会受基础模型、分辨率、采样步数、batch size 影响建议以本机实测为准。2. 适用场景与使用边界2.1 适合谁用自制角色模型的本地预览流程最合适的用户有三类。第一类是自己训练过 LoRA 或 Checkpoint 的玩家。训练完成后光看训练集缩略图很难判断模型到底学到了什么特征必须拉到出图工具里用不同提示词、不同场景、不同随机种子跑一遍才能知道模型泛化能力强不强。第二类是角色概念设计师和插画创作者。做角色设定时需要快速试发型、服装、背景、光影本地部署可以让灵感不中断也不需要每次出图都消耗云端额度。第三类是开发者和模型集成工程师。模型效果稳定之后往往要接入批量生成流程或第三方工具这个时候 API 调用能力比界面好不好看更重要。2.2 使用边界与合规提醒自制角色模型不是没有边界。如果你的“艾莉”参考了某个游戏、动画、影视作品里的既有角色训练素材和生成结果都涉及版权素材。个人学习、非公开测试一般问题不大但要公开发布模型文件或商用生成图必须确认版权授权。肖像权同理如果数据集中包含真人照片发布前必须获得当事人授权。另外模型生成结果并不稳定角色特征可能出现漂移不适合作为严格一致性的生产管线。更稳妥的做法是把本地预览当作“初筛”确定可用后再进入精细后期。3. 环境准备与前置条件3.1 硬件与系统自制模型预览的核心负载在显卡。建议使用 NVIDIA 显卡并安装好对应版本的显卡驱动。AMD 显卡和纯 CPU 环境不是不能跑但出图速度会明显下降尤其 SDXL 之后就建议不要指望 CPU 出高清图了。系统方面Windows 11 和 Ubuntu 20.04 以上都是常见选择。如果你的机器显存只有 4G建议从 SD 1.5 系 LoRA 开始测试图像分辨率控制在 512x512 附近。3.2 软件依赖无论用 WebUI 还是 ComfyUI都要保证以下基础依赖存在# 推荐使用 Python 3.10 或 3.11 python --version # 检查 NVIDIA 驱动 nvidia-smi如果需要搭建训练环境还需要 PyTorch 与 CUDA。安装时注意 PyTorch 版本要和本机 CUDA 版本匹配最简单的方式是到 PyTorch 官网用生成的命令安装pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121实际 CUDA 版本号需要按你本机驱动能力调整可以先执行nvidia-smi看右上角支持的 CUDA 版本。3.3 目录结构规划模型预览项目不要什么都堆在桌面。推荐按下面的目录结构组织ai-model-preview/ ├── models/ │ ├── checkpoints/ # 完整模型文件 │ ├── loras/ # LoRA 模型文件 │ └── vae/ # VAE 文件 ├── inputs/ # 测试输入图片 ├── outputs/ # 生成结果 ├── scripts/ # 批量脚本 └── logs/ # 运行日志这样做的目的是让模型文件、输入素材、输出结果各归其位后续做批量测试和接口调用时不容易混乱。4. 本地部署与启动方式4.1 方案 AStable Diffusion WebUI如果你追求操作直观选 WebUI 最省心。拉取项目并启动git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git cd stable-diffusion-webui # Windows 使用 ./webui-user.bat # Linux / macOS 使用 ./webui.sh启动完成后浏览器访问http://127.0.0.1:7860。然后把训练好的模型文件复制到目录LoRA 模型models/Lora/ellie.safetensorsCheckpoint 模型models/Stable-diffusion/ellie.safetensors复制完成后到页面的模型下拉框里找到对应模型名切换后即可生效。如果下拉框里看不到新模型点击旁边的刷新按钮。4.2 方案 BComfyUIComfyUI 更适合工作流自动化界面是节点式的第一次上手会有点门槛但后续做批量会更顺畅。git clone https://github.com/comfyanonymous/ComfyUI.git cd ComfyUI # 安装依赖 pip install -r requirements.txt # 启动服务 python main.py --listen 127.0.0.1 --port 8188ComfyUI 的模型目录稍有不同LoRA 模型models/loras/ellie.safetensorsCheckpoint 模型models/checkpoints/ellie.safetensors浏览器访问http://127.0.0.1:8188加载默认工作流后把模型切换成ellie.safetensors再把 LoRA 节点加入链路就可以开始预览。4.3 端口冲突处理启动时如果遇到端口被占用常见情况是上一次服务没关干净或者 7860 / 8188 被其他程序占用。Windows 下可以这样查netstat -ano | findstr 7860查到 PID 后在任务管理器里结束对应进程或者直接换端口重新启动python main.py --port 78615. 功能测试与效果验证模型加载完成后先不要急着放大图。按照下面几个维度逐项测试每一步都能明确判断模型是否正常。5.1 文生图基础测试测试目的确认模型能正常出图角色特征是否出现。输入示例Prompt: ellie, 1girl, solo, standing, casual clothes, detailed face, soft lighting Negative Prompt: lowres, bad anatomy, bad hands, extra fingers, blurry这里的ellie是示例触发词。如果你训练时用了别的触发词需要换成你自己的。参数建议参数建议值采样步数20-30采样器Euler a / DPM 2M Karras分辨率与训练集接近若训练是 512 则先保持 512CFG Scale7 左右随机种子固定一个种子方便对比批量数量1判断标准能正常生成图片没有黑图、绿图。图中人物的面部特征、发色、服装风格与训练集一致。负面提示词生效手指、五官没有明显变形。如果角色特征完全出不来优先检查触发词是否写对、LoRA 权重是否拉到合适大小。WebUI 里可以在 Prompt 中写lora:ellie:0.8ComfyUI 里通过 LoRA 节点的 strength 控制。5.2 图生图测试测试目的验证模型对参考图的响应能力为后续换装、换背景做准备。在 WebUI 切到img2img上传一张测试图输入同样的触发词把重绘幅度设为 0.4-0.6。ellie, different background, city street, sunset预期结果是人物的脸部特征尽量保持背景按提示词变化。如果脸部被过度重绘适当降低 Denoising strength如果背景不够贴近提示再微调到 0.55 附近。ComfyUI 里对应的是Load Image节点接到KSampler的latent输入重绘幅度同样由denoise参数控制。5.3 角色一致性回归测试自制模型最怕“同一个角色每次生成长得都不一样”。回归测试的推荐做法是固定提示词使用多个随机种子各生成一组图观察特征稳定性。我常用的测试脚本思路是循环生成多张图并保存到单独目录。这里给一个基于 WebUI API 的 Python 示例import requests import base64 import os api_url http://127.0.0.1:7860/sdapi/v1/txt2img output_dir ./outputs/ellie_test os.makedirs(output_dir, exist_okTrue) for seed in range(10): payload { prompt: ellie, 1girl, solo, portrait, detailed face, negative_prompt: lowres, bad anatomy, bad hands, steps: 25, width: 512, height: 512, cfg_scale: 7, seed: seed, batch_size: 1, } response requests.post(api_url, jsonpayload, timeout120) data response.json() for idx, img_b64 in enumerate(data[images]): img_data base64.b64decode(img_b64) file_path os.path.join(output_dir, fseed_{seed}_{idx}.png) with open(file_path, wb) as f: f.write(img_data) print(生成完成)跑完之后逐张看图重点看五官位置、发型、瞳孔颜色是否一致。出现一到两张崩脸是正常的如果超过一半都不像同一个角色说明模型训练不到位或者触发词权重需要调整。5.4 不同采样器和步数对比模型对采样器不敏感但同一个模型配不同步数出图细节差异会比较明显。建议做一组步数对比steps: 10 / 20 / 30 / 40固定提示词、固定种子只改步数。看 10 步是否糊20 步是否够用40 步是否过拟合。这一步对后续批量生成很有参考价值找到“效果稳定且耗时最少的步数”可以显著节省时间。6. 接口 API 与批量任务本地服务启动后不仅仅是浏览器里点按钮还可以通过 HTTP 接口调用。这对开发者来说比界面操作更有意义。6.1 WebUI API 调用示例WebUI 默认启用 API 服务入口是http://127.0.0.1:7860/sdapi/v1/txt2img。用 curl 测试curl -X POST http://127.0.0.1:7860/sdapi/v1/txt2img \ -H Content-Type: application/json \ -d { prompt: ellie, 1girl, standing, city street, negative_prompt: blurry, bad hands, steps: 25, width: 512, height: 512 }返回结果是 JSON里面images字段是 Base64 编码的图片数组用 Python 解码即可保存。图生图接口是http://127.0.0.1:7860/sdapi/v1/img2img请求体需要在init_images字段传 Base64 图片。6.2 ComfyUI API 调用思路ComfyUI 的 API 和 WebUI 思路不同。它需要先加载工作流 JSON再把工作流里的 Prompt 提交到/prompt接口。一个极简调用思路import json import requests # 假设你已经导出了工作流 JSON 并改好节点参数 with open(workflow_api.json, r, encodingutf-8) as f: workflow json.load(f) response requests.post( http://127.0.0.1:8188/prompt, json{prompt: workflow}, timeout120 ) print(response.json())ComfyUI 的 API 返回的是任务 ID生成结束后需要轮询/history/{prompt_id}获取结果图片。这个流程稍弯一点但胜在可以完全脱离界面跑批量任务。6.3 批量任务设计批量任务最容易出的问题是显存溢出。建议遵守以下原则优先使用batch_size1通过循环控制数量。不要并发打太多请求建议串行或限制最多 2 个并发。输出文件按时间戳分目录避免文件名冲突。每次请求记录日志处理失败重试。一个带失败重试的批量脚本片段import time import requests def generate_with_retry(payload, retries3): for attempt in range(retries): try: response requests.post(api_url, jsonpayload, timeout120) if response.status_code 200: return response.json() except requests.exceptions.RequestException as e: print(f第 {attempt 1} 次失败{e}) time.sleep(5) raise RuntimeError(多次重试后仍然失败)批量任务跑起来后观察日志和输出目录确认每一张图都正常落盘。7. 资源占用与性能观察7.1 怎么看显存占用生成时用nvidia-smi实时观察nvidia-smi -l 2-l 2表示每 2 秒刷新一次。也可以看 WebUI / ComfyUI 自带的日志输出里面通常会有生成耗时。显存占用主要看三块基础模型加载占用模型越大占用越高。推理过程临时占用分辨率、步数、batch size 越大占用越高。VAE 解码和图像后处理占用。如果你连续跑大图出现CUDA out of memory最简单的处理是降低 batch size而不是直接换显卡。7.2 CPU 推理与 GPU 推理差异CPU 推理能跑但速度差距会非常明显。以 SD 1.5 系模型 512x512、20 步为例GPU 通常只要几秒CPU 可能要几分钟甚至更久。所以本地预览阶段优先保 GPU。如果显存不够可以尝试使用 fp16 / 半精度加载模型。开启显存优化选项WebUI 里对应--medvram或--lowvram。降低分辨率先用 512 测试确认效果再放大。减少 batch size改成逐张生成。7.3 分辨率、步数、批量数对性能的影响从实际经验看分辨率对显存的影响最大512x512 升到 1024x1024显存占用往往会翻倍甚至更多。步数主要影响耗时对显存影响相对小。批量数则是显存和耗时同时放大。所以调优顺序建议是先固定分辨率为训练分辨率再调步数确认画质稳定最后测试批量和并发。8. 常见问题与排查方法问题现象可能原因排查方式解决方案模型加载后页面看不到新模型文件放错目录或没有刷新检查模型文件路径刷新模型下拉框把模型放到对应目录重启服务生成图片全黑或全绿VAE 缺失或模型文件损坏查看控制台是否有 VAE 报错下载匹配的 VAE 文件放入 models/VAE角色特征完全不像触发词错误、LoRA 权重过低确认训练时使用的触发词调整 LoRA 权重正确写触发词合理调整 strength出图手指崩坏基础模型能力限制降低 CFG开启 ADetailer 局部重绘使用面部/手部修复插件或提升步数CUDA out of memory显存不足或 batch size 过大用 nvidia-smi 观察显存占用降低分辨率、batch size开启显存优化API 请求超时高分辨率或复杂模型耗时过长查看服务端日志提高 timeout或先降低分辨率端口被占用上次服务未退出或端口冲突netstat 查找端口占用进程结束占用进程或更换端口批量任务中途卡住并发过高或单次请求异常查看日志定位卡住的任务减少并发增加失败重试机制模型文件识别为损坏下载不完整或格式不匹配用 hash 校验文件完整性重新下载确认是 safetensors 格式遇到问题先看控制台日志别急着换模型。多数部署问题都会在日志里留下明确报错定位到一行错误信息再搜索解决方案效率会高很多。9. 最佳实践与使用建议9.1 第一次先跑最小配置第一次加载模型时先用 512x512、20 步、batch size 1跑通整条链路。哪怕图质量一般先把“加载 - 生成 - 保存”跑通后面再逐步加参数。这样能避免把环境问题和模型质量问题混在一起排查。9.2 保存一套最小可运行配置把测试稳定的一组配置记录下来。包括基础模型、采样器、步数、CFG、触发词、负面提示词。下次换电脑或者重新部署时可以快速复现。9.3 统一管理模型与输出模型文件、输入素材、输出结果分目录管理前面已经提过。批量任务更要给输出文件加时间戳或任务名前缀否则生成数量一多文件名全无规律后期整理非常痛苦。9.4 批量任务必须加日志批量跑图前先确认脚本里有日志输出。遇到失败能定位到是哪个种子、哪条提示词、哪一次请求出的问题。没日志的批量任务就像是没有断点调试的代码出了问题只能从头再来。9.5 接口服务要限制访问范围本地 API 服务默认监听127.0.0.1只允许本机访问。如果一定要在局域网内访问需要显式指定--listen 0.0.0.0但这时要注意网络安全不要把服务直接暴露到公网。9.6 发布前做效果复核如果你准备用自制模型生成公开作品生成结果要逐张复核不能直接拿初筛图发布。AI 生成图的局部细节可能会骗过第一眼放大检查眼睛、手部、文字区域这些高风险位置。10. 总结与下一步这个自制“艾莉”模型预览项目最值得尝试的地方是把训练产物真正拉到了可用状态。模型文件能不能被 WebUI 加载、触发词写得对不对、在批量任务里能不能稳定重复这些问题只有真跑一遍才能发现。如果你刚拿到自己训练的模型最先验证两件事触发词在文生图里是否生效固定种子下多次生成的角色特征是否稳定。这两步通过再谈接入 API 和批量生产。容易踩的坑也集中在这几个位置模型文件放错目录、VAE 缺失导致黑图、批量并发太高把显存打爆。按文章里的排查表基本能定位到八成问题。下一步可以继续做的方向包括把模型接入 ComfyUI 工作流用多节点做自动换装把 API 封装成自己的批量出图工具接入定时任务或者把多组提示词做 A/B 对比进一步筛选最优出图参数。建议先收藏这份流程等你把模型放到本地、跑出第一批图之后再回头看排查表会更容易理解每一步的意义。
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻