From c79689faa1f896c2fe97796c015f64a4788e80e5 Mon Sep 17 00:00:00 2001 From: hymhym4321 Date: Sat, 28 Oct 2023 05:26:20 +0800 Subject: [PATCH] debug fix --- .../stable_diffusion/README.md | 6 +++-- .../stable_diffusion/modify_onnx.py | 24 ++++++++++++++----- .../pipeline_ascend_stable_diffusion.py | 2 +- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/ACL_PyTorch/built-in/foundation_models/stable_diffusion/README.md b/ACL_PyTorch/built-in/foundation_models/stable_diffusion/README.md index 70e465b75e..6d91c67df4 100755 --- a/ACL_PyTorch/built-in/foundation_models/stable_diffusion/README.md +++ b/ACL_PyTorch/built-in/foundation_models/stable_diffusion/README.md @@ -51,8 +51,8 @@ **表 1** 版本配套表 | 配套 | 版本 | 环境准备指导 | | ------------------------------------------------------------ | ------- | ------------------------------------------------------------ | - | 固件与驱动 | 23.0.rc1 | [Pytorch框架推理环境准备](https://www.hiascend.com/document/detail/zh/ModelZoo/pytorchframework/pies) | - | CANN | 6.3.RC1 | - | + | 固件与驱动 | 23.0.rc3 | [Pytorch框架推理环境准备](https://www.hiascend.com/document/detail/zh/ModelZoo/pytorchframework/pies) | + | CANN | 7.0.RC1 | - | | Python | 3.7.5 | - | | @@ -422,6 +422,8 @@ | Duo并行 | 20 | 1.322s | | A2 | 20 | 0.811s | +性能是使用FA后的性能 + 迭代20次的参考精度结果如下: ``` diff --git a/ACL_PyTorch/built-in/foundation_models/stable_diffusion/modify_onnx.py b/ACL_PyTorch/built-in/foundation_models/stable_diffusion/modify_onnx.py index febca9e77c..1900ee7d48 100644 --- a/ACL_PyTorch/built-in/foundation_models/stable_diffusion/modify_onnx.py +++ b/ACL_PyTorch/built-in/foundation_models/stable_diffusion/modify_onnx.py @@ -93,20 +93,32 @@ def change_input_type(model): model.inputs[1], model.inputs[2] = model.inputs[2], model.inputs[1] +def get_index(model, init, name): + if name in init: + return model[name].value + else: + return name + + def replace_slice(model): # find pairs of slice slice_pair = [] for node in model.get_nodes('Slice'): - if node.name[:-2] == '_1': - slice_pair.append((node.name[:-2], node.name)) + if node.name[-2:] == '_1': + slice_pair.append((model[node.name[:-2]], model[node.name])) # replace + init = [n.name for n in model.get_nodes('Initializer')] for pair in slice_pair: - name = pair[0][:-5] + 'Split' + name = pair[0].name[:-5] + 'Split' data = pair[0].inputs[0] - if pair[0].inputs[1] == pair[1].inputs[2]: - outputs = pair[1].outputs + pair[0].outputs - if pair[1].inputs[1] == pair[0].inputs[2]: + start_0 = get_index(model, init, pair[0].inputs[1]) + end_0 = get_index(model, init, pair[0].inputs[2]) + start_1 = get_index(model, init, pair[1].inputs[1]) + end_1 = get_index(model, init, pair[1].inputs[2]) + if start_1 == end_0: outputs = pair[0].outputs + pair[1].outputs + elif start_0 == end_1: + outputs = pair[1].outputs + pair[0].outputs axes = pair[0].inputs[3] axis = model[axes].value[0] model.add_node(name, 'Split', inputs=[data], outputs=outputs, attrs={'axis':axis}) diff --git a/ACL_PyTorch/built-in/foundation_models/stable_diffusion/pipeline_ascend_stable_diffusion.py b/ACL_PyTorch/built-in/foundation_models/stable_diffusion/pipeline_ascend_stable_diffusion.py index d614d105bf..0bd8836920 100644 --- a/ACL_PyTorch/built-in/foundation_models/stable_diffusion/pipeline_ascend_stable_diffusion.py +++ b/ACL_PyTorch/built-in/foundation_models/stable_diffusion/pipeline_ascend_stable_diffusion.py @@ -53,7 +53,7 @@ class AscendStableDiffusionPipeline(StableDiffusionPipeline): truncation=True, return_tensors="pt") text_input_ids = text_inputs.input_ids - untruncated_ids = self.tokenizer(prompt, padding="max_length", return_tensors="pt").input_ids + untruncated_ids = self.tokenizer(prompt, padding="longest", return_tensors="pt").input_ids if not torch.equal(text_input_ids, untruncated_ids): removed_text = self.tokenizer.batch_decode(untruncated_ids[:, self.tokenizer.model_max_length - 1 : -1]) -- Gitee