Efficiently select and merge expert LoRAs at Test-Time
Project description
Test-Time Model Merging (TTMM)
A library for efficiently selecting and merging expert LoRAs at Test-Time
Please cite our work if you use this library in your research (bibtex below):
Installation
pip install ttmerge
Usage Example
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
from sentence_transformers import SentenceTransformer
from ttmerge import TestTimeMergingModel
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# 1. Load base components
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.2-1B")
base_model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.2-1B").to(device)
encoder = SentenceTransformer("all-mpnet-base-v2")
# 2. Download expert embeddings and adapter weights
snapshot_download(
repo_id="rbertolissi/Llama-3.2-1B-TTMM-Wikipedia",
local_dir="./experts",
)
# 3. Load normalized expert embeddings that represent expert domains
expert_embeddings = torch.load("./experts/mpnet-wikipedia-expert-embeddings.pt", weights_only=True) # Shape: [n_experts, embedding_dim]
# Directory containing numbered subdirectories (0/, 1/, etc.) where expert LoRAs are stored.
# The individual expert LoRAs should be in the format that the PEFT library uses,
# with each directory containing adapter_config.json and adapter_model.safetensors files.
adapter_location = "./experts"
# 4. Initialize the TestTimeMergingModel
merging_model = TestTimeMergingModel(
expert_embeddings=expert_embeddings,
tokenizer=tokenizer,
encoder=encoder,
base_model=base_model,
device=device,
adapter_location=adapter_location,
verbose=True,
encoder_prompt=None # No prompt needed for MpNet
)
# 5. Generate text using relevant expert models.
text = "Replace me by any text you'd like."
encoded_input = tokenizer(text, return_tensors="pt").to(device)
# Generate text using merged expert models
output = model.generate(
**encoded_input,
max_length=128,
temperature=0.7,
do_sample=True
)
output_text = tokenizer.decode(output[0], skip_special_tokens=True)
print(output_text)
Development
CI checks
- The code is auto-formatted using
black .. - Static type checks can be run using
pyright.
Citation
% Citation coming soon.
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
ttmerge-0.0.4.tar.gz
(7.5 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ttmerge-0.0.4.tar.gz.
File metadata
- Download URL: ttmerge-0.0.4.tar.gz
- Upload date:
- Size: 7.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.2 CPython/3.11.5 Darwin/24.0.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5e10f895a9d858a9da0248f8f5f16d26ad4a0dbcd8689b55d7f9e4d845e7918e
|
|
| MD5 |
090a22ac8c01e6fc5266ed141bffb39b
|
|
| BLAKE2b-256 |
7a35c00e823b409cccabc5d65b23547fd78096d06e041ff71761d20a8b6e620c
|
File details
Details for the file ttmerge-0.0.4-py3-none-any.whl.
File metadata
- Download URL: ttmerge-0.0.4-py3-none-any.whl
- Upload date:
- Size: 9.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.2 CPython/3.11.5 Darwin/24.0.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3a39103811620a6c6fe2f34f7b7e69147a16d428c75ece154e166ec408ff9377
|
|
| MD5 |
82ed9df45ebdd851cfeed8d546b1fb37
|
|
| BLAKE2b-256 |
410636fd95c777fb2ec12fe051ad6b1408c8b85661cd21a2e3ce7d7ed9b3cdd2
|