Spaces:
Runtime error
Runtime error
from .model import Unlimiformer | |
from .random_training_unlimiformer import RandomTrainingUnlimiformer | |
from dataclasses import dataclass, field | |
from typing import List, Optional | |
class UnlimiformerArguments: | |
""" | |
Arguments pertaining to what data we are going to input our model for training and eval. | |
""" | |
test_unlimiformer: Optional[bool] = field( | |
default=True, | |
metadata={ | |
"help": "whether to use KNN." | |
}, | |
) | |
unlimiformer_verbose: Optional[bool] = field( | |
default=False, | |
metadata={ | |
"help": "whether to print KNN intermediate predictions (mostly for debugging)." | |
}, | |
) | |
layer_begin: Optional[int] = field( | |
default=0, | |
metadata={"help": "The layer to begin applying KNN to. KNN will be applied to layers[knn_layer_begin:layer_end]. " | |
"By default, it will be applied to all layers: [0:None]]"}, | |
) | |
layer_end: Optional[int] = field( | |
default=None, | |
metadata={"help": "The layer to end applying KNN to. KNN will be applied to layers[knn_layer_begin:layer_end]. " | |
"By default, it will be applied to all layers: [0:None]]"}, | |
) | |
unlimiformer_chunk_overlap: Optional[float] = field( | |
default=0.5, | |
metadata={"help": "The fraction of overlap between input chunks"}, | |
) | |
unlimiformer_chunk_size: Optional[int] = field( | |
default=None, | |
metadata={"help": "The size of each input chunk"}, | |
) | |
unlimiformer_head_num: Optional[int] = field( | |
default=None, | |
metadata={"help": "The head to apply KNN to (if None, apply to all heads)"}, | |
) | |
unlimiformer_exclude: Optional[bool] = field( | |
default=False, | |
metadata={ | |
"help": "If True, prioritize the inputs that are **not** in the standard attention window." | |
}, | |
) | |
random_unlimiformer_training: Optional[bool] = field( | |
default=False, | |
) | |
unlimiformer_training: Optional[bool] = field( | |
default=False, | |
) | |
use_datastore: Optional[bool] = field(default=False) | |
flat_index: Optional[bool] = field(default=False) | |
test_datastore: Optional[bool] = field(default=False) | |
reconstruct_embeddings: Optional[bool] = field(default=False) | |
gpu_datastore: Optional[bool] = field(default=True) | |
gpu_index: Optional[bool] = field(default=True) | |
# include these lines in your code somewhere before model training | |
def training_addin(): | |
if unlimiformer_args.test_unlimiformer: | |
unlimiformer_kwargs = { | |
'layer_begin': unlimiformer_args.layer_begin, | |
'layer_end': unlimiformer_args.layer_end, | |
'unlimiformer_head_num': unlimiformer_args.unlimiformer_head_num, | |
'exclude_attention': unlimiformer_args.unlimiformer_exclude, | |
'chunk_overlap': unlimiformer_args.unlimiformer_chunk_overlap, | |
'model_encoder_max_len': unlimiformer_args.unlimiformer_chunk_size, | |
'verbose': unlimiformer_args.unlimiformer_verbose, 'tokenizer': tokenizer, | |
'unlimiformer_training': unlimiformer_args.unlimiformer_training, | |
'use_datastore': unlimiformer_args.use_datastore, | |
'flat_index': unlimiformer_args.flat_index, | |
'test_datastore': unlimiformer_args.test_datastore, | |
'reconstruct_embeddings': unlimiformer_args.reconstruct_embeddings, | |
'gpu_datastore': unlimiformer_args.gpu_datastore, | |
'gpu_index': unlimiformer_args.gpu_index | |
} | |
if unlimiformer_args.random_unlimiformer_training: | |
model = RandomTrainingUnlimiformer.convert_model(model, **unlimiformer_kwargs) | |
else: | |
model = Unlimiformer.convert_model(model, **unlimiformer_kwargs) | |