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 70e465b75e07dcbb7d398ab4a0c5a11229be0047..6d91c67df43b93e362f37e3f656f1d54facd8476 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 febca9e77c56345d29ea7242bb430ea17b3dd649..1900ee7d48be4fe82b7d82a170467b9321637dd1 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 d614d105bfdd2fc3211491392c7a4a12bf1cf344..0bd88369209929da09e7df778b201744f9873735 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])