阿里云PAI-Stable Diffusion开源代码浅析之(一)所有api的入参如何看

本文涉及的产品
交互式建模 PAI-DSW,每月250计算时 3个月
模型训练 PAI-DLC,100CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
简介: 阿里云PAI-Stable Diffusion开源代码浅析之所有api的入参如何看

1. 需求

PAI基于开源Stable-Diffusion做了eas的封装,客户想用API版本做内部业务的调用,需要该API的所有参数的接口文档。

这里衍生一下类似的问题应该如何找到API的所有可用的入参(接口文档)。

现状及话术:pai-eas-sd模型额外支持的参数,类似的最佳实践都是基于开源来做的,可以让客户根据eas的配置json中的启动命令,参考开源的github来找源码分析所有可用的入参,pai在这个基础上做了额外的封装,额外支持的参数可以参考上述文档。

2. pai-eas-sd实例类型

image.png

image.png

3. 开源sd的api入参分析

看一下API版本的脚本启动命令:

"script": "./webui.sh --listen --port 8000 --skip-version-check --no-hashing --no-download-sd-model --skip-prepare-environment --api-log --time-log --nowebui"

结合github上的源码:https://github.com/AUTOMATIC1111/stable-diffusion-webui

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git

我们找到webui.py的入口,main方法中cmd_opts接收了shell脚本的后面的入参,cmd_opts具体的实现在

modules.cmd_args.py

image.png

可以直接从这个parser对象中找到指定参数的含义,上面命令中API版本和WEBUI版本比较关键的差异就是参数 --nowebui,根据代码的判断结果在指定了该参数后会调用 api_only的方法

image.png

api_only方法中主要是通过python的FastAPI框架搭建起来的服务端,其中create_api方法中封装的主要是这个类:

from modules.api.api import Api

image.png

从这个类的init方法我们可以看出,这个类接受两个参数,第一个是FastAPI的类app,第二个看着是队列相关的,可以暂时不深究。类中的add_api_route方法做了一层封装,将不同的path,endpoint注册到app中,除了两个核心的参数之外还有比较常见的参数,接受POST还是GET方法,以及响应体的数据类。

image.png

image.png

这里我们主要以文生图的模型为例,即text to image,对应的path是/sdapi/v1/txt2img,我们通过endpoint绑定的方法可以看到这个path在这个服务中的handler为text2imgapi方法,那接下来我们只需要看这个方法的入参即可找到这个API的所有可用参数。

image.png

StableDiffusionTxt2ImgProcessingAPI的构造方法:

image.png

PydanticModelGenerator类的入参和部分逻辑:

merge_class_params获取了入参的这个个类及其所有父类__init__方法的参数

并通过列表推导式的方式将参数通过ModelDef封装并添加到数组容器_model_def中

除此之外还有additional_fields,应该是额外的一些配置,通过遍历的方式也添加到数组容器_model_def中

image.png

所以我们需要重点关心StableDiffusionProcessingTxt2Img以及它除object之外所有父类的参数都有哪些,通过点击跳转我们就可以看到如下的参数,基本都可以和webui上对上,通过json的方式传递到api来调整推理即可。

image.png

4. 阿里云PAI-eas-API额外支持的参数

https://help.aliyun.com/zh/pai/use-cases/deploy-stable-diffusion-api-service-with-pai-eas?spm=a2c4g.11174283.0.i2#1c133de448x5k

相关实践学习
使用PAI-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
3月前
|
JSON 安全 Java
什么是用于REST API的JWT Bearer令牌以及如何通过代码和工具进行调试
在Web开发中,保护REST API至关重要,而JSON Web令牌(JWT)特别是JWT Bearer令牌,是一种高效方法。它通过紧凑、自包含的结构实现安全信息交换,提升用户体验。本文探讨JWT Bearer的基本概念、结构与实现,包括在Java中的应用步骤,以及使用Apipost和cURL进行测试的方法。JWT优势明显:无状态、互操作性强,适用于分布式系统。掌握JWT Bearer,可助开发者构建更安全、高效的API解决方案。
|
3月前
|
人工智能 JSON API
0代码将存量 API 适配 MCP 协议
本文主要讲述通过 Nacos+Higress 的方案实现0代码改造将 Agent 连接到存量应用,能够显著降低存量应用的改造成本。
704 44
0代码将存量 API 适配 MCP 协议
|
2月前
|
PyTorch 调度 算法框架/工具
阿里云PAI-DLC任务Pytorch launch_agent Socket Timeout问题源码分析
DLC任务Pytorch launch_agent Socket Timeout问题源码分析与解决方案
139 18
阿里云PAI-DLC任务Pytorch launch_agent Socket Timeout问题源码分析
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
阿里云人工智能平台 PAI 开源 EasyDistill 框架助力大语言模型轻松瘦身
本文介绍了阿里云人工智能平台 PAI 推出的开源工具包 EasyDistill。随着大语言模型的复杂性和规模增长,它们面临计算需求和训练成本的障碍。知识蒸馏旨在不显著降低性能的前提下,将大模型转化为更小、更高效的版本以降低训练和推理成本。EasyDistill 框架简化了知识蒸馏过程,其具备多种功能模块,包括数据合成、基础和进阶蒸馏训练。通过数据合成,丰富训练集的多样性;基础和进阶蒸馏训练则涵盖黑盒和白盒知识转移策略、强化学习及偏好优化,从而提升小模型的性能。
|
2月前
|
人工智能 API 开发者
狂揽7.5k星!这款开源API网关彻底解放开发者:一键聚合GPT-4、Suno、Midjourney,还能在线充值!
New API 是一款基于 One API 二次开发的 AI 模型接口管理与分发系统,支持多种大模型(如 GPT-4、Suno、Midjourney 等)统一封装为 OpenAI 格式接口调用。其核心功能包括多模型统一网关、企业级权限管控、“推理力度”分级、无魔法访问全球 AI 服务、灵活计费体系及开发者友好设计。技术架构采用 Golang + Gin 框架,支持高并发低延迟,适用于企业内部 AI 中台、多模型 SaaS 平台、学术研究协作及个人开发者工具等场景。项目开源地址:https://github.com/kingbug/new-api。
370 6
|
2月前
|
缓存 并行计算 测试技术
阿里云PAI-全模态模型Qwen2.5-Omni-7B推理浅试
阿里云PAI-全模态模型Qwen2.5-Omni-7B推理浅试
420 12
|
3月前
|
人工智能 API 开发工具
GitHub官方开源MCP服务!GitHub MCP Server:无缝集成GitHub API,实现Git流程完全自动化
GitHub MCP Server是基于Model Context Protocol的服务器工具,提供与GitHub API的无缝集成,支持自动化处理问题、Pull Request和仓库管理等功能。
770 2
GitHub官方开源MCP服务!GitHub MCP Server:无缝集成GitHub API,实现Git流程完全自动化
|
3月前
|
安全 Java API
什么是用于 REST API 的 Bearer Token以及如何通过代码和工具进行调试
Bearer Token 是一种基于 OAuth 2.0 的身份验证机制,广泛应用于 REST API 的授权访问中。它通过在 HTTP 请求头中传递令牌,确保用户凭据安全传输并验证。本文深入解析了 Bearer Token 的概念、实现步骤及调试方法,包括其无状态特性、灵活性与安全性优势。同时,提供了 Java 实现示例和使用 Apipost、cURL 等工具测试的实践指导,帮助开发者掌握这一核心技能,保障 API 系统的安全与高效运行。
|
3月前
|
人工智能 自然语言处理 运维
Qwen3 全尺寸模型支持通过阿里云PAI-ModelGallery 一键部署
Qwen3 是 Qwen 系列最新一代的大语言模型,提供了一系列密集(Dense)和混合专家(MOE)模型。目前,PAI 已经支持 Qwen3 全系列模型一键部署,用户可以通过 PAI-Model Gallery 快速开箱!
|
4月前
|
JavaScript 前端开发 API
JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)
array.map()可以用来数据转换、创建派生数组、应用函数、链式调用、异步数据流处理、复杂API请求梳理、提供DOM操作、用来搜索和过滤等,比for好用太多了,主要是写法简单,并且非常直观,并且能提升代码的可读性,也就提升了Long Term代码的可维护性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

热门文章

最新文章

相关产品

  • 人工智能平台 PAI