Skip to content

Commit de7c1a8

Browse files
committed
Export hybrid StableDiffusion models via optimum-cli
1 parent 894334d commit de7c1a8

File tree

3 files changed

+50
-1
lines changed

3 files changed

+50
-1
lines changed

optimum/commands/export/openvino.py

+11
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,16 @@ def parse_args_openvino(parser: "ArgumentParser"):
104104
default=None,
105105
help=("The group size to use for quantization. Recommended value is 128 and -1 uses per-column quantization."),
106106
)
107+
optional_group.add_argument(
108+
"--dataset",
109+
type=str,
110+
default=None,
111+
help=(
112+
"The dataset used for data-aware compression or quantization with NNCF. "
113+
"You can use the one from the list ['wikitext2','c4','c4-new','ptb','ptb-new'] for LLLMs "
114+
"or ['conceptual_captions','laion/220k-GPT4Vision-captions-from-LIVIS','laion/filtered-wit'] for diffusion models."
115+
),
116+
)
107117
optional_group.add_argument(
108118
"--disable-stateful",
109119
action="store_true",
@@ -187,6 +197,7 @@ def run(self):
187197
)
188198
quantization_config["sym"] = "asym" not in self.args.weight_format
189199
quantization_config["group_size"] = 128 if "128" in self.args.weight_format else 64
200+
quantization_config["dataset"] = self.args.dataset
190201
ov_config = OVConfig(quantization_config=quantization_config)
191202

192203
# TODO : add input shapes

optimum/exporters/openvino/__main__.py

+38
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,44 @@ class StoreAttr(object):
263263
**loading_kwargs,
264264
)
265265

266+
if (
267+
library_name == "diffusers"
268+
and ov_config
269+
and ov_config.quantization_config
270+
and "dataset" in ov_config.quantization_config
271+
):
272+
import huggingface_hub
273+
274+
model_info = huggingface_hub.model_info(model_name_or_path, revision=revision)
275+
class_name = model_info.config["diffusers"]["_class_name"]
276+
model_cls = None
277+
if class_name == "LatentConsistencyModelPipeline":
278+
from optimum.intel import OVLatentConsistencyModelPipeline
279+
280+
model_cls = OVLatentConsistencyModelPipeline
281+
elif class_name == "StableDiffusionXLPipeline":
282+
from optimum.intel import OVStableDiffusionXLPipeline
283+
284+
model_cls = OVStableDiffusionXLPipeline
285+
elif class_name == "StableDiffusionPipeline":
286+
from optimum.intel import OVStableDiffusionPipeline
287+
288+
model_cls = OVStableDiffusionPipeline
289+
290+
if model_cls:
291+
model = model_cls.from_pretrained(
292+
model_id=model_name_or_path,
293+
export=True,
294+
quantization_config=ov_config.quantization_config,
295+
cache_dir=cache_dir,
296+
trust_remote_code=trust_remote_code,
297+
revision=revision,
298+
force_download=force_download,
299+
use_auth_token=use_auth_token,
300+
)
301+
model.save_pretrained(output)
302+
return
303+
266304
needs_pad_token_id = task == "text-classification" and getattr(model.config, "pad_token_id", None) is None
267305

268306
if needs_pad_token_id:

optimum/intel/openvino/modeling_diffusion.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,7 @@ def transform_fn(data_item):
385385
self.__call__(**inputs, height=height, width=width)
386386
else:
387387
self.__call__(*inputs, height=height, width=width)
388-
if len(calibration_data) > num_samples:
388+
if len(calibration_data) >= num_samples:
389389
break
390390

391391
self.unet.request = self.unet.request.request

0 commit comments

Comments
 (0)