Skip to content

LoRA Inference

This tutorial shows how to run inference with a base model plus LoRA adapter weights. The adapter is loaded on top of the pre-trained base model without modifying its original weights.

Full Notebook

View Full Notebook

Prerequisites

uv pip install -e '.[base,inference,cuda124]'

Load Configuration

from dnallm import load_config

configs = load_config("inference_config.yaml")

Load Base Model

from dnallm import load_model_and_tokenizer

model_name = "kuleshov-group/PlantCAD2-Small-l24-d0768"
model, tokenizer = load_model_and_tokenizer(
    model_name,
    task_config=configs['task'],
    source="huggingface"
)

Create Inference Engine with LoRA Adapter

from dnallm import DNAInference

lora_adapter_path = "plantcad/cross_species_acr_train_on_arabidopsis_plantcad2_small"
inference_engine = DNAInference(
    model=model,
    tokenizer=tokenizer,
    config=configs,
    lora_adapter=lora_adapter_path
)

The lora_adapter parameter specifies the path or Hugging Face repo ID of the saved LoRA weights.

Infer on Sequences

seqs = [(
    "AAAAATTTAAATATCGTCTGTAGATATTTTATGGGATGCTTTGAGAATGGGCTTCGTTTTAATGGGCCTC"
    "CTCTGCAATCATTGTCCAGAGTCGAGAAACCACCTCTTCTTCTCTTGTTCTTTCTCCAAATCGATTTGGT"
    "CCCAACTCTCTTCAAGCAAAGGAGAGATATGAAAATGAAAGCTCTTACGGCGAACAAGTTTTTCCGATTG"
    "AAGAAGAGAAGAATCTAGAAGATGAAGACAACACTAGTGCACCAAACAGTTTTGCGCGTCTTGAGAGGAA"
    "ACAAAAAACTATTCAGAGTTCAGAGAGAGTCAACCCCCAAACGAGACTTAAACGATGAGCCCACTATAAT"
    "TTTATAATTTATGGGCCATCAGGCCCAAATGATCAGTAGTAGTTATTATTTGACTTTTGACATGGTGGAT"
    "TTGGTTTAACCACCAAACCGAACGAGTAAAACACTATTGGATTGGGTGATGATATCCCGGTTTTATTTGG"
    "TTAAAATCACAAAATCCTGATTTTGGTTCGCGGCTTGATTCTGCCGCTCTCTCGTCTTTAACCTAACTAA"
    "AGACGTAGAATGATTCTGGTTATTGAATTAGTTTGATACA"
)]

results = inference_engine.infer_seqs(seqs)
print(results)

Infer on File

infer_file = "./test.csv"
results, metrics = inference_engine.infer_file(
    infer_file, seq_col="sequence", label_col="label", evaluate=True
)

print(metrics)