# FLAN-UL2

## Tổng quan

[Flan-UL2](https://www.yitay.net/blog/flan-ul2-20b) là một mô hình encoder decoder dựa trên kiến trúc T5. Nó sử dụng cùng cấu hình với mô hình [UL2](ul2) được phát hành vào đầu năm trước. Mô hình này được tinh chỉnh bằng phương pháp prompt tuning "Flan" và bộ sưu tập dữ liệu tương ứng. Tương tự như `Flan-T5`, người dùng có thể sử dụng trực tiếp trọng số của FLAN-UL2 mà không cần tinh chỉnh lại mô hình:

Theo blog gốc, đây là những cải tiến đáng chú ý:

- Mô hình UL2 ban đầu chỉ được huấn luyện với trường tiếp nhận (receptive field) là 512, khiến nó không tối ưu cho N-shot prompting khi N lớn.
- Checkpoint Flan-UL2 sử dụng trường tiếp nhận (receptive field) là 2048, giúp nó dễ sử dụng hơn cho việc học trong ngữ cảnh (in-context learning) với ít ví dụ (few-shot).
- Mô hình UL2 ban đầu cũng có các token chuyển đổi chế độ, vốn khá bắt buộc để đạt hiệu suất tốt. Tuy nhiên, chúng hơi cồng kềnh vì điều này thường đòi hỏi một số thay đổi trong quá trình suy luận hoặc tinh chỉnh. Trong bản cập nhật/thay đổi này, chúng tôi tiếp tục huấn luyện UL2 20B thêm 100k bước (với batch nhỏ) để “quên” các “token chế độ” trước khi áp dụng tinh chỉnh chỉ dẫn Flan. Điểm kiểm tra Flan-UL2 này không còn yêu cầu các token chế độ nữa.
Google đã phát hành các biến thể sau:

Các checkpoint gốc có thể được tìm thấy [tại đây](https://github.com/google-research/google-research/tree/master/ul2).

## Chạy trên các thiết bị có tài nguyên thấp

Mô hình khá nặng (~40GB ở độ chính xác nửa) nên nếu bạn chỉ muốn chạy mô hình, hãy đảm bảo nạp mô hình ở 8bit và sử dụng `device_map="auto"` để tránh mọi vấn đề 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']
```

Tham khảo [trang tài liệu của T5](t5) để xem tham chiếu API, mẹo, ví dụ mã và notebook.

