在 Xinference 中部署与调用 stable-diffusion-xl-inpainting:基于 diffusers 的局部重绘(Inpainting)推理实战

在 Xinference 中部署与调用 stable-diffusion-xl-inpainting:基于 diffusers 的局部重绘(Inpainting)推理实战 在 Xinference 中部署与调用 stable-diffusion-xl-inpainting基于 diffusers 的局部重绘Inpainting推理实战【免费下载链接】inferenceSwap GPT for any LLM by changing a single line of code. Xinference lets you run open-source, speech, and multimodal models on cloud, on-prem, or your laptop — all through one unified, production-ready inference API.项目地址: https://gitcode.com/GitHub_Trending/in/inference本篇技术指南聚焦 Xinference 内置图像模型stable-diffusion-xl-inpainting完整介绍它的模型规格、xinference launch一键启动方式、OpenAI 兼容的/v1/images/inpainting图像修复接口以及 Python 客户端与 SD WebUI 兼容层的调用方法。读完本文你将能够在本仓库对应版本的 Xinference 环境中完成该模型的部署、掩码图像mask驱动的局部重绘推理并理解其在 diffusers 引擎下的底层加载与参数处理机制。模型概览stable-diffusion-xl-inpainting 的核心属性根据 模型文档该内置模型的规格如下属性值Model Namestable-diffusion-xl-inpaintingModel Familystable_diffusionAbilitiesinpaintingAvailable ControlNetNoneModel IDdiffusers/stable-diffusion-xl-1.0-inpainting-0.1对应地内置图像模型规格文件 中记录了该模型的完整注册信息可补充以下细节Model Family / Enginemodel_family为stable_diffusion运行在 diffusers 引擎之上能力声明model_ability仅包含[inpainting]即它是一个纯局部重绘专用模型不提供 text2image、image2image 能力模型来源仅配置了 HuggingFace 源model_id为diffusers/stable-diffusion-xl-1.0-inpainting-0.1并固定了精确的model_revision115134f363124c53c7d878647567d04daf26e41e保证拉取的权重可复现运行环境声明了独立 virtualenv 依赖#diffusers_dependencies#、transformers4.51.0、系统级 torch 与 numpy且no_build_isolation: true启动时会按需解析并准备运行环境。该模型被收录于 内置图像模型索引与stable-diffusion-inpainting、stable-diffusion-2-inpainting等其他内置重绘模型并列同属 Xinference 的图像模型体系。一键启动模型与文档一致只需一条命令即可完成启动xinference launch --model-name stable-diffusion-xl-inpainting --model-type image关键点说明--model-type image表示以图像模型类型加载区别于 LLM 的--model-type llm首次启动时Xinference 会按规格文件中的model_revision从 HuggingFace 拉取diffusers/stable-diffusion-xl-1.0-inpainting-0.1权重到本地缓存目录从 stable_diffusion 核心实现 可以看到由于该模型的model_ability只有inpainting加载时会直接使用 diffusers 的AutoPipelineForInpainting构建修复管线若模型同时具备 text2image/image2image 能力则会按AutoPipelineForText2Image加载并在调用时动态切换到对应管线。启动后可通过xinference list查看运行中的模型实例及其 UID后续所有推理请求都需要用到该 UID未显式指定时默认与 model name 相同。底层加载原理diffusers 管线与运行配置阅读 stable_diffusion/core.py 的 load 方法可以理解该模型在服务端的实际装配过程管线选择仅含inpainting能力时使用AutoPipelineForInpainting.from_pretrained加载权重AutoPipelineModel.from_pretrained(model_path, **kwargs)精度设置非 macOS 平台默认以torch.float16加载macOS 上会跳过该项以避免崩溃同时会自动检测并使用 safetensors 权重core.py#L387-L393多卡调度当检测到多张 GPU 且未显式指定device_map时会强制设置device_mapbalanced以平衡显存占用core.py#L422-L430可选量化/加速支持对 transformer 进行量化并可通过deepcache参数启用 DeepCache 推理加速core.py#L489-L492。此外测试代码中有一条值得注意的注释——test_stable_diffusion.py#L341 中test_restful_api_for_sd_inpainting用例被标记为跳过原因是Stable diffusion inpainting requires too many GRAM。这提示基于扩散模型的重绘推理对显存要求较高生产部署前应结合目标硬件评估显存余量。调用图像修复OpenAI 兼容 REST API该模型的能力通过 REST API 暴露。路由注册位于 images.py将POST /v1/images/inpainting映射到 restful_api.py 的 create_inpainting。请求字段接口采用multipart/form-data编码各字段含义如下字段类型必填说明modelstring是模型 UID即启动时指定的名称imagefile是待修复的原图application/octet-streammask_imagefile是掩码图。白色像素区域会被重绘黑色像素区域被保留约定见 restful_client.py 文档字符串promptstring/list否引导修复的提示词negative_promptstring/list否负向提示词guidance_scale小于 1 时被忽略nint否每个 prompt 生成的图片数量默认 1范围 110sizestring否输出尺寸格式宽*高不传时默认取原图尺寸服务端自动计算见 restful_api.py#L2646-L2648response_formatstring否url默认或b64_jsonkwargsstring否JSON 字符串透传给 diffusers 管线的附加参数如num_inference_steps、guidance_scale、seed、scheduler、sampler_name等curl 请求示例curl -X POST http://host:port/v1/images/inpainting \ -F modelstable-diffusion-xl-inpainting \ -F imageinput.png;typeapplication/octet-stream \ -F mask_imagemask.png;typeapplication/octet-stream \ -F prompta cozy sofa in a modern living room, high quality \ -F negative_promptblurry, low quality \ -F n1 \ -F response_formaturl响应结构无论url还是b64_json响应均为ImageList结构包含created时间戳与data数组每个元素含url本地文件路径或b64_jsonBase64 编码的 PNG/JPEG 数据。具体实现见 handle_image_resulturl模式下结果被保存到 Xinference 管理的图像目录并返回文件路径b64_json模式下直接返回 Base64 字符串。使用 Python 客户端调用Xinference 提供了同步与异步两套客户端方法签名一致。同步客户端实现位于 restful_client.py 的 inpainting 方法异步版本见 async_restful_client.py。两者都会将参数编码为 multipart 表单并 POST 到/v1/images/inpainting。典型调用示例from xinference.client import Client client Client(http://localhost:9997) # 启动模型等价于命令行 xinference launch model_uid client.launch_model( model_namestable-diffusion-xl-inpainting, model_typeimage, ) model client.get_model(model_uid) # 读取图像为二进制 with open(input.png, rb) as f: image_bytes f.read() with open(mask.png, rb) as f: mask_bytes f.read() # 局部重绘推理 result model.inpainting( promptdesert, clear sky, white clouds, imageimage_bytes, mask_imagemask_bytes, num_inference_steps10, # 透传给 diffusers 管线的附加参数 negative_promptblurry, low quality, ) # 输出图片保存位置url 模式 print(result[data][0][url])仓库中的集成测试 test_restful_api_for_sd_inpainting 给出了同样的调用范式使用stable-diffusion-2-inpainting验证并断言生成图片的尺寸与原图一致——局部重绘在默认不指定size时不会改变输出分辨率。高级参数与实现细节深入 stable_diffusion/core.py 的 inpainting 方法可以了解服务端对参数的处理逻辑能力校验若模型model_ability中不含inpainting会直接抛出RuntimeErrormask_blur可通过该参数对掩码做高斯模糊调用model.mask_processor.blur用于软化重绘边界、减少修补痕迹size解析默认1024*1024支持宽*高格式通过正则切分后映射为width/heightre.split(r[^\d], size)padding_image_to_multiple某些模型如 SD3 系要求图像宽高为 16 的倍数该参数会先对图像与掩码做 padding推理完成后在 _call_model 中按origin_size裁剪回原始尺寸随机性与采样seed/subseed会转换为torch.Generator列表以支持多图生成支持scheduler与sampler_name选择采样器内置SAMPLING_METHODS列表见 core.py#L54-L71包含 Euler、DPM 系列、LMS 等guidance_scale透传至管线若显式传null会被移除兼容不接受该参数的管线。SD WebUI 兼容层img2img mask 自动路由到 inpainting对于习惯 SD WebUI 生态的用户Xinference 还提供了 SDAPI 兼容实现关键逻辑在 sdapi.py#L210-L216当img2img请求携带mask参数时请求会被自动路由到self.inpainting方法inpainting_mask_invert参数可对掩码取反ImageOps.invert实现重绘保留区域的反向语义掩码在 create_binary_mask 中被转为单通道灰度图RGBA 图像会优先使用其 Alpha 通道生成二值掩码完整参数集还包括mask_blur、resize_mode、denoising_strength默认 0.75、steps、cfg_scale默认 7.0等sdapi.py#L243-L287其中steps/cfg_scale/denoising_strength会被映射为 diffusers 管线的num_inference_steps/guidance_scale/strength。注意事项与适用前提ControlNet 不可用官方规格明确标注该模型Available ControlNet: None如需结构引导类重绘请选择支持 ControlNet 的模型显存开销较高扩散模型重绘对显存要求高相关测试因此被跳过建议在具备充足显存的 GPU 上运行必要时可借助device_map与量化参数降低占用掩码语义掩码中白色像素对应待重绘区域黑色像素保留掩码与图像应具有相同尺寸版本与来源本文所有行为与配置均基于当前仓库Xinference内置模型注册信息权重固定拉取 HuggingFace 上的diffusers/stable-diffusion-xl-1.0-inpainting-0.1及对应 revision输出尺寸默认输出与原图等尺寸如需修改请通过size宽*高显式指定。【免费下载链接】inferenceSwap GPT for any LLM by changing a single line of code. Xinference lets you run open-source, speech, and multimodal models on cloud, on-prem, or your laptop — all through one unified, production-ready inference API.项目地址: https://gitcode.com/GitHub_Trending/in/inference创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考