inherits from BrandNewBertPreTrainedModel which in turn inherits from [PreTrainedModel] and
that's it. As a general rule, we want to make sure that a new model only depends on
[PreTrainedModel]. The important functionalities that are automatically provided to every new
model are [~PreTrainedModel.from_pretrained] and
[~PreTrainedModel.save_pretrained], which are used for serialization and deserialization. All of the
other important functionalities, such as BrandNewBertModel.forward should be completely defined in the new
modeling_brand_new_bert.py script. Next, we want to make sure that a model with a specific head layer, such as
BrandNewBertForMaskedLM does not inherit from BrandNewBertModel, but rather uses BrandNewBertModel
as a component that can be called in its forward pass to keep the level of abstraction low. Every new model requires a
