lshqqytiger / stable-diffusion-webui-amdgpu

Stable Diffusion web UI
GNU Affero General Public License v3.0
1.8k stars 186 forks source link

[Bug]: Rerunning Olive optimization step on top of already existing optimized model in the ONNX folder results in OS error #271

Closed hisham-hchowdhu closed 7 months ago

hisham-hchowdhu commented 1 year ago

Is there an existing issue for this?

What happened?

@lshqqytiger , one issue i noticed with latest changes if i don't manually delete the existing models (unet specifically) in stable-diffusion-webui-directml\models\ONNX and run the "Download & Optimize..." step from Olive UI, the optimization step fails with error during "saving optimized model" step. could we make sure we can force overwrite with new model or delete the old one before starting this step.

Saving unoptimized models... Error completing request Arguments: ('runwayml/stable-diffusion-v1-5', '', 'vae', 'stable-diffusion-v1-5', 'stable-diffusion-v1-5', True, True, False, True, True, True, True, 768, False, '', '', '') {} Traceback (most recent call last): File "C:\Users\ml-admin\Documents\Hisham\auto1111_olive\stable-diffusion-webui-directml\modules\call_queue.py", line 57, in f res = list(func(*args, kwargs)) File "C:\Users\ml-admin\Documents\Hisham\auto1111_olive\stable-diffusion-webui-directml\modules\call_queue.py", line 36, in f res = func(*args, *kwargs) File "C:\Users\ml-admin\Documents\Hisham\auto1111_olive\stable-diffusion-webui-directml\modules\sd_olive_ui.py", line 55, in optimize_from_onnx optimize(unoptimized_dir, optimized_dir, pipeline, vae_id, vae_subfolder, safety_checker, text_encoder, text_encoder_2, unet, vae_decoder, vae_encoder, use_fp16, sample_size if hw_synced else sample_size[0], sample_size if hw_synced else sample_size[1], olive_merge_lora, olive_merge_lora_inputs) File "C:\Users\ml-admin\Documents\Hisham\auto1111_olive\stable-diffusion-webui-directml\modules\sd_olive_ui.py", line 162, in optimize onnx_pipeline.save_pretrained(unoptimized_dir) File "C:\Users\ml-admin\Documents\Hisham\auto1111_olive\stable-diffusion-webui-directml\venv\lib\site-packages\diffusers\pipelines\pipeline_utils.py", line 655, in save_pretrained save_method(os.path.join(save_directory, pipeline_component_name), save_kwargs) File "C:\Users\ml-admin\Documents\Hisham\auto1111_olive\stable-diffusion-webui-directml\venv\lib\site-packages\diffusers\pipelines\onnx_utils.py", line 130, in save_pretrained self._save_pretrained(save_directory, **kwargs) File "C:\Users\ml-admin\Documents\Hisham\auto1111_olive\stable-diffusion-webui-directml\venv\lib\site-packages\diffusers\pipelines\onnx_utils.py", line 106, in _save_pretrained shutil.copyfile(src_path, dst_path) File "C:\Users\ml-admin\miniconda3\envs\Auto1111_olive\lib\shutil.py", line 256, in copyfile with open(dst, 'wb') as fdst: OSError: [Errno 22] Invalid argument: 'C:\Users\ml-admin\Documents\Hisham\auto1111_olive\stable-diffusion-webui-directml\models\ONNX\stable-diffusion-v1-5\unet\weights.pb'

work around is to delete the folder that had previous optimized onnx model and rerun the optimize olive step

Steps to reproduce the problem

  1. Go to Olive tab->Optimize ONNX Model->model id=stabilityai/stable-diffusion-xl-refiner-1.0->Download and Optimize ONNX Model using Olive
  2. change the model id to something else: stabilityai/stable-diffusion-xl-base-1.0, but dont change the input/output folder name
  3. run "Download and Optimize ONNX "

What should have happened?

old files should have been overwritten by the newly optimized file if the same folder name is used

Sysinfo

sysinfo-2023-09-11-07-20.txt

What browsers do you use to access the UI ?

Microsoft Edge

Console logs

Creating ONNX pipeline...
Saving unoptimized models...
*** Error completing request
*** Arguments: ('stabilityai/stable-diffusion-xl-base-1.0', '', 'vae', 'stable-diffusion-xl', 'stable-diffusion-xl', False, True, False, True, True, True, True, 512, False, '', '', '') {}
    Traceback (most recent call last):
      File "C:\Users\ml-admin\Documents\Hisham\auto1111_olive\stable-diffusion-webui-directml\modules\call_queue.py", line 57, in f
        res = list(func(*args, **kwargs))
      File "C:\Users\ml-admin\Documents\Hisham\auto1111_olive\stable-diffusion-webui-directml\modules\call_queue.py", line 36, in f
        res = func(*args, **kwargs)
      File "C:\Users\ml-admin\Documents\Hisham\auto1111_olive\stable-diffusion-webui-directml\modules\sd_olive_ui.py", line 55, in optimize_from_onnx
        optimize(unoptimized_dir, optimized_dir, pipeline, vae_id, vae_subfolder, safety_checker, text_encoder, text_encoder_2, unet, vae_decoder, vae_encoder, use_fp16, sample_size if hw_synced else sample_size[0], sample_size if hw_synced else sample_size[1], olive_merge_lora, *olive_merge_lora_inputs)
      File "C:\Users\ml-admin\Documents\Hisham\auto1111_olive\stable-diffusion-webui-directml\modules\sd_olive_ui.py", line 162, in optimize
        onnx_pipeline.save_pretrained(unoptimized_dir)
      File "C:\Users\ml-admin\Documents\Hisham\auto1111_olive\stable-diffusion-webui-directml\venv\lib\site-packages\diffusers\pipelines\pipeline_utils.py", line 655, in save_pretrained
        save_method(os.path.join(save_directory, pipeline_component_name), **save_kwargs)
      File "C:\Users\ml-admin\Documents\Hisham\auto1111_olive\stable-diffusion-webui-directml\venv\lib\site-packages\diffusers\pipelines\onnx_utils.py", line 130, in save_pretrained
        self._save_pretrained(save_directory, **kwargs)
      File "C:\Users\ml-admin\Documents\Hisham\auto1111_olive\stable-diffusion-webui-directml\venv\lib\site-packages\diffusers\pipelines\onnx_utils.py", line 106, in _save_pretrained
        shutil.copyfile(src_path, dst_path)
      File "C:\Users\ml-admin\miniconda3\envs\Auto1111_olive\lib\shutil.py", line 256, in copyfile
        with open(dst, 'wb') as fdst:
    OSError: [Errno 22] Invalid argument: 'C:\\Users\\ml-admin\\Documents\\Hisham\\auto1111_olive\\stable-diffusion-webui-directml\\models\\ONNX\\stable-diffusion-xl\\unet\\weights.pb'

Additional information

No response