Androidonnxfork's picture
Upload folder using huggingface_hub
69c5ed3

中文说明 | English

stable-diffusion-streamlit

1. 简介

  • 使用Streamlit构建一个Web服务,测试使用OnnxRuntime量化压缩后的CompVis/stable-diffusion-v1-4模型做图片生成.
    • Streamlit:
      • 一个流行的开源框架,可以快速搭建机器学习和数据科学团队的Web应用。
    • CompVis/stable-diffusion-v1-4:
      • 一个流行的扩散模型,可以通过文字提示生成栩栩如生的高质量图片。
    • OnnxRuntime:
      • 微软推出的一款推理框架,用户可以非常便利的量化压缩模型。

2. 快速开始

2.1. 部署

  • docker-compose up -d
version: "2.3"
services:
  stable-diffusion-streamlit-onnxquantized:
    container_name: stable-diffusion-streamlit-onnxquantized
    image: lowinli98/stable-diffusion-streamlit-onnxquantized:v0.2
    expose:
      - 8501
    ports:
      - "8501:8501"
    environment:
      - APP_TITLE=Stable Diffusion Streamlit
    restart: always
    volumes:
      - /etc/localtime:/etc/localtime
      - ./volume:/app/pages/model/result

2.2. 使用

3. 模型量化提速表现

  • 服务中使用的模型已经在打镜像阶段就做了OnnxRuntime量化压缩处理,详见:

  • 量化后的模型尺寸降低很多、推理速度提高一点点(UINT8), 同时保持和原模型几乎一样的生成图片质量.

  • 这一点意味着,CompVis/stable-diffusion-v1-4模型可以被部署在大多数家用电脑上,并进行调试。以下是几种模型的比较:


模型 内存 49步推断用时
pytorch 5.2GB 6m56s
onnx 5.0GB 4m34s
onnx-quantized(UINT8) 1.3GB 4m29s
  • CPU:

    • Intel(R) Xeon(R) CPU E5-2650 v3 @ 2.30GHz
    • 10 core
  • PyTorch模型生成的图片

  • Onnx模型生成的图片

  • Onnx-quantized(UINT8)模型生成的图片

4. Streamlit进度条

为了生成高质量图片,扩散模型一般要推断很多步,这会比较耗时。为了提升用户体验,在Streamlit页面做了一个进度条,通过另一个线程,监控推断步数,并更新到进度条中。

5. 下一步

6. 帮助

7. 致谢