optimum-rbln 0.1.11__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.
Files changed (72) hide show
  1. optimum/rbln/__init__.py +14 -7
  2. optimum/rbln/__version__.py +1 -1
  3. optimum/rbln/diffusers/models/autoencoder_kl.py +30 -63
  4. optimum/rbln/diffusers/models/controlnet.py +36 -62
  5. optimum/rbln/diffusers/models/unet_2d_condition.py +57 -156
  6. optimum/rbln/diffusers/pipelines/__init__.py +40 -12
  7. optimum/rbln/diffusers/pipelines/controlnet/multicontrolnet.py +11 -0
  8. optimum/rbln/diffusers/pipelines/controlnet/pipeline_controlnet.py +9 -187
  9. optimum/rbln/diffusers/pipelines/controlnet/pipeline_controlnet_img2img.py +8 -192
  10. optimum/rbln/diffusers/pipelines/controlnet/pipeline_controlnet_sd_xl.py +8 -206
  11. optimum/rbln/diffusers/pipelines/controlnet/pipeline_controlnet_sd_xl_img2img.py +8 -207
  12. optimum/rbln/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion.py +3 -111
  13. optimum/rbln/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_img2img.py +12 -117
  14. optimum/rbln/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl.py +4 -123
  15. optimum/rbln/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_img2img.py +4 -126
  16. optimum/rbln/modeling_alias.py +4 -9
  17. optimum/rbln/modeling_base.py +117 -144
  18. optimum/rbln/modeling_config.py +51 -0
  19. optimum/rbln/modeling_diffusers.py +400 -0
  20. optimum/rbln/transformers/__init__.py +10 -0
  21. optimum/rbln/transformers/cache_utils.py +5 -9
  22. optimum/rbln/transformers/modeling_rope_utils.py +283 -0
  23. optimum/rbln/transformers/models/__init__.py +80 -28
  24. optimum/rbln/transformers/models/auto/modeling_auto.py +1 -0
  25. optimum/rbln/transformers/models/bart/__init__.py +1 -1
  26. optimum/rbln/transformers/models/bart/bart_architecture.py +18 -12
  27. optimum/rbln/transformers/models/bart/modeling_bart.py +25 -6
  28. optimum/rbln/transformers/models/bert/modeling_bert.py +1 -2
  29. optimum/rbln/transformers/models/clip/modeling_clip.py +13 -23
  30. optimum/rbln/transformers/models/decoderonly/__init__.py +0 -2
  31. optimum/rbln/transformers/models/decoderonly/decoderonly_architecture.py +376 -218
  32. optimum/rbln/transformers/models/decoderonly/modeling_decoderonly.py +246 -116
  33. optimum/rbln/transformers/models/dpt/modeling_dpt.py +0 -1
  34. optimum/rbln/transformers/models/exaone/__init__.py +32 -0
  35. optimum/rbln/transformers/models/exaone/exaone_architecture.py +81 -0
  36. optimum/rbln/transformers/models/exaone/hf_hub_cached/configuration_exaone.py +181 -0
  37. optimum/rbln/transformers/models/exaone/hf_hub_cached/modeling_exaone.py +1725 -0
  38. optimum/rbln/transformers/models/exaone/modeling_exaone.py +53 -0
  39. optimum/rbln/transformers/models/gemma/gemma_architecture.py +12 -2
  40. optimum/rbln/transformers/models/gemma/modeling_gemma.py +4 -28
  41. optimum/rbln/transformers/models/gpt2/modeling_gpt2.py +4 -30
  42. optimum/rbln/transformers/models/llama/modeling_llama.py +4 -28
  43. optimum/rbln/transformers/models/llava_next/modeling_llava_next.py +166 -151
  44. optimum/rbln/transformers/models/midm/midm_architecture.py +4 -15
  45. optimum/rbln/transformers/models/midm/modeling_midm.py +8 -28
  46. optimum/rbln/transformers/models/mistral/modeling_mistral.py +4 -29
  47. optimum/rbln/transformers/models/phi/modeling_phi.py +5 -31
  48. optimum/rbln/transformers/models/phi/phi_architecture.py +75 -159
  49. optimum/rbln/transformers/models/qwen2/__init__.py +24 -0
  50. optimum/rbln/transformers/models/qwen2/modeling_qwen2.py +43 -0
  51. optimum/rbln/transformers/models/qwen2/qwen2_architecture.py +29 -0
  52. optimum/rbln/transformers/models/seq2seq/__init__.py +24 -0
  53. optimum/rbln/{modeling_seq2seq.py → transformers/models/seq2seq/modeling_seq2seq.py} +107 -166
  54. optimum/rbln/transformers/models/t5/__init__.py +1 -0
  55. optimum/rbln/transformers/models/t5/modeling_t5.py +108 -0
  56. optimum/rbln/transformers/models/t5/t5_architecture.py +46 -32
  57. optimum/rbln/transformers/models/wav2vec2/modeling_wav2vec2.py +0 -1
  58. optimum/rbln/transformers/models/whisper/modeling_whisper.py +38 -13
  59. optimum/rbln/transformers/models/xlm_roberta/modeling_xlm_roberta.py +1 -2
  60. optimum/rbln/transformers/utils/rbln_quantization.py +8 -2
  61. optimum/rbln/utils/context.py +58 -0
  62. optimum/rbln/utils/decorator_utils.py +55 -0
  63. optimum/rbln/utils/import_utils.py +21 -0
  64. optimum/rbln/utils/logging.py +1 -1
  65. optimum/rbln/utils/runtime_utils.py +4 -4
  66. optimum/rbln/utils/timer_utils.py +26 -2
  67. {optimum_rbln-0.1.11.dist-info → optimum_rbln-0.1.13.dist-info}/METADATA +11 -9
  68. optimum_rbln-0.1.13.dist-info/RECORD +107 -0
  69. {optimum_rbln-0.1.11.dist-info → optimum_rbln-0.1.13.dist-info}/WHEEL +1 -1
  70. optimum_rbln-0.1.11.dist-info/RECORD +0 -93
  71. {optimum_rbln-0.1.11.dist-info → optimum_rbln-0.1.13.dist-info}/entry_points.txt +0 -0
  72. {optimum_rbln-0.1.11.dist-info → optimum_rbln-0.1.13.dist-info}/licenses/LICENSE +0 -0
@@ -26,224 +26,23 @@ from typing import Any, Callable, Dict, List, Optional, Tuple, Union
26
26
 
27
27
  import torch
28
28
  import torch.nn.functional as F
29
- from diffusers import AutoencoderKL, ControlNetModel, StableDiffusionXLControlNetImg2ImgPipeline
29
+ from diffusers import StableDiffusionXLControlNetImg2ImgPipeline
30
30
  from diffusers.image_processor import PipelineImageInput
31
- from diffusers.models.unets.unet_2d_condition import UNet2DConditionModel
32
31
  from diffusers.pipelines.stable_diffusion_xl.pipeline_output import StableDiffusionXLPipelineOutput
33
32
  from diffusers.utils import deprecate, logging
34
33
  from diffusers.utils.torch_utils import is_compiled_module
35
- from transformers import CLIPTextModel
36
34
 
37
- from ....modeling_base import RBLNBaseModel
38
- from ....transformers import RBLNCLIPTextModel, RBLNCLIPTextModelWithProjection
39
- from ....utils.runtime_utils import ContextRblnConfig
40
- from ...models import RBLNAutoencoderKL, RBLNControlNetModel, RBLNUNet2DConditionModel
35
+ from ....modeling_diffusers import RBLNDiffusionMixin
36
+ from ....utils.decorator_utils import remove_compile_time_kwargs
37
+ from ...models import RBLNControlNetModel
41
38
  from ...pipelines.controlnet.multicontrolnet import RBLNMultiControlNetModel
42
39
 
43
40
 
44
41
  logger = logging.get_logger(__name__)
45
42
 
46
43
 
47
- class RBLNStableDiffusionXLControlNetImg2ImgPipeline(StableDiffusionXLControlNetImg2ImgPipeline):
48
- @classmethod
49
- def from_pretrained(cls, model_id, **kwargs):
50
- """
51
- Pipeline for image-to-image generation using Stable Diffusion XL with ControlNet.
52
-
53
- This model inherits from [`StableDiffusionXLControlNetImg2ImgPipeline`]. Check the superclass documentation for the generic methods
54
- implemented for all pipelines (downloading, saving, running on a particular device, etc.).
55
-
56
- It implements the methods to convert a pre-trained Stable Diffusion XL Controlnet pipeline into a RBLNStableDiffusionXLControlNetImg2Img pipeline by:
57
- - transferring the checkpoint weights of the original into an optimized RBLN graph,
58
- - compiling the resulting graph using the RBLN compiler.
59
-
60
- Args:
61
- model_id (`Union[str, Path]`):
62
- Can be either:
63
- - A string, the *model id* of a pretrained model hosted inside a model repo on huggingface.co.
64
- - A path to a *directory* containing a model saved using [`~OptimizedModel.save_pretrained`],
65
- """
66
- export = kwargs.pop("export", None)
67
- vae = kwargs.pop("vae", None)
68
- unet = kwargs.pop("unet", None)
69
- text_encoder = kwargs.pop("text_encoder", None)
70
- text_encoder_2 = kwargs.pop("text_encoder_2", None)
71
- controlnet = kwargs.pop("controlnet", None)
72
- model_save_dir = kwargs.pop("model_save_dir", None)
73
- rbln_config = kwargs.pop("rbln_config", None)
74
- rbln_kwargs, _ = RBLNBaseModel.resolve_rbln_config(rbln_config, kwargs)
75
-
76
- device = rbln_kwargs.get("device", None)
77
- device_map = rbln_kwargs.get("device_map", None)
78
- create_runtimes = rbln_kwargs.get("create_runtimes", None)
79
- optimize_host_memory = rbln_kwargs.get("optimize_host_memory", None)
80
-
81
- kwargs_dict = {
82
- "pretrained_model_name_or_path": model_id,
83
- **kwargs,
84
- }
85
-
86
- kwargs_dict.update(
87
- {
88
- **({"vae": vae} if vae is not None and isinstance(vae, AutoencoderKL) else {}),
89
- **({"unet": unet} if unet is not None and isinstance(unet, UNet2DConditionModel) else {}),
90
- **(
91
- {"text_encoder": text_encoder}
92
- if text_encoder is not None and isinstance(text_encoder, CLIPTextModel)
93
- else {}
94
- ),
95
- **(
96
- {"controlnet": controlnet}
97
- if controlnet is not None
98
- and (
99
- isinstance(controlnet, ControlNetModel)
100
- or all(isinstance(c, ControlNetModel) for c in controlnet)
101
- )
102
- else {}
103
- ),
104
- }
105
- )
106
-
107
- with ContextRblnConfig(
108
- device=device,
109
- device_map=device_map,
110
- create_runtimes=create_runtimes,
111
- optimze_host_mem=optimize_host_memory,
112
- ):
113
- model = super().from_pretrained(**{k: v for k, v in kwargs_dict.items() if v is not None})
114
-
115
- if export is None or export is False:
116
- return model
117
-
118
- do_classifier_free_guidance = (
119
- rbln_kwargs.pop("guidance_scale", 5.0) > 1.0 and model.unet.config.time_cond_proj_dim is None
120
- )
121
-
122
- if not isinstance(vae, RBLNAutoencoderKL):
123
- vae = RBLNAutoencoderKL.from_pretrained(
124
- model_id=model_id,
125
- subfolder="vae",
126
- export=True,
127
- model_save_dir=model_save_dir,
128
- rbln_unet_sample_size=model.unet.config.sample_size,
129
- rbln_use_encode=True,
130
- rbln_vae_scale_factor=model.vae_scale_factor,
131
- rbln_config={**rbln_kwargs},
132
- )
133
-
134
- if not isinstance(text_encoder, RBLNCLIPTextModel):
135
- text_encoder = RBLNCLIPTextModel.from_pretrained(
136
- model_id=model_id,
137
- subfolder="text_encoder",
138
- export=True,
139
- model_save_dir=model_save_dir,
140
- rbln_config={**rbln_kwargs},
141
- )
142
-
143
- if not isinstance(text_encoder_2, RBLNCLIPTextModel):
144
- text_encoder_2 = RBLNCLIPTextModelWithProjection.from_pretrained(
145
- model_id=model_id,
146
- subfolder="text_encoder_2",
147
- export=True,
148
- model_save_dir=model_save_dir,
149
- rbln_config={**rbln_kwargs},
150
- )
151
-
152
- batch_size = rbln_kwargs.pop("batch_size", 1)
153
- unet_batch_size = batch_size * 2 if do_classifier_free_guidance else batch_size
154
-
155
- if not isinstance(unet, RBLNUNet2DConditionModel):
156
- unet = RBLNUNet2DConditionModel.from_pretrained(
157
- model_id=model_id,
158
- subfolder="unet",
159
- export=True,
160
- model_save_dir=model_save_dir,
161
- rbln_max_seq_len=model.text_encoder.config.max_position_embeddings,
162
- rbln_text_model_hidden_size=model.text_encoder_2.config.hidden_size,
163
- rbln_batch_size=unet_batch_size,
164
- rbln_use_encode=True,
165
- rbln_vae_scale_factor=model.vae_scale_factor,
166
- rbln_is_controlnet=True if "controlnet" in model.config.keys() else False,
167
- rbln_config={**rbln_kwargs},
168
- )
169
-
170
- if not isinstance(controlnet, (RBLNControlNetModel, RBLNMultiControlNetModel)):
171
- if isinstance(controlnet, (list, tuple)):
172
- multicontrolnet = []
173
- for i, cid in enumerate(controlnet):
174
- subfolder_name = "controlnet" if i == 0 else f"controlnet_{i}"
175
- multicontrolnet.append(
176
- RBLNControlNetModel.from_pretrained(
177
- model_id=cid.config._name_or_path,
178
- subfolder=subfolder_name,
179
- export=True,
180
- model_save_dir=model_save_dir,
181
- rbln_batch_size=unet_batch_size,
182
- rbln_text_model_hidden_size=model.text_encoder_2.config.hidden_size,
183
- rbln_vae_scale_factor=model.vae_scale_factor,
184
- rbln_config={**rbln_kwargs},
185
- )
186
- )
187
- controlnet = RBLNMultiControlNetModel(multicontrolnet, config=controlnet[0].config)
188
- controlnet_dict = ("optimum.rbln", "RBLNMultiControlNetModel")
189
- else:
190
- controlnet = RBLNControlNetModel.from_pretrained(
191
- model_id=controlnet.config._name_or_path,
192
- subfolder="controlnet",
193
- export=True,
194
- model_save_dir=model_save_dir,
195
- rbln_batch_size=unet_batch_size,
196
- rbln_text_model_hidden_size=model.text_encoder_2.config.hidden_size,
197
- rbln_vae_scale_factor=model.vae_scale_factor,
198
- rbln_config={**rbln_kwargs},
199
- )
200
- controlnet_dict = ("optimum.rbln", "RBLNControlNetModel")
201
-
202
- if model_save_dir is not None:
203
- # To skip saving original pytorch modules
204
- del (model.vae, model.text_encoder, model.unet, model.controlnet)
205
-
206
- # Direct calling of `save_pretrained` causes config.unet = (None, None).
207
- # So config must be saved again, later.
208
- model.save_pretrained(model_save_dir)
209
-
210
- # replace modules
211
- model.vae = vae
212
- model.text_encoder = text_encoder
213
- model.unet = unet
214
- model.text_encoder_2 = text_encoder_2
215
- model.controlnet = controlnet
216
-
217
- # update config to be able to load from file
218
- update_dict = {
219
- "vae": ("optimum.rbln", "RBLNAutoencoderKL"),
220
- "text_encoder": ("optimum.rbln", "RBLNCLIPTextModel"),
221
- "unet": ("optimum.rbln", "RBLNUNet2DConditionModel"),
222
- "text_encoder_2": ("optimum.rbln", "RBLNCLIPTextModelWithProjection"),
223
- "controlnet": controlnet_dict,
224
- }
225
- model.register_to_config(**update_dict)
226
-
227
- if model_save_dir is not None:
228
- # overwrite to replace incorrect config
229
- model.save_config(model_save_dir)
230
-
231
- # use for CI to access each compiled model
232
- if optimize_host_memory is False:
233
- model.compiled_models = [
234
- vae.compiled_models[0],
235
- vae.compiled_models[1],
236
- text_encoder.compiled_models[0],
237
- text_encoder_2.compiled_models[0],
238
- unet.compiled_models[0],
239
- ]
240
- if isinstance(controlnet, RBLNMultiControlNetModel):
241
- for c_model in controlnet.nets:
242
- model.compiled_models.append(c_model.compiled_models[0])
243
- else:
244
- model.compiled_models.append(controlnet.compiled_models[0])
245
-
246
- return model
44
+ class RBLNStableDiffusionXLControlNetImg2ImgPipeline(RBLNDiffusionMixin, StableDiffusionXLControlNetImg2ImgPipeline):
45
+ _submodules = ["text_encoder", "text_encoder_2", "unet", "vae", "controlnet"]
247
46
 
248
47
  def check_inputs(
249
48
  self,
@@ -447,6 +246,7 @@ class RBLNStableDiffusionXLControlNetImg2ImgPipeline(StableDiffusionXLControlNet
447
246
  )
448
247
 
449
248
  @torch.no_grad()
249
+ @remove_compile_time_kwargs
450
250
  def __call__(
451
251
  self,
452
252
  prompt: Union[str, List[str]] = None,
@@ -733,6 +533,7 @@ class RBLNStableDiffusionXLControlNetImg2ImgPipeline(StableDiffusionXLControlNet
733
533
  text_encoder_lora_scale = (
734
534
  self.cross_attention_kwargs.get("scale", None) if self.cross_attention_kwargs is not None else None
735
535
  )
536
+
736
537
  (
737
538
  prompt_embeds,
738
539
  negative_prompt_embeds,
@@ -24,116 +24,8 @@
24
24
 
25
25
  from diffusers import StableDiffusionPipeline
26
26
 
27
- from ....modeling_base import RBLNBaseModel
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 RBLNStableDiffusionPipeline(StableDiffusionPipeline):
34
- @classmethod
35
- def from_pretrained(cls, model_id, **kwargs):
36
- """
37
- Pipeline for text-to-image generation using Stable Diffusion.
38
-
39
- This model inherits from [`StableDiffusionPipeline`]. Check the superclass documentation for the generic methods
40
- implemented for all pipelines (downloading, saving, running on a particular device, etc.).
41
-
42
- It implements the methods to convert a pre-trained Stable Diffusion pipeline into a RBLNStableDiffusion pipeline by:
43
- - transferring the checkpoint weights of the original into an optimized RBLN graph,
44
- - compiling the resulting graph using the RBLN compiler.
45
-
46
- Args:
47
- model_id (`Union[str, Path]`):
48
- Can be either:
49
- - A string, the *model id* of a pretrained model hosted inside a model repo on huggingface.co.
50
- - A path to a *directory* containing a model saved using [`~OptimizedModel.save_pretrained`],
51
- """
52
- export = kwargs.pop("export", None)
53
- model_save_dir = kwargs.pop("model_save_dir", None)
54
- rbln_config = kwargs.pop("rbln_config", None)
55
- rbln_kwargs, _ = RBLNBaseModel.resolve_rbln_config(rbln_config, kwargs)
56
-
57
- device = rbln_kwargs.get("device", None)
58
- device_map = rbln_kwargs.get("device_map", None)
59
- create_runtimes = rbln_kwargs.get("create_runtimes", None)
60
- optimize_host_memory = rbln_kwargs.get("optimize_host_memory", None)
61
-
62
- with ContextRblnConfig(
63
- device=device,
64
- device_map=device_map,
65
- create_runtimes=create_runtimes,
66
- optimze_host_mem=optimize_host_memory,
67
- ):
68
- model = super().from_pretrained(pretrained_model_name_or_path=model_id, **kwargs)
69
-
70
- if export is None or export is False:
71
- return model
72
-
73
- do_classifier_free_guidance = (
74
- rbln_kwargs.pop("guidance_scale", 5.0) > 1.0 and model.unet.config.time_cond_proj_dim is None
75
- )
76
-
77
- vae = RBLNAutoencoderKL.from_pretrained(
78
- model_id=model_id,
79
- subfolder="vae",
80
- export=True,
81
- model_save_dir=model_save_dir,
82
- rbln_unet_sample_size=model.unet.config.sample_size,
83
- rbln_use_encode=False,
84
- rbln_config={**rbln_kwargs},
85
- )
86
- text_encoder = RBLNCLIPTextModel.from_pretrained(
87
- model_id=model_id,
88
- subfolder="text_encoder",
89
- export=True,
90
- model_save_dir=model_save_dir,
91
- rbln_config={**rbln_kwargs},
92
- )
93
-
94
- batch_size = rbln_kwargs.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=text_encoder.config.max_position_embeddings,
103
- rbln_batch_size=unet_batch_size,
104
- rbln_use_encode=False,
105
- rbln_is_controlnet=True if "controlnet" in model.config.keys() else False,
106
- rbln_config={**rbln_kwargs},
107
- )
108
-
109
- if model_save_dir is not None:
110
- # To skip saving original pytorch modules
111
- del (model.vae, model.text_encoder, model.unet)
112
-
113
- # Direct calling of `save_pretrained` causes config.unet = (None, None).
114
- # So config must be saved again, later.
115
- model.save_pretrained(model_save_dir)
116
-
117
- # replace modules
118
- model.vae = vae
119
- model.text_encoder = text_encoder
120
- model.unet = unet
121
-
122
- # update config to be able to load from file.
123
- update_dict = {
124
- "vae": ("optimum.rbln", "RBLNAutoencoderKL"),
125
- "text_encoder": ("optimum.rbln", "RBLNCLIPTextModel"),
126
- "unet": ("optimum.rbln", "RBLNUNet2DConditionModel"),
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
- model.models = [vae.model[0], text_encoder.model[0], unet.model[0]]
135
-
136
- if optimize_host_memory is False:
137
- model.compiled_models = [vae.compiled_models[0], text_encoder.compiled_models[0], unet.compiled_models[0]]
138
-
139
- return model
30
+ class RBLNStableDiffusionPipeline(RBLNDiffusionMixin, StableDiffusionPipeline):
31
+ _submodules = ["text_encoder", "unet", "vae"]
@@ -24,125 +24,20 @@
24
24
 
25
25
  from diffusers import StableDiffusionImg2ImgPipeline
26
26
 
27
- from ....modeling_base import RBLNBaseModel
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
- @classmethod
35
- def from_pretrained(cls, model_id, **kwargs):
36
- """
37
- 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.
38
33
 
39
- This model inherits from [`StableDiffusionPipeline`]. Check the superclass documentation for the generic methods
40
- implemented for all pipelines (downloading, saving, running on a particular device, etc.).
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.).
41
36
 
42
- It implements the methods to convert a pre-trained Stable Diffusion pipeline into a RBLNStableDiffusion pipeline by:
43
- - transferring the checkpoint weights of the original into an optimized RBLN graph,
44
- - compiling the resulting graph using the RBLN compiler.
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
+ """
45
41
 
46
- Args:
47
- model_id (`Union[str, Path]`):
48
- Can be either:
49
- - A string, the *model id* of a pretrained model hosted inside a model repo on huggingface.co.
50
- - A path to a *directory* containing a model saved using [`~OptimizedModel.save_pretrained`],
51
- """
52
- export = kwargs.pop("export", None)
53
- model_save_dir = kwargs.pop("model_save_dir", None)
54
- rbln_config = kwargs.pop("rbln_config", None)
55
- rbln_kwargs, _ = RBLNBaseModel.resolve_rbln_config(rbln_config, kwargs)
56
-
57
- device = rbln_kwargs.get("device", None)
58
- device_map = rbln_kwargs.get("device_map", None)
59
- create_runtimes = rbln_kwargs.get("create_runtimes", None)
60
- optimize_host_memory = rbln_kwargs.get("optimize_host_memory", None)
61
-
62
- with ContextRblnConfig(
63
- device=device,
64
- device_map=device_map,
65
- create_runtimes=create_runtimes,
66
- optimze_host_mem=optimize_host_memory,
67
- ):
68
- model = super().from_pretrained(pretrained_model_name_or_path=model_id, **kwargs)
69
-
70
- if export is None or export is False:
71
- return model
72
-
73
- do_classifier_free_guidance = (
74
- rbln_kwargs.pop("guidance_scale", 5.0) > 1.0 and model.unet.config.time_cond_proj_dim is None
75
- )
76
-
77
- # compile model, create runtime
78
- vae = RBLNAutoencoderKL.from_pretrained(
79
- model_id=model_id,
80
- subfolder="vae",
81
- export=True,
82
- model_save_dir=model_save_dir,
83
- rbln_unet_sample_size=model.unet.config.sample_size,
84
- rbln_use_encode=True,
85
- rbln_vae_scale_factor=model.vae_scale_factor,
86
- rbln_config={**rbln_kwargs},
87
- )
88
- text_encoder = RBLNCLIPTextModel.from_pretrained(
89
- model_id=model_id,
90
- subfolder="text_encoder",
91
- export=True,
92
- model_save_dir=model_save_dir,
93
- rbln_config={**rbln_kwargs},
94
- )
95
-
96
- batch_size = rbln_kwargs.pop("batch_size", 1)
97
- unet_batch_size = batch_size * 2 if do_classifier_free_guidance else batch_size
98
-
99
- unet = RBLNUNet2DConditionModel.from_pretrained(
100
- model_id=model_id,
101
- subfolder="unet",
102
- export=True,
103
- model_save_dir=model_save_dir,
104
- rbln_max_seq_len=text_encoder.config.max_position_embeddings,
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_kwargs},
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)
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
- # replace modules
121
- model.vae = vae
122
- model.text_encoder = text_encoder
123
- model.unet = unet
124
-
125
- # update config to be able to load from file.
126
- update_dict = {
127
- "vae": ("optimum.rbln", "RBLNAutoencoderKL"),
128
- "text_encoder": ("optimum.rbln", "RBLNCLIPTextModel"),
129
- "unet": ("optimum.rbln", "RBLNUNet2DConditionModel"),
130
- }
131
- model.register_to_config(**update_dict)
132
-
133
- if model_save_dir is not None:
134
- # overwrite to replace incorrect config
135
- model.save_config(model_save_dir)
136
-
137
- # vae encoder, vae decoder, text_encoder, unet
138
- model.models = [vae.model[0], vae.model[1], text_encoder.model[0], unet.model[0]]
139
-
140
- if optimize_host_memory is False:
141
- model.compiled_models = [
142
- vae.compiled_models[0],
143
- vae.compiled_models[1],
144
- text_encoder.compiled_models[0],
145
- unet.compiled_models[0],
146
- ]
147
-
148
- return model
42
+ original_class = StableDiffusionImg2ImgPipeline
43
+ _submodules = ["text_encoder", "unet", "vae"]
@@ -16,128 +16,9 @@
16
16
 
17
17
  from diffusers import StableDiffusionXLPipeline
18
18
 
19
- from ....modeling_base import RBLNBaseModel
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
- @classmethod
27
- def from_pretrained(cls, model_id, **kwargs):
28
- """
29
- Pipeline for text-to-image generation using Stable Diffusion XL.
30
-
31
- This model inherits from [`StableDiffusionXLPipeline`]. Check the superclass documentation for the generic methods the
32
- library implements for all the pipelines (such as downloading or saving, running on a particular device, etc.)
33
-
34
- It implements the methods to convert a pre-trained StableDiffusionXL pipeline into a RBLNStableDiffusionXL pipeline by:
35
- - transferring the checkpoint weights of the original into an optimized RBLN graph,
36
- - compiling the resulting graph using the RBLN compiler.
37
-
38
- Args:
39
- model_id (`Union[str, Path]`):
40
- Can be either:
41
- - A string, the *model id* of a pretrained model hosted inside a model repo on huggingface.co.
42
- - A path to a *directory* containing a model saved using [`~OptimizedModel.save_pretrained`],
43
- """
44
- export = kwargs.pop("export", None)
45
- model_save_dir = kwargs.pop("model_save_dir", None)
46
- rbln_config = kwargs.pop("rbln_config", None)
47
- rbln_kwargs, _ = RBLNBaseModel.resolve_rbln_config(rbln_config, kwargs)
48
-
49
- device = rbln_kwargs.get("device", None)
50
- device_map = rbln_kwargs.get("device_map", None)
51
- create_runtimes = rbln_kwargs.get("create_runtimes", None)
52
- optimize_host_memory = rbln_kwargs.get("optimize_host_memory", None)
53
-
54
- with ContextRblnConfig(
55
- device=device,
56
- device_map=device_map,
57
- create_runtimes=create_runtimes,
58
- optimze_host_mem=optimize_host_memory,
59
- ):
60
- model = super().from_pretrained(pretrained_model_name_or_path=model_id, **kwargs)
61
-
62
- if export is None or export is False:
63
- return model
64
-
65
- do_classifier_free_guidance = (
66
- rbln_kwargs.pop("guidance_scale", 5.0) > 1.0 and model.unet.config.time_cond_proj_dim is None
67
- )
68
-
69
- vae = RBLNAutoencoderKL.from_pretrained(
70
- model_id=model_id,
71
- subfolder="vae",
72
- export=True,
73
- model_save_dir=model_save_dir,
74
- rbln_unet_sample_size=model.unet.config.sample_size,
75
- rbln_use_encode=False,
76
- rbln_config={**rbln_kwargs},
77
- )
78
- text_encoder = RBLNCLIPTextModel.from_pretrained(
79
- model_id=model_id,
80
- subfolder="text_encoder",
81
- export=True,
82
- model_save_dir=model_save_dir,
83
- rbln_config={**rbln_kwargs},
84
- )
85
- text_encoder_2 = RBLNCLIPTextModelWithProjection.from_pretrained(
86
- model_id=model_id,
87
- subfolder="text_encoder_2",
88
- export=True,
89
- model_save_dir=model_save_dir,
90
- rbln_config={**rbln_kwargs},
91
- )
92
-
93
- batch_size = rbln_kwargs.pop("batch_size", 1)
94
- unet_batch_size = batch_size * 2 if do_classifier_free_guidance else batch_size
95
-
96
- unet = RBLNUNet2DConditionModel.from_pretrained(
97
- model_id=model_id,
98
- subfolder="unet",
99
- export=True,
100
- model_save_dir=model_save_dir,
101
- rbln_max_seq_len=model.text_encoder.config.max_position_embeddings,
102
- rbln_text_model_hidden_size=model.text_encoder_2.config.hidden_size,
103
- rbln_batch_size=unet_batch_size,
104
- rbln_use_encode=False,
105
- rbln_is_controlnet=True if "controlnet" in model.config.keys() else False,
106
- rbln_config={**rbln_kwargs},
107
- )
108
-
109
- if model_save_dir is not None:
110
- # To skip saving original pytorch modules
111
- del (model.vae, model.text_encoder, model.unet, model.text_encoder_2)
112
-
113
- # Direct calling of `save_pretrained` causes config.unet = (None, None).
114
- # So config must be saved again, later.
115
- model.save_pretrained(model_save_dir)
116
-
117
- model.vae = vae
118
- model.text_encoder = text_encoder
119
- model.unet = unet
120
- model.text_encoder_2 = text_encoder_2
121
- update_dict = {
122
- "vae": ("optimum.rbln", "RBLNAutoencoderKL"),
123
- "text_encoder": ("optimum.rbln", "RBLNCLIPTextModel"),
124
- "unet": ("optimum.rbln", "RBLNUNet2DConditionModel"),
125
- "text_encoder_2": ("optimum.rbln", "RBLNCLIPTextModelWithProjection"),
126
- }
127
- model.register_to_config(**update_dict)
128
-
129
- if model_save_dir is not None:
130
- # overwrite to replace incorrect config
131
- model.save_config(model_save_dir)
132
-
133
- model.models = [vae.model[0], unet.model[0], text_encoder.model[0], text_encoder_2.model[0]]
134
-
135
- if optimize_host_memory is False:
136
- model.compiled_models = [
137
- vae.compiled_models[0],
138
- unet.compiled_models[0],
139
- text_encoder.compiled_models[0],
140
- text_encoder_2.compiled_models[0],
141
- ]
142
-
143
- return model
22
+ class RBLNStableDiffusionXLPipeline(RBLNDiffusionMixin, StableDiffusionXLPipeline):
23
+ original_class = StableDiffusionXLPipeline
24
+ _submodules = ["text_encoder", "text_encoder_2", "unet", "vae"]