| |
| |
|
|
| """Implements a Hugging Causal LM wrapped inside a :class:`.ComposerModel`.""" |
|
|
| from typing import Mapping, Union |
|
|
| from composer.metrics.nlp import ( |
| InContextLearningLMAccuracy, |
| InContextLearningLMExpectedCalibrationError, |
| InContextLearningMCExpectedCalibrationError, |
| InContextLearningMultipleChoiceAccuracy, |
| InContextLearningQAAccuracy, |
| InContextLearningCodeEvalAccuracy, |
| LanguageCrossEntropy, |
| LanguagePerplexity, |
| ) |
| from transformers import PreTrainedTokenizer, PreTrainedTokenizerFast |
|
|
| from composer.models.huggingface import HuggingFaceModel |
|
|
|
|
| __all__ = ["ComposerOpenLMCausalLM", "SimpleComposerOpenLMCausalLM"] |
|
|
| Tokenizer = Union[PreTrainedTokenizer, PreTrainedTokenizerFast] |
|
|
| TRAIN_METRICS = [ |
| LanguageCrossEntropy(), |
| LanguagePerplexity(), |
| ] |
| EVAL_METRICS = [ |
| LanguageCrossEntropy(), |
| LanguagePerplexity(), |
| InContextLearningLMAccuracy(), |
| InContextLearningMultipleChoiceAccuracy(), |
| InContextLearningQAAccuracy(), |
| InContextLearningLMExpectedCalibrationError(), |
| InContextLearningMCExpectedCalibrationError(), |
| InContextLearningCodeEvalAccuracy(), |
| ] |
|
|
|
|
| class SimpleComposerOpenLMCausalLM(HuggingFaceModel): |
| def __init__(self, model, tokenizer): |
| super().__init__( |
| model=model, |
| tokenizer=tokenizer, |
| metrics=TRAIN_METRICS, |
| eval_metrics=EVAL_METRICS, |
| shift_labels=True, |
| ) |
|
|
| def generate(self, input_ids=None, inputs_embeds=None, **kwargs): |
| return super().generate(input_ids=input_ids, **kwargs) |
|
|