🚀 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}
}