Skip to content

Commit

Permalink
Implement Olive support.
Browse files Browse the repository at this point in the history
  • Loading branch information
lshqqytiger committed Jun 2, 2023
1 parent 0e4cbeb commit ab1ef3e
Show file tree
Hide file tree
Showing 19 changed files with 1,483 additions and 40 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ __pycache__
/repositories
/venv
/tmp
/cache
/footprints
/model.ckpt
/models/**/*
/GFPGANv1.3.pth
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -185,4 +185,5 @@ Licenses for borrowed code can be found in `Settings -> Licenses` screen, and al
- UniPC sampler - Wenliang Zhao - https://github.com/wl-zhao/UniPC
- TAESD - Ollin Boer Bohan - https://github.com/madebyollin/taesd
- Initial Gradio script - posted on 4chan by an Anonymous user. Thank you Anonymous user.
- Olive - https://github.com/microsoft/Olive
- (You)
94 changes: 94 additions & 0 deletions configs/olive_optimize/config_safety_checker.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
{
"input_model": {
"type": "PyTorchModel",
"config": {
"model_path": "runwayml/stable-diffusion-v1-5",
"model_loader": "safety_checker_load",
"model_script": "modules/sd_olive_scripts.py",
"io_config": {
"input_names": [ "clip_input", "images" ],
"output_names": [ "out_images", "has_nsfw_concepts" ],
"dynamic_axes": {
"clip_input": { "0": "batch", "1": "channels", "2": "height", "3": "width" },
"images": { "0": "batch", "1": "height", "2": "width", "3": "channels" }
}
},
"dummy_inputs_func": "safety_checker_conversion_inputs"
}
},
"systems": {
"local_system": {
"type": "LocalSystem",
"config": {
"accelerators": ["gpu"]
}
}
},
"evaluators": {
"common_evaluator": {
"metrics": [
{
"name": "latency",
"type": "latency",
"sub_types": [{"name": "avg"}],
"user_config": {
"user_script": "modules/sd_olive_scripts.py",
"dataloader_func": "safety_checker_data_loader",
"batch_size": 1
}
}
]
}
},
"passes": {
"convert": {
"type": "OnnxConversion",
"config": {
"target_opset": 14
}
},
"optimize": {
"type": "OrtTransformersOptimization",
"config": {
"model_type": "unet",
"float16": true,
"use_gpu": true,
"keep_io_types": false,
"optimization_options": {
"enable_gelu": true,
"enable_layer_norm": true,
"enable_attention": true,
"use_multi_head_attention": true,
"enable_skip_layer_norm": false,
"enable_embed_layer_norm": true,
"enable_bias_skip_layer_norm": false,
"enable_bias_gelu": true,
"enable_gelu_approximation": false,
"enable_qordered_matmul": false,
"enable_shape_inference": true,
"enable_gemm_fast_gelu": false,
"enable_nhwc_conv": false,
"enable_group_norm": true,
"enable_bias_splitgelu": false,
"enable_packed_qkv": true,
"enable_packed_kv": true,
"enable_bias_add": false
},
"force_fp32_ops": ["RandomNormalLike"]
}
}
},
"engine": {
"search_strategy": {
"execution_order": "joint",
"search_algorithm": "exhaustive"
},
"evaluator": "common_evaluator",
"host": "local_system",
"target": "local_system",
"cache_dir": "cache",
"output_name": "safety_checker",
"output_dir": "footprints",
"execution_providers": ["DmlExecutionProvider"]
}
}
91 changes: 91 additions & 0 deletions configs/olive_optimize/config_text_encoder.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
{
"input_model": {
"type": "PyTorchModel",
"config": {
"model_path": "runwayml/stable-diffusion-v1-5",
"model_loader": "text_encoder_load",
"model_script": "modules/sd_olive_scripts.py",
"io_config": {
"input_names": [ "input_ids" ],
"output_names": [ "last_hidden_state", "pooler_output" ],
"dynamic_axes": { "input_ids": { "0": "batch", "1": "sequence" } }
},
"dummy_inputs_func": "text_encoder_conversion_inputs"
}
},
"systems": {
"local_system": {
"type": "LocalSystem",
"config": {
"accelerators": ["gpu"]
}
}
},
"evaluators": {
"common_evaluator": {
"metrics": [
{
"name": "latency",
"type": "latency",
"sub_types": [{"name": "avg"}],
"user_config": {
"user_script": "modules/sd_olive_scripts.py",
"dataloader_func": "text_encoder_data_loader",
"batch_size": 1
}
}
]
}
},
"passes": {
"convert": {
"type": "OnnxConversion",
"config": {
"target_opset": 14
}
},
"optimize": {
"type": "OrtTransformersOptimization",
"config": {
"model_type": "clip",
"float16": true,
"use_gpu": true,
"keep_io_types": false,
"optimization_options": {
"enable_gelu": true,
"enable_layer_norm": true,
"enable_attention": true,
"use_multi_head_attention": true,
"enable_skip_layer_norm": false,
"enable_embed_layer_norm": true,
"enable_bias_skip_layer_norm": false,
"enable_bias_gelu": true,
"enable_gelu_approximation": false,
"enable_qordered_matmul": false,
"enable_shape_inference": true,
"enable_gemm_fast_gelu": false,
"enable_nhwc_conv": false,
"enable_group_norm": true,
"enable_bias_splitgelu": false,
"enable_packed_qkv": true,
"enable_packed_kv": true,
"enable_bias_add": false
},
"force_fp32_ops": ["RandomNormalLike"]
}
}
},
"engine": {
"search_strategy": {
"execution_order": "joint",
"search_algorithm": "exhaustive"
},
"evaluator": "common_evaluator",
"host": "local_system",
"target": "local_system",
"cache_dir": "cache",
"output_name": "text_encoder",
"output_dir": "footprints",
"execution_providers": ["DmlExecutionProvider"]
}
}
98 changes: 98 additions & 0 deletions configs/olive_optimize/config_unet.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
{
"input_model": {
"type": "PyTorchModel",
"config": {
"model_path": "runwayml/stable-diffusion-v1-5",
"model_loader": "unet_load",
"model_script": "modules/sd_olive_scripts.py",
"io_config": {
"input_names": [ "sample", "timestep", "encoder_hidden_states", "return_dict" ],
"output_names": [ "out_sample" ],
"dynamic_axes": {
"sample": {"0": "unet_sample_batch", "1": "unet_sample_channels", "2": "unet_sample_height", "3": "unet_sample_width"},
"timestep": {"0": "unet_time_batch"},
"encoder_hidden_states": {"0": "unet_hidden_batch", "1": "unet_hidden_sequence"}
}
},
"dummy_inputs_func": "unet_conversion_inputs"
}
},
"systems": {
"local_system": {
"type": "LocalSystem",
"config": {
"accelerators": ["gpu"]
}
}
},
"evaluators": {
"common_evaluator": {
"metrics": [
{
"name": "latency",
"type": "latency",
"sub_types": [{"name": "avg"}],
"user_config": {
"user_script": "modules/sd_olive_scripts.py",
"dataloader_func": "unet_data_loader",
"batch_size": 2
}
}
]
}
},
"passes": {
"convert": {
"type": "OnnxConversion",
"config": {
"target_opset": 14,
"save_as_external_data": true,
"all_tensors_to_one_file": true,
"external_data_name": "weights.pb"
}
},
"optimize": {
"type": "OrtTransformersOptimization",
"config": {
"model_type": "unet",
"float16": true,
"use_gpu": true,
"keep_io_types": false,
"optimization_options": {
"enable_gelu": true,
"enable_layer_norm": true,
"enable_attention": true,
"use_multi_head_attention": true,
"enable_skip_layer_norm": false,
"enable_embed_layer_norm": true,
"enable_bias_skip_layer_norm": false,
"enable_bias_gelu": true,
"enable_gelu_approximation": false,
"enable_qordered_matmul": false,
"enable_shape_inference": true,
"enable_gemm_fast_gelu": false,
"enable_nhwc_conv": false,
"enable_group_norm": true,
"enable_bias_splitgelu": false,
"enable_packed_qkv": true,
"enable_packed_kv": true,
"enable_bias_add": false
},
"force_fp32_ops": ["RandomNormalLike"]
}
}
},
"engine": {
"search_strategy": {
"execution_order": "joint",
"search_algorithm": "exhaustive"
},
"evaluator": "common_evaluator",
"host": "local_system",
"target": "local_system",
"cache_dir": "cache",
"output_name": "unet",
"output_dir": "footprints",
"execution_providers": ["DmlExecutionProvider"]
}
}
91 changes: 91 additions & 0 deletions configs/olive_optimize/config_vae_decoder.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
{
"input_model": {
"type": "PyTorchModel",
"config": {
"model_path": "runwayml/stable-diffusion-v1-5",
"model_loader": "vae_decoder_load",
"model_script": "modules/sd_olive_scripts.py",
"io_config": {
"input_names": [ "latent_sample", "return_dict" ],
"output_names": [ "sample" ],
"dynamic_axes": { "latent_sample": { "0": "batch", "1": "channels", "2": "height", "3": "width" } }
},
"dummy_inputs_func": "vae_decoder_conversion_inputs"
}
},
"systems": {
"local_system": {
"type": "LocalSystem",
"config": {
"accelerators": ["gpu"]
}
}
},
"evaluators": {
"common_evaluator": {
"metrics": [
{
"name": "latency",
"type": "latency",
"sub_types": [{"name": "avg"}],
"user_config": {
"user_script": "modules/sd_olive_scripts.py",
"dataloader_func": "vae_decoder_data_loader",
"batch_size": 1
}
}
]
}
},
"passes": {
"convert": {
"type": "OnnxConversion",
"config": {
"target_opset": 14
}
},
"optimize": {
"type": "OrtTransformersOptimization",
"config": {
"model_type": "vae",
"float16": true,
"use_gpu": true,
"keep_io_types": false,
"optimization_options": {
"enable_gelu": true,
"enable_layer_norm": true,
"enable_attention": true,
"use_multi_head_attention": true,
"enable_skip_layer_norm": false,
"enable_embed_layer_norm": true,
"enable_bias_skip_layer_norm": false,
"enable_bias_gelu": true,
"enable_gelu_approximation": false,
"enable_qordered_matmul": false,
"enable_shape_inference": true,
"enable_gemm_fast_gelu": false,
"enable_nhwc_conv": false,
"enable_group_norm": true,
"enable_bias_splitgelu": false,
"enable_packed_qkv": true,
"enable_packed_kv": true,
"enable_bias_add": false
},
"force_fp32_ops": ["RandomNormalLike"]
}
}
},
"engine": {
"search_strategy": {
"execution_order": "joint",
"search_algorithm": "exhaustive"
},
"evaluator": "common_evaluator",
"host": "local_system",
"target": "local_system",
"cache_dir": "cache",
"output_name": "vae_decoder",
"output_dir": "footprints",
"execution_providers": ["DmlExecutionProvider"]
}
}
Loading

0 comments on commit ab1ef3e

Please sign in to comment.