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.
Files changed (52) hide show
  1. optimum/rbln/__init__.py +5 -1
  2. optimum/rbln/__version__.py +1 -1
  3. optimum/rbln/diffusers/models/autoencoder_kl.py +30 -61
  4. optimum/rbln/diffusers/models/controlnet.py +36 -56
  5. optimum/rbln/diffusers/models/unet_2d_condition.py +57 -153
  6. optimum/rbln/diffusers/pipelines/__init__.py +40 -12
  7. optimum/rbln/diffusers/pipelines/controlnet/multicontrolnet.py +7 -0
  8. optimum/rbln/diffusers/pipelines/controlnet/pipeline_controlnet.py +9 -185
  9. optimum/rbln/diffusers/pipelines/controlnet/pipeline_controlnet_img2img.py +8 -190
  10. optimum/rbln/diffusers/pipelines/controlnet/pipeline_controlnet_sd_xl.py +8 -191
  11. optimum/rbln/diffusers/pipelines/controlnet/pipeline_controlnet_sd_xl_img2img.py +8 -192
  12. optimum/rbln/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion.py +3 -110
  13. optimum/rbln/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_img2img.py +12 -115
  14. optimum/rbln/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl.py +4 -122
  15. optimum/rbln/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_img2img.py +4 -125
  16. optimum/rbln/modeling_base.py +12 -5
  17. optimum/rbln/modeling_diffusers.py +400 -0
  18. optimum/rbln/transformers/__init__.py +2 -0
  19. optimum/rbln/transformers/cache_utils.py +5 -9
  20. optimum/rbln/transformers/modeling_rope_utils.py +283 -0
  21. optimum/rbln/transformers/models/__init__.py +80 -31
  22. optimum/rbln/transformers/models/clip/modeling_clip.py +13 -22
  23. optimum/rbln/transformers/models/decoderonly/__init__.py +0 -2
  24. optimum/rbln/transformers/models/decoderonly/decoderonly_architecture.py +376 -218
  25. optimum/rbln/transformers/models/decoderonly/modeling_decoderonly.py +74 -16
  26. optimum/rbln/transformers/models/exaone/exaone_architecture.py +18 -9
  27. optimum/rbln/transformers/models/exaone/modeling_exaone.py +4 -29
  28. optimum/rbln/transformers/models/gemma/gemma_architecture.py +12 -2
  29. optimum/rbln/transformers/models/gemma/modeling_gemma.py +4 -28
  30. optimum/rbln/transformers/models/gpt2/modeling_gpt2.py +4 -30
  31. optimum/rbln/transformers/models/llama/modeling_llama.py +4 -28
  32. optimum/rbln/transformers/models/llava_next/modeling_llava_next.py +27 -8
  33. optimum/rbln/transformers/models/midm/midm_architecture.py +4 -15
  34. optimum/rbln/transformers/models/midm/modeling_midm.py +4 -29
  35. optimum/rbln/transformers/models/mistral/modeling_mistral.py +4 -29
  36. optimum/rbln/transformers/models/phi/modeling_phi.py +5 -31
  37. optimum/rbln/transformers/models/phi/phi_architecture.py +75 -159
  38. optimum/rbln/transformers/models/qwen2/modeling_qwen2.py +5 -29
  39. optimum/rbln/transformers/models/t5/__init__.py +1 -1
  40. optimum/rbln/transformers/models/t5/modeling_t5.py +57 -4
  41. optimum/rbln/transformers/models/whisper/modeling_whisper.py +1 -1
  42. optimum/rbln/transformers/utils/rbln_quantization.py +8 -2
  43. optimum/rbln/utils/context.py +58 -0
  44. optimum/rbln/utils/decorator_utils.py +55 -0
  45. optimum/rbln/utils/import_utils.py +7 -0
  46. optimum/rbln/utils/runtime_utils.py +4 -4
  47. optimum/rbln/utils/timer_utils.py +2 -2
  48. {optimum_rbln-0.1.12.dist-info → optimum_rbln-0.1.13.dist-info}/METADATA +8 -7
  49. {optimum_rbln-0.1.12.dist-info → optimum_rbln-0.1.13.dist-info}/RECORD +52 -48
  50. {optimum_rbln-0.1.12.dist-info → optimum_rbln-0.1.13.dist-info}/WHEEL +0 -0
  51. {optimum_rbln-0.1.12.dist-info → optimum_rbln-0.1.13.dist-info}/entry_points.txt +0 -0
  52. {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 ....modeling_config import use_rbln_config
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
- @use_rbln_config
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
- This model inherits from [`StableDiffusionPipeline`]. Check the superclass documentation for the generic methods
41
- 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.).
42
36
 
43
- It implements the methods to convert a pre-trained Stable Diffusion pipeline into a RBLNStableDiffusion pipeline by:
44
- - transferring the checkpoint weights of the original into an optimized RBLN graph,
45
- - 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
+ """
46
41
 
47
- Args:
48
- model_id (`Union[str, Path]`):
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 ....modeling_config import use_rbln_config
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
- @use_rbln_config
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"]
@@ -16,130 +16,9 @@
16
16
 
17
17
  from diffusers import StableDiffusionXLImg2ImgPipeline
18
18
 
19
- from ....modeling_config import use_rbln_config
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
- @classmethod
27
- @use_rbln_config
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"]
@@ -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
- models = (
451
- cls._create_runtimes(rbln_compiled_models, rbln_config.device_map)
452
- if rbln_config.create_runtimes
453
- else UnavailableRuntime()
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,