Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

【Hackathon 5th】fastdeploy版的sd15模型添加gradio界面 #311

Merged
merged 13 commits into from
Dec 27, 2023
178 changes: 172 additions & 6 deletions ppdiffusers/deploy/README.md
Original file line number Diff line number Diff line change
@@ -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 模型进行多硬件、多推理引擎后端高性能部署。

Expand Down Expand Up @@ -184,3 +199,154 @@ 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.4-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'
```

请注意,没有指定 `--backend paddle_tensorrt` 的时候默认运行的是 paddle 后端,如果你想使用 tensorrt 加速请显式指定对应参数。

### 文生图(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。 |
Loading