diff --git a/api/onnx_web/convert/diffusion/diffusers.py b/api/onnx_web/convert/diffusion/diffusers.py index fb331334..84bb034d 100644 --- a/api/onnx_web/convert/diffusion/diffusers.py +++ b/api/onnx_web/convert/diffusion/diffusers.py @@ -65,7 +65,7 @@ def onnx_export( ) if half: - logger.info("converting model to FP16 internally: %s", output_file) + logger.info("converting model to fp16 internally: %s", output_file) infer_shapes_path(output_file) base_model = load_model(output_file) opt_model = convert_float_to_float16( @@ -99,6 +99,7 @@ def convert_diffusion_diffusers( dtype = torch.float32 # torch.float16 if ctx.half else torch.float32 dest_path = path.join(ctx.model_path, name) + model_index = path.join(dest_path, "model_index.json") # diffusers go into a directory rather than .onnx file logger.info( @@ -108,7 +109,7 @@ def convert_diffusion_diffusers( if single_vae: logger.info("converting model with single VAE") - if path.exists(dest_path): + if path.exists(dest_path) and path.exists(model_index): logger.info("ONNX model already exists, skipping") return diff --git a/api/onnx_web/convert/diffusion/original.py b/api/onnx_web/convert/diffusion/original.py index 8833806e..a05a67e5 100644 --- a/api/onnx_web/convert/diffusion/original.py +++ b/api/onnx_web/convert/diffusion/original.py @@ -1667,20 +1667,22 @@ def convert_diffusion_original( name = model["name"] source = source or model["source"] - dest = os.path.join(ctx.model_path, name) + dest_path = os.path.join(ctx.model_path, name) + dest_index = os.path.join(dest_path, "model_index.json") logger.info( - "converting original Diffusers checkpoint %s: %s -> %s", name, source, dest + "converting original Diffusers checkpoint %s: %s -> %s", name, source, dest_path ) - if os.path.exists(dest): + if os.path.exists(dest_path) and os.path.exists(dest_index): logger.info("ONNX pipeline already exists, skipping") return torch_name = name + "-torch" torch_path = os.path.join(ctx.cache_path, torch_name) working_name = os.path.join(ctx.cache_path, torch_name, "working") + model_index = os.path.join(working_name, "model_index.json") - if os.path.exists(torch_path): + if os.path.exists(torch_path) and os.path.exists(model_index): logger.info("torch pipeline already exists, reusing: %s", torch_path) else: logger.info( diff --git a/api/onnx_web/convert/diffusion/textual_inversion.py b/api/onnx_web/convert/diffusion/textual_inversion.py index 90ec28bc..df91181e 100644 --- a/api/onnx_web/convert/diffusion/textual_inversion.py +++ b/api/onnx_web/convert/diffusion/textual_inversion.py @@ -26,11 +26,15 @@ def convert_diffusion_textual_inversion( "converting Textual Inversion: %s + %s -> %s", base_model, inversion, dest_path ) - if path.exists(dest_path): + encoder_path = path.join(dest_path, "text_encoder") + encoder_model = path.join(encoder_path, "model.onnx") + tokenizer_path = path.join(dest_path, "tokenizer") + + if path.exists(dest_path) and path.exists(encoder_model) and path.exists(tokenizer_path): logger.info("ONNX model already exists, skipping.") return - makedirs(path.join(dest_path, "text_encoder"), exist_ok=True) + makedirs(encoder_path, exist_ok=True) if format == "concept": embeds_file = hf_hub_download(repo_id=inversion, filename="learned_embeds.bin") @@ -112,14 +116,14 @@ def convert_diffusion_textual_inversion( ) logger.info("saving tokenizer for textual inversion") - tokenizer.save_pretrained(path.join(dest_path, "tokenizer")) + tokenizer.save_pretrained(tokenizer_path) logger.info("saving text encoder for textual inversion") export( text_encoder, # casting to torch.int32 until the CLIP fix is released: https://github.com/huggingface/transformers/pull/18515/files (text_input.input_ids.to(dtype=torch.int32)), - f=path.join(dest_path, "text_encoder", "model.onnx"), + f=encoder_model, input_names=["input_ids"], output_names=["last_hidden_state", "pooler_output"], dynamic_axes={