From ef4f6349725d78fadc3227f5ec7675683c18fdc0 Mon Sep 17 00:00:00 2001 From: sanbuphy Date: Tue, 26 Dec 2023 23:18:30 +0800 Subject: [PATCH] add gradio readme --- ppdiffusers/deploy/README.md | 176 +++++++++++++++++++++++++++++++++-- 1 file changed, 170 insertions(+), 6 deletions(-) diff --git a/ppdiffusers/deploy/README.md b/ppdiffusers/deploy/README.md index a7f51129e..ca9de4933 100644 --- a/ppdiffusers/deploy/README.md +++ b/ppdiffusers/deploy/README.md @@ -1,12 +1,27 @@ # FastDeploy Stable Diffusion 模型高性能部署 **目录** - * [部署模型准备](#部署模型准备) - * [环境依赖](#环境依赖) - * [快速体验](#快速体验) - * [文图生成(Text-to-Image Generation)](#文图生成) - * [文本引导的图像变换(Image-to-Image Text-Guided Generation)](#文本引导的图像变换) - * [文本引导的图像编辑(Text-Guided Image Inpainting)](#文本引导的图像编辑) +- [FastDeploy Stable Diffusion 模型高性能部署](#fastdeploy-stable-diffusion-模型高性能部署) + - [部署模型准备](#部署模型准备) + - [环境依赖](#环境依赖) + - [快速体验](#快速体验) + - [文图生成(Text-to-Image Generation)](#文图生成text-to-image-generation) + - [文本引导的图像变换(Image-to-Image Text-Guided Generation)](#文本引导的图像变换image-to-image-text-guided-generation) + - [文本引导的图像编辑(Text-Guided Image Inpainting)](#文本引导的图像编辑text-guided-image-inpainting) + - [Legacy 版本](#legacy-版本) + - [正式版本](#正式版本) + - [参数说明](#参数说明) +- [Stable Diffusion Gradio demo 部署](#stable-diffusion-gradio-demo-部署) + - [模型准备](#模型准备) + - [环境依赖](#环境依赖-1) + - [快速体验](#快速体验-1) + - [文生图(Text-to-Image Generation)、图生图(Image-to-Image Generation)、文本引导的图像编辑 legacy(Text-Guided Image Inpainting)](#文生图text-to-image-generation图生图image-to-image-generation文本引导的图像编辑-legacytext-guided-image-inpainting) + - [文生图(Text-to-Image Generation)](#文生图text-to-image-generation) + - [图生图(Image-to-Image Generation)](#图生图image-to-image-generation) + - [文本引导的图像编辑 legacy(Text-Guided Image Inpainting)](#文本引导的图像编辑-legacytext-guided-image-inpainting) + - [文本引导的图像编辑(Text-Guided Image Inpainting)](#文本引导的图像编辑text-guided-image-inpainting-1) + - [条件引导的图像生成(Canny ControlNet)](#条件引导的图像生成canny-controlnet) + - [参数说明](#参数说明-1) ⚡️[FastDeploy](https://github.com/PaddlePaddle/FastDeploy)是一款全场景、易用灵活、极致高效的AI推理部署工具,为开发者提供多硬件、多推理引擎后端的部署能力。开发者只需调用一行代码即可随意切换硬件、推理引擎后端。本示例展现如何通过 FastDeploy 将我们 PPDiffusers 训练好的 Stable Diffusion 模型进行多硬件、多推理引擎后端高性能部署。 @@ -184,3 +199,152 @@ python infer.py --model_dir stable-diffusion-v1-5-inpainting/ --scheduler euler- | --hr_resize_width | hiresfix 所要生成的宽度,取值范围 512~768。默认值为 768。| | --hr_resize_height | hiresfix 所要生成的高度,取值范围 512~768。默认值为 768。| | --is_sd2_0 | 是否为sd2.0的模型?默认为 False 。| + +# Stable Diffusion Gradio demo 部署 + +## 模型准备 + +本示例需要使用训练模型导出后的部署模型,可参考[模型导出文档](https://github.com/PaddlePaddle/PaddleMIX/blob/develop/ppdiffusers/deploy/export.md)导出部署模型,或者直接下载已导出的部署模型: + +```sh +wget https://paddlenlp.bj.bcebos.com/models/community/junnyu/fd_trt_model/runwayml_stable-diffusion-v1-5_fd.tar.gz && tar -zxvf runwayml_stable-diffusion-v1-5_fd.tar.gz + +wget https://paddlenlp.bj.bcebos.com/models/community/junnyu/fd_trt_model/stable-diffusion-v1-5-inpainting.tar.gz && tar -zxvf stable-diffusion-v1-5-inpainting.tar.gz + +wget https://paddlenlp.bj.bcebos.com/models/community/junnyu/fd_trt_model/control_sd15_canny.tar.gz && tar -zxvf control_sd15_canny.tar.gz +``` + +其中`runwayml_stable-diffusion-v1-5_fd`模型用于文生图、图生图与文本引导的图像编辑(legacy version)任务,`stable-diffusion-v1-5-inpainting` 模型用于 inpaint 任务,`control_sd15_canny` 模型用于 canny controlnet 任务。 + +## 环境依赖 + +在示例中使用了 FastDeploy 以及 ppdiffusers,需要执行以下命令安装推荐的 Paddle 环境依赖。 + +```sh +python -m pip install paddlepaddle-gpu==2.5.2 -i https://pypi.tuna.tsinghua.edu.cn/simple + +pip install fastdeploy-gpu-python -f https://www.paddlepaddle.org.cn/whl/fastdeploy.html + +pip install https://paddlenlp.bj.bcebos.com/models/community/junnyu/fd_trt_model/ppdiffusers-0.19.3-py3-none-any.whl +``` + +## 快速体验 + +我们经过部署模型准备,可以开始进行 demo 测试(这里需要你有至少15G显存的机器)。本 demo 提供 StableDiffusion 模型支持的三种任务,分别是文本引导与图像引导的图片生成、文字引导的图像编辑(正式版与 legacy 版),条件引导的图像生成(Canny ControlNet)。 + +下面将演示如何指定模型目录、任务参数,运行 `gradio_demo.py` ,完成各项图像变换任务。 + +我们可以通过后缀参数指定任务和运行模型地址,也可以环境变量设定,例子如下: + +```sh +# 通过环境变量指定模型任务 +export model_dir='./runwayml_stable-diffusion-v1-5_fd' +export task_name='text2img_img2img_inpaint_legacy' +python gradio_demo.py +``` + +```sh +# 通过后缀参数指定模型与任务 +python gradio_demo.py --model_dir='./runwayml_stable-diffusion-v1-5_fd' --task_name='text2img_img2img_inpaint_legacy' +``` + +### 文生图(Text-to-Image Generation)、图生图(Image-to-Image Generation)、文本引导的图像编辑 legacy(Text-Guided Image Inpainting) + +准备好模型后,通过下列命令我们可以启动基本任务: + +```sh +python gradio_demo.py --model_dir='./runwayml_stable-diffusion-v1-5_fd' --task_name='text2img_img2img_inpaint_legacy' +``` + +#### 文生图(Text-to-Image Generation) + +将 `Tab` 切换到 `text2img` +输入正向提示语句为 `a photo of an astronaut riding a horse on mars`,`seed` 为 2345, 生成的图片示例如下: + +![image](https://github.com/PaddlePaddle/PaddleMIX/assets/96160062/81663d76-3693-4c07-991f-25bcc260441c) + + +#### 图生图(Image-to-Image Generation) + +将 `Tab` 切换到 `img2img` +基于输入图像,输入正向提示语句为`dog`,`seed` 为 123456, 生成的图片示例如下: + +| input image | output image | +|:-------------------:|:-------------------:| +|![][cat]|![][dog1]| + +[cat]: https://github.com/PaddlePaddle/PaddleMIX/assets/96160062/ac7de478-b987-4f99-9192-6e89d5cdcd55 + +[dog1]: https://github.com/PaddlePaddle/PaddleMIX/assets/96160062/3e4c6882-9738-4b50-9c3f-dc9655b74d04 + + + +#### 文本引导的图像编辑 legacy(Text-Guided Image Inpainting) + +将 `Tab` 切换到 `inpaint_legacy` +基于输入图像,输入正向提示语句为`dog`,生成的图片示例如下: + +| input image | output image | +|:-------------------:|:-------------------:| +|![][cat]|![][dog2]| + +[cat]: https://github.com/PaddlePaddle/PaddleMIX/assets/96160062/ac7de478-b987-4f99-9192-6e89d5cdcd55 + +[dog2]: https://github.com/PaddlePaddle/PaddleMIX/assets/96160062/3dab5db8-c05d-4f7c-9a0b-46fac7bd5f67 + +### 文本引导的图像编辑(Text-Guided Image Inpainting) + + +准备好模型后,通过下列命令我们可以启动文本引导的图像编辑任务: + +```sh +python gradio_demo.py --model_dir='./stable-diffusion-v1-5-inpainting' --task_name='inpaint' +``` + +基于输入图像,输入正向提示语句为`dog`,生成的图片示例如下: + + +| input image | output image | +|:-------------------:|:-------------------:| +|![][cat]|![][dog3]| + +[cat]: https://github.com/PaddlePaddle/PaddleMIX/assets/96160062/ac7de478-b987-4f99-9192-6e89d5cdcd55 + +[dog3]: https://github.com/PaddlePaddle/PaddleMIX/assets/96160062/81459565-ff80-4910-a3ad-6a7278b50526 + + +### 条件引导的图像生成(Canny ControlNet) + + +准备好模型后,通过下列命令我们可以启动条件引导的图像生成任务: + +```sh +python gradio_demo.py --model_dir='./control_sd15_canny' --task_name='controlnet_canny' +``` + +基于输入图像,输入正向提示语句为`dog`,传入图片后会自动提取 mask,设此时的 `seed` 为 2345, `conditioning_scale` 为0.8,生成的图片示例如下: + + +| input image | output image | +|:-------------------:|:-------------------:| +|![][cat]|![][dog4]| + +[cat]: https://github.com/PaddlePaddle/PaddleMIX/assets/96160062/ac7de478-b987-4f99-9192-6e89d5cdcd55 + +[dog4]: https://github.com/PaddlePaddle/PaddleMIX/assets/96160062/da81b589-7e61-4615-b592-8961e335d001 + + +### 参数说明 + +`gradio_demo.py` 除了以上示例的命令行参数,还支持更多命令行参数的设置。展开可查看各命令行参数的说明。 + +| 参数 | 参数说明 | +| --- | --- | +| --model_dir | Diffusion 模型的目录,默认为 "stable-diffusion-v1-5"。 | +| --task_name | 任务名称,可选值为 "text2img_img2img_inpaint_legacy", "inpaint", "controlnet_canny"。默认为 "text2img_img2img_inpaint_legacy"。 | +| --backend | 推理运行时的后端,可选值为 "paddle", "paddle_tensorrt"。默认为 "paddle"。 | +| --use_fp16 | 是否使用 FP16 模式,默认为 True。 | +| --use_bf16 | 是否使用 BF16 模式,默认为 False。 | +| --device_id | 选择的 GPU ID,默认为 0。 | +| --parse_prompt_type | 解析提示类型,可选值为 "raw", "lpw"。默认为 "lpw"。 | +| --is_sd2_0 | 是否为 sd2_0 模型,默认为 False。 |