CompoDistill-2B / configuration_compodistill.py
JiwanKim's picture
Initial release
0151c66 verified
Raw
History Blame Contribute Delete
3.89 kB
"""Standalone CompoDistill configuration for HuggingFace Hub releases (trust_remote_code).
Self-contained counterpart of compodistill/model/configuration_compodistill.py: it rebuilds
the text/vision sub-configs from the serialized dictionaries in config.json, so loading a
released checkpoint needs neither the compodistill package nor the original base models.
"""
from transformers import CONFIG_MAPPING, AutoConfig, PretrainedConfig
IGNORE_INDEX = -100
IMAGE_TOKEN_INDEX = -200
def _build_sub_config(config, name_or_path):
if isinstance(config, PretrainedConfig):
return config
if isinstance(config, dict):
model_type = config.get('model_type')
if model_type in CONFIG_MAPPING:
return CONFIG_MAPPING[model_type](**config)
if name_or_path:
return AutoConfig.from_pretrained(name_or_path, trust_remote_code=True)
return None
class CompoDistillConfig(PretrainedConfig):
model_type = "compodistill"
def __init__(
self,
llm_model_name_or_path='',
tokenizer_name_or_path=None,
vision_model_name_or_path='',
vision_model_name_or_path2='',
connector_type=None,
text_config=None,
hidden_size=2048,
vocab_size=32000,
ignore_index=IGNORE_INDEX,
image_token_index=IMAGE_TOKEN_INDEX,
pad_token=None,
pad_token_id=None,
tokenizer_padding_side='right',
tokenizer_model_max_length=2048,
vision_config=None,
vision_hidden_size=None,
vision_feature_layer=-2,
vision_feature_select_strategy='patch',
image_aspect_ratio='square',
use_cache=False,
cache_dir=None,
tokenizer_use_fast=False,
post_connector_use=False,
connector_hidden_size=None,
**kwargs
):
self.llm_model_name_or_path = llm_model_name_or_path
self.tokenizer_name_or_path = tokenizer_name_or_path or self.llm_model_name_or_path
self.vision_model_name_or_path = vision_model_name_or_path
self.vision_model_name_or_path2 = vision_model_name_or_path2
self.connector_type = connector_type
self.ignore_index = IGNORE_INDEX
self.image_token_index = IMAGE_TOKEN_INDEX
self.pad_token = pad_token
self.pad_token_id = pad_token_id
self.tokenizer_padding_side = tokenizer_padding_side
self.tokenizer_model_max_length = tokenizer_model_max_length
self.vision_feature_layer = vision_feature_layer
self.vision_feature_select_strategy = vision_feature_select_strategy
self.image_aspect_ratio = image_aspect_ratio
self.use_cache = use_cache
self.cache_dir = cache_dir
self.tokenizer_use_fast = tokenizer_use_fast
# CompoDistill post-connector: the connector keeps the teacher's hidden size
# (connector_hidden_size) and a linear post-connector maps it to the student's.
self.post_connector_use = post_connector_use
self.connector_hidden_size = connector_hidden_size
self.text_config = _build_sub_config(text_config, self.llm_model_name_or_path)
if self.text_config is not None:
self.hidden_size = getattr(self.text_config, 'hidden_size', hidden_size)
self.vocab_size = getattr(self.text_config, 'vocab_size', vocab_size)
else:
self.hidden_size = hidden_size
self.vocab_size = vocab_size
self.vision_config = _build_sub_config(vision_config, self.vision_model_name_or_path)
if self.vision_config is not None:
self.vision_config = getattr(self.vision_config, 'vision_config', self.vision_config)
self.vision_hidden_size = getattr(self.vision_config, 'hidden_size', vision_hidden_size)
else:
self.vision_hidden_size = vision_hidden_size
super().__init__(**kwargs)