FunDLM-Medium-1024bp-H3K9me3
LoRA-адаптер для поиска H3K9me3 по 1 024 bp ДНК
LoRA-адаптер от PlantG3 поверх грибной DNA-LLM FunDLM-Medium-1024bp. Классифицирует окна длиной 1 024 bp: есть ли ChIP-seq пик H3K9me3 — метки конститутивного гетерохроматина — или нет. База — Caduceus: двунаправленная Mamba-2 с reverse-complement parameter sharing, 64 слоя, d_model 768, 471M уникальных параметров.
🔥 Ключевые особенности
- 🔥 LoRA: r = 8, alpha = 32, dropout = 0.1; адаптер добавлен к Mamba-проекциям
in_projиout_proj. - 📓 Вход — до 1 024 bp; метки: 0 = non-peak, 1 = H3K9me3 peak.
- 💻 Репозиторий самодостаточен: adapter, код базовой модели, tokenizer и веса FunDLM-Medium-1024bp.
- ⭐ Нельзя вызывать
merge_and_unload(): forward и reverse-complement ветки несут отдельные LoRA-веса, слияние меняет предсказания. - ✅ Обучение шло на окнах из Br48, Guy11, O135 и O219; O137 полностью отложен для теста.
💻 Пример
import torch
from transformers import AutoModelForSequenceClassification, AutoTokenizer; from peft import PeftModel
base_id = "gnikesh/FunDLM-Medium-1024bp"
tok = AutoTokenizer.from_pretrained(base_id, trust_remote_code=True)
base = AutoModelForSequenceClassification.from_pretrained(base_id, trust_remote_code=True, num_labels=2)
model = PeftModel.from_pretrained(base, "PlantG3/FunDLM-Medium-1024bp-H3K9me3", subfolder="adapter").base_model.model.cuda().eval()
ids = torch.tensor(tok("ACGT"*256, add_special_tokens=False, max_length=1024, truncation=True, padding="max_length")["input_ids"]).unsqueeze(0).cuda()
prob = torch.softmax(model(input_ids=ids).logits.float(), -1)[0,1].item()
Подробнее
AUROC 0.964, AP 0.967, accuracy 0.898 на тестовых окнах O137; genome-wide scan: AUROC 0.940, AP 0.538.Нужен CUDA GPU и Mamba-ядра (
mamba_ssm, causal_conv1d); база хранится в bfloat16, на CPU можно через model.float().Порог 0.5 завышает extent метки genome-wide — лучше ранжировать вероятности и калибровать порог.
6-mer logistic regression достигает AP 0.962 на тестовых окнах и 0.576 genome-wide — это близко к адаптеру.








Комментарии