
# pipeline应用准备
当前迁移路径是从ONNX模型转换到MindIR模型，再用MindSpore Lite做推理， 所以迁移前需要用户先准备好自己的ONNX pipeline。下文以官方开源的图生图的Stable Diffusion v1.5的onnx pipeline代码为例进行说明。
1. 进入容器环境，创建自己的工作目录。 
   由于在[Snt9B裸金属服务器环境配置指南](https://support.huaweicloud.com/resmgmt-modelarts/usermanual-server-0011.html)的配置环境步骤中，在启动容器时将物理机的home目录挂载到容器的"/home_host"目录下，该目录可以直接使用上传到物理机"home"目录下的文件。本文中，将基于容器的"/home_host"目录创建工作目录。
   ```
   mkdir -p /home_host/work
   cd /home_host/work
   ```
   
   
2. 在迁移onnx pipeline前，首先需要确保原始的onnx pipeline能在昇腾机器的ARM CPU上正常执行。进入容器环境后，安装依赖包。 
   ```
   pip install torch==1.11.0 onnx transformers==4.27.4 accelerate onnxruntime diffusers==0.11.1
   ```
   
   
3. 下载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
   ```
   
   
4. 安装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
   ```
   
   
5. 通过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/stable-diffusion-v1-5/stable-diffusion-v1-5 -b main
   # 将下载的文件夹重命名，以便后续脚本中引用。
   mv stable-diffusion-v1-5 pytorch_models
   ```
   ![](https://support.huaweicloud.com/bestpractice-modelarts/public_sys-resources/note_3.0-zh-cn.png)
   此处由于Huggingface网站的限制以及模型文件的大小原因，很可能会下载失败。您可以登录[Huggingface网站](https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5)，从浏览器下载模型后，再手动上传到物理机/home/pytorch_models目录下。
   
   
6. 通过git下载sd onnx模型。
   
   ```
   # git clone sd模型。
   git lfs install
   cd /home_host/work/runwayml
   git clone https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5 -b onnx
   # 将下载的文件夹重命名，以便后续脚本中引用。
   mv stable-diffusion-v1-5 onnx_models
   ```
   ![](https://support.huaweicloud.com/bestpractice-modelarts/public_sys-resources/note_3.0-zh-cn.png)
   此处由于Huggingface网站的限制以及模型文件的大小原因，很可能会下载失败。您可以登录[Huggingface网站](https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5)，从浏览器下载模型后，再手动上传到物理机/home/onnx_models目录下。
   
   
7. 下载好模型后，需要编写推理脚本。为了便于操作，本指导中所需的代码已发布在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代码目录   
   ![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000001731835756.png)
   
   
8. 将"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生成图片   
   ![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000001778914925.png "点击放大")
   
   
 
