optimum-rbln 0.9.3.post1__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.
Potentially problematic release.
This version of optimum-rbln might be problematic. Click here for more details.
- optimum/rbln/__init__.py +505 -0
- optimum/rbln/__version__.py +34 -0
- optimum/rbln/cli.py +660 -0
- optimum/rbln/configuration_utils.py +968 -0
- optimum/rbln/diffusers/__init__.py +198 -0
- optimum/rbln/diffusers/configurations/__init__.py +37 -0
- optimum/rbln/diffusers/configurations/models/__init__.py +10 -0
- optimum/rbln/diffusers/configurations/models/configuration_autoencoder_kl.py +73 -0
- optimum/rbln/diffusers/configurations/models/configuration_autoencoder_kl_cosmos.py +84 -0
- optimum/rbln/diffusers/configurations/models/configuration_autoencoder_kl_temporal_decoder.py +67 -0
- optimum/rbln/diffusers/configurations/models/configuration_controlnet.py +64 -0
- optimum/rbln/diffusers/configurations/models/configuration_prior_transformer.py +59 -0
- optimum/rbln/diffusers/configurations/models/configuration_transformer_cosmos.py +78 -0
- optimum/rbln/diffusers/configurations/models/configuration_transformer_sd3.py +63 -0
- optimum/rbln/diffusers/configurations/models/configuration_unet_2d_condition.py +81 -0
- optimum/rbln/diffusers/configurations/models/configuration_unet_spatio_temporal_condition.py +59 -0
- optimum/rbln/diffusers/configurations/models/configuration_vq_model.py +74 -0
- optimum/rbln/diffusers/configurations/pipelines/__init__.py +34 -0
- optimum/rbln/diffusers/configurations/pipelines/configuration_controlnet.py +316 -0
- optimum/rbln/diffusers/configurations/pipelines/configuration_cosmos.py +117 -0
- optimum/rbln/diffusers/configurations/pipelines/configuration_kandinsky2_2.py +363 -0
- optimum/rbln/diffusers/configurations/pipelines/configuration_stable_diffusion.py +156 -0
- optimum/rbln/diffusers/configurations/pipelines/configuration_stable_diffusion_3.py +176 -0
- optimum/rbln/diffusers/configurations/pipelines/configuration_stable_diffusion_xl.py +159 -0
- optimum/rbln/diffusers/configurations/pipelines/configuration_stable_video_diffusion.py +114 -0
- optimum/rbln/diffusers/modeling_diffusers.py +451 -0
- optimum/rbln/diffusers/models/__init__.py +64 -0
- optimum/rbln/diffusers/models/autoencoders/__init__.py +18 -0
- optimum/rbln/diffusers/models/autoencoders/autoencoder_kl.py +255 -0
- optimum/rbln/diffusers/models/autoencoders/autoencoder_kl_cosmos.py +245 -0
- optimum/rbln/diffusers/models/autoencoders/autoencoder_kl_temporal_decoder.py +275 -0
- optimum/rbln/diffusers/models/autoencoders/vae.py +178 -0
- optimum/rbln/diffusers/models/autoencoders/vq_model.py +211 -0
- optimum/rbln/diffusers/models/controlnet.py +281 -0
- optimum/rbln/diffusers/models/transformers/__init__.py +17 -0
- optimum/rbln/diffusers/models/transformers/prior_transformer.py +160 -0
- optimum/rbln/diffusers/models/transformers/transformer_cosmos.py +344 -0
- optimum/rbln/diffusers/models/transformers/transformer_sd3.py +191 -0
- optimum/rbln/diffusers/models/unets/__init__.py +16 -0
- optimum/rbln/diffusers/models/unets/unet_2d_condition.py +408 -0
- optimum/rbln/diffusers/models/unets/unet_spatio_temporal_condition.py +201 -0
- optimum/rbln/diffusers/pipelines/__init__.py +113 -0
- optimum/rbln/diffusers/pipelines/auto_pipeline.py +307 -0
- optimum/rbln/diffusers/pipelines/controlnet/__init__.py +19 -0
- optimum/rbln/diffusers/pipelines/controlnet/multicontrolnet.py +139 -0
- optimum/rbln/diffusers/pipelines/controlnet/pipeline_controlnet.py +669 -0
- optimum/rbln/diffusers/pipelines/controlnet/pipeline_controlnet_img2img.py +640 -0
- optimum/rbln/diffusers/pipelines/controlnet/pipeline_controlnet_sd_xl.py +825 -0
- optimum/rbln/diffusers/pipelines/controlnet/pipeline_controlnet_sd_xl_img2img.py +837 -0
- optimum/rbln/diffusers/pipelines/cosmos/__init__.py +17 -0
- optimum/rbln/diffusers/pipelines/cosmos/configuration_cosmos_guardrail.py +113 -0
- optimum/rbln/diffusers/pipelines/cosmos/cosmos_guardrail.py +425 -0
- optimum/rbln/diffusers/pipelines/cosmos/pipeline_cosmos_text2world.py +128 -0
- optimum/rbln/diffusers/pipelines/cosmos/pipeline_cosmos_video2world.py +128 -0
- optimum/rbln/diffusers/pipelines/kandinsky2_2/__init__.py +23 -0
- optimum/rbln/diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2.py +34 -0
- optimum/rbln/diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_combined.py +207 -0
- optimum/rbln/diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_img2img.py +34 -0
- optimum/rbln/diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_inpaint.py +34 -0
- optimum/rbln/diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_prior.py +31 -0
- optimum/rbln/diffusers/pipelines/stable_diffusion/__init__.py +17 -0
- optimum/rbln/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion.py +32 -0
- optimum/rbln/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_img2img.py +31 -0
- optimum/rbln/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_inpaint.py +31 -0
- optimum/rbln/diffusers/pipelines/stable_diffusion_3/__init__.py +17 -0
- optimum/rbln/diffusers/pipelines/stable_diffusion_3/pipeline_stable_diffusion_3.py +31 -0
- optimum/rbln/diffusers/pipelines/stable_diffusion_3/pipeline_stable_diffusion_3_img2img.py +31 -0
- optimum/rbln/diffusers/pipelines/stable_diffusion_3/pipeline_stable_diffusion_3_inpaint.py +31 -0
- optimum/rbln/diffusers/pipelines/stable_diffusion_xl/__init__.py +17 -0
- optimum/rbln/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl.py +31 -0
- optimum/rbln/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_img2img.py +31 -0
- optimum/rbln/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_inpaint.py +31 -0
- optimum/rbln/diffusers/pipelines/stable_video_diffusion/__init__.py +15 -0
- optimum/rbln/diffusers/pipelines/stable_video_diffusion/pipeline_stable_video_diffusion.py +46 -0
- optimum/rbln/modeling.py +364 -0
- optimum/rbln/modeling_base.py +637 -0
- optimum/rbln/ops/__init__.py +19 -0
- optimum/rbln/ops/attn.py +455 -0
- optimum/rbln/ops/flash_attn.py +350 -0
- optimum/rbln/ops/kv_cache_update.py +29 -0
- optimum/rbln/ops/linear.py +32 -0
- optimum/rbln/ops/sliding_window_attn.py +111 -0
- optimum/rbln/transformers/__init__.py +340 -0
- optimum/rbln/transformers/configuration_generic.py +120 -0
- optimum/rbln/transformers/modeling_attention_utils.py +385 -0
- optimum/rbln/transformers/modeling_generic.py +280 -0
- optimum/rbln/transformers/modeling_outputs.py +37 -0
- optimum/rbln/transformers/modeling_rope_utils.py +314 -0
- optimum/rbln/transformers/models/__init__.py +343 -0
- optimum/rbln/transformers/models/audio_spectrogram_transformer/__init__.py +17 -0
- optimum/rbln/transformers/models/audio_spectrogram_transformer/configuration_audio_spectrogram_transformer.py +47 -0
- optimum/rbln/transformers/models/audio_spectrogram_transformer/modeling_audio_spectrogram_transformer.py +91 -0
- optimum/rbln/transformers/models/auto/__init__.py +31 -0
- optimum/rbln/transformers/models/auto/auto_factory.py +267 -0
- optimum/rbln/transformers/models/auto/modeling_auto.py +162 -0
- optimum/rbln/transformers/models/bart/__init__.py +17 -0
- optimum/rbln/transformers/models/bart/bart_architecture.py +163 -0
- optimum/rbln/transformers/models/bart/configuration_bart.py +36 -0
- optimum/rbln/transformers/models/bart/modeling_bart.py +86 -0
- optimum/rbln/transformers/models/bert/__init__.py +16 -0
- optimum/rbln/transformers/models/bert/bert_architecture.py +16 -0
- optimum/rbln/transformers/models/bert/configuration_bert.py +46 -0
- optimum/rbln/transformers/models/bert/modeling_bert.py +148 -0
- optimum/rbln/transformers/models/blip_2/__init__.py +20 -0
- optimum/rbln/transformers/models/blip_2/configuration_blip_2.py +115 -0
- optimum/rbln/transformers/models/blip_2/modeling_blip_2.py +526 -0
- optimum/rbln/transformers/models/clip/__init__.py +26 -0
- optimum/rbln/transformers/models/clip/configuration_clip.py +103 -0
- optimum/rbln/transformers/models/clip/modeling_clip.py +384 -0
- optimum/rbln/transformers/models/colpali/__init__.py +2 -0
- optimum/rbln/transformers/models/colpali/colpali_architecture.py +218 -0
- optimum/rbln/transformers/models/colpali/configuration_colpali.py +84 -0
- optimum/rbln/transformers/models/colpali/modeling_colpali.py +361 -0
- optimum/rbln/transformers/models/colqwen2/__init__.py +2 -0
- optimum/rbln/transformers/models/colqwen2/colqwen2_architecture.py +233 -0
- optimum/rbln/transformers/models/colqwen2/configuration_colqwen2.py +74 -0
- optimum/rbln/transformers/models/colqwen2/modeling_colqwen2.py +446 -0
- optimum/rbln/transformers/models/decoderonly/__init__.py +27 -0
- optimum/rbln/transformers/models/decoderonly/configuration_decoderonly.py +300 -0
- optimum/rbln/transformers/models/decoderonly/configuration_lora.py +411 -0
- optimum/rbln/transformers/models/decoderonly/decoderonly_architecture.py +1224 -0
- optimum/rbln/transformers/models/decoderonly/decoderonly_runtime_utils.py +508 -0
- optimum/rbln/transformers/models/decoderonly/generation_decoderonly.py +119 -0
- optimum/rbln/transformers/models/decoderonly/lora_architecture.py +204 -0
- optimum/rbln/transformers/models/decoderonly/modeling_decoderonly.py +823 -0
- optimum/rbln/transformers/models/depth_anything/__init__.py +16 -0
- optimum/rbln/transformers/models/depth_anything/configuration_depth_anything.py +24 -0
- optimum/rbln/transformers/models/depth_anything/modeling_depth_anything.py +42 -0
- optimum/rbln/transformers/models/distilbert/__init__.py +19 -0
- optimum/rbln/transformers/models/distilbert/configuration_distilbert.py +24 -0
- optimum/rbln/transformers/models/distilbert/modeling_distilbert.py +51 -0
- optimum/rbln/transformers/models/dpt/__init__.py +16 -0
- optimum/rbln/transformers/models/dpt/configuration_dpt.py +24 -0
- optimum/rbln/transformers/models/dpt/modeling_dpt.py +42 -0
- optimum/rbln/transformers/models/exaone/__init__.py +24 -0
- optimum/rbln/transformers/models/exaone/configuration_exaone.py +42 -0
- optimum/rbln/transformers/models/exaone/exaone_architecture.py +77 -0
- optimum/rbln/transformers/models/exaone/modeling_exaone.py +145 -0
- optimum/rbln/transformers/models/gemma/__init__.py +16 -0
- optimum/rbln/transformers/models/gemma/configuration_gemma.py +50 -0
- optimum/rbln/transformers/models/gemma/gemma_architecture.py +27 -0
- optimum/rbln/transformers/models/gemma/modeling_gemma.py +104 -0
- optimum/rbln/transformers/models/gemma3/__init__.py +16 -0
- optimum/rbln/transformers/models/gemma3/configuration_gemma3.py +109 -0
- optimum/rbln/transformers/models/gemma3/gemma3_architecture.py +170 -0
- optimum/rbln/transformers/models/gemma3/gemma3_runtime_utils.py +245 -0
- optimum/rbln/transformers/models/gemma3/modeling_gemma3.py +611 -0
- optimum/rbln/transformers/models/gpt2/__init__.py +16 -0
- optimum/rbln/transformers/models/gpt2/configuration_gpt2.py +50 -0
- optimum/rbln/transformers/models/gpt2/gpt2_architecture.py +93 -0
- optimum/rbln/transformers/models/gpt2/modeling_gpt2.py +55 -0
- optimum/rbln/transformers/models/grounding_dino/__init__.py +10 -0
- optimum/rbln/transformers/models/grounding_dino/configuration_grounding_dino.py +92 -0
- optimum/rbln/transformers/models/grounding_dino/grounding_dino_architecture.py +599 -0
- optimum/rbln/transformers/models/grounding_dino/modeling_grounding_dino.py +1048 -0
- optimum/rbln/transformers/models/idefics3/__init__.py +16 -0
- optimum/rbln/transformers/models/idefics3/configuration_idefics3.py +89 -0
- optimum/rbln/transformers/models/idefics3/modeling_idefics3.py +497 -0
- optimum/rbln/transformers/models/llama/__init__.py +16 -0
- optimum/rbln/transformers/models/llama/configuration_llama.py +50 -0
- optimum/rbln/transformers/models/llama/llama_architecture.py +19 -0
- optimum/rbln/transformers/models/llama/modeling_llama.py +104 -0
- optimum/rbln/transformers/models/llava/__init__.py +16 -0
- optimum/rbln/transformers/models/llava/configuration_llava.py +72 -0
- optimum/rbln/transformers/models/llava/modeling_llava.py +490 -0
- optimum/rbln/transformers/models/llava_next/__init__.py +16 -0
- optimum/rbln/transformers/models/llava_next/configuration_llava_next.py +69 -0
- optimum/rbln/transformers/models/llava_next/modeling_llava_next.py +493 -0
- optimum/rbln/transformers/models/midm/__init__.py +24 -0
- optimum/rbln/transformers/models/midm/configuration_midm.py +42 -0
- optimum/rbln/transformers/models/midm/midm_architecture.py +144 -0
- optimum/rbln/transformers/models/midm/modeling_midm.py +144 -0
- optimum/rbln/transformers/models/mistral/__init__.py +16 -0
- optimum/rbln/transformers/models/mistral/configuration_mistral.py +50 -0
- optimum/rbln/transformers/models/mistral/mistral_architecture.py +19 -0
- optimum/rbln/transformers/models/mistral/modeling_mistral.py +115 -0
- optimum/rbln/transformers/models/opt/__init__.py +16 -0
- optimum/rbln/transformers/models/opt/configuration_opt.py +29 -0
- optimum/rbln/transformers/models/opt/modeling_opt.py +102 -0
- optimum/rbln/transformers/models/opt/opt_architecture.py +74 -0
- optimum/rbln/transformers/models/pegasus/__init__.py +17 -0
- optimum/rbln/transformers/models/pegasus/configuration_pegasus.py +38 -0
- optimum/rbln/transformers/models/pegasus/modeling_pegasus.py +71 -0
- optimum/rbln/transformers/models/pegasus/pegasus_architecture.py +161 -0
- optimum/rbln/transformers/models/phi/__init__.py +16 -0
- optimum/rbln/transformers/models/phi/configuration_phi.py +50 -0
- optimum/rbln/transformers/models/phi/modeling_phi.py +92 -0
- optimum/rbln/transformers/models/phi/phi_architecture.py +115 -0
- optimum/rbln/transformers/models/pixtral/__init__.py +16 -0
- optimum/rbln/transformers/models/pixtral/configuration_pixtral.py +43 -0
- optimum/rbln/transformers/models/pixtral/modeling_pixtral.py +322 -0
- optimum/rbln/transformers/models/pixtral/pixtral_architecture.py +73 -0
- optimum/rbln/transformers/models/qwen2/__init__.py +16 -0
- optimum/rbln/transformers/models/qwen2/configuration_qwen2.py +50 -0
- optimum/rbln/transformers/models/qwen2/modeling_qwen2.py +123 -0
- optimum/rbln/transformers/models/qwen2/qwen2_architecture.py +19 -0
- optimum/rbln/transformers/models/qwen2_5_vl/__init__.py +19 -0
- optimum/rbln/transformers/models/qwen2_5_vl/configuration_qwen2_5_vl.py +111 -0
- optimum/rbln/transformers/models/qwen2_5_vl/modeling_qwen2_5_vl.py +636 -0
- optimum/rbln/transformers/models/qwen2_5_vl/qwen2_5_vl_architecture.py +220 -0
- optimum/rbln/transformers/models/qwen2_vl/__init__.py +19 -0
- optimum/rbln/transformers/models/qwen2_vl/configuration_qwen2_vl.py +88 -0
- optimum/rbln/transformers/models/qwen2_vl/modeling_qwen2_vl.py +513 -0
- optimum/rbln/transformers/models/qwen2_vl/qwen2_vl_architecture.py +165 -0
- optimum/rbln/transformers/models/qwen3/__init__.py +16 -0
- optimum/rbln/transformers/models/qwen3/configuration_qwen3.py +71 -0
- optimum/rbln/transformers/models/qwen3/modeling_qwen3.py +133 -0
- optimum/rbln/transformers/models/qwen3/qwen3_architecture.py +31 -0
- optimum/rbln/transformers/models/resnet/__init__.py +23 -0
- optimum/rbln/transformers/models/resnet/configuration_resnet.py +42 -0
- optimum/rbln/transformers/models/resnet/modeling_resnet.py +99 -0
- optimum/rbln/transformers/models/roberta/__init__.py +24 -0
- optimum/rbln/transformers/models/roberta/configuration_roberta.py +33 -0
- optimum/rbln/transformers/models/roberta/modeling_roberta.py +72 -0
- optimum/rbln/transformers/models/seq2seq/__init__.py +16 -0
- optimum/rbln/transformers/models/seq2seq/configuration_seq2seq.py +71 -0
- optimum/rbln/transformers/models/seq2seq/modeling_seq2seq.py +477 -0
- optimum/rbln/transformers/models/seq2seq/seq2seq_architecture.py +527 -0
- optimum/rbln/transformers/models/siglip/__init__.py +16 -0
- optimum/rbln/transformers/models/siglip/configuration_siglip.py +76 -0
- optimum/rbln/transformers/models/siglip/modeling_siglip.py +199 -0
- optimum/rbln/transformers/models/swin/__init__.py +16 -0
- optimum/rbln/transformers/models/swin/configuration_swin.py +42 -0
- optimum/rbln/transformers/models/swin/modeling_swin.py +354 -0
- optimum/rbln/transformers/models/t5/__init__.py +17 -0
- optimum/rbln/transformers/models/t5/configuration_t5.py +36 -0
- optimum/rbln/transformers/models/t5/modeling_t5.py +130 -0
- optimum/rbln/transformers/models/t5/t5_architecture.py +264 -0
- optimum/rbln/transformers/models/time_series_transformer/__init__.py +26 -0
- optimum/rbln/transformers/models/time_series_transformer/configuration_time_series_transformer.py +41 -0
- optimum/rbln/transformers/models/time_series_transformer/modeling_time_series_transformer.py +435 -0
- optimum/rbln/transformers/models/time_series_transformer/time_series_transformers_architecture.py +337 -0
- optimum/rbln/transformers/models/vit/__init__.py +19 -0
- optimum/rbln/transformers/models/vit/configuration_vit.py +24 -0
- optimum/rbln/transformers/models/vit/modeling_vit.py +44 -0
- optimum/rbln/transformers/models/wav2vec2/__init__.py +16 -0
- optimum/rbln/transformers/models/wav2vec2/configuration_wav2vec2.py +38 -0
- optimum/rbln/transformers/models/wav2vec2/modeling_wav2vec2.py +104 -0
- optimum/rbln/transformers/models/whisper/__init__.py +17 -0
- optimum/rbln/transformers/models/whisper/configuration_whisper.py +72 -0
- optimum/rbln/transformers/models/whisper/generation_whisper.py +159 -0
- optimum/rbln/transformers/models/whisper/modeling_whisper.py +475 -0
- optimum/rbln/transformers/models/whisper/whisper_architecture.py +349 -0
- optimum/rbln/transformers/models/xlm_roberta/__init__.py +24 -0
- optimum/rbln/transformers/models/xlm_roberta/configuration_xlm_roberta.py +32 -0
- optimum/rbln/transformers/models/xlm_roberta/modeling_xlm_roberta.py +82 -0
- optimum/rbln/transformers/utils/__init__.py +0 -0
- optimum/rbln/transformers/utils/rbln_quantization.py +589 -0
- optimum/rbln/transformers/utils/rbln_runtime_wrapper.py +79 -0
- optimum/rbln/utils/__init__.py +16 -0
- optimum/rbln/utils/decorator_utils.py +86 -0
- optimum/rbln/utils/deprecation.py +213 -0
- optimum/rbln/utils/hub.py +94 -0
- optimum/rbln/utils/import_utils.py +170 -0
- optimum/rbln/utils/logging.py +110 -0
- optimum/rbln/utils/model_utils.py +63 -0
- optimum/rbln/utils/runtime_utils.py +249 -0
- optimum/rbln/utils/save_utils.py +102 -0
- optimum/rbln/utils/submodule.py +152 -0
- optimum_rbln-0.9.3.post1.dist-info/METADATA +124 -0
- optimum_rbln-0.9.3.post1.dist-info/RECORD +264 -0
- optimum_rbln-0.9.3.post1.dist-info/WHEEL +4 -0
- optimum_rbln-0.9.3.post1.dist-info/entry_points.txt +2 -0
- optimum_rbln-0.9.3.post1.dist-info/licenses/LICENSE +201 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Copyright 2025 Rebellions Inc. All rights reserved.
|
|
2
|
+
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at:
|
|
6
|
+
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
import inspect
|
|
16
|
+
from functools import wraps
|
|
17
|
+
|
|
18
|
+
from .logging import get_logger
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
logger = get_logger(__name__)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def remove_compile_time_kwargs(func):
|
|
25
|
+
"""
|
|
26
|
+
Decorator to handle compile-time parameters during inference.
|
|
27
|
+
|
|
28
|
+
For RBLN-optimized pipelines, several parameters must be determined during compilation
|
|
29
|
+
and cannot be modified during inference. This decorator:
|
|
30
|
+
1. Removes and warns about image dimension parameters (height, width)
|
|
31
|
+
2. Removes and warns about LoRA scale in cross_attention_kwargs
|
|
32
|
+
|
|
33
|
+
Args:
|
|
34
|
+
func: The pipeline's __call__ method to be wrapped
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
@wraps(func)
|
|
38
|
+
def wrapper(self, *args, **kwargs):
|
|
39
|
+
check_params = {"height", "width"}
|
|
40
|
+
params = inspect.signature(self.original_class.__call__).parameters
|
|
41
|
+
|
|
42
|
+
# If height and width exist in the base pipeline's __call__ method arguments
|
|
43
|
+
# Otherwise, if there is no height or width of kwargs, it is filled based on the compiled size.
|
|
44
|
+
if check_params.issubset(params):
|
|
45
|
+
compiled_image_size = self.get_compiled_image_size()
|
|
46
|
+
if compiled_image_size is not None:
|
|
47
|
+
height_exists = "height" in kwargs and kwargs["height"] is not None
|
|
48
|
+
width_exists = "width" in kwargs and kwargs["width"] is not None
|
|
49
|
+
if height_exists or width_exists:
|
|
50
|
+
if not (
|
|
51
|
+
kwargs.get("height", None) == compiled_image_size[0]
|
|
52
|
+
and kwargs.get("width", None) == compiled_image_size[1]
|
|
53
|
+
):
|
|
54
|
+
logger.warning(
|
|
55
|
+
"Image dimension parameters (`height`, `width`) will be ignored during inference. "
|
|
56
|
+
"Image dimensions (%s, %s) must be specified during model compilation using from_pretrained(), (%s, %s).",
|
|
57
|
+
str(kwargs.get("height", None)),
|
|
58
|
+
str(kwargs.get("width", None)),
|
|
59
|
+
str(compiled_image_size[0]),
|
|
60
|
+
str(compiled_image_size[1]),
|
|
61
|
+
)
|
|
62
|
+
kwargs["height"] = compiled_image_size[0]
|
|
63
|
+
kwargs["width"] = compiled_image_size[1]
|
|
64
|
+
|
|
65
|
+
if "cross_attention_kwargs" in kwargs:
|
|
66
|
+
cross_attention_kwargs = kwargs.get("cross_attention_kwargs")
|
|
67
|
+
if not cross_attention_kwargs:
|
|
68
|
+
return func(self, *args, **kwargs)
|
|
69
|
+
|
|
70
|
+
has_scale = "scale" in cross_attention_kwargs
|
|
71
|
+
if has_scale:
|
|
72
|
+
logger.warning(
|
|
73
|
+
"LoRA scale in cross_attention_kwargs will be ignored during inference. "
|
|
74
|
+
"To adjust LoRA scale, specify it during model compilation using from_pretrained()."
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
# If scale is the only key, set to None
|
|
78
|
+
# Otherwise, remove scale and preserve other settings
|
|
79
|
+
if len(cross_attention_kwargs) == 1:
|
|
80
|
+
kwargs["cross_attention_kwargs"] = None
|
|
81
|
+
else:
|
|
82
|
+
kwargs["cross_attention_kwargs"].pop("scale")
|
|
83
|
+
|
|
84
|
+
return func(self, *args, **kwargs)
|
|
85
|
+
|
|
86
|
+
return wrapper
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
# Copyright 2024 The HuggingFace Team. All rights reserved.
|
|
2
|
+
# Copyright 2025 Rebellions Inc. All rights reserved.
|
|
3
|
+
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
# **********************************************************************************
|
|
17
|
+
# * NOTE: This file has been modified from its original version in *
|
|
18
|
+
# * the Hugging Face transformers library. *
|
|
19
|
+
# * Original source: *
|
|
20
|
+
# * https://github.com/huggingface/transformers/blob/v4.57.1/src/transformers/utils/deprecation.py
|
|
21
|
+
# **********************************************************************************
|
|
22
|
+
|
|
23
|
+
import inspect
|
|
24
|
+
from enum import Enum
|
|
25
|
+
from functools import wraps
|
|
26
|
+
from typing import Callable, Optional
|
|
27
|
+
|
|
28
|
+
import packaging.version
|
|
29
|
+
|
|
30
|
+
from ..__version__ import __version__
|
|
31
|
+
from .logging import get_logger
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
logger = get_logger(__name__)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def warn_deprecated_npu(npu: Optional[str] = None):
|
|
38
|
+
import rebel
|
|
39
|
+
|
|
40
|
+
npu = npu or rebel.get_npu_name()
|
|
41
|
+
if npu == "RBLN-CA02":
|
|
42
|
+
logger.warning_once(
|
|
43
|
+
"Support for the RBLN-CA02 device is provided only up to optimum-rbln v0.8.0 and has reached end of life.",
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class Action(Enum):
|
|
48
|
+
NONE = "none"
|
|
49
|
+
NOTIFY = "notify"
|
|
50
|
+
RAISE = "raise"
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
# Scenario Table for Deprecation Strategy Example
|
|
54
|
+
# Assume that current version is v0.9.6 and the deprecated version is v0.10.0
|
|
55
|
+
# |--------------------|----------------|----------------|---------------------------------------------|--------------------------------------------------------------------------------------|----------------------------------------------------------------------|
|
|
56
|
+
# | Type | v0.9.6 (as_is) | v0.9.6 (to_be) | v0.9.6 Patch | v0.9.7 Action | v0.10.0+ Action |
|
|
57
|
+
# |--------------------|----------------|----------------|---------------------------------------------|--------------------------------------------------------------------------------------|----------------------------------------------------------------------|
|
|
58
|
+
# | Modify (Key Name) | a: bool | a': bool | Add a', Keep a | 1. Only 'a' provided: replace a -> a' & future warning | In v0.10.0, raise error once, then remove decorator. |
|
|
59
|
+
# | | | | | 2. Both 'a' & 'a'' provided: ignore 'a' value & future warning | |
|
|
60
|
+
# |--------------------|----------------|----------------|---------------------------------------------|--------------------------------------------------------------------------------------|----------------------------------------------------------------------|
|
|
61
|
+
# | Modify (Value Type)| b: bool | b: str | b: Union[str, bool] | 'bool' value provided for 'b': replace with corresponding 'str' & future warning | In v0.10.0, raise error once, then remove decorator. |
|
|
62
|
+
# | | | | | | |
|
|
63
|
+
# |--------------------|----------------|----------------|---------------------------------------------|--------------------------------------------------------------------------------------|----------------------------------------------------------------------|
|
|
64
|
+
# | Deletion | c | - | Delete c or Keep c (flexible) | ignore c & future warning | In v0.10.0, raise error once, then remove decorator. |
|
|
65
|
+
# | | | | | | |
|
|
66
|
+
# |--------------------|----------------|----------------|---------------------------------------------|--------------------------------------------------------------------------------------|----------------------------------------------------------------------|
|
|
67
|
+
# | Addition | - | d | Add d, set default_value for d | No action needed as default value is set | Keep default value |
|
|
68
|
+
# |--------------------|----------------|----------------|---------------------------------------------|--------------------------------------------------------------------------------------|----------------------------------------------------------------------|
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def deprecate_kwarg(
|
|
72
|
+
old_name: str,
|
|
73
|
+
version: str,
|
|
74
|
+
new_name: Optional[str] = None,
|
|
75
|
+
deprecated_type: Optional[type] = None,
|
|
76
|
+
value_replacer: Optional[Callable] = None,
|
|
77
|
+
raise_if_greater_or_equal_version: bool = True,
|
|
78
|
+
raise_if_both_names: bool = False,
|
|
79
|
+
additional_message: Optional[str] = None,
|
|
80
|
+
):
|
|
81
|
+
"""
|
|
82
|
+
Function or method decorator to notify users about deprecated keyword arguments, replacing them with a new name if specified,
|
|
83
|
+
or handling deprecated value types.
|
|
84
|
+
|
|
85
|
+
This decorator allows you to:
|
|
86
|
+
- Notify users when a keyword argument name is deprecated (Scenario 'a', 'c').
|
|
87
|
+
- Notify users when a specific value type for an argument is deprecated (Scenario 'b').
|
|
88
|
+
- Automatically replace deprecated keyword arguments with new ones.
|
|
89
|
+
- Automatically replace deprecated values with new ones using a replacer function.
|
|
90
|
+
- Raise an error if deprecated arguments are used, depending on the specified conditions.
|
|
91
|
+
|
|
92
|
+
By default, the decorator notifies the user about the deprecated argument while the `optimum.rbln.__version__` < specified `version`
|
|
93
|
+
in the decorator. To keep notifications with any version `warn_if_greater_or_equal_version=True` can be set.
|
|
94
|
+
|
|
95
|
+
Parameters:
|
|
96
|
+
old_name (`str`):
|
|
97
|
+
Name of the deprecated keyword argument, or the argument with a deprecated value type.
|
|
98
|
+
version (`str`):
|
|
99
|
+
The version in which the keyword argument or value type was (or will be) deprecated.
|
|
100
|
+
new_name (`Optional[str]`, *optional*):
|
|
101
|
+
The new name for the deprecated keyword argument. If specified, the deprecated keyword argument will be replaced with this new name (Scenario 'a').
|
|
102
|
+
deprecated_type (`type`, *optional*):
|
|
103
|
+
The deprecated type for the keyword argument specified by `old_name` (Scenario 'b').
|
|
104
|
+
If this is set, `new_name` should typically be `None`.
|
|
105
|
+
value_replacer (`Callable`, *optional*):
|
|
106
|
+
A function that takes the old (deprecated type) value and returns a new value (Scenario 'b').
|
|
107
|
+
Used in conjunction with `deprecated_type`. If provided, the value will be automatically converted.
|
|
108
|
+
raise_if_greater_or_equal_version (`bool`, *optional*, defaults to `False`):
|
|
109
|
+
Whether to raise `ValueError` if current `optimum.rbln.` version is greater or equal to the deprecated version.
|
|
110
|
+
raise_if_both_names (`bool`, *optional*, defaults to `False`):
|
|
111
|
+
Whether to raise `ValueError` if both deprecated and new keyword arguments are set (only for Scenario 'a').
|
|
112
|
+
additional_message (`Optional[str]`, *optional*):
|
|
113
|
+
An additional message to append to the default deprecation message.
|
|
114
|
+
|
|
115
|
+
Raises:
|
|
116
|
+
ValueError:
|
|
117
|
+
If raise_if_greater_or_equal_version is True and the current version is greater than or equal to the deprecated version, or if raise_if_both_names is True and both old and new keyword arguments are provided.
|
|
118
|
+
|
|
119
|
+
Returns:
|
|
120
|
+
Callable:
|
|
121
|
+
A wrapped function that handles the deprecated keyword arguments according to the specified parameters.
|
|
122
|
+
"""
|
|
123
|
+
|
|
124
|
+
deprecated_version = packaging.version.parse(version)
|
|
125
|
+
current_version = packaging.version.parse(__version__)
|
|
126
|
+
is_greater_or_equal_version = current_version >= deprecated_version
|
|
127
|
+
|
|
128
|
+
if is_greater_or_equal_version:
|
|
129
|
+
version_message = f"and removed starting from version {version}"
|
|
130
|
+
else:
|
|
131
|
+
version_message = f"and will be removed in version {version}"
|
|
132
|
+
|
|
133
|
+
def wrapper(func):
|
|
134
|
+
# Required for better warning message
|
|
135
|
+
sig = inspect.signature(func)
|
|
136
|
+
function_named_args = set(sig.parameters.keys())
|
|
137
|
+
is_instance_method = "self" in function_named_args
|
|
138
|
+
is_class_method = "cls" in function_named_args
|
|
139
|
+
|
|
140
|
+
@wraps(func)
|
|
141
|
+
def wrapped_func(*args, **kwargs):
|
|
142
|
+
# Get class + function name (just for better warning message)
|
|
143
|
+
func_name = func.__name__
|
|
144
|
+
if is_instance_method:
|
|
145
|
+
func_name = f"{args[0].__class__.__name__}.{func_name}"
|
|
146
|
+
elif is_class_method:
|
|
147
|
+
func_name = f"{args[0].__name__}.{func_name}"
|
|
148
|
+
|
|
149
|
+
minimum_action = Action.NONE
|
|
150
|
+
message = None
|
|
151
|
+
|
|
152
|
+
# Scenario A: Rename (e.g., a -> a')
|
|
153
|
+
if new_name is not None:
|
|
154
|
+
if old_name in kwargs and new_name in kwargs:
|
|
155
|
+
minimum_action = Action.RAISE if raise_if_both_names else Action.NOTIFY
|
|
156
|
+
message = f"Both `{old_name}` and `{new_name}` are set for `{func_name}`. Using `{new_name}={kwargs[new_name]}` and ignoring deprecated `{old_name}={kwargs[old_name]}`."
|
|
157
|
+
kwargs.pop(old_name)
|
|
158
|
+
|
|
159
|
+
elif old_name in kwargs and new_name not in kwargs:
|
|
160
|
+
minimum_action = Action.NOTIFY
|
|
161
|
+
message = (
|
|
162
|
+
f"`{old_name}` is deprecated {version_message} for `{func_name}`. Use `{new_name}` instead."
|
|
163
|
+
)
|
|
164
|
+
kwargs[new_name] = kwargs.pop(old_name)
|
|
165
|
+
|
|
166
|
+
# Scenario B: Value Type Change (e.g., b: bool -> str)
|
|
167
|
+
if deprecated_type is not None:
|
|
168
|
+
key_to_check = old_name if new_name is None else new_name # For Senario A + B Mixed
|
|
169
|
+
if key_to_check in kwargs and isinstance(kwargs[key_to_check], deprecated_type):
|
|
170
|
+
minimum_action = Action.NOTIFY
|
|
171
|
+
old_value = kwargs[key_to_check]
|
|
172
|
+
message = f"Using type `{deprecated_type.__name__}` for argument `{key_to_check}` in `{func_name}` is deprecated {version_message}."
|
|
173
|
+
|
|
174
|
+
if value_replacer:
|
|
175
|
+
try:
|
|
176
|
+
new_value = value_replacer(old_value)
|
|
177
|
+
kwargs[key_to_check] = new_value
|
|
178
|
+
message += f" Value `{old_value}` has been automatically replaced with `{new_value}`."
|
|
179
|
+
except Exception as e:
|
|
180
|
+
logger.error(f"Error during deprecated value replacement for {key_to_check}: {e}")
|
|
181
|
+
message += f" Automatic replacement failed: {e}. Passing original value."
|
|
182
|
+
else:
|
|
183
|
+
raise ValueError(
|
|
184
|
+
f"value_replacer should be provided when deprecated_type is set for {key_to_check} in {func_name}"
|
|
185
|
+
)
|
|
186
|
+
|
|
187
|
+
# Scenario C: Deletion (e.g., c)
|
|
188
|
+
if old_name in kwargs and new_name is None and deprecated_type is None:
|
|
189
|
+
minimum_action = Action.NOTIFY
|
|
190
|
+
message = f"`{old_name}` is deprecated {version_message} for `{func_name}`."
|
|
191
|
+
kwargs.pop(old_name)
|
|
192
|
+
|
|
193
|
+
if message is not None and additional_message is not None:
|
|
194
|
+
message = f"{message} {additional_message}"
|
|
195
|
+
|
|
196
|
+
# update minimum_action if argument is ALREADY deprecated (current version >= deprecated version)
|
|
197
|
+
if is_greater_or_equal_version:
|
|
198
|
+
# change to NOTIFY -> RAISE in case we want to raise error for already deprecated arguments
|
|
199
|
+
if raise_if_greater_or_equal_version:
|
|
200
|
+
minimum_action = Action.RAISE
|
|
201
|
+
|
|
202
|
+
# raise error or notify user
|
|
203
|
+
if minimum_action == Action.RAISE:
|
|
204
|
+
raise ValueError(message)
|
|
205
|
+
elif minimum_action == Action.NOTIFY:
|
|
206
|
+
# DeprecationWarning is ignored by default, so we use FutureWarning instead
|
|
207
|
+
logger.warning(message, stacklevel=2)
|
|
208
|
+
|
|
209
|
+
return func(*args, **kwargs)
|
|
210
|
+
|
|
211
|
+
return wrapped_func
|
|
212
|
+
|
|
213
|
+
return wrapper
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Copyright 2025 Rebellions Inc. All rights reserved.
|
|
2
|
+
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at:
|
|
6
|
+
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
import json
|
|
16
|
+
from pathlib import Path
|
|
17
|
+
from typing import List, Optional, Union
|
|
18
|
+
|
|
19
|
+
from huggingface_hub import HfApi, get_token, hf_hub_download
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def pull_compiled_model_from_hub(
|
|
23
|
+
model_id: Union[str, Path],
|
|
24
|
+
subfolder: str,
|
|
25
|
+
token: Union[bool, str],
|
|
26
|
+
revision: Optional[str],
|
|
27
|
+
cache_dir: Optional[str],
|
|
28
|
+
force_download: bool,
|
|
29
|
+
local_files_only: bool,
|
|
30
|
+
) -> Path:
|
|
31
|
+
"""Pull model files from the HuggingFace Hub."""
|
|
32
|
+
huggingface_token = _get_huggingface_token(token)
|
|
33
|
+
repo_files = list(
|
|
34
|
+
map(
|
|
35
|
+
Path,
|
|
36
|
+
HfApi().list_repo_files(model_id, revision=revision, token=huggingface_token),
|
|
37
|
+
)
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
pattern_rbln = "*.rbln" if subfolder == "" else f"{subfolder}/*.rbln"
|
|
41
|
+
rbln_files = [p for p in repo_files if p.match(pattern_rbln)]
|
|
42
|
+
|
|
43
|
+
pattern_config = "rbln_config.json" if subfolder == "" else f"{subfolder}/rbln_config.json"
|
|
44
|
+
rbln_config_filenames = [p for p in repo_files if p.match(pattern_config)]
|
|
45
|
+
|
|
46
|
+
validate_files(rbln_files, rbln_config_filenames, f"repository {model_id}")
|
|
47
|
+
|
|
48
|
+
filenames = [str(path) for path in repo_files]
|
|
49
|
+
|
|
50
|
+
for filename in filenames:
|
|
51
|
+
rbln_config_cache_path = hf_hub_download(
|
|
52
|
+
repo_id=model_id,
|
|
53
|
+
filename=filename,
|
|
54
|
+
subfolder=subfolder,
|
|
55
|
+
token=token,
|
|
56
|
+
revision=revision,
|
|
57
|
+
cache_dir=cache_dir,
|
|
58
|
+
force_download=force_download,
|
|
59
|
+
local_files_only=local_files_only,
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
return Path(rbln_config_cache_path).parent
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def validate_files(
|
|
66
|
+
files: List[Path],
|
|
67
|
+
config_files: List[Path],
|
|
68
|
+
location: str,
|
|
69
|
+
):
|
|
70
|
+
"""Validate the presence and count of required files."""
|
|
71
|
+
if len(config_files) == 0:
|
|
72
|
+
raise FileNotFoundError(f"Could not find `rbln_config.json` file in {location}")
|
|
73
|
+
|
|
74
|
+
if len(config_files) > 1:
|
|
75
|
+
raise FileExistsError(f"Multiple rbln_config.json files found in {location}. This is not expected.")
|
|
76
|
+
|
|
77
|
+
try:
|
|
78
|
+
with open(config_files[0], "r") as f:
|
|
79
|
+
config_data = json.load(f)
|
|
80
|
+
compile_cfgs = config_data.get("_compile_cfgs", [])
|
|
81
|
+
if len(compile_cfgs) == 0:
|
|
82
|
+
# If compile_cfgs is empty, we don't need .rbln files
|
|
83
|
+
return
|
|
84
|
+
except (json.JSONDecodeError, KeyError, OSError):
|
|
85
|
+
pass
|
|
86
|
+
|
|
87
|
+
if len(files) == 0:
|
|
88
|
+
raise FileNotFoundError(f"Could not find any rbln model file in {location}")
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def _get_huggingface_token(token: Union[bool, str]) -> str:
|
|
92
|
+
if isinstance(token, str):
|
|
93
|
+
return token
|
|
94
|
+
return get_token()
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
# Copyright 2025 Rebellions Inc. All rights reserved.
|
|
2
|
+
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at:
|
|
6
|
+
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
import importlib.metadata
|
|
16
|
+
import importlib.util
|
|
17
|
+
import warnings
|
|
18
|
+
from dataclasses import dataclass
|
|
19
|
+
|
|
20
|
+
from packaging.version import Version
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@dataclass
|
|
24
|
+
class VersionCompat:
|
|
25
|
+
package_name: str
|
|
26
|
+
min_version: str
|
|
27
|
+
max_version: str
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
RBLN_VERSION_COMPATS = {
|
|
31
|
+
"0.7.3": [
|
|
32
|
+
VersionCompat(
|
|
33
|
+
package_name="rebel-compiler",
|
|
34
|
+
min_version="0.7.3",
|
|
35
|
+
max_version="0.7.4",
|
|
36
|
+
),
|
|
37
|
+
],
|
|
38
|
+
"0.7.2": [
|
|
39
|
+
VersionCompat(
|
|
40
|
+
package_name="rebel-compiler",
|
|
41
|
+
min_version="0.7.2",
|
|
42
|
+
max_version="0.7.3",
|
|
43
|
+
),
|
|
44
|
+
],
|
|
45
|
+
"0.2.0": [
|
|
46
|
+
VersionCompat(
|
|
47
|
+
package_name="rebel-compiler",
|
|
48
|
+
min_version="0.7.1",
|
|
49
|
+
max_version="0.7.2",
|
|
50
|
+
),
|
|
51
|
+
],
|
|
52
|
+
"0.1.15": [
|
|
53
|
+
VersionCompat(
|
|
54
|
+
package_name="rebel-compiler",
|
|
55
|
+
min_version="0.6.2",
|
|
56
|
+
max_version="0.6.3",
|
|
57
|
+
),
|
|
58
|
+
],
|
|
59
|
+
"0.1.14": [
|
|
60
|
+
VersionCompat(
|
|
61
|
+
package_name="rebel-compiler",
|
|
62
|
+
min_version="0.6.2",
|
|
63
|
+
max_version="0.6.3",
|
|
64
|
+
),
|
|
65
|
+
],
|
|
66
|
+
"0.1.13": [
|
|
67
|
+
VersionCompat(
|
|
68
|
+
package_name="rebel-compiler",
|
|
69
|
+
min_version="0.6.0",
|
|
70
|
+
max_version="0.6.2",
|
|
71
|
+
),
|
|
72
|
+
],
|
|
73
|
+
"0.1.12": [
|
|
74
|
+
VersionCompat(
|
|
75
|
+
package_name="rebel-compiler",
|
|
76
|
+
min_version="0.5.12",
|
|
77
|
+
max_version="0.5.13",
|
|
78
|
+
),
|
|
79
|
+
],
|
|
80
|
+
"0.1.11": [
|
|
81
|
+
VersionCompat(
|
|
82
|
+
package_name="rebel-compiler",
|
|
83
|
+
min_version="0.5.10",
|
|
84
|
+
max_version="0.5.11",
|
|
85
|
+
),
|
|
86
|
+
],
|
|
87
|
+
"0.1.10": [
|
|
88
|
+
VersionCompat(
|
|
89
|
+
package_name="rebel-compiler",
|
|
90
|
+
min_version="0.5.10",
|
|
91
|
+
max_version="0.5.11",
|
|
92
|
+
),
|
|
93
|
+
],
|
|
94
|
+
"0.1.9": [
|
|
95
|
+
VersionCompat(
|
|
96
|
+
package_name="rebel-compiler",
|
|
97
|
+
min_version="0.5.9",
|
|
98
|
+
max_version="0.5.10",
|
|
99
|
+
),
|
|
100
|
+
],
|
|
101
|
+
"0.1.8": [
|
|
102
|
+
VersionCompat(
|
|
103
|
+
package_name="rebel-compiler",
|
|
104
|
+
min_version="0.5.8",
|
|
105
|
+
max_version="0.5.9",
|
|
106
|
+
),
|
|
107
|
+
],
|
|
108
|
+
"0.1.7": [
|
|
109
|
+
VersionCompat(
|
|
110
|
+
package_name="rebel-compiler",
|
|
111
|
+
min_version="0.5.7",
|
|
112
|
+
max_version="0.5.8",
|
|
113
|
+
),
|
|
114
|
+
],
|
|
115
|
+
"0.1.4": [
|
|
116
|
+
VersionCompat(
|
|
117
|
+
package_name="rebel-compiler",
|
|
118
|
+
min_version="0.5.2",
|
|
119
|
+
max_version="0.5.3",
|
|
120
|
+
),
|
|
121
|
+
],
|
|
122
|
+
"0.1.0": [
|
|
123
|
+
VersionCompat(
|
|
124
|
+
package_name="rebel-compiler",
|
|
125
|
+
min_version="0.5.0",
|
|
126
|
+
max_version="0.5.1",
|
|
127
|
+
),
|
|
128
|
+
],
|
|
129
|
+
"0.0.0": [],
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
def is_rbln_available() -> bool:
|
|
134
|
+
return importlib.util.find_spec("rebel-compiler") is not None
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
def check_version_compats() -> None:
|
|
138
|
+
warnings.filterwarnings(action="always", category=ImportWarning, module="optimum.rbln")
|
|
139
|
+
my_version = importlib.metadata.version("optimum-rbln")
|
|
140
|
+
target_version = list(filter(lambda v: Version(my_version) >= Version(v), RBLN_VERSION_COMPATS.keys()))[0]
|
|
141
|
+
for compat in RBLN_VERSION_COMPATS[target_version]:
|
|
142
|
+
try:
|
|
143
|
+
dep_version = importlib.metadata.version(compat.package_name)
|
|
144
|
+
except importlib.metadata.PackageNotFoundError:
|
|
145
|
+
warnings.warn(f"optimum-rbln requires {compat.package_name} to be installed.", ImportWarning)
|
|
146
|
+
continue
|
|
147
|
+
# For versions 0.7.2 and above, don't show warning for rebel-compiler if base versions match
|
|
148
|
+
|
|
149
|
+
if compat.package_name == "rebel-compiler":
|
|
150
|
+
# For optimum-rbln versions 0.7.2 and above, suppress the warning if the base versions of
|
|
151
|
+
# optimum-rbln and rebel-compiler match (e.g., 0.7.x with 0.7.y).
|
|
152
|
+
if (
|
|
153
|
+
Version(my_version) >= Version("0.7.2")
|
|
154
|
+
and Version(my_version).base_version == Version(dep_version).base_version
|
|
155
|
+
):
|
|
156
|
+
continue
|
|
157
|
+
else:
|
|
158
|
+
warnings.warn(
|
|
159
|
+
f"Version mismatch detected: optimum-rbln v{my_version} and {compat.package_name} v{dep_version} have different base versions. "
|
|
160
|
+
f"For optimal performance and compatibility, please ensure both packages share the same major and minor version numbers. "
|
|
161
|
+
"Please refer to our SDK release notes at https://docs.rbln.ai/about_atom/release_note.html",
|
|
162
|
+
ImportWarning,
|
|
163
|
+
)
|
|
164
|
+
else:
|
|
165
|
+
if not Version(compat.min_version) <= Version(dep_version) < Version(compat.max_version):
|
|
166
|
+
warnings.warn(
|
|
167
|
+
f"optimum-rbln v{my_version} is compatible to {compat.package_name} v{compat.min_version} to v{compat.max_version}. (you are currently using v{dep_version})\n"
|
|
168
|
+
"Please refer to our SDK release notes at https://docs.rbln.ai/about_atom/release_note.html",
|
|
169
|
+
ImportWarning,
|
|
170
|
+
)
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# Copyright 2020 Optuna, Hugging Face
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
# Copyright 2025 Rebellions Inc. All rights reserved.
|
|
16
|
+
|
|
17
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
18
|
+
# you may not use this file except in compliance with the License.
|
|
19
|
+
# You may obtain a copy of the License at:
|
|
20
|
+
|
|
21
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
22
|
+
|
|
23
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
24
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
25
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
26
|
+
# See the License for the specific language governing permissions and
|
|
27
|
+
# limitations under the License.
|
|
28
|
+
|
|
29
|
+
"""
|
|
30
|
+
Logging utilities.
|
|
31
|
+
Modified from `transformers.utils.logging.py`
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
import logging
|
|
35
|
+
import os
|
|
36
|
+
import sys
|
|
37
|
+
import threading
|
|
38
|
+
from typing import Optional
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
_lock = threading.Lock()
|
|
42
|
+
_default_handler: Optional[logging.Handler] = None
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
log_levels = {
|
|
46
|
+
"debug": logging.DEBUG,
|
|
47
|
+
"info": logging.INFO,
|
|
48
|
+
"warning": logging.WARNING,
|
|
49
|
+
"error": logging.ERROR,
|
|
50
|
+
"critical": logging.CRITICAL,
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
_default_log_level = logging.INFO
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def _get_default_logging_level():
|
|
57
|
+
env_level_str = os.getenv("OPTIMUM_RBLN_VERBOSE", None)
|
|
58
|
+
if env_level_str:
|
|
59
|
+
if env_level_str in log_levels:
|
|
60
|
+
return log_levels[env_level_str]
|
|
61
|
+
else:
|
|
62
|
+
logging.getLogger().warning(
|
|
63
|
+
f"Unknown option OPTIMUM_RBLN_VERBOSE={env_level_str}, "
|
|
64
|
+
f"has to be one of: {', '.join(log_levels.keys())}"
|
|
65
|
+
)
|
|
66
|
+
return _default_log_level
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def _get_library_name() -> str:
|
|
70
|
+
return "optimum.rbln"
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def _get_library_root_logger() -> logging.Logger:
|
|
74
|
+
return logging.getLogger(_get_library_name())
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def _configure_library_root_logger() -> None:
|
|
78
|
+
global _default_handler
|
|
79
|
+
|
|
80
|
+
with _lock:
|
|
81
|
+
if _default_handler:
|
|
82
|
+
# This library has already configured the library root logger.
|
|
83
|
+
return
|
|
84
|
+
_default_handler = logging.StreamHandler() # Set sys.stderr as stream.
|
|
85
|
+
# set defaults based on https://github.com/pyinstaller/pyinstaller/issues/7334#issuecomment-1357447176
|
|
86
|
+
if sys.stderr is None:
|
|
87
|
+
sys.stderr = open(os.devnull, "w")
|
|
88
|
+
|
|
89
|
+
_default_handler.flush = sys.stderr.flush
|
|
90
|
+
|
|
91
|
+
# Apply our default configuration to the library root logger.
|
|
92
|
+
library_root_logger = _get_library_root_logger()
|
|
93
|
+
library_root_logger.addHandler(_default_handler)
|
|
94
|
+
library_root_logger.setLevel(_get_default_logging_level())
|
|
95
|
+
formatter = logging.Formatter("%(asctime)s %(levelname)s [%(name)s] %(message)s")
|
|
96
|
+
_default_handler.setFormatter(formatter)
|
|
97
|
+
|
|
98
|
+
library_root_logger.propagate = False
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def get_logger(name: Optional[str] = None) -> logging.Logger:
|
|
102
|
+
"""
|
|
103
|
+
Return a logger with the specified name.
|
|
104
|
+
"""
|
|
105
|
+
|
|
106
|
+
if name is None:
|
|
107
|
+
name = _get_library_name()
|
|
108
|
+
|
|
109
|
+
_configure_library_root_logger()
|
|
110
|
+
return logging.getLogger(name)
|