From 9800cc78abcc582bf3a60110deceb631d783cd20 Mon Sep 17 00:00:00 2001 From: wirthual Date: Sun, 15 Jun 2025 14:00:08 -0700 Subject: [PATCH 1/2] add version check for transformers package --- .../infinity_emb/transformer/acceleration.py | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/libs/infinity_emb/infinity_emb/transformer/acceleration.py b/libs/infinity_emb/infinity_emb/transformer/acceleration.py index bd87bc32..185a1b16 100644 --- a/libs/infinity_emb/infinity_emb/transformer/acceleration.py +++ b/libs/infinity_emb/infinity_emb/transformer/acceleration.py @@ -6,12 +6,20 @@ from infinity_emb._optional_imports import CHECK_OPTIMUM, CHECK_TORCH, CHECK_TRANSFORMERS from infinity_emb.primitives import Device +from importlib.metadata import version if CHECK_OPTIMUM.is_available: - from optimum.bettertransformer import ( # type: ignore[import-untyped] - BetterTransformer, - BetterTransformerManager, - ) + transformers_version_string = version('transformers') + transformers_version = tuple([int(number) for number in transformers_version_string.split(".")]) + if transformers_version < (4,49,0): + bettertransformer_available = True + from optimum.bettertransformer import ( # type: ignore[import-untyped] + BetterTransformer, + BetterTransformerManager, + ) + else: + bettertransformer_available = False + if CHECK_TORCH.is_available: import torch @@ -36,6 +44,9 @@ def check_if_bettertransformer_possible(engine_args: "EngineArgs") -> bool: """verifies if attempting conversion to bettertransformers should be checked.""" if not engine_args.bettertransformer: return False + + if not bettertransformer_available: + return False config = AutoConfig.from_pretrained( pretrained_model_name_or_path=engine_args.model_name_or_path, @@ -50,6 +61,12 @@ def to_bettertransformer(model: "PreTrainedModel", engine_args: "EngineArgs", lo if not engine_args.bettertransformer: return model + if not bettertransformer_available: + logger.warning( + "BetterTransformer is not available for transformers package > 4.49" + ) + return model + if engine_args.device == Device.mps or ( hasattr(model, "device") and model.device.type == "mps" ): From 274c174a4f0d97e1e4b21b18053dba6fc2b2ea7d Mon Sep 17 00:00:00 2001 From: wirthual Date: Sun, 15 Jun 2025 14:11:37 -0700 Subject: [PATCH 2/2] minor improvements --- libs/infinity_emb/infinity_emb/transformer/acceleration.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/libs/infinity_emb/infinity_emb/transformer/acceleration.py b/libs/infinity_emb/infinity_emb/transformer/acceleration.py index 185a1b16..12710b28 100644 --- a/libs/infinity_emb/infinity_emb/transformer/acceleration.py +++ b/libs/infinity_emb/infinity_emb/transformer/acceleration.py @@ -6,19 +6,18 @@ from infinity_emb._optional_imports import CHECK_OPTIMUM, CHECK_TORCH, CHECK_TRANSFORMERS from infinity_emb.primitives import Device -from importlib.metadata import version +bettertransformer_available = False if CHECK_OPTIMUM.is_available: + from importlib.metadata import version transformers_version_string = version('transformers') transformers_version = tuple([int(number) for number in transformers_version_string.split(".")]) if transformers_version < (4,49,0): - bettertransformer_available = True from optimum.bettertransformer import ( # type: ignore[import-untyped] BetterTransformer, BetterTransformerManager, ) - else: - bettertransformer_available = False + bettertransformer_available = True if CHECK_TORCH.is_available: