def METHOD_NAME(hypers: HypersBase, config_class, model_class, tokenizer_class,
                    additional_special_tokens=(), **extra_model_args):
    # Load pretrained model and tokenizer
    if hypers.local_rank not in [-1, 0]:
        torch.distributed.barrier()  # Make sure only the first process in distributed training will download model & vocab
    config = config_class.from_pretrained(
        hypers.config_name if hypers.config_name else hypers.model_name_or_path,
        cache_dir=hypers.cache_dir if hypers.cache_dir else None,
        **extra_model_args
    )
    if len(additional_special_tokens) == 0 or len(additional_special_tokens[0]) == 0:
        additional_special_tokens = None
    if additional_special_tokens is not None:
        tokenizer: PreTrainedTokenizer = tokenizer_class.from_pretrained(
            hypers.tokenizer_name if hypers.tokenizer_name else hypers.model_name_or_path,
            do_lower_case=hypers.do_lower_case,
            cache_dir=hypers.cache_dir if hypers.cache_dir else None,
            additional_special_tokens=additional_special_tokens
        )
    else:
        tokenizer: PreTrainedTokenizer = tokenizer_class.from_pretrained(
            hypers.tokenizer_name if hypers.tokenizer_name else hypers.model_name_or_path,
            do_lower_case=hypers.do_lower_case,
            cache_dir=hypers.cache_dir if hypers.cache_dir else None
        )
    model = model_class.from_pretrained(
        hypers.model_name_or_path,
        from_tf=bool(".ckpt" in hypers.model_name_or_path),
        config=config,
        cache_dir=hypers.cache_dir if hypers.cache_dir else None,
    )
    if hypers.local_rank == 0:
        torch.distributed.barrier()  # Make sure only the first process in distributed training will download model & vocab
    if additional_special_tokens is not None:
        # do it when we load and again here
        tokenizer.add_special_tokens({'additional_special_tokens': additional_special_tokens})
        model.resize_token_embeddings(len(tokenizer))
    model.to(hypers.device)
    return model, tokenizer