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 models.

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.0.tar.gz (5.9 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.0-py3-none-any.whl (7.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: ternary_qat-0.1.0.tar.gz
  • Upload date:
  • Size: 5.9 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.0.tar.gz
Algorithm Hash digest
SHA256 24bb25535b064f44147a906ea4b4bfb0ec65580810764bd22883909c68bfab79
MD5 ed2d75e53d9e4b8b9810d8663ea5a99c
BLAKE2b-256 d4008f61cc919115cf6e02bab00a3a6a7b130be3a38dd20c3a086a5ec0125d0a

See more details on using hashes here.

Provenance

The following attestation bundles were made for ternary_qat-0.1.0.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.0-py3-none-any.whl.

File metadata

  • Download URL: ternary_qat-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 7.0 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7a905a510f5688535a9e01b59a1debdb2ae32880041f5bdd61fd5cd3ab97c387
MD5 473d3b44c75b34c27dc7dc1756112f5e
BLAKE2b-256 755ca5ddeca994d27bca3b585f4bf3ca44b50b8c72fa2c7daf80c4ac9786cea4

See more details on using hashes here.

Provenance

The following attestation bundles were made for ternary_qat-0.1.0-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