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

本文涉及的产品
模型训练 PAI-DLC,5000CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,5000CU*H 3个月
简介: 阿里云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)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
6天前
|
人工智能 Serverless API
一键服务化:从魔搭开源模型到OpenAI API服务
在多样化大模型的背后,OpenAI得益于在领域的先发优势,其API接口今天也成为了业界的一个事实标准。
一键服务化:从魔搭开源模型到OpenAI API服务
|
1天前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 08 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
9天前
|
Cloud Native 关系型数据库 Serverless
基于阿里云函数计算(FC)x 云原生 API 网关构建生产级别 LLM Chat 应用方案最佳实践
本文带大家了解一下如何使用阿里云Serverless计算产品函数计算构建生产级别的LLM Chat应用。该最佳实践会指导大家基于开源WebChat组件LobeChat和阿里云函数计算(FC)构建企业生产级别LLM Chat应用。实现同一个WebChat中既可以支持自定义的Agent,也支持基于Ollama部署的开源模型场景。
|
17天前
|
API 开发工具 网络架构
【Azure Developer】如何通过Azure Portal快速获取到对应操作的API并转换为Python代码
【Azure Developer】如何通过Azure Portal快速获取到对应操作的API并转换为Python代码
|
22天前
|
运维 监控 Cloud Native
|
24天前
|
运维 Devops API
阿里云云效操作报错合集之调用api报错:没有权限,是什么原因
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
21天前
|
机器学习/深度学习 存储 缓存
Java本地高性能缓存实践问题之阿里云机器学习团队开源社区的问题如何解决
Java本地高性能缓存实践问题之阿里云机器学习团队开源社区的问题如何解决
|
23天前
|
敏捷开发 测试技术 API
阿里云云效产品使用合集之调用API次数过多导致限流,该怎么办
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
24天前
|
运维 API 开发工具
阿里云云效操作报错合集之在编辑器里api接口调用时,经常报错,是什么原因
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
14天前
|
机器学习/深度学习 算法 数据挖掘
8个常见的机器学习算法的计算复杂度总结
8个常见的机器学习算法的计算复杂度总结
8个常见的机器学习算法的计算复杂度总结

相关产品

  • 人工智能平台 PAI
  • 下一篇
    DDNS