🚀 HyenaDNA
歡迎!HyenaDNA 是一個長距離基因組基礎模型,它在高達 100 萬個標記 的上下文長度上以 單核苷酸分辨率 進行了預訓練。
以下是該模型及其訓練的 概述。更棒的是,你可以查看這些資源。
資源:
所有 HuggingFace 模型鏈接:
我們已經上傳了所有預訓練的 HyenaDNA 檢查點的 集合。
你會看到不同大小和序列長度的模型。在 LongSafari 組織 中還有每個模型的原始僅權重版本,這些版本設計為使用原始的 GitHub 倉庫加載。這些模型的輸出與上述集合中的模型相同,只是接口不同。
請查看每個模型的 GPU 要求。
🚀 快速開始
使用 HyenaDNA
在這個簡短的代碼示例中,我們展示瞭如何在序列分類任務上對 HyenaDNA 進行微調。此示例使用 medium
檢查點,最大序列長度為 160k 個核苷酸。請注意,如果你使用的序列長度超過所選檢查點支持的最大長度,訓練將會失敗。
在測試中,我們能夠在 Colab T4 GPU(16GB VRAM)上以高達約 250k 個核苷酸的序列長度進行訓練。對於更長的序列長度,將需要更多的內存。
💻 使用示例
基礎用法
from transformers import AutoModelForSequenceClassification, AutoTokenizer
from transformers import TrainingArguments, Trainer, logging
import torch
checkpoint = 'LongSafari/hyenadna-medium-160k-seqlen-hf'
max_length = 160_000
tokenizer = AutoTokenizer.from_pretrained(checkpoint, trust_remote_code=True)
model = AutoModelForSequenceClassification.from_pretrained(checkpoint, torch_dtype=torch.bfloat16, device_map="auto", trust_remote_code=True)
sequence = 'ACTG' * int(max_length/4)
sequence = [sequence] * 8
tokenized = tokenizer(sequence)["input_ids"]
labels = [0, 1] * 4
ds = Dataset.from_dict({"input_ids": tokenized, "labels": labels})
ds.set_format("pt")
args = {
"output_dir": "tmp",
"num_train_epochs": 1,
"per_device_train_batch_size": 1,
"gradient_accumulation_steps": 4,
"gradient_checkpointing": True,
"learning_rate": 2e-5,
}
training_args = TrainingArguments(**args)
trainer = Trainer(model=model, args=training_args, train_dataset=ds)
result = trainer.train()
print(result)
你可能也會發現這些 筆記本 很有用。雖然它們並非專門針對 HyenaDNA,但包含了訓練 DNA 和序列分類模型的額外示例。
GPU 要求(建議)
以下是我們認為每個模型適用的硬件(建議的最低配置)建議。
預訓練、微調、推理時的 GPU:
- tiny-1k:(T4, T4, T4)
- small-32k:(A100 - 40GB, T4, T4)
- medium-160k:(A100 - 40GB, T4, T4)
- medium-450k:(A100 - 40GB, A100 - 40GB, T4)
- large-1m:(A100 - 80GB, A100 - 80GB, A100 - 40GB)
📚 詳細文檔
模型與訓練概述
HyenaDNA 使用了一個簡單的 Hyena 算子棧,這是一種用於 Transformer 中注意力機制的次二次方替代方案。Hyena 算子通過使用修改後的輸入投影、隱式卷積和門控(所有都是次二次方操作),能夠在語言建模中達到與注意力機制相當的效果。
這使得 HyenaDNA 能夠達到比之前使用密集註意力的基因組 Transformer 模型長 500 倍的上下文長度,並且在序列長度為 100 萬時訓練速度比 Flash Attention 快 160 倍。
我們使用一個單字符分詞器,其主要詞彙表包含 4 種核苷酸(加上特殊標記),從而實現了單核苷酸分辨率,這在基因組基礎模型中尚屬首次。此外,隱式長卷積在每一層都實現了 全局感受野。
我們使用人類參考基因組(HG38)上的下一個標記(核苷酸)預測進行預訓練。
HyenaDNA 在 23 個下游任務中創下了新的最優成績,包括預測調控元件、染色質圖譜和物種分類。我們還探索了在基因組學中長上下文所帶來的新能力,包括首次使用帶有軟提示可調標記的上下文學習和指令微調。
查看我們的 博客 以獲取關於 HyenaDNA 的更多詳細信息!
作者
Eric Nguyen*,Michael Poli*,Marjan Faizi*,Armin Thomas,Callum Birch - Sykes,Michael Wornow,Aman Patel,Clayton Rabideau,Stefano Massaroli,Yoshua Bengio,Stefano Ermon,Stephen Baccus,Chris Re。
聯繫方式
- Eric Nguyen,etnguyen@stanford.edu
- Michael Poli,poli@stanford.edu
- Marjan Faizi,Marjan_Faizi@hms.harvard.edu
📄 許可證
本項目採用 BSD 3 - 條款許可證。
📖 引用
如果你覺得本項目有用,請隨意引用我們:
@article{nguyen2023hyenadna,
title={HyenaDNA: Long-Range Genomic Sequence Modeling at Single Nucleotide Resolution},
author={Eric Nguyen and Michael Poli and Marjan Faizi and Armin Thomas and Callum Birch-Sykes and Michael Wornow and Aman Patel and Clayton Rabideau and Stefano Massaroli and Yoshua Bengio and Stefano Ermon and Stephen A. Baccus and Chris Ré},
year={2023},
eprint={2306.15794},
archivePrefix={arXiv},
primaryClass={cs.LG}
}