|
--- |
|
license: llama3 |
|
library_name: peft |
|
language: |
|
- en |
|
tags: |
|
- trl |
|
- sft |
|
- unsloth |
|
- generated_from_trainer |
|
- dna |
|
base_model: gradientai/Llama-3-8B-Instruct-262k |
|
model-index: |
|
- name: llama3-biotokenpretrain-kaniwa |
|
results: [] |
|
--- |
|
|
|
# llama3-biotokenpretrain-kaniwa |
|
|
|
|
|
This is a LoRA adapter. |
|
|
|
The base model is the longer-context LLaMA-3-8b-Instruct developed by Gradient and Crusoe: `gradientai/Llama-3-8B-Instruct-262k` |
|
|
|
The tokenizer has added "biotokens" ∎A, ∎C, ∎G, and ∎T. |
|
|
|
The dataset was 0.5% of BYU's 2019 kaniwa (*Chenopodium pallidicaule*) genome, from https://genomevolution.org/coge/GenomeInfo.pl?gid=53872 |
|
|
|
The adapter was finetuned for 3 hours on an L4 GPU. The data was split into ~7k nucleotide snippets with an Alpaca like message format. |
|
|
|
Training Notebook: https://colab.research.google.com/drive/1FKA3p_jnfRHYd-hqJdYmKn8MQpxec0t5?usp=sharing |
|
|
|
Sample message: |
|
``` |
|
Write information about the nucleotide sequence. |
|
|
|
### Sequence: |
|
∎G∎C∎C∎T∎A∎T∎A∎G∎T∎G∎T∎G∎T∎A∎G... |
|
|
|
### Annotation: |
|
Information about location in the kaniwa chromosome: >lcl|Cp5 |
|
``` |
|
|
|
## Usage |
|
|
|
### Inference with DNA sequence |
|
|
|
```python |
|
from peft import AutoPeftModelForCausalLM |
|
from transformers import AutoTokenizer |
|
|
|
model = AutoPeftModelForCausalLM.from_pretrained("monsoon-nlp/llama3-biotokenpretrain-kaniwa", load_in_4bit=True).to("cuda") |
|
tokenizer = AutoTokenizer.from_pretrained("monsoon-nlp/llama3-biotokenpretrain-kaniwa") |
|
tokenizer.pad_token = tokenizer.eos_token # pad fix |
|
|
|
qed = "∎" # from math symbols, used in pretraining |
|
sequence = "".join([(qed + nt.upper()) for nt in "GCCTATAGTGTGTAGCTAATGAGCCTAGGTTATCGACCCTAATCT"]) |
|
|
|
inputs = tokenizer(f"{prefix}{sequence}{annotation}", return_tensors="pt") |
|
outputs = model.generate(input_ids=inputs["input_ids"].to("cuda"), max_new_tokens=50) |
|
sample = tokenizer.batch_decode(outputs, skip_special_tokens=False)[0] |
|
``` |
|
|
|
### LoRA finetuning on a new task |
|
|
|
```python |
|
from transformers import AutoTokenizer |
|
from trl import SFTTrainer |
|
from unsloth import FastLanguageModel |
|
|
|
model, _ = FastLanguageModel.from_pretrained( |
|
model_name = "monsoon-nlp/llama3-biotokenpretrain-kaniwa", |
|
max_seq_length = 7_000, # max 6,000 bp for AgroNT tasks |
|
dtype = None, |
|
load_in_4bit = True, |
|
resize_model_vocab=128260, # includes biotokens |
|
) |
|
tokenizer = AutoTokenizer.from_pretrained("monsoon-nlp/llama3-biotokenpretrain-kaniwa") |
|
tokenizer.pad_token = tokenizer.eos_token # pad fix |
|
|
|
trainer = SFTTrainer( |
|
model = model, |
|
tokenizer = tokenizer, |
|
... |
|
) |
|
``` |
|
|
|
|
|
This llama model was trained 2x faster with [Unsloth](https://github.com/unslothai/unsloth) and Huggingface's TRL library. |
|
|
|
|
|
## Training procedure |
|
|
|
### Training hyperparameters |
|
|
|
The following hyperparameters were used during training: |
|
- learning_rate: 0.0002 |
|
- train_batch_size: 1 |
|
- eval_batch_size: 8 |
|
- seed: 3407 |
|
- gradient_accumulation_steps: 4 |
|
- total_train_batch_size: 4 |
|
- optimizer: Adam with betas=(0.9,0.999) and epsilon=1e-08 |
|
- lr_scheduler_type: linear |
|
- lr_scheduler_warmup_steps: 5 |
|
- training_steps: 280 |
|
|
|
### Framework versions |
|
|
|
- PEFT 0.10.0 |
|
- Transformers 4.40.2 |
|
- Pytorch 2.2.1+cu121 |
|
- Datasets 2.19.1 |
|
- Tokenizers 0.19.1 |
|
|
|
|
|
### Genome Citation |
|
|
|
Mangelson H, et al. The genome of *Chenopodium pallidicaule*: an emerging Andean super grain. Appl. Plant Sci. 2019;7:e11300. doi: 10.1002/aps3.11300 |