有奖捉虫:办公协同&微信生态&物联网文档专题 HOT
文档中心 > TI-ONE 训练平台 > 最佳实践 > 一键加速和发布 Stable Diffusion 模型
TI-ONE 模型优化和部署模块已支持加速和部署 Hugging Face stable diffusion 模型,本文将通过一个 demo 讲述如何在 TI-ONE 加速和发布一个 SD 模型。

本文提供4个案例进行演示:
基础 Stable Diffusion 模型推理加速
Stable Diffusion + ControlNet 模型推理加速
Stable Diffusion + 固定 Lora 模型推理加速
Stable Diffusion + Lora 模型动态加速

案例一:基础 Stable Diffusion 模型

第一步:将模型上传到 COS

1. 在任何一个终端运行如下下载命令:
curl 'https://tione-prod-open-1256580188.cos.ap-guangzhou.myqcloud.com/ti-cloud/ti-ems/tiacc-demo-models/hg-stable_diffusion/runwayml-stable-diffusion-v1-5-models.zip' -o runwayml-stable-diffusion-v1-5-models.zip
下载后解压文件,然后将模型包文件夹上传到 COS,推荐使用 COS Browser 客户端工具上传,详细使用方式详见 桌面端使用说明
2. 在客户端工具,进入个人存储桶,将 runwayml-stable-diffusion-v1-5-models 模型文件夹完整上传。


注意
对象存储 COS 为腾讯云的分布式存储服务,计费独立详情请参见 对象存储-计费概述

第二步:注册模型

进入TI-ONE 控制台,进入 模型管理 > 模型仓库,单击 导入模型



选择 导入新模型 > 从 COS导入,模型格式选择 Hugging Face-stable diffusion,运行环境来源选择 内置-stable-diffusion(gpu)



模型来源路径选择第一步中上传的模型文件夹,如下图所示。



完成配置后单击确定,完成模型导入。

第三步:进行模型优化

在模型仓库模块,选择第二步导入的模型,选择 操作 > 优化模型



开始配置优化任务:
填写任务名称
填写 tensor 信息
针对 Stable Diffusion 模型:
input_shapes 样例: shape_str = ['input_0:array.char()', 'input_1:scalar.int32(512)', 'input_2:scalar.int32(512)']
input_shapes 说明:第一个 shape 参数代表输入的 prompt 类型,prompt 为单个string 填 'input_0:array.char()',prompt 为 string 列表填 'input_0[0-{min_batch_id},0-{max_batch_id}]:array.char()'
第二个 shape 参数和第三个 shape 参数指定输出图片的高和宽,可选填,默认与模型配置一致。
当输出图片的高和宽动态变化,需要将第二个和第三个 shape 参数配置 min 和 max,样例: 'input_1:scalar.int32(256, 512)', 'input_2:scalar.int32(384, 512)',代表输出图片高为256~512,宽为384~512。
当前 demo 填写的内容为:input_0:array.char()



优化级别:选择 FP16
部署机型:当前支持 A10、A100,选择 A10。
SD模型专业参数设置 pipeline_kwargs,为 stable diffusion 初始化参数,json 格式:本 demo 填写。
{"safety_checker" : null}



完成配置启动任务后,优化任务会展示在列表,可查看优化进度。



加速完成后,可在列表页看到加速报告,单击优化任务名称后,可查看优化任务详情以及优化报告。




第四步:将加速后的模型保存到模型仓库

若您对加速比满意,可单击优化任务名称,在优化进度模块单击 保存到模型仓库,将优化后的模型保存到模型仓库,单击后,可在模型仓库优化模型列表看到保存后的优化模型。







第五步:部署模型

单击 操作 > 发布在线服务,可以进入服务发布流程。
服务名称:填写服务名称
计费模式:选择您需要的计费模式
模型推理文件:模型服务发布需要上传模型推理文件定义前后处理逻辑,模型推理文件样例请单击下载地址下载,下载后上传,如下图所示;若您需要自定义推理逻辑,可参考 模型推理文件简介和示例 进行自定义。
算力规格:选择12C44GB A10*1
环境变量:为了能够方便的查看模型推理返回结果,我们的推理文件中撰写了相关图片保存的逻辑,需要在启动服务的时候添加以下环境变量进行映射,具体信息如下:
COS_UPLOAD_ENABLE=1
COS_SECRET_ID=COS secret id,在https://console.cloud.tencent.com/cam/capi获取。
COS_SECRET_KEY=COS secret key,在https://console.cloud.tencent.com/cam/capi获取。
COS_BUCKET=cos桶名称
COS_REGION=桶所在地域
COS_FILE_PREFIX=推理生成的图片文件所在的目录




配置完服务后,单击 启动服务 ,开始发布服务。服务启动成功后,可在服务列表查看服务信息。


单击服务名称 > 服务调用,在接口信息页进行服务测试,输入如下请求体:
{"draw_parameters": {"prompt":"a cute dog sleeping with a mushroom"}}
接口信息中输入,单击下方发送请求,即可返回结果。将结果中的图片地址输入浏览器,可查看图片内容。






案例二:Stable Diffusion + ControlNet 模型

第一步:将模型上传到 COS

1. 在任何一个终端运行如下下载命令:
curl 'https://tione-prod-open-1256580188.cos.ap-guangzhou.myqcloud.com/ti-cloud/ti-ems/tiacc-demo-models/hg-stable_diffusion/runwayml-stable-diffusion-v1-5-models-controlnet.zip' -o runwayml-stable-diffusion-v1-5-models-control.zip
下载后解压文件,然后将模型包文件夹上传到 COS,推荐使用 COS Browser 客户端工具上传,详细使用方式详见 桌面端使用说明
2. 在客户端工具,进入个人存储桶,将 runwayml-stable-diffusion-v1-5-models-control 模型文件夹完整上传。



第二步:注册模型

进入TI-ONE 控制台,进入 模型管理 > 模型仓库,单击 导入模型



选择 导入新模型 > 从 COS 导入,模型格式选择 Hugging Face-stable diffusion,运行环境来源选择 内置-stable-diffusion(gpu)



模型来源路径选择第一步中上传的模型文件夹,如下图所示:



完成配置后单击确定,完成模型导入。

第三步:进行模型优化

在模型仓库模块,选择第二步导入的模型,选择 操作 > 优化模型



开始配置优化任务:
填写任务名称
填写 tensor 信息
针对 Stable Diffusion-ControlNet 模型:
input_shapes 样例: shape_str = ['input_0:array.char()', 'input_1:float(1*3*512*512)' 'input_2:scalar.int32(512)', 'input_3:scalar.int32(512)']
input_shapes 说明:第一个 shape 参数代表输入的 prompt 类型,prompt 为单个string 填 'input_0:array.char()',prompt 为 string 列表填 'input_0[0-{min_batch_id},0-{max_batch_id}]:array.char()'
ControlNet 模型第二个输入为图片,根据输出图片所需的分辨率指定,n*c*h*w。
第三个 shape 参数和第四个 shape 参数指定输出图片的高和宽,与第二个参数的图片宽高一致。
当输出图片的高和宽动态变化,需要将第二个、第三个和第四个 shape 参数配置 min 和 max,样例: 'input_1:float(1*3*256*384,1*3*512*512)', 'input_2:scalar.int32(256, 512)', 'input_3:scalar.int32(384, 512)',代表输出图片高为256~512,宽为384~512。
当前demo填写的内容为:
input_0:array.char()
input_1:float(1*3*512*512)
input_2:scalar.int32(512)
input_3:scalar.int32(512)


优化级别:选择 FP16
部署机型:当前支持 A10、A100,选择A10。
SD模型专业参数设置 pipeline_kwargs,为 stable diffusion 初始化参数,json 格式:本 demo 填写。
{"safety_checker" : null}



完成配置启动任务后,优化任务会展示在列表,可查看优化进度。



加速完成后,可在列表页看到加速报告,单击优化任务名称后,可查看优化任务详情以及优化报告。




第四步:将加速后的模型保存到模型仓库

若您对加速比满意,可单击优化任务名称,在优化进度模块单击 保存到模型仓库,将优化后的模型保存到模型仓库,单击后,可在模型仓库优化模型列表看到保存后的优化模型。







第五步:部署模型

单击 操作 > 发布在线服务,可以进入服务发布流程。
服务名称:填写服务名称
计费模式:选择您需要的计费模式
模型推理文件:模型服务发布需要上传模型推理文件定义前后处理逻辑,模型推理文件样例请单击下载地址下载,下载后上传,如下图所示;若您需要自定义推理逻辑,可参考 模型推理文件简介和示例 进行自定义。
算力规格:选择12C44GB A10*1
环境变量:为了能够方便的查看模型推理返回结果,我们的推理文件中撰写了相关图片保存的逻辑,需要在启动服务的时候添加以下环境变量进行映射,具体信息如下:
COS_UPLOAD_ENABLE=1
COS_SECRET_ID=COS secret id,在https://console.cloud.tencent.com/cam/capi 获取。
COS_SECRET_KEY=COS secret key,在https://console.cloud.tencent.com/cam/capi获取。
COS_BUCKET=cos桶名称
COS_REGION=桶所在地域
COS_FILE_PREFIX=推理生成的图片文件所在的目录




配置完服务后,单击 启动服务 ,开始发布服务。服务启动成功后,可在服务列表查看服务信息。


单击服务名称 > 服务调用,在接口信息页进行服务测试,输入如下请求体:
{"draw_parameters": {"prompt": "cartoon style, simple background", "image": "https://demo-1256580188.cos.ap-guangzhou.myqcloud.com/sd-demo/d6d72e7eccd49401beefb0075214835e.jpg"}}

注意:
输入的图片尺寸需要满足模型优化时输入 tensor 设定的宽和高的范围,本案例设置的为:input_1:float(1*3*512*512),因此输入图片尺寸需要为512*512。例如输入图片下载地址为 单击下载



单击下方发送请求,即可返回结果。



将结果中的图片地址输入浏览器,可查看图片内容。





案例三:Stable Diffusion + 固定 Lora 模型

SD + 固定 Lora 模型的推理加速使用路径和案例一以及案例二一致,这里需要特别说明的是在进行模型优化时,lora 模型和基础 sd 模型的路径规范如下,即 lora 模型需要置于 sd 模型子目录中:
├── stable-diffusion-1.5
│ ├── lora
│ ├── feature_extractor
│ ├── ....(其他sd模型子目录)
进行模型优化时,若包含 lora 模型,则需要配置 lora_scale 参数。



其他所有的操作和案例一或者案例二一致。

案例四:Stable Diffusion + Lora 模型动态加载

若您需要 SD 模型推理加速的过程中动态加载不同的 Lora 模型,则需要按照如下使用指引进行模型加速和部署:

第一步:将模型上传到 COS

1. 在任何一个终端运行如下下载命令:
curl 'https://tione-prod-open-1256580188.cos.ap-guangzhou.myqcloud.com/ti-cloud/ti-ems/tiacc-demo-models/hg-stable_diffusion/sd21-with-lora.zip' -o sd21-with-lora.zip
下载后解压文件,然后将模型包文件夹上传到 COS,推荐使用 COS Browser 客户端工具上传,详细使用方式详见 桌面端使用说明
2. 在客户端工具,进入个人存储桶,将sd-dynamic-lora-demo 模型文件夹完整上传。



第二步:注册模型

进入TI-ONE 控制台,进入 模型管理 > 模型仓库,单击 导入模型



选择 导入新模型 > 从 COS 导入,模型格式选择 Hugging Face-stable diffusion(动态加速),运行环境来源选择 内置-stable-diffusion(gpu),您需要选择同时包含 SD 基础模型 + Lora 模型的 COS 路径,由于 Lora 模型支持在服务部署动态加载,您可以配置多个 Lora 模型,在服务部署时通过推理脚本编写服务推理逻辑(后续会有推理脚本示例)




第三步:部署模型

在模型仓库中,选择第二步注册的模型,单击发布在线服务,进入服务新建页面:



1. 在服务新建页面,输入服务名称,默认为开启加速的状态(若需要关闭加速,可以关闭该按钮),同时,您需要上传模型推理文件定义前后处理逻辑,模型推理文件样例请单击下载地址下载,下载后上传,如下图所示;若您需要自定义推理逻辑,可参考 模型推理文件简介和示例 进行自定义。
2. 当前sd动态加速仅支持A10和A100机型进行推理加速,因此您需要在算力规格中选择符合要求的gpu机型。配置完成后单击启动服务。
3. 您可以打开模型热更新,打开后模型路径下的数据将会自动同步到服务本地盘,您可以在模型推理文件中按照业务需求指定模型的调用方式(该功能可以使您在服务不停止的前提下动态更新lora模型



4. 配置完服务后,单击 启动服务 ,开始发布服务。服务启动成功后,可在服务列表查看服务信息。



5. 单击 服务名称 > 服务调用,在接口信息页进行服务测试,输入如下请求体:
{
"lora_model": "lora-library/lora-dreambooth-sample-dog",
"draw_parameters": {
"prompt": "a photo of a sksdog in a bucket",
"num_inference_steps": 50,
"cross_attention_kwargs": {
"scale": 1
}
}
}
获得推理结果:



更换 lora 模型,输入:
{
"lora_model": "lora-library/dragon-ball-wufan",
"draw_parameters": {
"prompt": "a photo of a sksdog in a bucket",
"num_inference_steps": 50,
"cross_attention_kwargs": {
"scale": 1
}
}
}
获得推理结果:




FAQ

SD 推理加速服务支持的参数有哪些

SD 推理服务 HTTP 请求默认可支持传入的参数如下:

非动态 Lora 优化:支持 prompt, height, width, num inference steps, negative_prompt, num_images_per_prompt。
动态更新 Lora 加速:支持 prompt, height, width, num inference steps, guidance_scale, negative_prompt, num_images_per_prompt, callback_steps, cross_attention_kwargs。

除了上述服务可直接传入的参数外,部分参数需要修改模型推理文件来支持,例如 generator, latents, prompt_embeds, negative_prompt_embeds, output_type (需改脚本支持, 不改脚本传入此参数会导致服务异常), return_dict(需改脚本支持, 不改脚本传入此参数会导致服务异常), callback。

不在上述清单中的参数暂未验证,正常情况下均可使用,如在使用中遇到问题,可提交工单联系平台工程师。

SD 推理的时候服务超时怎么办

在部分场景下,例如图片尺寸较大,steps 参数值较大,会出现推理超时的情况,如下图所示,此时您可以调小图片尺寸或者修改 steps 参数,或者您也可通过工单联系我们,工程同学会针对您的具体业务场景打通内网私有连接解决超时问题。




当前 SD 推理加速支持的 SD 模型和 Lora 模型类型有哪些

当前支持 Hugging Face Diffusers 生态中的模型。

SD 推理加速支持的机型有哪些

推理加速当前推荐部署机型A10、A100。