"git@developer.sourcefind.cn:chenpangpang/transformers.git" did not exist on "9e89390ce1e785e72452207139a334cd3bf745ff"
Unverified Commit 10237054 authored by Sylvain Gugger's avatar Sylvain Gugger Committed by GitHub
Browse files

Check models used for common tests are small (#24824)

* First models

* Conditional DETR

* Treat DETR models, skip others

* Skip LayoutLMv2 as well

* Fix last tests
parent a865b62e
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
""" Conditional DETR model configuration""" """ Conditional DETR model configuration"""
import copy
from collections import OrderedDict from collections import OrderedDict
from typing import Mapping from typing import Mapping
...@@ -238,6 +238,19 @@ class ConditionalDetrConfig(PretrainedConfig): ...@@ -238,6 +238,19 @@ class ConditionalDetrConfig(PretrainedConfig):
def hidden_size(self) -> int: def hidden_size(self) -> int:
return self.d_model return self.d_model
def to_dict(self):
"""
Serializes this instance to a Python dictionary. Override the default [`~PretrainedConfig.to_dict`].
Returns:
`Dict[str, any]`: Dictionary of all the attributes that make up this configuration instance,
"""
output = copy.deepcopy(self.__dict__)
if self.backbone_config is not None:
output["backbone_config"] = self.backbone_config.to_dict()
output["model_type"] = self.__class__.model_type
return output
class ConditionalDetrOnnxConfig(OnnxConfig): class ConditionalDetrOnnxConfig(OnnxConfig):
torch_onnx_minimum_version = version.parse("1.11") torch_onnx_minimum_version = version.parse("1.11")
......
...@@ -499,10 +499,11 @@ def build_position_encoding(config): ...@@ -499,10 +499,11 @@ def build_position_encoding(config):
# function to generate sine positional embedding for 2d coordinates # function to generate sine positional embedding for 2d coordinates
def gen_sine_position_embeddings(pos_tensor): def gen_sine_position_embeddings(pos_tensor, d_model):
scale = 2 * math.pi scale = 2 * math.pi
dim_t = torch.arange(128, dtype=torch.float32, device=pos_tensor.device) dim = d_model // 2
dim_t = 10000 ** (2 * torch.div(dim_t, 2, rounding_mode="floor") / 128) dim_t = torch.arange(dim, dtype=torch.float32, device=pos_tensor.device)
dim_t = 10000 ** (2 * torch.div(dim_t, 2, rounding_mode="floor") / dim)
x_embed = pos_tensor[:, :, 0] * scale x_embed = pos_tensor[:, :, 0] * scale
y_embed = pos_tensor[:, :, 1] * scale y_embed = pos_tensor[:, :, 1] * scale
pos_x = x_embed[:, :, None] / dim_t pos_x = x_embed[:, :, None] / dim_t
...@@ -1376,7 +1377,7 @@ class ConditionalDetrDecoder(ConditionalDetrPreTrainedModel): ...@@ -1376,7 +1377,7 @@ class ConditionalDetrDecoder(ConditionalDetrPreTrainedModel):
reference_points = reference_points_before_sigmoid.sigmoid().transpose(0, 1) reference_points = reference_points_before_sigmoid.sigmoid().transpose(0, 1)
obj_center = reference_points[..., :2].transpose(0, 1) obj_center = reference_points[..., :2].transpose(0, 1)
# get sine embedding for the query vector # get sine embedding for the query vector
query_sine_embed_before_transformation = gen_sine_position_embeddings(obj_center) query_sine_embed_before_transformation = gen_sine_position_embeddings(obj_center, self.config.d_model)
for idx, decoder_layer in enumerate(self.layers): for idx, decoder_layer in enumerate(self.layers):
# add LayerDrop (see https://arxiv.org/abs/1909.11556 for description) # add LayerDrop (see https://arxiv.org/abs/1909.11556 for description)
...@@ -2093,13 +2094,13 @@ class ConditionalDetrMaskHeadSmallConv(nn.Module): ...@@ -2093,13 +2094,13 @@ class ConditionalDetrMaskHeadSmallConv(nn.Module):
self.lay1 = nn.Conv2d(dim, dim, 3, padding=1) self.lay1 = nn.Conv2d(dim, dim, 3, padding=1)
self.gn1 = nn.GroupNorm(8, dim) self.gn1 = nn.GroupNorm(8, dim)
self.lay2 = nn.Conv2d(dim, inter_dims[1], 3, padding=1) self.lay2 = nn.Conv2d(dim, inter_dims[1], 3, padding=1)
self.gn2 = nn.GroupNorm(8, inter_dims[1]) self.gn2 = nn.GroupNorm(min(8, inter_dims[1]), inter_dims[1])
self.lay3 = nn.Conv2d(inter_dims[1], inter_dims[2], 3, padding=1) self.lay3 = nn.Conv2d(inter_dims[1], inter_dims[2], 3, padding=1)
self.gn3 = nn.GroupNorm(8, inter_dims[2]) self.gn3 = nn.GroupNorm(min(8, inter_dims[2]), inter_dims[2])
self.lay4 = nn.Conv2d(inter_dims[2], inter_dims[3], 3, padding=1) self.lay4 = nn.Conv2d(inter_dims[2], inter_dims[3], 3, padding=1)
self.gn4 = nn.GroupNorm(8, inter_dims[3]) self.gn4 = nn.GroupNorm(min(8, inter_dims[3]), inter_dims[3])
self.lay5 = nn.Conv2d(inter_dims[3], inter_dims[4], 3, padding=1) self.lay5 = nn.Conv2d(inter_dims[3], inter_dims[4], 3, padding=1)
self.gn5 = nn.GroupNorm(8, inter_dims[4]) self.gn5 = nn.GroupNorm(min(8, inter_dims[4]), inter_dims[4])
self.out_lay = nn.Conv2d(inter_dims[4], 1, 3, padding=1) self.out_lay = nn.Conv2d(inter_dims[4], 1, 3, padding=1)
self.dim = dim self.dim = dim
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
""" Deformable DETR model configuration""" """ Deformable DETR model configuration"""
import copy
from ...configuration_utils import PretrainedConfig from ...configuration_utils import PretrainedConfig
from ...utils import logging from ...utils import logging
...@@ -260,3 +261,16 @@ class DeformableDetrConfig(PretrainedConfig): ...@@ -260,3 +261,16 @@ class DeformableDetrConfig(PretrainedConfig):
@property @property
def hidden_size(self) -> int: def hidden_size(self) -> int:
return self.d_model return self.d_model
def to_dict(self):
"""
Serializes this instance to a Python dictionary. Override the default [`~PretrainedConfig.to_dict`].
Returns:
`Dict[str, any]`: Dictionary of all the attributes that make up this configuration instance,
"""
output = copy.deepcopy(self.__dict__)
if self.backbone_config is not None:
output["backbone_config"] = self.backbone_config.to_dict()
output["model_type"] = self.__class__.model_type
return output
...@@ -1791,13 +1791,13 @@ class DetrMaskHeadSmallConv(nn.Module): ...@@ -1791,13 +1791,13 @@ class DetrMaskHeadSmallConv(nn.Module):
self.lay1 = nn.Conv2d(dim, dim, 3, padding=1) self.lay1 = nn.Conv2d(dim, dim, 3, padding=1)
self.gn1 = nn.GroupNorm(8, dim) self.gn1 = nn.GroupNorm(8, dim)
self.lay2 = nn.Conv2d(dim, inter_dims[1], 3, padding=1) self.lay2 = nn.Conv2d(dim, inter_dims[1], 3, padding=1)
self.gn2 = nn.GroupNorm(8, inter_dims[1]) self.gn2 = nn.GroupNorm(min(8, inter_dims[1]), inter_dims[1])
self.lay3 = nn.Conv2d(inter_dims[1], inter_dims[2], 3, padding=1) self.lay3 = nn.Conv2d(inter_dims[1], inter_dims[2], 3, padding=1)
self.gn3 = nn.GroupNorm(8, inter_dims[2]) self.gn3 = nn.GroupNorm(min(8, inter_dims[2]), inter_dims[2])
self.lay4 = nn.Conv2d(inter_dims[2], inter_dims[3], 3, padding=1) self.lay4 = nn.Conv2d(inter_dims[2], inter_dims[3], 3, padding=1)
self.gn4 = nn.GroupNorm(8, inter_dims[3]) self.gn4 = nn.GroupNorm(min(8, inter_dims[3]), inter_dims[3])
self.lay5 = nn.Conv2d(inter_dims[3], inter_dims[4], 3, padding=1) self.lay5 = nn.Conv2d(inter_dims[3], inter_dims[4], 3, padding=1)
self.gn5 = nn.GroupNorm(8, inter_dims[4]) self.gn5 = nn.GroupNorm(min(8, inter_dims[4]), inter_dims[4])
self.out_lay = nn.Conv2d(inter_dims[4], 1, 3, padding=1) self.out_lay = nn.Conv2d(inter_dims[4], 1, 3, padding=1)
self.dim = dim self.dim = dim
......
...@@ -62,12 +62,12 @@ class BridgeTowerTextModelTester: ...@@ -62,12 +62,12 @@ class BridgeTowerTextModelTester:
self, self,
parent, parent,
hidden_act="gelu", hidden_act="gelu",
hidden_size=128, hidden_size=64,
initializer_factor=1, initializer_factor=1,
layer_norm_eps=1e-05, layer_norm_eps=1e-05,
num_attention_heads=4, num_attention_heads=4,
num_hidden_layers=2, num_hidden_layers=2,
intermediate_size=256, intermediate_size=128,
tie_word_embeddings=False, tie_word_embeddings=False,
output_hidden_states=False, output_hidden_states=False,
): ):
...@@ -105,6 +105,7 @@ class BridgeTowerTextModelTester: ...@@ -105,6 +105,7 @@ class BridgeTowerTextModelTester:
intermediate_size=self.intermediate_size, intermediate_size=self.intermediate_size,
tie_word_embeddings=self.tie_word_embeddings, tie_word_embeddings=self.tie_word_embeddings,
output_hidden_states=self.output_hidden_states, output_hidden_states=self.output_hidden_states,
vocab_size=self.vocab_size,
) )
...@@ -112,7 +113,7 @@ class BridgeTowerImageModelTester: ...@@ -112,7 +113,7 @@ class BridgeTowerImageModelTester:
def __init__( def __init__(
self, self,
parent, parent,
hidden_size=128, hidden_size=64,
initializer_factor=1, initializer_factor=1,
layer_norm_eps=1e-05, layer_norm_eps=1e-05,
num_hidden_layers=2, num_hidden_layers=2,
...@@ -168,10 +169,10 @@ class BridgeTowerModelTester: ...@@ -168,10 +169,10 @@ class BridgeTowerModelTester:
init_layernorm_from_vision_encoder=False, init_layernorm_from_vision_encoder=False,
contrastive_hidden_size=512, contrastive_hidden_size=512,
logit_scale_init_value=2.6592, logit_scale_init_value=2.6592,
hidden_size=128, hidden_size=64,
num_hidden_layers=2, num_hidden_layers=2,
num_attention_heads=4, num_attention_heads=4,
intermediate_size=256, intermediate_size=128,
): ):
if text_kwargs is None: if text_kwargs is None:
text_kwargs = {} text_kwargs = {}
...@@ -280,7 +281,10 @@ class BridgeTowerModelTester: ...@@ -280,7 +281,10 @@ class BridgeTowerModelTester:
result = model(input_ids, attention_mask=attention_mask, pixel_values=pixel_values, pixel_mask=pixel_mask) result = model(input_ids, attention_mask=attention_mask, pixel_values=pixel_values, pixel_mask=pixel_mask)
result = model(input_ids, attention_mask=attention_mask, pixel_values=pixel_values) result = model(input_ids, attention_mask=attention_mask, pixel_values=pixel_values)
self.parent.assertEqual(result.logits.shape, (self.batch_size, self.text_model_tester.seq_length, 50265)) self.parent.assertEqual(
result.logits.shape,
(self.batch_size, self.text_model_tester.seq_length, self.text_model_tester.vocab_size),
)
def prepare_config_and_inputs_for_common(self): def prepare_config_and_inputs_for_common(self):
config_and_inputs = self.prepare_config_and_inputs() config_and_inputs = self.prepare_config_and_inputs()
......
...@@ -50,6 +50,7 @@ class CanineModelTester: ...@@ -50,6 +50,7 @@ class CanineModelTester:
use_token_type_ids=True, use_token_type_ids=True,
use_labels=True, use_labels=True,
# let's use a vocab size that's way bigger than BERT's one # let's use a vocab size that's way bigger than BERT's one
# NOTE: this is not a model parameter, just an input
vocab_size=100000, vocab_size=100000,
hidden_size=32, hidden_size=32,
num_hidden_layers=5, num_hidden_layers=5,
...@@ -64,6 +65,7 @@ class CanineModelTester: ...@@ -64,6 +65,7 @@ class CanineModelTester:
initializer_range=0.02, initializer_range=0.02,
num_labels=3, num_labels=3,
num_choices=4, num_choices=4,
num_hash_buckets=16,
scope=None, scope=None,
): ):
self.parent = parent self.parent = parent
...@@ -87,6 +89,7 @@ class CanineModelTester: ...@@ -87,6 +89,7 @@ class CanineModelTester:
self.initializer_range = initializer_range self.initializer_range = initializer_range
self.num_labels = num_labels self.num_labels = num_labels
self.num_choices = num_choices self.num_choices = num_choices
self.num_hash_buckets = num_hash_buckets
self.scope = scope self.scope = scope
def prepare_config_and_inputs(self): def prepare_config_and_inputs(self):
...@@ -125,6 +128,7 @@ class CanineModelTester: ...@@ -125,6 +128,7 @@ class CanineModelTester:
type_vocab_size=self.type_vocab_size, type_vocab_size=self.type_vocab_size,
is_decoder=False, is_decoder=False,
initializer_range=self.initializer_range, initializer_range=self.initializer_range,
num_hash_buckets=self.num_hash_buckets,
) )
def create_and_check_model( def create_and_check_model(
......
...@@ -67,11 +67,12 @@ class ClapAudioModelTester: ...@@ -67,11 +67,12 @@ class ClapAudioModelTester:
freq_ratio=2, freq_ratio=2,
num_channels=3, num_channels=3,
is_training=True, is_training=True,
hidden_size=256, hidden_size=32,
patch_embeds_hidden_size=32, patch_embeds_hidden_size=16,
projection_dim=32, projection_dim=32,
num_hidden_layers=4, depths=[2, 2],
num_heads=[2, 2, 2, 2], num_hidden_layers=2,
num_heads=[2, 2],
intermediate_size=37, intermediate_size=37,
dropout=0.1, dropout=0.1,
attention_dropout=0.1, attention_dropout=0.1,
...@@ -89,6 +90,7 @@ class ClapAudioModelTester: ...@@ -89,6 +90,7 @@ class ClapAudioModelTester:
self.hidden_size = hidden_size self.hidden_size = hidden_size
self.projection_dim = projection_dim self.projection_dim = projection_dim
self.num_hidden_layers = num_hidden_layers self.num_hidden_layers = num_hidden_layers
self.depths = depths
self.num_heads = num_heads self.num_heads = num_heads
self.num_attention_heads = num_heads[0] self.num_attention_heads = num_heads[0]
self.seq_length = seq_length self.seq_length = seq_length
...@@ -118,6 +120,7 @@ class ClapAudioModelTester: ...@@ -118,6 +120,7 @@ class ClapAudioModelTester:
hidden_size=self.hidden_size, hidden_size=self.hidden_size,
patch_stride=self.patch_stride, patch_stride=self.patch_stride,
projection_dim=self.projection_dim, projection_dim=self.projection_dim,
depths=self.depths,
num_hidden_layers=self.num_hidden_layers, num_hidden_layers=self.num_hidden_layers,
num_attention_heads=self.num_heads, num_attention_heads=self.num_heads,
intermediate_size=self.intermediate_size, intermediate_size=self.intermediate_size,
...@@ -203,7 +206,7 @@ class ClapAudioModelTest(ModelTesterMixin, unittest.TestCase): ...@@ -203,7 +206,7 @@ class ClapAudioModelTest(ModelTesterMixin, unittest.TestCase):
self.assertListEqual( self.assertListEqual(
list(hidden_states[0].shape[-2:]), list(hidden_states[0].shape[-2:]),
[self.model_tester.patch_embeds_hidden_size, self.model_tester.patch_embeds_hidden_size], [2 * self.model_tester.patch_embeds_hidden_size, 2 * self.model_tester.patch_embeds_hidden_size],
) )
config, inputs_dict = self.model_tester.prepare_config_and_inputs_for_common() config, inputs_dict = self.model_tester.prepare_config_and_inputs_for_common()
......
...@@ -19,8 +19,8 @@ import inspect ...@@ -19,8 +19,8 @@ import inspect
import math import math
import unittest import unittest
from transformers import ConditionalDetrConfig, is_timm_available, is_vision_available from transformers import ConditionalDetrConfig, ResNetConfig, is_torch_available, is_vision_available
from transformers.testing_utils import require_timm, require_vision, slow, torch_device from transformers.testing_utils import require_timm, require_torch, require_vision, slow, torch_device
from transformers.utils import cached_property from transformers.utils import cached_property
from ...generation.test_utils import GenerationTesterMixin from ...generation.test_utils import GenerationTesterMixin
...@@ -29,14 +29,13 @@ from ...test_modeling_common import ModelTesterMixin, _config_zero_init, floats_ ...@@ -29,14 +29,13 @@ from ...test_modeling_common import ModelTesterMixin, _config_zero_init, floats_
from ...test_pipeline_mixin import PipelineTesterMixin from ...test_pipeline_mixin import PipelineTesterMixin
if is_timm_available(): if is_torch_available():
import torch import torch
from transformers import ( from transformers import (
ConditionalDetrForObjectDetection, ConditionalDetrForObjectDetection,
ConditionalDetrForSegmentation, ConditionalDetrForSegmentation,
ConditionalDetrModel, ConditionalDetrModel,
ResNetConfig,
) )
...@@ -53,7 +52,7 @@ class ConditionalDetrModelTester: ...@@ -53,7 +52,7 @@ class ConditionalDetrModelTester:
batch_size=8, batch_size=8,
is_training=True, is_training=True,
use_labels=True, use_labels=True,
hidden_size=256, hidden_size=32,
num_hidden_layers=2, num_hidden_layers=2,
num_attention_heads=8, num_attention_heads=8,
intermediate_size=4, intermediate_size=4,
...@@ -111,6 +110,16 @@ class ConditionalDetrModelTester: ...@@ -111,6 +110,16 @@ class ConditionalDetrModelTester:
return config, pixel_values, pixel_mask, labels return config, pixel_values, pixel_mask, labels
def get_config(self): def get_config(self):
resnet_config = ResNetConfig(
num_channels=3,
embeddings_size=10,
hidden_sizes=[10, 20, 30, 40],
depths=[1, 1, 2, 1],
hidden_act="relu",
num_labels=3,
out_features=["stage2", "stage3", "stage4"],
out_indices=[2, 3, 4],
)
return ConditionalDetrConfig( return ConditionalDetrConfig(
d_model=self.hidden_size, d_model=self.hidden_size,
encoder_layers=self.num_hidden_layers, encoder_layers=self.num_hidden_layers,
...@@ -123,6 +132,8 @@ class ConditionalDetrModelTester: ...@@ -123,6 +132,8 @@ class ConditionalDetrModelTester:
attention_dropout=self.attention_probs_dropout_prob, attention_dropout=self.attention_probs_dropout_prob,
num_queries=self.num_queries, num_queries=self.num_queries,
num_labels=self.num_labels, num_labels=self.num_labels,
use_timm_backbone=False,
backbone_config=resnet_config,
) )
def prepare_config_and_inputs_for_common(self): def prepare_config_and_inputs_for_common(self):
...@@ -159,27 +170,8 @@ class ConditionalDetrModelTester: ...@@ -159,27 +170,8 @@ class ConditionalDetrModelTester:
self.parent.assertEqual(result.logits.shape, (self.batch_size, self.num_queries, self.num_labels)) self.parent.assertEqual(result.logits.shape, (self.batch_size, self.num_queries, self.num_labels))
self.parent.assertEqual(result.pred_boxes.shape, (self.batch_size, self.num_queries, 4)) self.parent.assertEqual(result.pred_boxes.shape, (self.batch_size, self.num_queries, 4))
def create_and_check_no_timm_backbone(self, config, pixel_values, pixel_mask, labels):
config.use_timm_backbone = False
config.backbone_config = ResNetConfig()
model = ConditionalDetrForObjectDetection(config=config)
model.to(torch_device)
model.eval()
result = model(pixel_values=pixel_values, pixel_mask=pixel_mask)
result = model(pixel_values)
self.parent.assertEqual(result.logits.shape, (self.batch_size, self.num_queries, self.num_labels))
self.parent.assertEqual(result.pred_boxes.shape, (self.batch_size, self.num_queries, 4))
result = model(pixel_values=pixel_values, pixel_mask=pixel_mask, labels=labels)
self.parent.assertEqual(result.loss.shape, ())
self.parent.assertEqual(result.logits.shape, (self.batch_size, self.num_queries, self.num_labels))
self.parent.assertEqual(result.pred_boxes.shape, (self.batch_size, self.num_queries, 4))
@require_timm @require_torch
class ConditionalDetrModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineTesterMixin, unittest.TestCase): class ConditionalDetrModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineTesterMixin, unittest.TestCase):
all_model_classes = ( all_model_classes = (
( (
...@@ -187,12 +179,12 @@ class ConditionalDetrModelTest(ModelTesterMixin, GenerationTesterMixin, Pipeline ...@@ -187,12 +179,12 @@ class ConditionalDetrModelTest(ModelTesterMixin, GenerationTesterMixin, Pipeline
ConditionalDetrForObjectDetection, ConditionalDetrForObjectDetection,
ConditionalDetrForSegmentation, ConditionalDetrForSegmentation,
) )
if is_timm_available() if is_torch_available()
else () else ()
) )
pipeline_model_mapping = ( pipeline_model_mapping = (
{"feature-extraction": ConditionalDetrModel, "object-detection": ConditionalDetrForObjectDetection} {"feature-extraction": ConditionalDetrModel, "object-detection": ConditionalDetrForObjectDetection}
if is_timm_available() if is_torch_available()
else {} else {}
) )
is_encoder_decoder = True is_encoder_decoder = True
...@@ -243,10 +235,6 @@ class ConditionalDetrModelTest(ModelTesterMixin, GenerationTesterMixin, Pipeline ...@@ -243,10 +235,6 @@ class ConditionalDetrModelTest(ModelTesterMixin, GenerationTesterMixin, Pipeline
config_and_inputs = self.model_tester.prepare_config_and_inputs() config_and_inputs = self.model_tester.prepare_config_and_inputs()
self.model_tester.create_and_check_conditional_detr_object_detection_head_model(*config_and_inputs) self.model_tester.create_and_check_conditional_detr_object_detection_head_model(*config_and_inputs)
def test_conditional_detr_no_timm_backbone(self):
config_and_inputs = self.model_tester.prepare_config_and_inputs()
self.model_tester.create_and_check_no_timm_backbone(*config_and_inputs)
# TODO: check if this works again for PyTorch 2.x.y # TODO: check if this works again for PyTorch 2.x.y
@unittest.skip(reason="Got `CUDA error: misaligned address` with PyTorch 2.0.0.") @unittest.skip(reason="Got `CUDA error: misaligned address` with PyTorch 2.0.0.")
def test_multi_gpu_data_parallel_forward(self): def test_multi_gpu_data_parallel_forward(self):
......
...@@ -243,6 +243,10 @@ class CTRLModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineTesterMixin ...@@ -243,6 +243,10 @@ class CTRLModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineTesterMixin
config_and_inputs = self.model_tester.prepare_config_and_inputs() config_and_inputs = self.model_tester.prepare_config_and_inputs()
self.model_tester.create_and_check_lm_head_model(*config_and_inputs) self.model_tester.create_and_check_lm_head_model(*config_and_inputs)
@unittest.skip("Will be fixed soon by reducing the size of the model used for common tests.")
def test_model_is_small(self):
pass
@slow @slow
def test_model_from_pretrained(self): def test_model_from_pretrained(self):
for model_name in CTRL_PRETRAINED_MODEL_ARCHIVE_LIST[:1]: for model_name in CTRL_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
......
...@@ -247,6 +247,10 @@ class CvtModelTest(ModelTesterMixin, PipelineTesterMixin, unittest.TestCase): ...@@ -247,6 +247,10 @@ class CvtModelTest(ModelTesterMixin, PipelineTesterMixin, unittest.TestCase):
config_and_inputs = self.model_tester.prepare_config_and_inputs() config_and_inputs = self.model_tester.prepare_config_and_inputs()
self.model_tester.create_and_check_for_image_classification(*config_and_inputs) self.model_tester.create_and_check_for_image_classification(*config_and_inputs)
@unittest.skip("Will be fixed soon by reducing the size of the model used for common tests.")
def test_model_is_small(self):
pass
@slow @slow
def test_model_from_pretrained(self): def test_model_from_pretrained(self):
for model_name in CVT_PRETRAINED_MODEL_ARCHIVE_LIST[:1]: for model_name in CVT_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
......
...@@ -20,9 +20,16 @@ import math ...@@ -20,9 +20,16 @@ import math
import unittest import unittest
from typing import Dict, List, Tuple from typing import Dict, List, Tuple
from transformers import DeformableDetrConfig, is_timm_available, is_vision_available from transformers import DeformableDetrConfig, ResNetConfig, is_torch_available, is_vision_available
from transformers.file_utils import cached_property from transformers.file_utils import cached_property
from transformers.testing_utils import require_timm, require_torch_gpu, require_vision, slow, torch_device from transformers.testing_utils import (
require_timm,
require_torch,
require_torch_gpu,
require_vision,
slow,
torch_device,
)
from ...generation.test_utils import GenerationTesterMixin from ...generation.test_utils import GenerationTesterMixin
from ...test_configuration_common import ConfigTester from ...test_configuration_common import ConfigTester
...@@ -30,10 +37,10 @@ from ...test_modeling_common import ModelTesterMixin, _config_zero_init, floats_ ...@@ -30,10 +37,10 @@ from ...test_modeling_common import ModelTesterMixin, _config_zero_init, floats_
from ...test_pipeline_mixin import PipelineTesterMixin from ...test_pipeline_mixin import PipelineTesterMixin
if is_timm_available(): if is_torch_available():
import torch import torch
from transformers import DeformableDetrForObjectDetection, DeformableDetrModel, ResNetConfig from transformers import DeformableDetrForObjectDetection, DeformableDetrModel
if is_vision_available(): if is_vision_available():
...@@ -49,7 +56,7 @@ class DeformableDetrModelTester: ...@@ -49,7 +56,7 @@ class DeformableDetrModelTester:
batch_size=8, batch_size=8,
is_training=True, is_training=True,
use_labels=True, use_labels=True,
hidden_size=256, hidden_size=32,
num_hidden_layers=2, num_hidden_layers=2,
num_attention_heads=8, num_attention_heads=8,
intermediate_size=4, intermediate_size=4,
...@@ -116,6 +123,16 @@ class DeformableDetrModelTester: ...@@ -116,6 +123,16 @@ class DeformableDetrModelTester:
return config, pixel_values, pixel_mask, labels return config, pixel_values, pixel_mask, labels
def get_config(self): def get_config(self):
resnet_config = ResNetConfig(
num_channels=3,
embeddings_size=10,
hidden_sizes=[10, 20, 30, 40],
depths=[1, 1, 2, 1],
hidden_act="relu",
num_labels=3,
out_features=["stage2", "stage3", "stage4"],
out_indices=[2, 3, 4],
)
return DeformableDetrConfig( return DeformableDetrConfig(
d_model=self.hidden_size, d_model=self.hidden_size,
encoder_layers=self.num_hidden_layers, encoder_layers=self.num_hidden_layers,
...@@ -131,6 +148,8 @@ class DeformableDetrModelTester: ...@@ -131,6 +148,8 @@ class DeformableDetrModelTester:
num_feature_levels=self.num_feature_levels, num_feature_levels=self.num_feature_levels,
encoder_n_points=self.encoder_n_points, encoder_n_points=self.encoder_n_points,
decoder_n_points=self.decoder_n_points, decoder_n_points=self.decoder_n_points,
use_timm_backbone=False,
backbone_config=resnet_config,
) )
def prepare_config_and_inputs_for_common(self): def prepare_config_and_inputs_for_common(self):
...@@ -165,32 +184,13 @@ class DeformableDetrModelTester: ...@@ -165,32 +184,13 @@ class DeformableDetrModelTester:
self.parent.assertEqual(result.logits.shape, (self.batch_size, self.num_queries, self.num_labels)) self.parent.assertEqual(result.logits.shape, (self.batch_size, self.num_queries, self.num_labels))
self.parent.assertEqual(result.pred_boxes.shape, (self.batch_size, self.num_queries, 4)) self.parent.assertEqual(result.pred_boxes.shape, (self.batch_size, self.num_queries, 4))
def create_and_check_no_timm_backbone(self, config, pixel_values, pixel_mask, labels):
config.use_timm_backbone = False
config.backbone_config = ResNetConfig()
model = DeformableDetrForObjectDetection(config=config)
model.to(torch_device)
model.eval()
result = model(pixel_values=pixel_values, pixel_mask=pixel_mask)
result = model(pixel_values)
self.parent.assertEqual(result.logits.shape, (self.batch_size, self.num_queries, self.num_labels))
self.parent.assertEqual(result.pred_boxes.shape, (self.batch_size, self.num_queries, 4))
result = model(pixel_values=pixel_values, pixel_mask=pixel_mask, labels=labels)
self.parent.assertEqual(result.loss.shape, ())
self.parent.assertEqual(result.logits.shape, (self.batch_size, self.num_queries, self.num_labels))
self.parent.assertEqual(result.pred_boxes.shape, (self.batch_size, self.num_queries, 4))
@require_timm @require_torch
class DeformableDetrModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineTesterMixin, unittest.TestCase): class DeformableDetrModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineTesterMixin, unittest.TestCase):
all_model_classes = (DeformableDetrModel, DeformableDetrForObjectDetection) if is_timm_available() else () all_model_classes = (DeformableDetrModel, DeformableDetrForObjectDetection) if is_torch_available() else ()
pipeline_model_mapping = ( pipeline_model_mapping = (
{"feature-extraction": DeformableDetrModel, "object-detection": DeformableDetrForObjectDetection} {"feature-extraction": DeformableDetrModel, "object-detection": DeformableDetrForObjectDetection}
if is_timm_available() if is_torch_available()
else {} else {}
) )
is_encoder_decoder = True is_encoder_decoder = True
...@@ -246,10 +246,6 @@ class DeformableDetrModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineT ...@@ -246,10 +246,6 @@ class DeformableDetrModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineT
config_and_inputs = self.model_tester.prepare_config_and_inputs() config_and_inputs = self.model_tester.prepare_config_and_inputs()
self.model_tester.create_and_check_deformable_detr_object_detection_head_model(*config_and_inputs) self.model_tester.create_and_check_deformable_detr_object_detection_head_model(*config_and_inputs)
def test_deformable_detr_no_timm_backbone(self):
config_and_inputs = self.model_tester.prepare_config_and_inputs()
self.model_tester.create_and_check_no_timm_backbone(*config_and_inputs)
@unittest.skip(reason="Deformable DETR does not use inputs_embeds") @unittest.skip(reason="Deformable DETR does not use inputs_embeds")
def test_inputs_embeds(self): def test_inputs_embeds(self):
pass pass
......
...@@ -423,6 +423,10 @@ class DetaModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineTesterMixin ...@@ -423,6 +423,10 @@ class DetaModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineTesterMixin
def test_tied_model_weights_key_ignore(self): def test_tied_model_weights_key_ignore(self):
pass pass
@unittest.skip("Will be fixed soon by reducing the size of the model used for common tests.")
def test_model_is_small(self):
pass
def test_initialization(self): def test_initialization(self):
config, inputs_dict = self.model_tester.prepare_config_and_inputs_for_common() config, inputs_dict = self.model_tester.prepare_config_and_inputs_for_common()
......
...@@ -19,7 +19,7 @@ import inspect ...@@ -19,7 +19,7 @@ import inspect
import math import math
import unittest import unittest
from transformers import DetrConfig, is_timm_available, is_vision_available from transformers import DetrConfig, ResNetConfig, is_torch_available, is_vision_available
from transformers.testing_utils import require_timm, require_torch, require_vision, slow, torch_device from transformers.testing_utils import require_timm, require_torch, require_vision, slow, torch_device
from transformers.utils import cached_property from transformers.utils import cached_property
...@@ -29,10 +29,10 @@ from ...test_modeling_common import ModelTesterMixin, _config_zero_init, floats_ ...@@ -29,10 +29,10 @@ from ...test_modeling_common import ModelTesterMixin, _config_zero_init, floats_
from ...test_pipeline_mixin import PipelineTesterMixin from ...test_pipeline_mixin import PipelineTesterMixin
if is_timm_available(): if is_torch_available():
import torch import torch
from transformers import DetrForObjectDetection, DetrForSegmentation, DetrModel, ResNetConfig from transformers import DetrForObjectDetection, DetrForSegmentation, DetrModel
if is_vision_available(): if is_vision_available():
...@@ -48,7 +48,7 @@ class DetrModelTester: ...@@ -48,7 +48,7 @@ class DetrModelTester:
batch_size=8, batch_size=8,
is_training=True, is_training=True,
use_labels=True, use_labels=True,
hidden_size=256, hidden_size=32,
num_hidden_layers=2, num_hidden_layers=2,
num_attention_heads=8, num_attention_heads=8,
intermediate_size=4, intermediate_size=4,
...@@ -106,6 +106,16 @@ class DetrModelTester: ...@@ -106,6 +106,16 @@ class DetrModelTester:
return config, pixel_values, pixel_mask, labels return config, pixel_values, pixel_mask, labels
def get_config(self): def get_config(self):
resnet_config = ResNetConfig(
num_channels=3,
embeddings_size=10,
hidden_sizes=[10, 20, 30, 40],
depths=[1, 1, 2, 1],
hidden_act="relu",
num_labels=3,
out_features=["stage2", "stage3", "stage4"],
out_indices=[2, 3, 4],
)
return DetrConfig( return DetrConfig(
d_model=self.hidden_size, d_model=self.hidden_size,
encoder_layers=self.num_hidden_layers, encoder_layers=self.num_hidden_layers,
...@@ -118,6 +128,8 @@ class DetrModelTester: ...@@ -118,6 +128,8 @@ class DetrModelTester:
attention_dropout=self.attention_probs_dropout_prob, attention_dropout=self.attention_probs_dropout_prob,
num_queries=self.num_queries, num_queries=self.num_queries,
num_labels=self.num_labels, num_labels=self.num_labels,
use_timm_backbone=False,
backbone_config=resnet_config,
) )
def prepare_config_and_inputs_for_common(self): def prepare_config_and_inputs_for_common(self):
...@@ -154,27 +166,8 @@ class DetrModelTester: ...@@ -154,27 +166,8 @@ class DetrModelTester:
self.parent.assertEqual(result.logits.shape, (self.batch_size, self.num_queries, self.num_labels + 1)) self.parent.assertEqual(result.logits.shape, (self.batch_size, self.num_queries, self.num_labels + 1))
self.parent.assertEqual(result.pred_boxes.shape, (self.batch_size, self.num_queries, 4)) self.parent.assertEqual(result.pred_boxes.shape, (self.batch_size, self.num_queries, 4))
def create_and_check_no_timm_backbone(self, config, pixel_values, pixel_mask, labels):
config.use_timm_backbone = False
config.backbone_config = ResNetConfig()
model = DetrForObjectDetection(config=config)
model.to(torch_device)
model.eval()
result = model(pixel_values=pixel_values, pixel_mask=pixel_mask) @require_torch
result = model(pixel_values)
self.parent.assertEqual(result.logits.shape, (self.batch_size, self.num_queries, self.num_labels + 1))
self.parent.assertEqual(result.pred_boxes.shape, (self.batch_size, self.num_queries, 4))
result = model(pixel_values=pixel_values, pixel_mask=pixel_mask, labels=labels)
self.parent.assertEqual(result.loss.shape, ())
self.parent.assertEqual(result.logits.shape, (self.batch_size, self.num_queries, self.num_labels + 1))
self.parent.assertEqual(result.pred_boxes.shape, (self.batch_size, self.num_queries, 4))
@require_timm
class DetrModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineTesterMixin, unittest.TestCase): class DetrModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineTesterMixin, unittest.TestCase):
all_model_classes = ( all_model_classes = (
( (
...@@ -182,7 +175,7 @@ class DetrModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineTesterMixin ...@@ -182,7 +175,7 @@ class DetrModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineTesterMixin
DetrForObjectDetection, DetrForObjectDetection,
DetrForSegmentation, DetrForSegmentation,
) )
if is_timm_available() if is_torch_available()
else () else ()
) )
pipeline_model_mapping = ( pipeline_model_mapping = (
...@@ -191,7 +184,7 @@ class DetrModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineTesterMixin ...@@ -191,7 +184,7 @@ class DetrModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineTesterMixin
"image-segmentation": DetrForSegmentation, "image-segmentation": DetrForSegmentation,
"object-detection": DetrForObjectDetection, "object-detection": DetrForObjectDetection,
} }
if is_timm_available() if is_torch_available()
else {} else {}
) )
is_encoder_decoder = True is_encoder_decoder = True
...@@ -242,10 +235,6 @@ class DetrModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineTesterMixin ...@@ -242,10 +235,6 @@ class DetrModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineTesterMixin
config_and_inputs = self.model_tester.prepare_config_and_inputs() config_and_inputs = self.model_tester.prepare_config_and_inputs()
self.model_tester.create_and_check_detr_object_detection_head_model(*config_and_inputs) self.model_tester.create_and_check_detr_object_detection_head_model(*config_and_inputs)
def test_detr_no_timm_backbone(self):
config_and_inputs = self.model_tester.prepare_config_and_inputs()
self.model_tester.create_and_check_no_timm_backbone(*config_and_inputs)
# TODO: check if this works again for PyTorch 2.x.y # TODO: check if this works again for PyTorch 2.x.y
@unittest.skip(reason="Got `CUDA error: misaligned address` with PyTorch 2.0.0.") @unittest.skip(reason="Got `CUDA error: misaligned address` with PyTorch 2.0.0.")
def test_multi_gpu_data_parallel_forward(self): def test_multi_gpu_data_parallel_forward(self):
...@@ -464,6 +453,7 @@ class DetrModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineTesterMixin ...@@ -464,6 +453,7 @@ class DetrModelTest(ModelTesterMixin, GenerationTesterMixin, PipelineTesterMixin
# let's set num_channels to 1 # let's set num_channels to 1
config.num_channels = 1 config.num_channels = 1
config.backbone_config.num_channels = 1
for model_class in self.all_model_classes: for model_class in self.all_model_classes:
model = model_class(config) model = model_class(config)
......
...@@ -275,6 +275,10 @@ class DPTModelTest(ModelTesterMixin, PipelineTesterMixin, unittest.TestCase): ...@@ -275,6 +275,10 @@ class DPTModelTest(ModelTesterMixin, PipelineTesterMixin, unittest.TestCase):
msg=f"Parameter {name} of model {model_class} seems not properly initialized", msg=f"Parameter {name} of model {model_class} seems not properly initialized",
) )
@unittest.skip("Will be fixed soon by reducing the size of the model used for common tests.")
def test_model_is_small(self):
pass
@slow @slow
def test_model_from_pretrained(self): def test_model_from_pretrained(self):
for model_name in DPT_PRETRAINED_MODEL_ARCHIVE_LIST[:1]: for model_name in DPT_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
......
...@@ -289,6 +289,10 @@ class DPTModelTest(ModelTesterMixin, PipelineTesterMixin, unittest.TestCase): ...@@ -289,6 +289,10 @@ class DPTModelTest(ModelTesterMixin, PipelineTesterMixin, unittest.TestCase):
msg=f"Parameter {name} of model {model_class} seems not properly initialized", msg=f"Parameter {name} of model {model_class} seems not properly initialized",
) )
@unittest.skip("Will be fixed soon by reducing the size of the model used for common tests.")
def test_model_is_small(self):
pass
@slow @slow
def test_model_from_pretrained(self): def test_model_from_pretrained(self):
for model_name in DPT_PRETRAINED_MODEL_ARCHIVE_LIST[1:]: for model_name in DPT_PRETRAINED_MODEL_ARCHIVE_LIST[1:]:
......
...@@ -223,6 +223,10 @@ class EfficientNetModelTest(ModelTesterMixin, PipelineTesterMixin, unittest.Test ...@@ -223,6 +223,10 @@ class EfficientNetModelTest(ModelTesterMixin, PipelineTesterMixin, unittest.Test
config_and_inputs = self.model_tester.prepare_config_and_inputs() config_and_inputs = self.model_tester.prepare_config_and_inputs()
self.model_tester.create_and_check_for_image_classification(*config_and_inputs) self.model_tester.create_and_check_for_image_classification(*config_and_inputs)
@unittest.skip("Will be fixed soon by reducing the size of the model used for common tests.")
def test_model_is_small(self):
pass
@slow @slow
def test_model_from_pretrained(self): def test_model_from_pretrained(self):
for model_name in EFFICIENTNET_PRETRAINED_MODEL_ARCHIVE_LIST[:1]: for model_name in EFFICIENTNET_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
......
...@@ -397,6 +397,10 @@ class EncodecModelTest(ModelTesterMixin, PipelineTesterMixin, unittest.TestCase) ...@@ -397,6 +397,10 @@ class EncodecModelTest(ModelTesterMixin, PipelineTesterMixin, unittest.TestCase)
msg=f"Parameter {name} of model {model_class} seems not properly initialized", msg=f"Parameter {name} of model {model_class} seems not properly initialized",
) )
@unittest.skip("Will be fixed soon by reducing the size of the model used for common tests.")
def test_model_is_small(self):
pass
def test_identity_shortcut(self): def test_identity_shortcut(self):
config, inputs_dict = self.model_tester.prepare_config_and_inputs() config, inputs_dict = self.model_tester.prepare_config_and_inputs()
config.use_conv_shortcut = False config.use_conv_shortcut = False
......
...@@ -279,6 +279,10 @@ class EsmModelTest(ModelTesterMixin, PipelineTesterMixin, unittest.TestCase): ...@@ -279,6 +279,10 @@ class EsmModelTest(ModelTesterMixin, PipelineTesterMixin, unittest.TestCase):
def test_resize_tokens_embeddings(self): def test_resize_tokens_embeddings(self):
pass pass
@unittest.skip("Will be fixed soon by reducing the size of the model used for common tests.")
def test_model_is_small(self):
pass
@require_torch @require_torch
class EsmModelIntegrationTest(TestCasePlus): class EsmModelIntegrationTest(TestCasePlus):
......
...@@ -243,6 +243,10 @@ class EsmFoldModelTest(ModelTesterMixin, PipelineTesterMixin, unittest.TestCase) ...@@ -243,6 +243,10 @@ class EsmFoldModelTest(ModelTesterMixin, PipelineTesterMixin, unittest.TestCase)
def test_multi_gpu_data_parallel_forward(self): def test_multi_gpu_data_parallel_forward(self):
pass pass
@unittest.skip("Will be fixed soon by reducing the size of the model used for common tests.")
def test_model_is_small(self):
pass
@require_torch @require_torch
class EsmModelIntegrationTest(TestCasePlus): class EsmModelIntegrationTest(TestCasePlus):
......
...@@ -321,6 +321,10 @@ class FlavaImageModelTest(ModelTesterMixin, unittest.TestCase): ...@@ -321,6 +321,10 @@ class FlavaImageModelTest(ModelTesterMixin, unittest.TestCase):
def test_save_load_fast_init_to_base(self): def test_save_load_fast_init_to_base(self):
pass pass
@unittest.skip("Will be fixed soon by reducing the size of the model used for common tests.")
def test_model_is_small(self):
pass
@slow @slow
def test_model_from_pretrained(self): def test_model_from_pretrained(self):
for model_name in FLAVA_PRETRAINED_MODEL_ARCHIVE_LIST[:1]: for model_name in FLAVA_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
...@@ -472,6 +476,10 @@ class FlavaTextModelTest(ModelTesterMixin, unittest.TestCase): ...@@ -472,6 +476,10 @@ class FlavaTextModelTest(ModelTesterMixin, unittest.TestCase):
def test_save_load_fast_init_to_base(self): def test_save_load_fast_init_to_base(self):
pass pass
@unittest.skip("Will be fixed soon by reducing the size of the model used for common tests.")
def test_model_is_small(self):
pass
@slow @slow
def test_model_from_pretrained(self): def test_model_from_pretrained(self):
for model_name in FLAVA_PRETRAINED_MODEL_ARCHIVE_LIST[:1]: for model_name in FLAVA_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
...@@ -624,6 +632,10 @@ class FlavaMultimodalModelTest(ModelTesterMixin, unittest.TestCase): ...@@ -624,6 +632,10 @@ class FlavaMultimodalModelTest(ModelTesterMixin, unittest.TestCase):
def test_save_load_fast_init_to_base(self): def test_save_load_fast_init_to_base(self):
pass pass
@unittest.skip("Will be fixed soon by reducing the size of the model used for common tests.")
def test_model_is_small(self):
pass
@slow @slow
def test_model_from_pretrained(self): def test_model_from_pretrained(self):
for model_name in FLAVA_PRETRAINED_MODEL_ARCHIVE_LIST[:1]: for model_name in FLAVA_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
...@@ -731,6 +743,10 @@ class FlavaImageCodebookTest(ModelTesterMixin, unittest.TestCase): ...@@ -731,6 +743,10 @@ class FlavaImageCodebookTest(ModelTesterMixin, unittest.TestCase):
def test_save_load_fast_init_to_base(self): def test_save_load_fast_init_to_base(self):
pass pass
@unittest.skip("Will be fixed soon by reducing the size of the model used for common tests.")
def test_model_is_small(self):
pass
@slow @slow
def test_model_from_pretrained(self): def test_model_from_pretrained(self):
for model_name in FLAVA_CODEBOOK_PRETRAINED_MODEL_ARCHIVE_LIST[:1]: for model_name in FLAVA_CODEBOOK_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
...@@ -913,6 +929,10 @@ class FlavaModelTest(ModelTesterMixin, PipelineTesterMixin, unittest.TestCase): ...@@ -913,6 +929,10 @@ class FlavaModelTest(ModelTesterMixin, PipelineTesterMixin, unittest.TestCase):
msg=f"Parameter {name} of model {model_class} seems not properly initialized", msg=f"Parameter {name} of model {model_class} seems not properly initialized",
) )
@unittest.skip("Will be fixed soon by reducing the size of the model used for common tests.")
def test_model_is_small(self):
pass
def _create_and_check_torchscript(self, config, inputs_dict): def _create_and_check_torchscript(self, config, inputs_dict):
if not self.test_torchscript: if not self.test_torchscript:
return return
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment