mirror of
https://github.com/huggingface/transformers.git
synced 2025-10-21 01:23:56 +08:00
Compare commits
17 Commits
example-ex
...
v4.12.4
Author | SHA1 | Date | |
---|---|---|---|
527c763ff6 | |||
6f40723eb6 | |||
db242aee15 | |||
e99a2314cd | |||
341a059792 | |||
6bf20275dd | |||
c8206b4af5 | |||
b6b97c319d | |||
3ea15d2783 | |||
294a920027 | |||
9ab10fcd52 | |||
872c4f3d44 | |||
ac77639a75 | |||
219137337f | |||
cde7d78b09 | |||
e0a5154075 | |||
9f3f335924 |
@ -81,7 +81,7 @@ jobs:
|
||||
- run: sudo apt-get -y update && sudo apt-get install -y libsndfile1-dev
|
||||
- run: pip install --upgrade pip
|
||||
- run: pip install .[sklearn,tf-cpu,torch,testing,sentencepiece,torch-speech,vision]
|
||||
- run: pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.9.0+cpu.html
|
||||
- run: pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.10.0+cpu.html
|
||||
- save_cache:
|
||||
key: v0.4-{{ checksum "setup.py" }}
|
||||
paths:
|
||||
@ -117,7 +117,7 @@ jobs:
|
||||
- run: sudo apt-get -y update && sudo apt-get install -y libsndfile1-dev
|
||||
- run: pip install --upgrade pip
|
||||
- run: pip install .[sklearn,tf-cpu,torch,testing,sentencepiece,torch-speech,vision]
|
||||
- run: pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.9.0+cpu.html
|
||||
- run: pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.10.0+cpu.html
|
||||
- save_cache:
|
||||
key: v0.4-{{ checksum "setup.py" }}
|
||||
paths:
|
||||
@ -148,7 +148,7 @@ jobs:
|
||||
- run: sudo apt-get -y update && sudo apt-get install -y libsndfile1-dev
|
||||
- run: pip install --upgrade pip
|
||||
- run: pip install .[sklearn,flax,torch,testing,sentencepiece,torch-speech,vision]
|
||||
- run: pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.9.0+cpu.html
|
||||
- run: pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.10.0+cpu.html
|
||||
- save_cache:
|
||||
key: v0.4-{{ checksum "setup.py" }}
|
||||
paths:
|
||||
@ -184,7 +184,7 @@ jobs:
|
||||
- run: sudo apt-get -y update && sudo apt-get install -y libsndfile1-dev
|
||||
- run: pip install --upgrade pip
|
||||
- run: pip install .[sklearn,flax,torch,testing,sentencepiece,torch-speech,vision]
|
||||
- run: pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.9.0+cpu.html
|
||||
- run: pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.10.0+cpu.html
|
||||
- save_cache:
|
||||
key: v0.4-{{ checksum "setup.py" }}
|
||||
paths:
|
||||
@ -214,7 +214,7 @@ jobs:
|
||||
- run: sudo apt-get -y update && sudo apt-get install -y libsndfile1-dev
|
||||
- run: pip install --upgrade pip
|
||||
- run: pip install .[sklearn,torch,testing,sentencepiece,torch-speech,vision,timm]
|
||||
- run: pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.9.0+cpu.html
|
||||
- run: pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.10.0+cpu.html
|
||||
- save_cache:
|
||||
key: v0.4-torch-{{ checksum "setup.py" }}
|
||||
paths:
|
||||
@ -249,7 +249,7 @@ jobs:
|
||||
- run: sudo apt-get -y update && sudo apt-get install -y libsndfile1-dev
|
||||
- run: pip install --upgrade pip
|
||||
- run: pip install .[sklearn,torch,testing,sentencepiece,torch-speech,vision,timm]
|
||||
- run: pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.9.0+cpu.html
|
||||
- run: pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.10.0+cpu.html
|
||||
- save_cache:
|
||||
key: v0.4-torch-{{ checksum "setup.py" }}
|
||||
paths:
|
||||
@ -401,8 +401,8 @@ jobs:
|
||||
- v0.4-{{ checksum "setup.py" }}
|
||||
- run: sudo apt-get -y update && sudo apt-get install -y libsndfile1-dev
|
||||
- run: pip install --upgrade pip
|
||||
- run: pip install .[sklearn,torch,testing,sentencepiece,torch-speech,vision]
|
||||
- run: pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.9.0+cpu.html
|
||||
- run: pip install .[sklearn,torch,testing,sentencepiece,torch-speech,vision,timm]
|
||||
- run: pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.10.0+cpu.html
|
||||
- save_cache:
|
||||
key: v0.4-torch-{{ checksum "setup.py" }}
|
||||
paths:
|
||||
@ -437,8 +437,8 @@ jobs:
|
||||
- v0.4-{{ checksum "setup.py" }}
|
||||
- run: sudo apt-get -y update && sudo apt-get install -y libsndfile1-dev
|
||||
- run: pip install --upgrade pip
|
||||
- run: pip install .[sklearn,torch,testing,sentencepiece,torch-speech,vision]
|
||||
- run: pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.9.0+cpu.html
|
||||
- run: pip install .[sklearn,torch,testing,sentencepiece,torch-speech,vision,timm]
|
||||
- run: pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.10.0+cpu.html
|
||||
- save_cache:
|
||||
key: v0.4-torch-{{ checksum "setup.py" }}
|
||||
paths:
|
||||
@ -753,7 +753,7 @@ jobs:
|
||||
- run: sudo apt-get -y update && sudo apt-get install -y libsndfile1-dev
|
||||
- run: pip install --upgrade pip
|
||||
- run: pip install ."[docs]"
|
||||
- run: pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.9.0+cpu.html
|
||||
- run: pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.10.0+cpu.html
|
||||
- save_cache:
|
||||
key: v0.4-build_doc-{{ checksum "setup.py" }}
|
||||
paths:
|
||||
|
@ -27,7 +27,11 @@ author = "huggingface"
|
||||
# The short X.Y version
|
||||
version = ""
|
||||
# The full version, including alpha/beta/rc tags
|
||||
release = "4.12.0"
|
||||
release = "4.12.4"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
6
setup.py
6
setup.py
@ -100,7 +100,7 @@ _deps = [
|
||||
"flax>=0.3.4",
|
||||
"fugashi>=1.0",
|
||||
"GitPython<3.1.19",
|
||||
"huggingface-hub>=0.0.17",
|
||||
"huggingface-hub>=0.1.0,<1.0",
|
||||
"importlib_metadata",
|
||||
"ipadic>=1.0.0,<2.0",
|
||||
"isort>=5.5.4",
|
||||
@ -149,7 +149,7 @@ _deps = [
|
||||
"timeout-decorator",
|
||||
"timm",
|
||||
"tokenizers>=0.10.1,<0.11",
|
||||
"torch>=1.0,<1.10",
|
||||
"torch>=1.0",
|
||||
"torchaudio",
|
||||
"tqdm>=4.27",
|
||||
"unidic>=1.0.2",
|
||||
@ -344,7 +344,7 @@ install_requires = [
|
||||
|
||||
setup(
|
||||
name="transformers",
|
||||
version="4.12.0", # expected format is one of x.y.z.dev0, or x.y.z.rc1 or x.y.z (no to dashes, yes to dots)
|
||||
version="4.12.4", # expected format is one of x.y.z.dev0, or x.y.z.rc1 or x.y.z (no to dashes, yes to dots)
|
||||
author="Thomas Wolf, Lysandre Debut, Victor Sanh, Julien Chaumond, Sam Shleifer, Patrick von Platen, Sylvain Gugger, Suraj Patil, Stas Bekman, Google AI Language Team Authors, Open AI team Authors, Facebook AI Authors, Carnegie Mellon University Authors",
|
||||
author_email="thomas@huggingface.co",
|
||||
description="State-of-the-art Natural Language Processing for TensorFlow 2.0 and PyTorch",
|
||||
|
@ -22,7 +22,7 @@
|
||||
# to defer the actual importing for when the objects are requested. This way `import transformers` provides the names
|
||||
# in the namespace without actually importing anything (and especially none of the backends).
|
||||
|
||||
__version__ = "4.12.0"
|
||||
__version__ = "4.12.4"
|
||||
|
||||
# Work around to update TensorFlow's absl.logging threshold which alters the
|
||||
# default Python logging output behavior when present.
|
||||
@ -1360,7 +1360,7 @@ if is_tf_available():
|
||||
_import_structure["benchmark.benchmark_args_tf"] = ["TensorFlowBenchmarkArguments"]
|
||||
_import_structure["benchmark.benchmark_tf"] = ["TensorFlowBenchmark"]
|
||||
_import_structure["generation_tf_utils"] = ["tf_top_k_top_p_filtering"]
|
||||
_import_structure["keras_callbacks"] = []
|
||||
_import_structure["keras_callbacks"] = ["PushToHubCallback"]
|
||||
_import_structure["modeling_tf_outputs"] = []
|
||||
_import_structure["modeling_tf_utils"] = [
|
||||
"TFPreTrainedModel",
|
||||
@ -3085,6 +3085,7 @@ if TYPE_CHECKING:
|
||||
# Benchmarks
|
||||
from .benchmark.benchmark_tf import TensorFlowBenchmark
|
||||
from .generation_tf_utils import tf_top_k_top_p_filtering
|
||||
from .keras_callbacks import PushToHubCallback
|
||||
from .modeling_tf_layoutlm import (
|
||||
TF_LAYOUTLM_PRETRAINED_MODEL_ARCHIVE_LIST,
|
||||
TFLayoutLMForMaskedLM,
|
||||
|
@ -18,7 +18,7 @@ deps = {
|
||||
"flax": "flax>=0.3.4",
|
||||
"fugashi": "fugashi>=1.0",
|
||||
"GitPython": "GitPython<3.1.19",
|
||||
"huggingface-hub": "huggingface-hub>=0.0.17",
|
||||
"huggingface-hub": "huggingface-hub>=0.1.0,<1.0",
|
||||
"importlib_metadata": "importlib_metadata",
|
||||
"ipadic": "ipadic>=1.0.0,<2.0",
|
||||
"isort": "isort>=5.5.4",
|
||||
@ -67,7 +67,7 @@ deps = {
|
||||
"timeout-decorator": "timeout-decorator",
|
||||
"timm": "timm",
|
||||
"tokenizers": "tokenizers>=0.10.1,<0.11",
|
||||
"torch": "torch>=1.0,<1.10",
|
||||
"torch": "torch>=1.0",
|
||||
"torchaudio": "torchaudio",
|
||||
"tqdm": "tqdm>=4.27",
|
||||
"unidic": "unidic>=1.0.2",
|
||||
|
@ -692,6 +692,13 @@ class TFPreTrainedModel(tf.keras.Model, TFModelUtilsMixin, TFGenerationMixin, Pu
|
||||
self.config = config
|
||||
self.name_or_path = config.name_or_path
|
||||
|
||||
def get_config(self):
|
||||
return self.config
|
||||
|
||||
@classmethod
|
||||
def from_config(cls, config, **kwargs):
|
||||
return cls._from_config(config, **kwargs)
|
||||
|
||||
@classmethod
|
||||
def _from_config(cls, config, **kwargs):
|
||||
"""
|
||||
|
@ -412,6 +412,17 @@ class ModuleUtilsMixin:
|
||||
return 6 * self.estimate_tokens(input_dict) * self.num_parameters(exclude_embeddings=exclude_embeddings)
|
||||
|
||||
|
||||
def gradient_checkpointing_hook(module, _):
|
||||
# Hook to enable backward compatibility for gradient checkpointing. Will be removed once all models have a
|
||||
# proper post_init method.
|
||||
if getattr(module.config, "gradient_checkpointing", False):
|
||||
module.gradient_checkpointing_enable()
|
||||
# Remove the attribute now that is has been consumed, so it's no saved in the config.
|
||||
delattr(module.config, "gradient_checkpointing")
|
||||
# The hook will remove itself after the first execution
|
||||
module._gradient_checkpointing_hook.remove()
|
||||
|
||||
|
||||
class PreTrainedModel(nn.Module, ModuleUtilsMixin, GenerationMixin, PushToHubMixin):
|
||||
r"""
|
||||
Base class for all models.
|
||||
@ -479,10 +490,8 @@ class PreTrainedModel(nn.Module, ModuleUtilsMixin, GenerationMixin, PushToHubMix
|
||||
# Save config and origin of the pretrained weights if given in model
|
||||
self.config = config
|
||||
self.name_or_path = config.name_or_path
|
||||
if getattr(self.config, "gradient_checkpointing", False):
|
||||
self.gradient_checkpointing_enable()
|
||||
# Remove the attribute now that is has been consumed, so it's no saved in the config.
|
||||
delattr(self.config, "gradient_checkpointing")
|
||||
if self.supports_gradient_checkpointing:
|
||||
self._gradient_checkpointing_hook = self.register_forward_pre_hook(gradient_checkpointing_hook)
|
||||
|
||||
@classmethod
|
||||
def _from_config(cls, config, **kwargs):
|
||||
@ -1049,7 +1058,9 @@ class PreTrainedModel(nn.Module, ModuleUtilsMixin, GenerationMixin, PushToHubMix
|
||||
|
||||
# Handle the case where some state_dict keys shouldn't be saved
|
||||
if self._keys_to_ignore_on_save is not None:
|
||||
state_dict = {k: v for k, v in state_dict.items() if k not in self._keys_to_ignore_on_save}
|
||||
for ignore_key in self._keys_to_ignore_on_save:
|
||||
if ignore_key in state_dict.keys():
|
||||
del state_dict[ignore_key]
|
||||
|
||||
# If we save using the predefined names, we can load using `from_pretrained`
|
||||
output_model_file = os.path.join(save_directory, WEIGHTS_NAME)
|
||||
|
@ -783,7 +783,6 @@ class DetrClassificationHead(nn.Module):
|
||||
class DetrPreTrainedModel(PreTrainedModel):
|
||||
config_class = DetrConfig
|
||||
base_model_prefix = "model"
|
||||
supports_gradient_checkpointing = True
|
||||
|
||||
def _init_weights(self, module):
|
||||
std = self.config.init_std
|
||||
|
@ -291,20 +291,22 @@ class HubertFeatureExtractor(nn.Module):
|
||||
)
|
||||
self.conv_layers = nn.ModuleList(conv_layers)
|
||||
self.gradient_checkpointing = False
|
||||
self._requires_grad = True
|
||||
|
||||
def _freeze_parameters(self):
|
||||
for param in self.parameters():
|
||||
param.requires_grad = False
|
||||
self._requires_grad = False
|
||||
|
||||
def forward(self, input_values):
|
||||
hidden_states = input_values[:, None]
|
||||
|
||||
# make sure hidden_states require grad for gradient_checkpointing
|
||||
if self.training:
|
||||
if self._requires_grad and self.training:
|
||||
hidden_states.requires_grad = True
|
||||
|
||||
for conv_layer in self.conv_layers:
|
||||
if self.gradient_checkpointing and self.training:
|
||||
if self._requires_grad and self.gradient_checkpointing and self.training:
|
||||
|
||||
def create_custom_forward(module):
|
||||
def custom_forward(*inputs):
|
||||
|
@ -504,7 +504,6 @@ class LayoutLMv2PreTrainedModel(PreTrainedModel):
|
||||
config_class = LayoutLMv2Config
|
||||
pretrained_model_archive_map = LAYOUTLMV2_PRETRAINED_MODEL_ARCHIVE_LIST
|
||||
base_model_prefix = "layoutlmv2"
|
||||
supports_gradient_checkpointing = True
|
||||
_keys_to_ignore_on_load_missing = [r"position_ids"]
|
||||
|
||||
def _init_weights(self, module):
|
||||
|
@ -1060,7 +1060,7 @@ class TFRoFormerClassificationHead(tf.keras.layers.Layer):
|
||||
"""Head for sentence-level classification tasks."""
|
||||
|
||||
def __init__(self, config: RoFormerConfig, *inputs, **kwargs):
|
||||
super().__init__(config, *inputs, **kwargs)
|
||||
super().__init__(*inputs, **kwargs)
|
||||
|
||||
self.dense = tf.keras.layers.Dense(
|
||||
units=config.hidden_size, kernel_initializer=get_initializer(config.initializer_range), name="dense"
|
||||
|
@ -308,20 +308,22 @@ class SEWFeatureExtractor(nn.Module):
|
||||
)
|
||||
self.conv_layers = nn.ModuleList(conv_layers)
|
||||
self.gradient_checkpointing = False
|
||||
self._requires_grad = True
|
||||
|
||||
def _freeze_parameters(self):
|
||||
for param in self.parameters():
|
||||
param.requires_grad = False
|
||||
self._requires_grad = False
|
||||
|
||||
def forward(self, input_values):
|
||||
hidden_states = input_values[:, None]
|
||||
|
||||
# make sure hidden_states require grad for gradient_checkpointing
|
||||
if self.training:
|
||||
if self._requires_grad and self.training:
|
||||
hidden_states.requires_grad = True
|
||||
|
||||
for conv_layer in self.conv_layers:
|
||||
if self.gradient_checkpointing and self.training:
|
||||
if self._requires_grad and self.gradient_checkpointing and self.training:
|
||||
|
||||
def create_custom_forward(module):
|
||||
def custom_forward(*inputs):
|
||||
|
@ -394,20 +394,22 @@ class SEWDFeatureExtractor(nn.Module):
|
||||
)
|
||||
self.conv_layers = nn.ModuleList(conv_layers)
|
||||
self.gradient_checkpointing = False
|
||||
self._requires_grad = True
|
||||
|
||||
def _freeze_parameters(self):
|
||||
for param in self.parameters():
|
||||
param.requires_grad = False
|
||||
self._requires_grad = False
|
||||
|
||||
def forward(self, input_values):
|
||||
hidden_states = input_values[:, None]
|
||||
|
||||
# make sure hidden_states require grad for gradient_checkpointing
|
||||
if self.training:
|
||||
if self._requires_grad and self.training:
|
||||
hidden_states.requires_grad = True
|
||||
|
||||
for conv_layer in self.conv_layers:
|
||||
if self.gradient_checkpointing and self.training:
|
||||
if self._requires_grad and self.gradient_checkpointing and self.training:
|
||||
|
||||
def create_custom_forward(module):
|
||||
def custom_forward(*inputs):
|
||||
|
@ -93,8 +93,18 @@ class TFT5LayerNorm(tf.keras.layers.Layer):
|
||||
class TFT5DenseReluDense(tf.keras.layers.Layer):
|
||||
def __init__(self, config, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
self.wi = tf.keras.layers.Dense(config.d_ff, use_bias=False, name="wi")
|
||||
self.wo = tf.keras.layers.Dense(config.d_model, use_bias=False, name="wo")
|
||||
wi_initializer = tf.keras.initializers.RandomNormal(
|
||||
mean=0, stddev=config.initializer_factor * (config.d_model ** -0.5)
|
||||
)
|
||||
wo_initializer = tf.keras.initializers.RandomNormal(
|
||||
mean=0, stddev=config.initializer_factor * (config.d_ff ** -0.5)
|
||||
)
|
||||
self.wi = tf.keras.layers.Dense(
|
||||
config.d_ff, use_bias=False, name="wi", kernel_initializer=wi_initializer
|
||||
) # Update init weights as in flax
|
||||
self.wo = tf.keras.layers.Dense(
|
||||
config.d_model, use_bias=False, name="wo", kernel_initializer=wo_initializer
|
||||
) # Update init weights as in flax
|
||||
self.dropout = tf.keras.layers.Dropout(config.dropout_rate)
|
||||
self.act = tf.keras.activations.relu
|
||||
|
||||
@ -109,9 +119,21 @@ class TFT5DenseReluDense(tf.keras.layers.Layer):
|
||||
class TFT5GatedGeluDense(tf.keras.layers.Layer):
|
||||
def __init__(self, config, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
self.wi_0 = tf.keras.layers.Dense(config.d_ff, use_bias=False, name="wi_0")
|
||||
self.wi_1 = tf.keras.layers.Dense(config.d_ff, use_bias=False, name="wi_1")
|
||||
self.wo = tf.keras.layers.Dense(config.d_model, use_bias=False, name="wo")
|
||||
wi_initializer = tf.keras.initializers.RandomNormal(
|
||||
mean=0, stddev=config.initializer_factor * (config.d_model ** -0.5)
|
||||
)
|
||||
wo_initializer = tf.keras.initializers.RandomNormal(
|
||||
mean=0, stddev=config.initializer_factor * (config.d_ff ** -0.5)
|
||||
)
|
||||
self.wi_0 = tf.keras.layers.Dense(
|
||||
config.d_ff, use_bias=False, name="wi_0", kernel_initializer=wi_initializer
|
||||
) # Update init weights as in flax
|
||||
self.wi_1 = tf.keras.layers.Dense(
|
||||
config.d_ff, use_bias=False, name="wi_1", kernel_initializer=wi_initializer
|
||||
) # Update init weights as in flax
|
||||
self.wo = tf.keras.layers.Dense(
|
||||
config.d_model, use_bias=False, name="wo", kernel_initializer=wo_initializer
|
||||
) # Update init weights as in flax
|
||||
self.dropout = tf.keras.layers.Dropout(config.dropout_rate)
|
||||
self.act = get_tf_activation("gelu_new")
|
||||
|
||||
@ -163,10 +185,34 @@ class TFT5Attention(tf.keras.layers.Layer):
|
||||
self.inner_dim = self.n_heads * self.key_value_proj_dim
|
||||
|
||||
# Mesh TensorFlow initialization to avoid scaling before softmax
|
||||
self.q = tf.keras.layers.Dense(self.inner_dim, use_bias=False, name="q")
|
||||
self.k = tf.keras.layers.Dense(self.inner_dim, use_bias=False, name="k")
|
||||
self.v = tf.keras.layers.Dense(self.inner_dim, use_bias=False, name="v")
|
||||
self.o = tf.keras.layers.Dense(self.d_model, use_bias=False, name="o")
|
||||
q_initializer = tf.keras.initializers.RandomNormal(
|
||||
mean=0, stddev=config.initializer_factor * ((self.inner_dim * self.key_value_proj_dim) ** -0.5)
|
||||
)
|
||||
k_initializer = tf.keras.initializers.RandomNormal(
|
||||
mean=0, stddev=config.initializer_factor * (self.inner_dim ** -0.5)
|
||||
)
|
||||
v_initializer = tf.keras.initializers.RandomNormal(
|
||||
mean=0, stddev=config.initializer_factor * (self.inner_dim ** -0.5)
|
||||
)
|
||||
o_initializer = tf.keras.initializers.RandomNormal(
|
||||
mean=0, stddev=config.initializer_factor * (self.inner_dim ** -0.5)
|
||||
)
|
||||
self.relative_attention_bias_initializer = tf.keras.initializers.RandomNormal(
|
||||
mean=0, stddev=config.initializer_factor * (self.inner_dim ** -0.5)
|
||||
)
|
||||
|
||||
self.q = tf.keras.layers.Dense(
|
||||
self.inner_dim, use_bias=False, name="q", kernel_initializer=q_initializer
|
||||
) # Update init weights as in flax
|
||||
self.k = tf.keras.layers.Dense(
|
||||
self.inner_dim, use_bias=False, name="k", kernel_initializer=k_initializer
|
||||
) # Update init weights as in flax
|
||||
self.v = tf.keras.layers.Dense(
|
||||
self.inner_dim, use_bias=False, name="v", kernel_initializer=v_initializer
|
||||
) # Update init weights as in flax
|
||||
self.o = tf.keras.layers.Dense(
|
||||
self.d_model, use_bias=False, name="o", kernel_initializer=o_initializer
|
||||
) # Update init weights as in flax
|
||||
self.dropout = tf.keras.layers.Dropout(config.dropout_rate)
|
||||
|
||||
self.pruned_heads = set()
|
||||
@ -177,6 +223,7 @@ class TFT5Attention(tf.keras.layers.Layer):
|
||||
self.relative_attention_bias = self.add_weight(
|
||||
name="embeddings",
|
||||
shape=[self.relative_attention_num_buckets, self.n_heads],
|
||||
initializer=self.relative_attention_bias_initializer, # Add initializer
|
||||
)
|
||||
|
||||
return super().build(input_shape)
|
||||
@ -1266,7 +1313,10 @@ class TFT5ForConditionalGeneration(TFT5PreTrainedModel, TFCausalLanguageModeling
|
||||
self.decoder = TFT5MainLayer(decoder_config, embed_tokens, name="decoder")
|
||||
|
||||
if not config.tie_word_embeddings:
|
||||
self.lm_head = tf.keras.layers.Dense(config.vocab_size, use_bias=False, name="lm_head")
|
||||
lm_head_initializer = tf.keras.initializers.RandomNormal(mean=0, stddev=config.initializer_factor)
|
||||
self.lm_head = tf.keras.layers.Dense(
|
||||
config.vocab_size, use_bias=False, name="lm_head", kernel_initializer=lm_head_initializer
|
||||
) # Update init weights as in flax
|
||||
|
||||
def get_output_embeddings(self):
|
||||
if self.config.tie_word_embeddings:
|
||||
@ -1280,7 +1330,10 @@ class TFT5ForConditionalGeneration(TFT5PreTrainedModel, TFCausalLanguageModeling
|
||||
if self.config.tie_word_embeddings:
|
||||
self.set_input_embeddings(value)
|
||||
else:
|
||||
self.lm_head = tf.keras.layers.Dense(shape_list(value)[0], use_bias=False, name="lm_head")
|
||||
lm_head_initializer = tf.keras.initializers.RandomNormal(mean=0, stddev=self.config.initializer_factor)
|
||||
self.lm_head = tf.keras.layers.Dense(
|
||||
shape_list(value)[0], use_bias=False, name="lm_head", kernel_initializer=lm_head_initializer
|
||||
) # Update init weights as in flax
|
||||
# in a dense layer the kernel has a shape (last_dim, units), for us (dim, num_tokens)
|
||||
# value has a shape (num_tokens, dim) then needs to be transposed
|
||||
transposed_value = tf.transpose(value)
|
||||
|
@ -361,20 +361,22 @@ class UniSpeechFeatureExtractor(nn.Module):
|
||||
)
|
||||
self.conv_layers = nn.ModuleList(conv_layers)
|
||||
self.gradient_checkpointing = False
|
||||
self._requires_grad = True
|
||||
|
||||
def _freeze_parameters(self):
|
||||
for param in self.parameters():
|
||||
param.requires_grad = False
|
||||
self._requires_grad = False
|
||||
|
||||
def forward(self, input_values):
|
||||
hidden_states = input_values[:, None]
|
||||
|
||||
# make sure hidden_states require grad for gradient_checkpointing
|
||||
if self.training:
|
||||
if self._requires_grad and self.training:
|
||||
hidden_states.requires_grad = True
|
||||
|
||||
for conv_layer in self.conv_layers:
|
||||
if self.gradient_checkpointing and self.training:
|
||||
if self._requires_grad and self.gradient_checkpointing and self.training:
|
||||
|
||||
def create_custom_forward(module):
|
||||
def custom_forward(*inputs):
|
||||
|
@ -362,20 +362,22 @@ class UniSpeechSatFeatureExtractor(nn.Module):
|
||||
)
|
||||
self.conv_layers = nn.ModuleList(conv_layers)
|
||||
self.gradient_checkpointing = False
|
||||
self._requires_grad = True
|
||||
|
||||
def _freeze_parameters(self):
|
||||
for param in self.parameters():
|
||||
param.requires_grad = False
|
||||
self._requires_grad = False
|
||||
|
||||
def forward(self, input_values):
|
||||
hidden_states = input_values[:, None]
|
||||
|
||||
# make sure hidden_states require grad for gradient_checkpointing
|
||||
if self.training:
|
||||
if self._requires_grad and self.training:
|
||||
hidden_states.requires_grad = True
|
||||
|
||||
for conv_layer in self.conv_layers:
|
||||
if self.gradient_checkpointing and self.training:
|
||||
if self._requires_grad and self.gradient_checkpointing and self.training:
|
||||
|
||||
def create_custom_forward(module):
|
||||
def custom_forward(*inputs):
|
||||
|
@ -399,20 +399,22 @@ class Wav2Vec2FeatureExtractor(nn.Module):
|
||||
)
|
||||
self.conv_layers = nn.ModuleList(conv_layers)
|
||||
self.gradient_checkpointing = False
|
||||
self._requires_grad = True
|
||||
|
||||
def _freeze_parameters(self):
|
||||
for param in self.parameters():
|
||||
param.requires_grad = False
|
||||
self._requires_grad = False
|
||||
|
||||
def forward(self, input_values):
|
||||
hidden_states = input_values[:, None]
|
||||
|
||||
# make sure hidden_states require grad for gradient_checkpointing
|
||||
if self.training:
|
||||
if self._requires_grad and self.training:
|
||||
hidden_states.requires_grad = True
|
||||
|
||||
for conv_layer in self.conv_layers:
|
||||
if self.gradient_checkpointing and self.training:
|
||||
if self._requires_grad and self.gradient_checkpointing and self.training:
|
||||
|
||||
def create_custom_forward(module):
|
||||
def custom_forward(*inputs):
|
||||
|
@ -862,17 +862,19 @@ class Pipeline(_ScikitCompat):
|
||||
"""
|
||||
raise NotImplementedError("postprocess not implemented")
|
||||
|
||||
def get_inference_context(self):
|
||||
inference_context = (
|
||||
torch.inference_mode if version.parse(torch.__version__) >= version.parse("1.9.0") else torch.no_grad
|
||||
)
|
||||
return inference_context
|
||||
|
||||
def forward(self, model_inputs, **forward_params):
|
||||
with self.device_placement():
|
||||
if self.framework == "tf":
|
||||
model_inputs["training"] = False
|
||||
model_outputs = self._forward(model_inputs, **forward_params)
|
||||
elif self.framework == "pt":
|
||||
inference_context = (
|
||||
torch.inference_mode
|
||||
if version.parse(torch.__version__) >= version.parse("1.9.0")
|
||||
else torch.no_grad
|
||||
)
|
||||
inference_context = self.get_inference_context()
|
||||
with inference_context():
|
||||
model_inputs = self._ensure_tensor_on_device(model_inputs, device=self.device)
|
||||
model_outputs = self._forward(model_inputs, **forward_params)
|
||||
|
@ -114,6 +114,9 @@ class ImageSegmentationPipeline(Pipeline):
|
||||
|
||||
return super().__call__(*args, **kwargs)
|
||||
|
||||
def get_inference_context(self):
|
||||
return torch.no_grad
|
||||
|
||||
def preprocess(self, image):
|
||||
image = self.load_image(image)
|
||||
target_size = torch.IntTensor([[image.height, image.width]])
|
||||
|
@ -16,6 +16,11 @@ def tf_top_k_top_p_filtering(*args, **kwargs):
|
||||
requires_backends(tf_top_k_top_p_filtering, ["tf"])
|
||||
|
||||
|
||||
class PushToHubCallback:
|
||||
def __init__(self, *args, **kwargs):
|
||||
requires_backends(self, ["tf"])
|
||||
|
||||
|
||||
TF_LAYOUTLM_PRETRAINED_MODEL_ARCHIVE_LIST = None
|
||||
|
||||
|
||||
|
@ -239,6 +239,7 @@ class BeitModelTest(ModelTesterMixin, unittest.TestCase):
|
||||
if model_class.__name__ == "BeitForMaskedImageModeling":
|
||||
continue
|
||||
model = model_class(config)
|
||||
model.gradient_checkpointing_enable()
|
||||
model.to(torch_device)
|
||||
model.train()
|
||||
inputs = self._prepare_for_class(inputs_dict, model_class, return_labels=True)
|
||||
|
@ -209,6 +209,25 @@ class ModelTesterMixin:
|
||||
)
|
||||
self.assertTrue(len(load_result.unexpected_keys) == 0)
|
||||
|
||||
def test_gradient_checkpointing_backward_compatibility(self):
|
||||
config, inputs_dict = self.model_tester.prepare_config_and_inputs_for_common()
|
||||
|
||||
for model_class in self.all_model_classes:
|
||||
if not model_class.supports_gradient_checkpointing:
|
||||
continue
|
||||
|
||||
config.gradient_checkpointing = True
|
||||
model = model_class(config)
|
||||
# Model does not have gradient checkpointing activated yet, it will be done at the first forward.
|
||||
self.assertFalse(model.is_gradient_checkpointing)
|
||||
|
||||
model.to(torch_device)
|
||||
inputs = self._prepare_for_class(inputs_dict, model_class, return_labels=True)
|
||||
_ = model(**inputs)
|
||||
|
||||
# Model has gradient checkpointing activated after the first forward.
|
||||
self.assertTrue(model.is_gradient_checkpointing)
|
||||
|
||||
def test_gradient_checkpointing_enable_disable(self):
|
||||
config, inputs_dict = self.model_tester.prepare_config_and_inputs_for_common()
|
||||
|
||||
@ -413,6 +432,7 @@ class ModelTesterMixin:
|
||||
continue
|
||||
model = model_class(config)
|
||||
model.to(torch_device)
|
||||
model.gradient_checkpointing_enable()
|
||||
model.train()
|
||||
inputs = self._prepare_for_class(inputs_dict, model_class, return_labels=True)
|
||||
loss = model(**inputs).loss
|
||||
|
@ -367,6 +367,7 @@ class DeiTModelTest(ModelTesterMixin, unittest.TestCase):
|
||||
if model_class.__name__ == "DeiTForImageClassificationWithTeacher":
|
||||
continue
|
||||
model = model_class(config)
|
||||
model.gradient_checkpointing_enable()
|
||||
model.to(torch_device)
|
||||
model.train()
|
||||
inputs = self._prepare_for_class(inputs_dict, model_class, return_labels=True)
|
||||
|
@ -160,6 +160,20 @@ class TFModelTesterMixin:
|
||||
|
||||
self.assert_outputs_same(after_outputs, outputs)
|
||||
|
||||
def test_save_load_config(self):
|
||||
config, inputs_dict = self.model_tester.prepare_config_and_inputs_for_common()
|
||||
|
||||
for model_class in self.all_model_classes:
|
||||
model = model_class(config)
|
||||
outputs = model(self._prepare_for_class(inputs_dict, model_class))
|
||||
|
||||
new_model = model_class.from_config(model.get_config())
|
||||
_ = new_model(self._prepare_for_class(inputs_dict, model_class)) # Build model
|
||||
new_model.set_weights(model.get_weights())
|
||||
after_outputs = new_model(self._prepare_for_class(inputs_dict, model_class))
|
||||
|
||||
self.assert_outputs_same(after_outputs, outputs)
|
||||
|
||||
@tooslow
|
||||
def test_graph_mode(self):
|
||||
config, inputs_dict = self.model_tester.prepare_config_and_inputs_for_common()
|
||||
|
@ -65,6 +65,8 @@ class UniSpeechSatModelTester:
|
||||
layer_norm_eps=1e-5,
|
||||
hidden_act="gelu",
|
||||
initializer_range=0.02,
|
||||
mask_time_prob=0.5,
|
||||
mask_time_length=2,
|
||||
vocab_size=32,
|
||||
do_stable_layer_norm=False,
|
||||
scope=None,
|
||||
@ -92,6 +94,8 @@ class UniSpeechSatModelTester:
|
||||
self.initializer_range = initializer_range
|
||||
self.vocab_size = vocab_size
|
||||
self.do_stable_layer_norm = do_stable_layer_norm
|
||||
self.mask_time_prob = mask_time_prob
|
||||
self.mask_time_length = mask_time_length
|
||||
self.scope = scope
|
||||
|
||||
output_seq_length = self.seq_length
|
||||
@ -120,6 +124,8 @@ class UniSpeechSatModelTester:
|
||||
conv_bias=self.conv_bias,
|
||||
num_conv_pos_embeddings=self.num_conv_pos_embeddings,
|
||||
num_conv_pos_embedding_groups=self.num_conv_pos_embedding_groups,
|
||||
mask_time_prob=self.mask_time_prob,
|
||||
mask_time_length=self.mask_time_length,
|
||||
num_hidden_layers=self.num_hidden_layers,
|
||||
num_attention_heads=self.num_attention_heads,
|
||||
hidden_dropout_prob=self.hidden_dropout_prob,
|
||||
|
@ -78,6 +78,8 @@ class Wav2Vec2ModelTester:
|
||||
layer_norm_eps=1e-5,
|
||||
hidden_act="gelu",
|
||||
initializer_range=0.02,
|
||||
mask_time_prob=0.5,
|
||||
mask_time_length=2,
|
||||
vocab_size=32,
|
||||
do_stable_layer_norm=False,
|
||||
scope=None,
|
||||
@ -105,6 +107,8 @@ class Wav2Vec2ModelTester:
|
||||
self.initializer_range = initializer_range
|
||||
self.vocab_size = vocab_size
|
||||
self.do_stable_layer_norm = do_stable_layer_norm
|
||||
self.mask_time_prob = mask_time_prob
|
||||
self.mask_time_length = mask_time_length
|
||||
self.scope = scope
|
||||
|
||||
output_seq_length = self.seq_length
|
||||
@ -131,6 +135,8 @@ class Wav2Vec2ModelTester:
|
||||
conv_stride=self.conv_stride,
|
||||
conv_kernel=self.conv_kernel,
|
||||
conv_bias=self.conv_bias,
|
||||
mask_time_prob=self.mask_time_prob,
|
||||
mask_time_length=self.mask_time_length,
|
||||
num_conv_pos_embeddings=self.num_conv_pos_embeddings,
|
||||
num_conv_pos_embedding_groups=self.num_conv_pos_embedding_groups,
|
||||
num_hidden_layers=self.num_hidden_layers,
|
||||
|
@ -73,6 +73,7 @@ class AudioClassificationPipelineTests(unittest.TestCase, metaclass=PipelineTest
|
||||
],
|
||||
)
|
||||
|
||||
@unittest.skip("Skip tests while investigating difference between PyTorch 1.9 and 1.10")
|
||||
@require_torch
|
||||
def test_small_model_pt(self):
|
||||
model = "anton-l/wav2vec2-random-tiny-classifier"
|
||||
|
@ -51,6 +51,7 @@ else:
|
||||
@require_timm
|
||||
@require_torch
|
||||
@is_pipeline_test
|
||||
@unittest.skip("Skip while fixing segmentation pipeline tests")
|
||||
class ImageSegmentationPipelineTests(unittest.TestCase, metaclass=PipelineTestCaseMeta):
|
||||
model_mapping = MODEL_FOR_IMAGE_SEGMENTATION_MAPPING
|
||||
|
||||
|
Reference in New Issue
Block a user