| --- |
| license: apache-2.0 |
| language: |
| - en |
| - de |
| - es |
| base_model: |
| - google/flan-t5-small |
| pipeline_tag: text-generation |
| tags: |
| - text-generation-inference |
| - summarization |
| - bitsandbytes |
| - text2text |
| - small |
| - inference |
| --- |
| |
|
|
|
|
| # t5-smaller |
|
|
| I made this as a smaller, more optimized version of |
| [`google/flan-t5-small`](https://huggingface.co/google/flan-t5-small). The |
| weights use bitsandbytes NF4 4-bit quantization with double quantization and |
| FP16 compute. |
|
|
| The name refers to the checkpoint size. This is still the original FLAN-T5 |
| Small architecture: no layers were removed, and it still has roughly 77 million |
| parameters, but it is around 61.7% smaller. |
|
|
| ## What changed |
|
|
| | | Original FLAN-T5 Small | This checkpoint | |
| |---|---:|---:| |
| | Stored weights | 307.9 MB | 118.1 MB | |
| | Architecture | FLAN-T5 Small | FLAN-T5 Small | |
| | Weight format | FP32 | NF4 4-bit | |
|
|
| That makes the weight file about 61.7% smaller. This number only describes file |
| size; runtime memory and speed depend on your GPU, PyTorch build, and |
| bitsandbytes version. |
|
|
| Also, much less RAM is used |
|
|
| I did not keep the exact base-model commit or the original conversion |
| environment. If you need a fully reproducible build, treat this checkpoint as a |
| starting point rather than a reference conversion. |
|
|
| ## Install |
|
|
| Install a PyTorch build that matches your CUDA setup, then run: |
|
|
| ```bash |
| pip install transformers accelerate bitsandbytes sentencepiece safetensors |
| ``` |
|
|
| ## Use it |
|
|
| The model files currently live in `optimized-flan-t5-small`, so both loader |
| calls need the `subfolder` argument: |
|
|
| ```python |
| from transformers import AutoModelForSeq2SeqLM, AutoTokenizer |
| |
| model_id = "ShinpacheShimura/t5-smaller" |
| subfolder = "optimized-flan-t5-small" |
| |
| tokenizer = AutoTokenizer.from_pretrained(model_id, subfolder=subfolder) |
| model = AutoModelForSeq2SeqLM.from_pretrained( |
| model_id, |
| subfolder=subfolder, |
| device_map="auto", |
| ) |
| |
| prompt = "translate English to German: How old are you?" |
| inputs = tokenizer(prompt, return_tensors="pt").to(model.device) |
| output = model.generate(**inputs, max_new_tokens=64, do_sample=False) |
| |
| print(tokenizer.decode(output[0], skip_special_tokens=True)) |
| ``` |
|
|
| I plan to move the model and tokenizer files to the repository root. After that, |
| the two `subfolder` arguments can be removed. |
|
|
| ## Benchmark |
|
|
| `benchmark.py` compares this checkpoint with the FP32 base model on a small, |
| fixed set of prompts: |
|
|
| ```bash |
| python benchmark.py \ |
| --base-model google/flan-t5-small \ |
| --quantized-model ShinpacheShimura/t5-smaller \ |
| --quantized-subfolder optimized-flan-t5-small \ |
| --output-dir benchmark-results |
| ``` |
|
|
| It records loading time, model memory footprint, peak CUDA allocation, |
| generation latency, throughput, and the outputs from both models. Output |
| agreement is useful for spotting quantization changes, but it is not an accuracy |
| score. |
|
|
| I have not published GPU benchmark numbers yet. When I do, I will include the |
| GPU model, package versions, decoding settings, and raw result files here. |
|
|
| ## Where it may be useful |
|
|
| FLAN-T5 is a text-to-text model, so this checkpoint can be tried on translation, |
| summarization, question answering, and prompted classification. It is mainly |
| intended for experiments where checkpoint size or GPU memory matters. |
|
|
| All this considered, the model is best used when fine-tuned for a specific task, |
| and thanks to it's size, the post trtaining will not consume a lot of resources |
|
|
| The checkpoint is usually faster than the original on most machines. |
| But, small models can lose some of the expected speed benefit to quantization |
| overhead. Check the outputs on your own task before relying on it. |
|
|
| ## Credits |
|
|
| This checkpoint comes from |
| [`google/flan-t5-small`](https://huggingface.co/google/flan-t5-small) and keeps |
| its Apache-2.0 license. The original training work is described in: |
|
|
| ```bibtex |
| @article{chung2022scaling, |
| title={Scaling Instruction-Finetuned Language Models}, |
| author={Chung, Hyung Won and Hou, Le and Longpre, Shayne and others}, |
| journal={arXiv preprint arXiv:2210.11416}, |
| year={2022} |
| } |
| ``` |
|
|
| Quantized checkpoint published by |
| [`ShinpacheShimura`](https://huggingface.co/ShinpacheShimura). |