optimum-rbln 0.1.12__py3-none-any.whl → 0.1.13__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- optimum/rbln/__init__.py +5 -1
- optimum/rbln/__version__.py +1 -1
- optimum/rbln/diffusers/models/autoencoder_kl.py +30 -61
- optimum/rbln/diffusers/models/controlnet.py +36 -56
- optimum/rbln/diffusers/models/unet_2d_condition.py +57 -153
- optimum/rbln/diffusers/pipelines/__init__.py +40 -12
- optimum/rbln/diffusers/pipelines/controlnet/multicontrolnet.py +7 -0
- optimum/rbln/diffusers/pipelines/controlnet/pipeline_controlnet.py +9 -185
- optimum/rbln/diffusers/pipelines/controlnet/pipeline_controlnet_img2img.py +8 -190
- optimum/rbln/diffusers/pipelines/controlnet/pipeline_controlnet_sd_xl.py +8 -191
- optimum/rbln/diffusers/pipelines/controlnet/pipeline_controlnet_sd_xl_img2img.py +8 -192
- optimum/rbln/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion.py +3 -110
- optimum/rbln/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_img2img.py +12 -115
- optimum/rbln/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl.py +4 -122
- optimum/rbln/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_img2img.py +4 -125
- optimum/rbln/modeling_base.py +12 -5
- optimum/rbln/modeling_diffusers.py +400 -0
- optimum/rbln/transformers/__init__.py +2 -0
- optimum/rbln/transformers/cache_utils.py +5 -9
- optimum/rbln/transformers/modeling_rope_utils.py +283 -0
- optimum/rbln/transformers/models/__init__.py +80 -31
- optimum/rbln/transformers/models/clip/modeling_clip.py +13 -22
- optimum/rbln/transformers/models/decoderonly/__init__.py +0 -2
- optimum/rbln/transformers/models/decoderonly/decoderonly_architecture.py +376 -218
- optimum/rbln/transformers/models/decoderonly/modeling_decoderonly.py +74 -16
- optimum/rbln/transformers/models/exaone/exaone_architecture.py +18 -9
- optimum/rbln/transformers/models/exaone/modeling_exaone.py +4 -29
- optimum/rbln/transformers/models/gemma/gemma_architecture.py +12 -2
- optimum/rbln/transformers/models/gemma/modeling_gemma.py +4 -28
- optimum/rbln/transformers/models/gpt2/modeling_gpt2.py +4 -30
- optimum/rbln/transformers/models/llama/modeling_llama.py +4 -28
- optimum/rbln/transformers/models/llava_next/modeling_llava_next.py +27 -8
- optimum/rbln/transformers/models/midm/midm_architecture.py +4 -15
- optimum/rbln/transformers/models/midm/modeling_midm.py +4 -29
- optimum/rbln/transformers/models/mistral/modeling_mistral.py +4 -29
- optimum/rbln/transformers/models/phi/modeling_phi.py +5 -31
- optimum/rbln/transformers/models/phi/phi_architecture.py +75 -159
- optimum/rbln/transformers/models/qwen2/modeling_qwen2.py +5 -29
- optimum/rbln/transformers/models/t5/__init__.py +1 -1
- optimum/rbln/transformers/models/t5/modeling_t5.py +57 -4
- optimum/rbln/transformers/models/whisper/modeling_whisper.py +1 -1
- optimum/rbln/transformers/utils/rbln_quantization.py +8 -2
- optimum/rbln/utils/context.py +58 -0
- optimum/rbln/utils/decorator_utils.py +55 -0
- optimum/rbln/utils/import_utils.py +7 -0
- optimum/rbln/utils/runtime_utils.py +4 -4
- optimum/rbln/utils/timer_utils.py +2 -2
- {optimum_rbln-0.1.12.dist-info → optimum_rbln-0.1.13.dist-info}/METADATA +8 -7
- {optimum_rbln-0.1.12.dist-info → optimum_rbln-0.1.13.dist-info}/RECORD +52 -48
- {optimum_rbln-0.1.12.dist-info → optimum_rbln-0.1.13.dist-info}/WHEEL +0 -0
- {optimum_rbln-0.1.12.dist-info → optimum_rbln-0.1.13.dist-info}/entry_points.txt +0 -0
- {optimum_rbln-0.1.12.dist-info → optimum_rbln-0.1.13.dist-info}/licenses/LICENSE +0 -0
@@ -24,123 +24,20 @@
|
|
24
24
|
|
25
25
|
from diffusers import StableDiffusionImg2ImgPipeline
|
26
26
|
|
27
|
-
from ....
|
28
|
-
from ....transformers import RBLNCLIPTextModel
|
29
|
-
from ....utils.runtime_utils import ContextRblnConfig
|
30
|
-
from ...models import RBLNAutoencoderKL, RBLNUNet2DConditionModel
|
27
|
+
from ....modeling_diffusers import RBLNDiffusionMixin
|
31
28
|
|
32
29
|
|
33
|
-
class RBLNStableDiffusionImg2ImgPipeline(StableDiffusionImg2ImgPipeline):
|
34
|
-
|
35
|
-
|
36
|
-
def from_pretrained(cls, model_id, **kwargs):
|
37
|
-
"""
|
38
|
-
Pipeline for image-to-image generation using Stable Diffusion.
|
30
|
+
class RBLNStableDiffusionImg2ImgPipeline(RBLNDiffusionMixin, StableDiffusionImg2ImgPipeline):
|
31
|
+
"""
|
32
|
+
Pipeline for image-to-image generation using Stable Diffusion.
|
39
33
|
|
40
|
-
|
41
|
-
|
34
|
+
This model inherits from [`StableDiffusionPipeline`]. Check the superclass documentation for the generic methods
|
35
|
+
implemented for all pipelines (downloading, saving, running on a particular device, etc.).
|
42
36
|
|
43
|
-
|
44
|
-
|
45
|
-
|
37
|
+
It implements the methods to convert a pre-trained Stable Diffusion pipeline into a RBLNStableDiffusion pipeline by:
|
38
|
+
- transferring the checkpoint weights of the original into an optimized RBLN graph,
|
39
|
+
- compiling the resulting graph using the RBLN compiler.
|
40
|
+
"""
|
46
41
|
|
47
|
-
|
48
|
-
|
49
|
-
Can be either:
|
50
|
-
- A string, the *model id* of a pretrained model hosted inside a model repo on huggingface.co.
|
51
|
-
- A path to a *directory* containing a model saved using [`~OptimizedModel.save_pretrained`],
|
52
|
-
"""
|
53
|
-
export = kwargs.pop("export", None)
|
54
|
-
model_save_dir = kwargs.pop("model_save_dir", None)
|
55
|
-
rbln_config = kwargs.pop("rbln_config", None)
|
56
|
-
rbln_config = {} if rbln_config is None else rbln_config
|
57
|
-
|
58
|
-
device = rbln_config.get("device", None)
|
59
|
-
device_map = rbln_config.get("device_map", None)
|
60
|
-
create_runtimes = rbln_config.get("create_runtimes", None)
|
61
|
-
optimize_host_memory = rbln_config.get("optimize_host_memory", None)
|
62
|
-
|
63
|
-
with ContextRblnConfig(
|
64
|
-
device=device,
|
65
|
-
device_map=device_map,
|
66
|
-
create_runtimes=create_runtimes,
|
67
|
-
optimze_host_mem=optimize_host_memory,
|
68
|
-
):
|
69
|
-
model = super().from_pretrained(pretrained_model_name_or_path=model_id, **kwargs)
|
70
|
-
|
71
|
-
if export is None or export is False:
|
72
|
-
return model
|
73
|
-
|
74
|
-
do_classifier_free_guidance = (
|
75
|
-
rbln_config.pop("guidance_scale", 5.0) > 1.0 and model.unet.config.time_cond_proj_dim is None
|
76
|
-
)
|
77
|
-
|
78
|
-
# compile model, create runtime
|
79
|
-
vae = RBLNAutoencoderKL.from_pretrained(
|
80
|
-
model_id=model_id,
|
81
|
-
subfolder="vae",
|
82
|
-
export=True,
|
83
|
-
model_save_dir=model_save_dir,
|
84
|
-
rbln_unet_sample_size=model.unet.config.sample_size,
|
85
|
-
rbln_use_encode=True,
|
86
|
-
rbln_vae_scale_factor=model.vae_scale_factor,
|
87
|
-
rbln_config={**rbln_config},
|
88
|
-
)
|
89
|
-
text_encoder = RBLNCLIPTextModel.from_pretrained(
|
90
|
-
model_id=model_id,
|
91
|
-
subfolder="text_encoder",
|
92
|
-
export=True,
|
93
|
-
model_save_dir=model_save_dir,
|
94
|
-
rbln_config={**rbln_config},
|
95
|
-
)
|
96
|
-
|
97
|
-
batch_size = rbln_config.pop("batch_size", 1)
|
98
|
-
unet_batch_size = batch_size * 2 if do_classifier_free_guidance else batch_size
|
99
|
-
|
100
|
-
unet = RBLNUNet2DConditionModel.from_pretrained(
|
101
|
-
model_id=model_id,
|
102
|
-
subfolder="unet",
|
103
|
-
export=True,
|
104
|
-
model_save_dir=model_save_dir,
|
105
|
-
rbln_max_seq_len=text_encoder.config.max_position_embeddings,
|
106
|
-
rbln_batch_size=unet_batch_size,
|
107
|
-
rbln_use_encode=True,
|
108
|
-
rbln_vae_scale_factor=model.vae_scale_factor,
|
109
|
-
rbln_is_controlnet=True if "controlnet" in model.config.keys() else False,
|
110
|
-
rbln_config={**rbln_config},
|
111
|
-
)
|
112
|
-
|
113
|
-
if model_save_dir is not None:
|
114
|
-
# To skip saving original pytorch modules
|
115
|
-
del (model.vae, model.text_encoder, model.unet)
|
116
|
-
|
117
|
-
# Direct calling of `save_pretrained` causes config.unet = (None, None).
|
118
|
-
# So config must be saved again, later.
|
119
|
-
model.save_pretrained(model_save_dir)
|
120
|
-
|
121
|
-
# replace modules
|
122
|
-
model.vae = vae
|
123
|
-
model.text_encoder = text_encoder
|
124
|
-
model.unet = unet
|
125
|
-
|
126
|
-
# update config to be able to load from file.
|
127
|
-
update_dict = {
|
128
|
-
"vae": ("optimum.rbln", "RBLNAutoencoderKL"),
|
129
|
-
"text_encoder": ("optimum.rbln", "RBLNCLIPTextModel"),
|
130
|
-
"unet": ("optimum.rbln", "RBLNUNet2DConditionModel"),
|
131
|
-
}
|
132
|
-
model.register_to_config(**update_dict)
|
133
|
-
|
134
|
-
if model_save_dir is not None:
|
135
|
-
# overwrite to replace incorrect config
|
136
|
-
model.save_config(model_save_dir)
|
137
|
-
|
138
|
-
if optimize_host_memory is False:
|
139
|
-
model.compiled_models = [
|
140
|
-
vae.compiled_models[0],
|
141
|
-
vae.compiled_models[1],
|
142
|
-
text_encoder.compiled_models[0],
|
143
|
-
unet.compiled_models[0],
|
144
|
-
]
|
145
|
-
|
146
|
-
return model
|
42
|
+
original_class = StableDiffusionImg2ImgPipeline
|
43
|
+
_submodules = ["text_encoder", "unet", "vae"]
|
@@ -16,127 +16,9 @@
|
|
16
16
|
|
17
17
|
from diffusers import StableDiffusionXLPipeline
|
18
18
|
|
19
|
-
from ....
|
20
|
-
from ....transformers import RBLNCLIPTextModel, RBLNCLIPTextModelWithProjection
|
21
|
-
from ....utils.runtime_utils import ContextRblnConfig
|
22
|
-
from ...models import RBLNAutoencoderKL, RBLNUNet2DConditionModel
|
19
|
+
from ....modeling_diffusers import RBLNDiffusionMixin
|
23
20
|
|
24
21
|
|
25
|
-
class RBLNStableDiffusionXLPipeline(StableDiffusionXLPipeline):
|
26
|
-
|
27
|
-
|
28
|
-
def from_pretrained(cls, model_id, **kwargs):
|
29
|
-
"""
|
30
|
-
Pipeline for text-to-image generation using Stable Diffusion XL.
|
31
|
-
|
32
|
-
This model inherits from [`StableDiffusionXLPipeline`]. Check the superclass documentation for the generic methods the
|
33
|
-
library implements for all the pipelines (such as downloading or saving, running on a particular device, etc.)
|
34
|
-
|
35
|
-
It implements the methods to convert a pre-trained StableDiffusionXL pipeline into a RBLNStableDiffusionXL pipeline by:
|
36
|
-
- transferring the checkpoint weights of the original into an optimized RBLN graph,
|
37
|
-
- compiling the resulting graph using the RBLN compiler.
|
38
|
-
|
39
|
-
Args:
|
40
|
-
model_id (`Union[str, Path]`):
|
41
|
-
Can be either:
|
42
|
-
- A string, the *model id* of a pretrained model hosted inside a model repo on huggingface.co.
|
43
|
-
- A path to a *directory* containing a model saved using [`~OptimizedModel.save_pretrained`],
|
44
|
-
"""
|
45
|
-
export = kwargs.pop("export", None)
|
46
|
-
model_save_dir = kwargs.pop("model_save_dir", None)
|
47
|
-
rbln_config = kwargs.pop("rbln_config", None)
|
48
|
-
rbln_config = {} if rbln_config is None else rbln_config
|
49
|
-
|
50
|
-
device = rbln_config.get("device", None)
|
51
|
-
device_map = rbln_config.get("device_map", None)
|
52
|
-
create_runtimes = rbln_config.get("create_runtimes", None)
|
53
|
-
optimize_host_memory = rbln_config.get("optimize_host_memory", None)
|
54
|
-
|
55
|
-
with ContextRblnConfig(
|
56
|
-
device=device,
|
57
|
-
device_map=device_map,
|
58
|
-
create_runtimes=create_runtimes,
|
59
|
-
optimze_host_mem=optimize_host_memory,
|
60
|
-
):
|
61
|
-
model = super().from_pretrained(pretrained_model_name_or_path=model_id, **kwargs)
|
62
|
-
|
63
|
-
if export is None or export is False:
|
64
|
-
return model
|
65
|
-
|
66
|
-
do_classifier_free_guidance = (
|
67
|
-
rbln_config.pop("guidance_scale", 5.0) > 1.0 and model.unet.config.time_cond_proj_dim is None
|
68
|
-
)
|
69
|
-
|
70
|
-
vae = RBLNAutoencoderKL.from_pretrained(
|
71
|
-
model_id=model_id,
|
72
|
-
subfolder="vae",
|
73
|
-
export=True,
|
74
|
-
model_save_dir=model_save_dir,
|
75
|
-
rbln_unet_sample_size=model.unet.config.sample_size,
|
76
|
-
rbln_use_encode=False,
|
77
|
-
rbln_config={**rbln_config},
|
78
|
-
)
|
79
|
-
text_encoder = RBLNCLIPTextModel.from_pretrained(
|
80
|
-
model_id=model_id,
|
81
|
-
subfolder="text_encoder",
|
82
|
-
export=True,
|
83
|
-
model_save_dir=model_save_dir,
|
84
|
-
rbln_config={**rbln_config},
|
85
|
-
)
|
86
|
-
text_encoder_2 = RBLNCLIPTextModelWithProjection.from_pretrained(
|
87
|
-
model_id=model_id,
|
88
|
-
subfolder="text_encoder_2",
|
89
|
-
export=True,
|
90
|
-
model_save_dir=model_save_dir,
|
91
|
-
rbln_config={**rbln_config},
|
92
|
-
)
|
93
|
-
|
94
|
-
batch_size = rbln_config.pop("batch_size", 1)
|
95
|
-
unet_batch_size = batch_size * 2 if do_classifier_free_guidance else batch_size
|
96
|
-
|
97
|
-
unet = RBLNUNet2DConditionModel.from_pretrained(
|
98
|
-
model_id=model_id,
|
99
|
-
subfolder="unet",
|
100
|
-
export=True,
|
101
|
-
model_save_dir=model_save_dir,
|
102
|
-
rbln_max_seq_len=model.text_encoder.config.max_position_embeddings,
|
103
|
-
rbln_text_model_hidden_size=model.text_encoder_2.config.hidden_size,
|
104
|
-
rbln_batch_size=unet_batch_size,
|
105
|
-
rbln_use_encode=False,
|
106
|
-
rbln_is_controlnet=True if "controlnet" in model.config.keys() else False,
|
107
|
-
rbln_config={**rbln_config},
|
108
|
-
)
|
109
|
-
|
110
|
-
if model_save_dir is not None:
|
111
|
-
# To skip saving original pytorch modules
|
112
|
-
del (model.vae, model.text_encoder, model.unet, model.text_encoder_2)
|
113
|
-
|
114
|
-
# Direct calling of `save_pretrained` causes config.unet = (None, None).
|
115
|
-
# So config must be saved again, later.
|
116
|
-
model.save_pretrained(model_save_dir)
|
117
|
-
|
118
|
-
model.vae = vae
|
119
|
-
model.text_encoder = text_encoder
|
120
|
-
model.unet = unet
|
121
|
-
model.text_encoder_2 = text_encoder_2
|
122
|
-
update_dict = {
|
123
|
-
"vae": ("optimum.rbln", "RBLNAutoencoderKL"),
|
124
|
-
"text_encoder": ("optimum.rbln", "RBLNCLIPTextModel"),
|
125
|
-
"unet": ("optimum.rbln", "RBLNUNet2DConditionModel"),
|
126
|
-
"text_encoder_2": ("optimum.rbln", "RBLNCLIPTextModelWithProjection"),
|
127
|
-
}
|
128
|
-
model.register_to_config(**update_dict)
|
129
|
-
|
130
|
-
if model_save_dir is not None:
|
131
|
-
# overwrite to replace incorrect config
|
132
|
-
model.save_config(model_save_dir)
|
133
|
-
|
134
|
-
if optimize_host_memory is False:
|
135
|
-
model.compiled_models = [
|
136
|
-
vae.compiled_models[0],
|
137
|
-
unet.compiled_models[0],
|
138
|
-
text_encoder.compiled_models[0],
|
139
|
-
text_encoder_2.compiled_models[0],
|
140
|
-
]
|
141
|
-
|
142
|
-
return model
|
22
|
+
class RBLNStableDiffusionXLPipeline(RBLNDiffusionMixin, StableDiffusionXLPipeline):
|
23
|
+
original_class = StableDiffusionXLPipeline
|
24
|
+
_submodules = ["text_encoder", "text_encoder_2", "unet", "vae"]
|
optimum/rbln/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_img2img.py
CHANGED
@@ -16,130 +16,9 @@
|
|
16
16
|
|
17
17
|
from diffusers import StableDiffusionXLImg2ImgPipeline
|
18
18
|
|
19
|
-
from ....
|
20
|
-
from ....transformers import RBLNCLIPTextModel, RBLNCLIPTextModelWithProjection
|
21
|
-
from ....utils.runtime_utils import ContextRblnConfig
|
22
|
-
from ...models import RBLNAutoencoderKL, RBLNUNet2DConditionModel
|
19
|
+
from ....modeling_diffusers import RBLNDiffusionMixin
|
23
20
|
|
24
21
|
|
25
|
-
class RBLNStableDiffusionXLImg2ImgPipeline(StableDiffusionXLImg2ImgPipeline):
|
26
|
-
|
27
|
-
|
28
|
-
def from_pretrained(cls, model_id, **kwargs):
|
29
|
-
"""
|
30
|
-
Pipeline for image-to-image generation using Stable Diffusion XL.
|
31
|
-
|
32
|
-
This model inherits from [`StableDiffusionXLPipeline`]. Check the superclass documentation for the generic methods the
|
33
|
-
library implements for all the pipelines (such as downloading or saving, running on a particular device, etc.)
|
34
|
-
|
35
|
-
It implements the methods to convert a pre-trained StableDiffusionXL pipeline into a RBLNStableDiffusionXL pipeline by:
|
36
|
-
- transferring the checkpoint weights of the original into an optimized RBLN graph,
|
37
|
-
- compiling the resulting graph using the RBLN compiler.
|
38
|
-
|
39
|
-
Args:
|
40
|
-
model_id (`Union[str, Path]`):
|
41
|
-
Can be either:
|
42
|
-
- A string, the *model id* of a pretrained model hosted inside a model repo on huggingface.co.
|
43
|
-
- A path to a *directory* containing a model saved using [`~OptimizedModel.save_pretrained`],
|
44
|
-
"""
|
45
|
-
export = kwargs.pop("export", None)
|
46
|
-
model_save_dir = kwargs.pop("model_save_dir", None)
|
47
|
-
rbln_config = kwargs.pop("rbln_config", None)
|
48
|
-
rbln_config = {} if rbln_config is None else rbln_config
|
49
|
-
|
50
|
-
device = rbln_config.get("device", None)
|
51
|
-
device_map = rbln_config.get("device_map", None)
|
52
|
-
create_runtimes = rbln_config.get("create_runtimes", None)
|
53
|
-
optimize_host_memory = rbln_config.get("optimize_host_memory", None)
|
54
|
-
|
55
|
-
with ContextRblnConfig(
|
56
|
-
device=device,
|
57
|
-
device_map=device_map,
|
58
|
-
create_runtimes=create_runtimes,
|
59
|
-
optimze_host_mem=optimize_host_memory,
|
60
|
-
):
|
61
|
-
model = super().from_pretrained(pretrained_model_name_or_path=model_id, **kwargs)
|
62
|
-
|
63
|
-
if export is None or export is False:
|
64
|
-
return model
|
65
|
-
|
66
|
-
do_classifier_free_guidance = (
|
67
|
-
rbln_config.pop("guidance_scale", 5.0) > 1.0 and model.unet.config.time_cond_proj_dim is None
|
68
|
-
)
|
69
|
-
|
70
|
-
vae = RBLNAutoencoderKL.from_pretrained(
|
71
|
-
model_id=model_id,
|
72
|
-
subfolder="vae",
|
73
|
-
export=True,
|
74
|
-
model_save_dir=model_save_dir,
|
75
|
-
rbln_unet_sample_size=model.unet.config.sample_size,
|
76
|
-
rbln_use_encode=True,
|
77
|
-
rbln_vae_scale_factor=model.vae_scale_factor,
|
78
|
-
rbln_config={**rbln_config},
|
79
|
-
)
|
80
|
-
text_encoder = RBLNCLIPTextModel.from_pretrained(
|
81
|
-
model_id=model_id,
|
82
|
-
subfolder="text_encoder",
|
83
|
-
export=True,
|
84
|
-
model_save_dir=model_save_dir,
|
85
|
-
rbln_config={**rbln_config},
|
86
|
-
)
|
87
|
-
text_encoder_2 = RBLNCLIPTextModelWithProjection.from_pretrained(
|
88
|
-
model_id=model_id,
|
89
|
-
subfolder="text_encoder_2",
|
90
|
-
export=True,
|
91
|
-
model_save_dir=model_save_dir,
|
92
|
-
rbln_config={**rbln_config},
|
93
|
-
)
|
94
|
-
|
95
|
-
batch_size = rbln_config.pop("batch_size", 1)
|
96
|
-
unet_batch_size = batch_size * 2 if do_classifier_free_guidance else batch_size
|
97
|
-
|
98
|
-
unet = RBLNUNet2DConditionModel.from_pretrained(
|
99
|
-
model_id=model_id,
|
100
|
-
subfolder="unet",
|
101
|
-
export=True,
|
102
|
-
model_save_dir=model_save_dir,
|
103
|
-
rbln_max_seq_len=model.text_encoder.config.max_position_embeddings,
|
104
|
-
rbln_text_model_hidden_size=model.text_encoder_2.config.hidden_size,
|
105
|
-
rbln_batch_size=unet_batch_size,
|
106
|
-
rbln_use_encode=True,
|
107
|
-
rbln_vae_scale_factor=model.vae_scale_factor,
|
108
|
-
rbln_is_controlnet=True if "controlnet" in model.config.keys() else False,
|
109
|
-
rbln_config={**rbln_config},
|
110
|
-
)
|
111
|
-
|
112
|
-
if model_save_dir is not None:
|
113
|
-
# To skip saving original pytorch modules
|
114
|
-
del (model.vae, model.text_encoder, model.unet, model.text_encoder_2)
|
115
|
-
|
116
|
-
# Direct calling of `save_pretrained` causes config.unet = (None, None).
|
117
|
-
# So config must be saved again, later.
|
118
|
-
model.save_pretrained(model_save_dir)
|
119
|
-
|
120
|
-
model.vae = vae
|
121
|
-
model.text_encoder = text_encoder
|
122
|
-
model.unet = unet
|
123
|
-
model.text_encoder_2 = text_encoder_2
|
124
|
-
update_dict = {
|
125
|
-
"vae": ("optimum.rbln", "RBLNAutoencoderKL"),
|
126
|
-
"text_encoder": ("optimum.rbln", "RBLNCLIPTextModel"),
|
127
|
-
"unet": ("optimum.rbln", "RBLNUNet2DConditionModel"),
|
128
|
-
"text_encoder_2": ("optimum.rbln", "RBLNCLIPTextModelWithProjection"),
|
129
|
-
}
|
130
|
-
model.register_to_config(**update_dict)
|
131
|
-
|
132
|
-
if model_save_dir is not None:
|
133
|
-
# overwrite to replace incorrect config
|
134
|
-
model.save_config(model_save_dir)
|
135
|
-
|
136
|
-
if optimize_host_memory is False:
|
137
|
-
model.compiled_models = [
|
138
|
-
vae.compiled_models[0],
|
139
|
-
vae.compiled_models[1],
|
140
|
-
unet.compiled_models[0],
|
141
|
-
text_encoder.compiled_models[0],
|
142
|
-
text_encoder_2.compiled_models[0],
|
143
|
-
]
|
144
|
-
|
145
|
-
return model
|
22
|
+
class RBLNStableDiffusionXLImg2ImgPipeline(RBLNDiffusionMixin, StableDiffusionXLImg2ImgPipeline):
|
23
|
+
original_class = StableDiffusionXLImg2ImgPipeline
|
24
|
+
_submodules = ["text_encoder", "text_encoder_2", "unet", "vae"]
|
optimum/rbln/modeling_base.py
CHANGED
@@ -447,11 +447,18 @@ class RBLNBaseModel(OptimizedModel, ABC, SubModulesMixin):
|
|
447
447
|
rbln_compiled_models = [rbln_compiled_models[cm_name] for cm_name in compiled_model_names]
|
448
448
|
|
449
449
|
# create runtimes only if `rbln_create_runtimes` is enabled
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
450
|
+
try:
|
451
|
+
models = (
|
452
|
+
cls._create_runtimes(rbln_compiled_models, rbln_config.device_map)
|
453
|
+
if rbln_config.create_runtimes
|
454
|
+
else UnavailableRuntime()
|
455
|
+
)
|
456
|
+
|
457
|
+
except rebel.core.exception.RBLNRuntimeError as e:
|
458
|
+
logger.warning(
|
459
|
+
f"Failed to create the runtime for the model due to a runtime error: {e.__class__.__name__} - {e}"
|
460
|
+
)
|
461
|
+
models = UnavailableRuntime()
|
455
462
|
|
456
463
|
return cls(
|
457
464
|
models,
|