pipeline应用准备
当前迁移路径是从ONNX模型转换到MindIR模型,再用MindSpore Lite做推理, 所以迁移前需要用户先准备好自己的ONNX pipeline。下文以官方开源的图生图的Stable Diffusion v1.5的onnx pipeline代码为例进行说明。
- 进入容器环境,创建自己的工作目录,由于在Snt9B裸金属服务器环境配置指南的配置环境步骤中,在启动容器时将物理机的home目录挂载到容器的“/home_host”目录下,该目录可以直接使用上传到物理机“home”目录下的文件。本文中,将基于容器的“/home_host”目录创建工作目录:
mkdir -p /home_host/work cd /home_host/work
- 在迁移onnx pipeline前,首先需要确保原始的onnx pipeline能在昇腾机器的ARM CPU上正常执行。进入容器环境后,安装依赖包。
pip install torch==1.11.0 onnx transformers==4.27.4 accelerate onnxruntime diffusers==0.11.1
- 下载git lfs,用于下载git仓中的大文件。由于欧拉源上没有git-lfs包,所以需要从压缩包中解压使用,在浏览器中输入如下地址下载git-lfs压缩包并上传到服务器的/home目录。
https://github.com/git-lfs/git-lfs/releases/download/v3.2.0/git-lfs-linux-arm64-v3.2.0.tar.gz
- 安装git lfs:
tar -zxvf git-lfs-linux-arm64-v3.2.0.tar.gz cd git-lfs-3.2.0 sh install.sh rm -rf git-lfs-linux-arm64-v3.2.0.tar.gz git-lfs-3.2.0
- 通过git下载sd pytorch模型。
该模型用于获取模型shape,也可以转换生成onnx模型。后文中的modelarts-ascend仓库已经给出了模型shape,可以直接使用,onnx模型也可以单独下载。
# git clone sd模型 git lfs install mkdir -p /home_host/work/runwayml cd /home_host/work/runwayml git clone https://huggingface.co/runwayml/stable-diffusion-v1-5/ -b main # 将下载的文件夹重命名,以便后续脚本中引用 mv stable-diffusion-v1-5 pytorch_models
这里由于Huggingface网站的限制以及模型文件的大小原因,很可能会下载失败。可以进到Huggingface网站,从浏览器下载模型后,再手动上传到物理机/home/pytorch_models目录下。
- 通过git下载sd onnx模型。
# git clone sd模型 git lfs install cd /home_host/work/runwayml git clone https://huggingface.co/runwayml/stable-diffusion-v1-5 -b onnx # 将下载的文件夹重命名,以便后续脚本中引用 mv stable-diffusion-v1-5 onnx_models
这里由于Huggingface网站的限制以及模型文件的大小原因,很可能会下载失败。可以进到Huggingface网站,从浏览器下载模型后,再手动上传到物理机/home/onnx_models目录下。
- 下载好模型后,需要编写推理脚本。为了便于讲解,本指导中所需的代码已发布在ModelArts代码仓,可以使用如下命令下载推理脚本样例代码:
cd /home_host/work git clone https://gitee.com/ModelArts/modelarts-ascend.git ll modelarts-ascend/examples/AIGC/stable_diffusion
代码目录如下图所示,onnx_pipeline.py是图生图推理脚本。mslite_pipeline.py、mslite_model_proxy.py、pipeline_onnx_stable_diffusion_img2img_mslite.py是迁移后的文件,其中mslite_model_proxy.py是代理模型类,pipeline_onnx_stable_diffusion_img2img_mslite.py是从Stable Diffusion源码中的pipeline复制并修改的,这些文件在后续的章节中会使用并做进一步讲解。
图1 代码目录
- 将“modelarts-ascend/examples/AIGC/stable_diffusion/onnx_pipeline.py”文件中的“onnx_model_path”改为步骤6中下载的onnx_models地址“/home_host/work/runwayml/onnx_models”。执行推理脚本进行测试,这里使用的推理硬件是CPU,由于CPU执行较慢,验证待迁移的代码可能需要大约15分钟左右才能完成:
cd modelarts-ascend/examples/AIGC/stable_diffusion # 必须执行该命令,否则会报错找不到sketch-mountains-input.jpg python onnx_pipeline.py
生成的图片fantasy_landscape.png会保存在当前路径下,该图片也可以作为后期精度校验的一个对比。图2 生成图片