andrewor14
cdbb9792d2
Fix QAT + LoRA fast path, add tests ( #3307 )
...
**Summary:** The existing QAT + LoRA path only applied fake
quantization to the original slow path, but the default is the
fast path that calls unsloth's fast LoRA primitives. This commit
integrates fake quantization into these fast primitives as well,
and add unit tests to assert that fake quantization is actually
taking place.
**Test Plan:**
Unit tests:
```
pytest tests/utils/test_qat.py
```
End-to-end test: https://gist.github.com/andrewor14/6360dd69b5784c71c46e80c14f53e6b6
Full fine-tuning Llama3.1-8B with and without QAT + LoRA on yahma/alpaca-cleaned for 1 epoch:
- Batch size = 8 (no grad accum)
- Learning rate = 2e-4
- Quantization scheme = int4 weight only (with bf16 activations)
Wikitext perplexity:
- Baseline = int4 quantized model finetuned without QAT
- QAT int4 quantized model (with this PR) achieved 33% lower perplexity than the int4 baseline
- QAT int4 quantized model without this PR was worse than the int4 baseline
```
==> unsloth_model_lora_baseline_output/lm_eval_float.log <==
| | |none | 0|word_perplexity|↓ |7.5551|± | N/A|
==> unsloth_model_lora_baseline_output/lm_eval_quantized.log <==
| | |none | 0|word_perplexity|↓ |8.7655|± | N/A|
==> unsloth_model_lora_qat_int4_output/lm_eval_quantized.log <==
| | |none | 0|word_perplexity|↓ |8.3548|± | N/A|
```
2025-09-17 15:18:17 -07:00
Daniel Han
84c2871a22
Fix Transformers 4.45 ( #2151 )
...
* Update pyproject.toml
* Update _utils.py
* Update _utils.py
* Update _utils.py
* Batch samples
* Update loader.py
* Update loader.py
* Update loader.py
* Update loader.py
* Update _utils.py
* Update loader.py
* Update vision.py
* Update loader.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update mapper.py
* Update vision.py
* Temporary patches
* Update loader.py
* model names
* Gemma 3 chat template
* Bug fixes
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update llama.py
* Update llama.py
* Update rl.py
* Update chat_templates.py
* Update chat_templates.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update loader.py
* Update vision.py
* Update vision.py
* Revert
* Update _utils.py
* forced precision
* Autocast
* Update vision.py
* Update vision.py
* Update rl.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update rl.py
* vLLM fixes
* constexpr
* Update vision.py
* Update vision.py
* Update vision.py
* Update rl.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update _utils.py
* Update _utils.py
* Update _utils.py
* Update _utils.py
* Update save.py
* New models
* Triton windows update (#1976 )
* Update pyproject.toml
* Update README.md
* Update RMS LayerNorm implementation, and list compr. change in chat templates (#1974 )
* Update RMS LayerNorm implementation with optimizations and testing suite
* perf: optimize list comprehension in get_ollama_eos_tokens
* Update Zoo
* Update llama.py
* Update llama.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update rl_replacements.py
* Update vision.py
* grpo fix
* Update rl_replacements.py
* Update vision.py
* Update rl_replacements.py
* Update vision.py
* Update mapper.py
* Update vision.py
* Update vision.py
* Update loader.py
* Update vision.py
* Update save.py
* Update save.py
* Update save.py
* Update rl.py
* Update _utils.py
* Version
* Update pyproject.toml
* Update llama.py
* Update llama.py
* bug fix #2008 (#2039 )
* fix (#2051 )
* Update loader.py
* Update pyproject.toml
* Update pyproject.toml
* Update vision.py
* more prints
* Update loader.py
* LoRA 16bit fix
* Update vision.py
* Update vision.py
* Update _utils.py
* Update vision.py
* move forced float32
* Update _utils.py
* Update _utils.py
* Update _utils.py
* Update _utils.py
* move print
* Update _utils.py
* disable bfloat16
* Fix forced float32
* move float32
* Ensure trust_remote_code propegates down to unsloth_compile_transformers (#2075 )
* Update _utils.py
* Show both `peft_error` and `autoconfig_error`, not just `autoconfig_error` (#2080 )
When loading a PEFT model fails, only the `autoconfig_error` is shown. Instead of the `peft_error`, which is what really matters when we're trying to load a PEFT adapter, the user will see something like this:
```
RuntimeError: Unrecognized model in my_model. Should have a `model_type` key in its config.json, or contain one of the following strings in its name: albert, align, altclip, ...
```
This PR just changes it so `autoconfig_error` and `peft_error` are both displayed.
* fix error message (#2046 )
* Update vision.py
* Update _utils.py
* Update pyproject.toml
* Update __init__.py
* Update __init__.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update rl_replacements.py
* Update rl_replacements.py
* Update rl_replacements.py
* Update rl_replacements.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update rl_replacements.py
* Update vision.py
* Update rl_replacements.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Remove double generate patch
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update mapper.py
* Update vision.py
* fix: config.torch_dtype in LlamaModel_fast_forward_inference (#2091 )
* fix: config.torch_dtype in LlamaModel_fast_forward_inference
* Update llama.py
* update for consistency
---------
Co-authored-by: Daniel Han <danielhanchen@gmail.com>
* versioning
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* model_type_arch
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update vision.py
* Update loader.py
* check
* Update _utils.py
* Update loader.py
* Update loader.py
* Remove prints
* Update _utils.py
* Update _utils.py
* versioning
* Update _utils.py
* Update _utils.py
* Update _utils.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update vision.py
* HF Transfer
* fix(utils): add missing importlib import to fix NameError (#2134 )
This commit fixes a NameError that occurs when `importlib` is referenced in _utils.py
without being imported, especially when UNSLOTH_USE_MODELSCOPE=1 is enabled.
By adding the missing import statement, the code will no longer throw a NameError.
* Add QLoRA Train and Merge16bit Test (#2130 )
* add reference and unsloth lora merging tests
* add test / dataset printing to test scripts
* allow running tests from repo root
* add qlora test readme
* more readme edits
* ruff formatting
* additional readme comments
* forgot to add actual tests
* add apache license
* Update pyproject.toml
---------
Co-authored-by: Akshay Behl <126911424+Captain-T2004@users.noreply.github.com>
Co-authored-by: Nino Risteski <95188570+NinoRisteski@users.noreply.github.com>
Co-authored-by: Mukkesh Ganesh <mukmckenzie@gmail.com>
Co-authored-by: Kareem <81531392+KareemMusleh@users.noreply.github.com>
Co-authored-by: Xander Hawthorne <167850078+CuppaXanax@users.noreply.github.com>
Co-authored-by: Isaac Breen <isaac.breen@icloud.com>
Co-authored-by: lurf21 <93976703+lurf21@users.noreply.github.com>
Co-authored-by: naliazheli <nalia0316@gmail.com>
Co-authored-by: jeromeku <jerome.ku@gmail.com>
2025-03-21 17:55:12 -07:00