Skip to main content

Ternary QAT for transformers, built for Ternary-Bonsai by Prism-ML

Project description

ternary_QAT

Lightweight ternary QAT for Ternary-Bonsai unpacked text models.

Qwen 3.5 is untested right now!

This is designed from the start to be Unsloth compatible.

Weights are ternarized to {-1, 0, 1} per group of (128/64/user-defined) consecutive weights along the last dim, matching the Bonsai on-disk format (verified bit-exact). Embeddings + all nn.Linear modules (attn, MLP, lm_head) are ternarized; norms stay FP.

Based on Prism-ML's whitepaper: https://github.com/PrismML-Eng/Bonsai-demo/blob/main/ternary-bonsai-8b-whitepaper.pdf

Install

Have your preferred torch version installed first so that this doesn't install the CPU version (which you probably don't want)

pip install ternary_QAT                 # core (torch only)
pip install "ternary_QAT[peft,transformers]"  # + LoRA / model loading

if you use uv:
uv pip install ternary_QAT --torch-backend=auto

Use

Full-finetune

from transformers import AutoModelForCausalLM
from ternary import swap_linear, TernaryConfig

model = AutoModelForCausalLM.from_pretrained("prism-ml/Ternary-Bonsai-1.7B-unpacked")
swap_linear(model, TernaryConfig(group_size=128))
# ... train normally; ternarize fires in every Linear.forward

LoRA (ternary frozen base + FP adapters)

from peft import LoraConfig, get_peft_model
from ternary import swap_linear, TernaryConfig, ternarize_lora_params, reternarize_merged_linears

model = ...  # load model
swap_linear(model, TernaryConfig(group_size=128))
model = get_peft_model(model, LoraConfig(r=128, lora_alpha=128, ...))

# ... train ...

# at save: ternarize adapter, merge, re-ternarize merged linears
ternarize_lora_params(model)
model = model.merge_and_unload()
reternarize_merged_linears(model)
model.save_pretrained("./out")

See examples/ for LoRA, FFT, and Unsloth examples.

Learning rate

Ternary QAT needs 10-50x higher LR than standard fine tuning.

The lowest usable LR I've found so far is around 7e-4, so experiment in that range up to the e-3s, depending on rank and dataset size.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ternary_qat-0.1.2.tar.gz (6.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ternary_qat-0.1.2-py3-none-any.whl (7.6 kB view details)

Uploaded Python 3

File details

Details for the file ternary_qat-0.1.2.tar.gz.

File metadata

  • Download URL: ternary_qat-0.1.2.tar.gz
  • Upload date:
  • Size: 6.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for ternary_qat-0.1.2.tar.gz
Algorithm Hash digest
SHA256 6b070193d22960f65259b3e8a61a05a6ea9f8dd06d764a6a88b177fd702bcac4
MD5 6ca447ec15d66b77b687f9af382b898b
BLAKE2b-256 f2cdef9889f951f9cb176f911db1cbb2c65eea1d348b58718118d0f5d74397ba

See more details on using hashes here.

Provenance

The following attestation bundles were made for ternary_qat-0.1.2.tar.gz:

Publisher: publish.yml on electroglyph/ternary_QAT

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ternary_qat-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: ternary_qat-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 7.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for ternary_qat-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 032ec59d30f659b086155e9b662885dbed60e3ed273c3638787e8360983d6bfe
MD5 4d55955cf9f8095b7a88c533c60e1ee0
BLAKE2b-256 3fd2e0bc055be71d6b918aa27d4d8fb189c5c86a84f4b17e04bd36985ae2cf35

See more details on using hashes here.

Provenance

The following attestation bundles were made for ternary_qat-0.1.2-py3-none-any.whl:

Publisher: publish.yml on electroglyph/ternary_QAT

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page