From c3c27aef3429e4d4cdff9c3d036c569da5df7276 Mon Sep 17 00:00:00 2001 From: Animesh Jain Date: Fri, 27 Dec 2024 13:38:17 -0800 Subject: [PATCH] [dynamo] Remove HFPretrained config hack (#143698) Pull Request resolved: https://github.com/pytorch/pytorch/pull/143698 Approved by: https://github.com/williamwen42, https://github.com/jansel ghstack dependencies: #143888 --- .../aot_eager_huggingface_inference.csv | 4 +- .../aot_eager_huggingface_training.csv | 4 +- ...tor_amp_freezing_huggingface_inference.csv | 4 +- ...nductor_freezing_huggingface_inference.csv | 4 +- .../cpu_inductor_huggingface_inference.csv | 4 +- .../dynamic_inductor_huggingface_training.csv | 4 +- .../cu124/inductor_huggingface_training.csv | 4 +- ...ynamic_aot_eager_huggingface_inference.csv | 4 +- ...dynamic_aot_eager_huggingface_training.csv | 4 +- ...mic_cpu_inductor_huggingface_inference.csv | 4 +- ...dynamic_inductor_huggingface_inference.csv | 4 +- .../dynamic_inductor_huggingface_training.csv | 4 +- .../dynamo_eager_huggingface_inference.csv | 4 +- .../dynamo_eager_huggingface_training.csv | 4 +- .../inductor_huggingface_inference.csv | 4 +- .../inductor_huggingface_training.csv | 4 +- torch/_dynamo/variables/builder.py | 4 -- torch/_dynamo/variables/builtin.py | 13 ----- torch/_dynamo/variables/dicts.py | 55 +------------------ 19 files changed, 33 insertions(+), 103 deletions(-) diff --git a/benchmarks/dynamo/ci_expected_accuracy/aot_eager_huggingface_inference.csv b/benchmarks/dynamo/ci_expected_accuracy/aot_eager_huggingface_inference.csv index 349239b058a7..fd57a3b4cbf3 100644 --- a/benchmarks/dynamo/ci_expected_accuracy/aot_eager_huggingface_inference.csv +++ b/benchmarks/dynamo/ci_expected_accuracy/aot_eager_huggingface_inference.csv @@ -82,7 +82,7 @@ ElectraForQuestionAnswering,pass,0 -GPT2ForSequenceClassification,pass,2 +GPT2ForSequenceClassification,pass,0 @@ -94,7 +94,7 @@ LayoutLMForMaskedLM,pass,0 -LayoutLMForSequenceClassification,pass,2 +LayoutLMForSequenceClassification,pass,0 diff --git a/benchmarks/dynamo/ci_expected_accuracy/aot_eager_huggingface_training.csv b/benchmarks/dynamo/ci_expected_accuracy/aot_eager_huggingface_training.csv index 08dad9b4a06a..8202281ed9bc 100644 --- a/benchmarks/dynamo/ci_expected_accuracy/aot_eager_huggingface_training.csv +++ b/benchmarks/dynamo/ci_expected_accuracy/aot_eager_huggingface_training.csv @@ -82,7 +82,7 @@ ElectraForQuestionAnswering,pass,5 -GPT2ForSequenceClassification,pass,7 +GPT2ForSequenceClassification,pass,5 @@ -94,7 +94,7 @@ LayoutLMForMaskedLM,pass,5 -LayoutLMForSequenceClassification,pass,7 +LayoutLMForSequenceClassification,pass,5 diff --git a/benchmarks/dynamo/ci_expected_accuracy/cpu_inductor_amp_freezing_huggingface_inference.csv b/benchmarks/dynamo/ci_expected_accuracy/cpu_inductor_amp_freezing_huggingface_inference.csv index 349239b058a7..fd57a3b4cbf3 100644 --- a/benchmarks/dynamo/ci_expected_accuracy/cpu_inductor_amp_freezing_huggingface_inference.csv +++ b/benchmarks/dynamo/ci_expected_accuracy/cpu_inductor_amp_freezing_huggingface_inference.csv @@ -82,7 +82,7 @@ ElectraForQuestionAnswering,pass,0 -GPT2ForSequenceClassification,pass,2 +GPT2ForSequenceClassification,pass,0 @@ -94,7 +94,7 @@ LayoutLMForMaskedLM,pass,0 -LayoutLMForSequenceClassification,pass,2 +LayoutLMForSequenceClassification,pass,0 diff --git a/benchmarks/dynamo/ci_expected_accuracy/cpu_inductor_freezing_huggingface_inference.csv b/benchmarks/dynamo/ci_expected_accuracy/cpu_inductor_freezing_huggingface_inference.csv index 349239b058a7..fd57a3b4cbf3 100644 --- a/benchmarks/dynamo/ci_expected_accuracy/cpu_inductor_freezing_huggingface_inference.csv +++ b/benchmarks/dynamo/ci_expected_accuracy/cpu_inductor_freezing_huggingface_inference.csv @@ -82,7 +82,7 @@ ElectraForQuestionAnswering,pass,0 -GPT2ForSequenceClassification,pass,2 +GPT2ForSequenceClassification,pass,0 @@ -94,7 +94,7 @@ LayoutLMForMaskedLM,pass,0 -LayoutLMForSequenceClassification,pass,2 +LayoutLMForSequenceClassification,pass,0 diff --git a/benchmarks/dynamo/ci_expected_accuracy/cpu_inductor_huggingface_inference.csv b/benchmarks/dynamo/ci_expected_accuracy/cpu_inductor_huggingface_inference.csv index 349239b058a7..fd57a3b4cbf3 100644 --- a/benchmarks/dynamo/ci_expected_accuracy/cpu_inductor_huggingface_inference.csv +++ b/benchmarks/dynamo/ci_expected_accuracy/cpu_inductor_huggingface_inference.csv @@ -82,7 +82,7 @@ ElectraForQuestionAnswering,pass,0 -GPT2ForSequenceClassification,pass,2 +GPT2ForSequenceClassification,pass,0 @@ -94,7 +94,7 @@ LayoutLMForMaskedLM,pass,0 -LayoutLMForSequenceClassification,pass,2 +LayoutLMForSequenceClassification,pass,0 diff --git a/benchmarks/dynamo/ci_expected_accuracy/cu124/dynamic_inductor_huggingface_training.csv b/benchmarks/dynamo/ci_expected_accuracy/cu124/dynamic_inductor_huggingface_training.csv index 08dad9b4a06a..8202281ed9bc 100644 --- a/benchmarks/dynamo/ci_expected_accuracy/cu124/dynamic_inductor_huggingface_training.csv +++ b/benchmarks/dynamo/ci_expected_accuracy/cu124/dynamic_inductor_huggingface_training.csv @@ -82,7 +82,7 @@ ElectraForQuestionAnswering,pass,5 -GPT2ForSequenceClassification,pass,7 +GPT2ForSequenceClassification,pass,5 @@ -94,7 +94,7 @@ LayoutLMForMaskedLM,pass,5 -LayoutLMForSequenceClassification,pass,7 +LayoutLMForSequenceClassification,pass,5 diff --git a/benchmarks/dynamo/ci_expected_accuracy/cu124/inductor_huggingface_training.csv b/benchmarks/dynamo/ci_expected_accuracy/cu124/inductor_huggingface_training.csv index 08dad9b4a06a..8202281ed9bc 100644 --- a/benchmarks/dynamo/ci_expected_accuracy/cu124/inductor_huggingface_training.csv +++ b/benchmarks/dynamo/ci_expected_accuracy/cu124/inductor_huggingface_training.csv @@ -82,7 +82,7 @@ ElectraForQuestionAnswering,pass,5 -GPT2ForSequenceClassification,pass,7 +GPT2ForSequenceClassification,pass,5 @@ -94,7 +94,7 @@ LayoutLMForMaskedLM,pass,5 -LayoutLMForSequenceClassification,pass,7 +LayoutLMForSequenceClassification,pass,5 diff --git a/benchmarks/dynamo/ci_expected_accuracy/dynamic_aot_eager_huggingface_inference.csv b/benchmarks/dynamo/ci_expected_accuracy/dynamic_aot_eager_huggingface_inference.csv index 349239b058a7..fd57a3b4cbf3 100644 --- a/benchmarks/dynamo/ci_expected_accuracy/dynamic_aot_eager_huggingface_inference.csv +++ b/benchmarks/dynamo/ci_expected_accuracy/dynamic_aot_eager_huggingface_inference.csv @@ -82,7 +82,7 @@ ElectraForQuestionAnswering,pass,0 -GPT2ForSequenceClassification,pass,2 +GPT2ForSequenceClassification,pass,0 @@ -94,7 +94,7 @@ LayoutLMForMaskedLM,pass,0 -LayoutLMForSequenceClassification,pass,2 +LayoutLMForSequenceClassification,pass,0 diff --git a/benchmarks/dynamo/ci_expected_accuracy/dynamic_aot_eager_huggingface_training.csv b/benchmarks/dynamo/ci_expected_accuracy/dynamic_aot_eager_huggingface_training.csv index 08dad9b4a06a..8202281ed9bc 100644 --- a/benchmarks/dynamo/ci_expected_accuracy/dynamic_aot_eager_huggingface_training.csv +++ b/benchmarks/dynamo/ci_expected_accuracy/dynamic_aot_eager_huggingface_training.csv @@ -82,7 +82,7 @@ ElectraForQuestionAnswering,pass,5 -GPT2ForSequenceClassification,pass,7 +GPT2ForSequenceClassification,pass,5 @@ -94,7 +94,7 @@ LayoutLMForMaskedLM,pass,5 -LayoutLMForSequenceClassification,pass,7 +LayoutLMForSequenceClassification,pass,5 diff --git a/benchmarks/dynamo/ci_expected_accuracy/dynamic_cpu_inductor_huggingface_inference.csv b/benchmarks/dynamo/ci_expected_accuracy/dynamic_cpu_inductor_huggingface_inference.csv index 349239b058a7..fd57a3b4cbf3 100644 --- a/benchmarks/dynamo/ci_expected_accuracy/dynamic_cpu_inductor_huggingface_inference.csv +++ b/benchmarks/dynamo/ci_expected_accuracy/dynamic_cpu_inductor_huggingface_inference.csv @@ -82,7 +82,7 @@ ElectraForQuestionAnswering,pass,0 -GPT2ForSequenceClassification,pass,2 +GPT2ForSequenceClassification,pass,0 @@ -94,7 +94,7 @@ LayoutLMForMaskedLM,pass,0 -LayoutLMForSequenceClassification,pass,2 +LayoutLMForSequenceClassification,pass,0 diff --git a/benchmarks/dynamo/ci_expected_accuracy/dynamic_inductor_huggingface_inference.csv b/benchmarks/dynamo/ci_expected_accuracy/dynamic_inductor_huggingface_inference.csv index 349239b058a7..fd57a3b4cbf3 100644 --- a/benchmarks/dynamo/ci_expected_accuracy/dynamic_inductor_huggingface_inference.csv +++ b/benchmarks/dynamo/ci_expected_accuracy/dynamic_inductor_huggingface_inference.csv @@ -82,7 +82,7 @@ ElectraForQuestionAnswering,pass,0 -GPT2ForSequenceClassification,pass,2 +GPT2ForSequenceClassification,pass,0 @@ -94,7 +94,7 @@ LayoutLMForMaskedLM,pass,0 -LayoutLMForSequenceClassification,pass,2 +LayoutLMForSequenceClassification,pass,0 diff --git a/benchmarks/dynamo/ci_expected_accuracy/dynamic_inductor_huggingface_training.csv b/benchmarks/dynamo/ci_expected_accuracy/dynamic_inductor_huggingface_training.csv index 08dad9b4a06a..8202281ed9bc 100644 --- a/benchmarks/dynamo/ci_expected_accuracy/dynamic_inductor_huggingface_training.csv +++ b/benchmarks/dynamo/ci_expected_accuracy/dynamic_inductor_huggingface_training.csv @@ -82,7 +82,7 @@ ElectraForQuestionAnswering,pass,5 -GPT2ForSequenceClassification,pass,7 +GPT2ForSequenceClassification,pass,5 @@ -94,7 +94,7 @@ LayoutLMForMaskedLM,pass,5 -LayoutLMForSequenceClassification,pass,7 +LayoutLMForSequenceClassification,pass,5 diff --git a/benchmarks/dynamo/ci_expected_accuracy/dynamo_eager_huggingface_inference.csv b/benchmarks/dynamo/ci_expected_accuracy/dynamo_eager_huggingface_inference.csv index 349239b058a7..fd57a3b4cbf3 100644 --- a/benchmarks/dynamo/ci_expected_accuracy/dynamo_eager_huggingface_inference.csv +++ b/benchmarks/dynamo/ci_expected_accuracy/dynamo_eager_huggingface_inference.csv @@ -82,7 +82,7 @@ ElectraForQuestionAnswering,pass,0 -GPT2ForSequenceClassification,pass,2 +GPT2ForSequenceClassification,pass,0 @@ -94,7 +94,7 @@ LayoutLMForMaskedLM,pass,0 -LayoutLMForSequenceClassification,pass,2 +LayoutLMForSequenceClassification,pass,0 diff --git a/benchmarks/dynamo/ci_expected_accuracy/dynamo_eager_huggingface_training.csv b/benchmarks/dynamo/ci_expected_accuracy/dynamo_eager_huggingface_training.csv index 08dad9b4a06a..8202281ed9bc 100644 --- a/benchmarks/dynamo/ci_expected_accuracy/dynamo_eager_huggingface_training.csv +++ b/benchmarks/dynamo/ci_expected_accuracy/dynamo_eager_huggingface_training.csv @@ -82,7 +82,7 @@ ElectraForQuestionAnswering,pass,5 -GPT2ForSequenceClassification,pass,7 +GPT2ForSequenceClassification,pass,5 @@ -94,7 +94,7 @@ LayoutLMForMaskedLM,pass,5 -LayoutLMForSequenceClassification,pass,7 +LayoutLMForSequenceClassification,pass,5 diff --git a/benchmarks/dynamo/ci_expected_accuracy/inductor_huggingface_inference.csv b/benchmarks/dynamo/ci_expected_accuracy/inductor_huggingface_inference.csv index 349239b058a7..fd57a3b4cbf3 100644 --- a/benchmarks/dynamo/ci_expected_accuracy/inductor_huggingface_inference.csv +++ b/benchmarks/dynamo/ci_expected_accuracy/inductor_huggingface_inference.csv @@ -82,7 +82,7 @@ ElectraForQuestionAnswering,pass,0 -GPT2ForSequenceClassification,pass,2 +GPT2ForSequenceClassification,pass,0 @@ -94,7 +94,7 @@ LayoutLMForMaskedLM,pass,0 -LayoutLMForSequenceClassification,pass,2 +LayoutLMForSequenceClassification,pass,0 diff --git a/benchmarks/dynamo/ci_expected_accuracy/inductor_huggingface_training.csv b/benchmarks/dynamo/ci_expected_accuracy/inductor_huggingface_training.csv index 08dad9b4a06a..8202281ed9bc 100644 --- a/benchmarks/dynamo/ci_expected_accuracy/inductor_huggingface_training.csv +++ b/benchmarks/dynamo/ci_expected_accuracy/inductor_huggingface_training.csv @@ -82,7 +82,7 @@ ElectraForQuestionAnswering,pass,5 -GPT2ForSequenceClassification,pass,7 +GPT2ForSequenceClassification,pass,5 @@ -94,7 +94,7 @@ LayoutLMForMaskedLM,pass,5 -LayoutLMForSequenceClassification,pass,7 +LayoutLMForSequenceClassification,pass,5 diff --git a/torch/_dynamo/variables/builder.py b/torch/_dynamo/variables/builder.py index fe9110ec35a6..44566da96c5b 100644 --- a/torch/_dynamo/variables/builder.py +++ b/torch/_dynamo/variables/builder.py @@ -138,7 +138,6 @@ from .dicts import ( DefaultDictVariable, DictKeySetVariable, FrozensetVariable, - HFPretrainedConfigVariable, PythonSysModulesVariable, SetVariable, ) @@ -854,9 +853,6 @@ class VariableBuilder: ) elif np and isinstance(value, np.number): return self.wrap_unspecialized_primitive(value) - elif HFPretrainedConfigVariable.is_matching_object(value): - self.install_guards(GuardBuilder.TYPE_MATCH) - return HFPretrainedConfigVariable(value) elif isinstance(value, HigherOrderOperator): if value is torch._higher_order_ops.invoke_subgraph: unimplemented( diff --git a/torch/_dynamo/variables/builtin.py b/torch/_dynamo/variables/builtin.py index ee17dec284da..63269da2a586 100644 --- a/torch/_dynamo/variables/builtin.py +++ b/torch/_dynamo/variables/builtin.py @@ -1847,19 +1847,6 @@ class BuiltinVariable(VariableTracker): return getattr_var obj.convert_to_unspecialized(tx) - # FIXME (tmanlaibaatar) this is utter hack to unblock HuggingFace export - # Export generally doesn't want to allow mutations on objects directly, - # but we don't have good way to do this rn. For now, we make it an undefined - # behaviour and just set attributes directly on the PretrainedConfig object - # for now. - elif isinstance(obj, variables.dicts.HFPretrainedConfigVariable) and tx.export: - if name_var.is_python_constant() and isinstance( - val, variables.ConstantVariable - ): - setattr( - obj.obj, name_var.as_python_constant(), val.as_python_constant() - ) - return ConstantVariable(None) def call_delattr( self, diff --git a/torch/_dynamo/variables/dicts.py b/torch/_dynamo/variables/dicts.py index 3b2dfb0c8a97..13a2d7da0b24 100644 --- a/torch/_dynamo/variables/dicts.py +++ b/torch/_dynamo/variables/dicts.py @@ -11,7 +11,7 @@ from .. import polyfills, variables from ..bytecode_transformation import create_call_function, create_instruction from ..exc import raise_observed_exception, unimplemented from ..guards import GuardBuilder, install_guard -from ..source import AttrSource, GetItemSource, is_from_local_source +from ..source import GetItemSource, is_from_local_source from ..utils import dict_keys, dict_values, specialize_symnode from .base import ValueMutationNew, VariableTracker from .constant import ConstantVariable @@ -732,59 +732,6 @@ class DictValuesVariable(DictViewVariable): return dict_values -@functools.lru_cache(None) -def _install_PretrainedConfig_patch(): - mod = sys.modules.get("transformers.configuration_utils") - assert mod is not None, "Caller is responsible for ensuring this was imported" - - # We need to monkeypatch transformers here, sadly. - # TODO(voz): Upstream to transformers lib - - def _dynamo_overriden_transformers_eq(self, other): - if not hasattr(other, "__dict__"): - return False - return self.__dict__ == other.__dict__ - - mod.PretrainedConfig.__eq__ = _dynamo_overriden_transformers_eq - - -class HFPretrainedConfigVariable(VariableTracker): - """ - Hack for HuggingFace PretrainedConfig - """ - - @staticmethod - def is_matching_cls(cls): - mod = sys.modules.get("transformers.configuration_utils") - is_match = mod is not None and issubclass(cls, mod.PretrainedConfig) - - # Lazily install monkeypatch the first time we see it in dynamo - if is_match: - _install_PretrainedConfig_patch() - return is_match - - @classmethod - def is_matching_object(cls, obj): - return cls.is_matching_cls(type(obj)) - - def __init__(self, obj, **kwargs) -> None: - super().__init__(**kwargs) - self.obj = obj - assert self.is_matching_cls(type(obj)) - - def var_getattr(self, tx: "InstructionTranslator", name: str) -> "VariableTracker": - try: - attr_value = getattr(self.obj, name) - source = self.source and AttrSource(self.source, name) - return VariableTracker.build(tx, attr_value, source) - - except AttributeError: - unimplemented(f"getattr({self.value}, {name})") - - def call_hasattr(self, tx: "InstructionTranslator", name: str) -> "VariableTracker": - return variables.ConstantVariable.create(hasattr(self.obj, name)) - - class PythonSysModulesVariable(VariableTracker): """Special case for sys.modules.