总览
这篇提供了4个案例:
·基础 Stable Diffusion 模型推理加速
·Stable Diffusion + ControlNet 模型推理加速
·Stable Diffusion + 固定 Lora 模型推理加速
·Stable Diffusion + Lora 模型动态加速
前置要求
你需先开通 对象存储 业务,后续所有操作均要在对象存储中存储模型。
操作步骤
二、第一步:将模型上传到 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,在 ttps://console.cloud.tencent.com/cam/capi获取。
COS_BUCKET=COS 桶名称
COS_REGION=桶所在地域
COS_FILE_PREFIX=推理生成的图片文件所在的目录
配置完服务后,单击 启动服务 ,开始发布服务。服务启动成功后,可在服务列表查看服务信息。
单击服务名称 > 服务调用,在接口信息页进行服务测试,输入如下请求体:
{"draw_parameters": {"prompt":"a cute dog sleeping with a mushroom"}}
在接口信息中输入,单击下方发送请求,即可返回结果。将结果中的图片地址输入浏览器,可查看图片内容。
八、第一步:将模型上传到 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=推理生成的图片文件所在的目录
配置完服务后,单击 启动服务 ,开始发布服务。服务启动成功后,可在服务列表查看服务信息。
请先在 COS 中上传一张 .jpg 样本图片,给定其 URL 为<url>。单击服务名称 > 服务调用,在接口信息页进行服务测试,输入如下请求体:
{"draw_parameters": {"prompt": "cartoon style, simple background", "image": "<url>"}}
请将上述代码中的<url>替换为图片实际的 URL。
注意:输入的图片尺寸需要满足模型优化时输入 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 } }}
获得推理结果:
资源要求
推荐使用以下机型部署推理服务:
·8C32GB T4*1
·28C116GB A10*1
注意事项
十八、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 参数,或者你也可通过工单联系我们,工程同学会针对你的具体业务场景打通内网私有连接解决超时问题。
20、当前 SD 推理加速支持的 SD 模型和 Lora 模型类型有哪些
当前支持 Hugging Face Diffusers 生态中的模型。
21、SD 推理加速支持的机型有哪些
推理加速当前推荐部署机型 A10、A100。