backprompt proporciona una estructura de datos que permite a un usuario construir dinámicamente las indicaciones mientras evita los cálculos de LLM repetidos.
En muchas tareas a gran escala realizadas por LLMS, se usa un aviso particular muchas veces, una vez para cada instancia de la tarea. En casos como estos, la cantidad de cálculo realizada por las futuras llamadas de LLM puede reducirse al almacenar en caché y la reutilización de la representación de la solicitud de la LLM.
backprompt lleva a esta idea bien conocida un paso más allá al almacenar en caché las representaciones LLM de texto intermedio en el aviso. El almacenamiento en caché intermedio puede ser útil cuando uno necesita ajustar dinámicamente el indicador sin tener que volver a competir la representación de la LLM. backprompt abstrae el complejo proceso de construcción rápida y almacenamiento en caché como concatenación de cuerdas simple.
Consulte las demos/minimal_example.ipynb para un caso de uso más realista. Aquí hay una demostración de juguete:
from transformers import AutoModelForCausalLM , AutoTokenizer
from backprompt import Text
# Load a GPT model and its tokenizer
model_name = 'gpt2'
model = AutoModelForCausalLM . from_pretrained ( model_name )
tokenizer = AutoTokenizer . from_pretrained ( model_name )
if tokenizer . pad_token is None :
tokenizer . pad_token = tokenizer . eos_token
mt = ( model , tokenizer )
# Wrap strings in Text and construct them via concatenation
context = Text ( 'Hello there.' , mt )
choices = [ Text ( ' Senator' , mt ), Text ( ' General' , mt )]
endings = [ Text ( ' Amidala' , mt ), Text ( ' Kenobi...' , mt )]
texts = [ context + choice + ending for choice in choices for ending in endings ]
print ( texts [ - 1 ]. string )
# Hello there. General Kenobi...
# Get next-token logits by calling every text obj
# The punchline is that you don't have to worry about repeated computation
for text in texts :
text ()
texts [ - 1 ]. model_repr [ 1 ]. logits [:, - 1 , :] python -m pip install git+https://github.com/kddubey/backprompt.git
Si básicamente sabe cómo funciona BackProp (mire este video de YouTube), y básicamente sabe cómo funciona un modelo de idioma autorregresivo solo de decodificador (mire este video de YouTube), entonces sabe cómo funciona backprompt :-)
Analogías:
backprompt → Bloque de atención teclas y valores.backprompt → logits de token.backprompt → tensor.TODO: visualización de gráficos
TODO: expandir los casos de prueba
pytest
ModelRepr Dataclass por conveniencia token_logprobs al OBJ de salida LM