# FLAN-UL2

## Visão geral

[Flan-UL2](https://www.yitay.net/blog/flan-ul2-20b) é um modelo encoder-decoder baseado na arquitetura T5. Ele usa a mesma configuração do modelo [UL2](ul2) lançado no início do ano passado. Ele foi ajustado finamente usando o ajuste de prompt "Flan" e a coleção de dados. Assim como o `Flan-T5`, é possível usar diretamente os pesos do FLAN-UL2 sem ajustar finamente o modelo:

De acordo com o blog original, estas são as melhorias notáveis:

- O modelo original UL2 foi treinado apenas com campo receptivo de 512, o que o tornava não ideal para N-shot prompting em que N é grande.
- O checkpoint Flan-UL2 usa um campo receptivo de 2048, o que o torna mais utilizável para aprendizado in-context com poucos exemplos.
- O modelo original UL2 também possuía tokens de troca de modo, que eram bastante obrigatórios para obter bom desempenho. No entanto, eles eram um pouco incômodos, pois isso frequentemente exige algumas alterações durante a inferência ou o ajuste fino. Nesta atualização, continuamos o treinamento do UL2 20B por mais 100 mil passos (com lote pequeno) para “esquecer” os “tokens de modo” antes de aplicar o ajuste fino de instruções do Flan. Este checkpoint do Flan-UL2 não requer mais tokens de modo.
A Google lançou as seguintes variantes:

Os checkpoints originais podem ser encontrados [aqui](https://github.com/google-research/google-research/tree/master/ul2).

## Executando em dispositivos com recursos limitados

O modelo é bastante pesado (~40GB em meia precisão), então, se você apenas quiser executar o modelo, certifique-se de carregá-lo em 8bit e usar `device_map="auto"` para garantir que não haverá nenhum problema de OOM!

```python
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, BitsAndBytesConfig

model = AutoModelForSeq2SeqLM.from_pretrained("google/flan-ul2", quantization_config=BitsAndBytesConfig(load_in_8bit=True), device_map="auto")
tokenizer = AutoTokenizer.from_pretrained("google/flan-ul2")

inputs = tokenizer("A step by step recipe to make bolognese pasta:", return_tensors="pt").to(model.device)
outputs = model.generate(**inputs)
print(tokenizer.batch_decode(outputs, skip_special_tokens=True))
['In a large skillet, brown the ground beef and onion over medium heat. Add the garlic']
```

Consulte a [página de documentação do T5](t5) para referência de API, dicas, exemplos de código e notebooks.

