이 저장소에는 '게놈의 DNA- 언어를위한 변압기 모델로부터'dnabert : 사전 훈련 된 양방향 인코더 표현 '의 구현이 포함됩니다. 모델이나 코드를 사용하는 경우 논문을 인용하십시오. 리포는 여전히 개발 중이므로 문제가 발생하는 경우 친절하게보고하십시오.
이 패키지에서는 다음과 같은 리소스를 제공합니다. DNABERT 모델의 소스 코드, 사용 예제, 미리 훈련 된 모델, 미세 조정 모델 및 Visulization 도구를 제공합니다. 더 많은 기능이 점차 포함 되므로이 패키지는 여전히 개발 중입니다. DNABERT의 교육은 일반적인 조작 사전 훈련 및 작업 별 미세 조정으로 구성됩니다. 프로젝트의 기여로서 우리는이 저장소에서 미리 훈련 된 모델을 발표했습니다. 우리는 코드를 껴안고 DNA 시나리오에 적응했습니다.
dnabert-2라는 Dnabert의 2 세대는 https://github.com/zhihan1996/dnabert_2에서 공개적으로 제공됩니다. DNABERT-2는 다중 종의 게놈에 대한 교육을 받았으며 1 세대보다 효율적이고 강력하며 사용하기 쉽습니다. 또한 새 패키지에서 DNABERT의 더 간단한 사용량을 제공합니다. 포괄적 인 벤치 마크 게놈 이해 평가 (GUE)
연구에 DNABERT를 사용한 경우 다음 간행물을 친절하게 인용하십시오.
@article{ji2021dnabert,
author = {Ji, Yanrong and Zhou, Zhihan and Liu, Han and Davuluri, Ramana V},
title = "{DNABERT: pre-trained Bidirectional Encoder Representations from Transformers model for DNA-language in genome}",
journal = {Bioinformatics},
volume = {37},
number = {15},
pages = {2112-2120},
year = {2021},
month = {02},
issn = {1367-4803},
doi = {10.1093/bioinformatics/btab083},
url = {https://doi.org/10.1093/bioinformatics/btab083},
eprint = {https://academic.oup.com/bioinformatics/article-pdf/37/15/2112/50578892/btab083.pdf},
}
@misc{zhou2023dnabert2,
title={DNABERT-2: Efficient Foundation Model and Benchmark For Multi-Species Genome},
author={Zhihan Zhou and Yanrong Ji and Weijian Li and Pratik Dutta and Ramana Davuluri and Han Liu},
year={2023},
eprint={2306.15006},
archivePrefix={arXiv},
primaryClass={q-bio.GN}
}
Anaconda를 사용하여 파이썬 가상 환경을 구축하는 것이 좋습니다. 또한 Linux x86_64 드라이버 버전이 포함 된 NVIDIA GPU가 하나 이상 있어야합니다.> = 410.48 (CUDA 10.0과 호환). 우리는 11GB 그래픽 메모리를 갖춘 8 NVIDIA GEFORCE RTX 2080 TI에 분산 교육을 적용했으며 배치 크기는 이에 해당합니다. 다른 사양 및 메모리 크기와 함께 GPU를 사용하는 경우 배치 크기를 적절하게 조정하십시오.
conda create -n dnabert python=3.6
conda activate dnabert
(필수의)
conda install pytorch torchvision cudatoolkit=10.0 -c pytorch
git clone https://github.com/jerryji1993/DNABERT
cd DNABERT
python3 -m pip install --editable .
cd examples
python3 -m pip install -r requirements.txt
(선택 사항, FP16 교육을위한 Apex 설치)
cd PATH_NAME 에 의해 원하는 디렉토리로 변경하십시오
git clone https://github.com/NVIDIA/apex
cd apex
pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./
/example/sample_data/pre 의 템플릿 데이터를 참조하십시오. 자신의 데이터로 dnabert를 사전 훈련하려는 경우 데이터를 동일한 형식으로 처리하십시오. 시퀀스는 KMER 형식이므로 시퀀스를 이로 변환해야합니다. 또한이 변환을 위해 motif/motif_utils.py 에서 사용자 정의 기능 seq2kmer 제공합니다.
다음 예에서는 예를 들어 KMer = 6으로 dnabert를 사용합니다.
cd examples
export KMER=6
export TRAIN_FILE=sample_data/pre/6_3k.txt
export TEST_FILE=sample_data/pre/6_3k.txt
export SOURCE=PATH_TO_DNABERT_REPO
export OUTPUT_PATH=output$KMER
python run_pretrain.py
--output_dir $OUTPUT_PATH
--model_type=dna
--tokenizer_name=dna$KMER
--config_name=$SOURCE/src/transformers/dnabert-config/bert-config-$KMER/config.json
--do_train
--train_data_file=$TRAIN_FILE
--do_eval
--eval_data_file=$TEST_FILE
--mlm
--gradient_accumulation_steps 25
--per_gpu_train_batch_size 10
--per_gpu_eval_batch_size 6
--save_steps 500
--save_total_limit 20
--max_steps 200000
--evaluate_during_training
--logging_steps 500
--line_by_line
--learning_rate 4e-4
--block_size 512
--adam_epsilon 1e-6
--weight_decay 0.01
--beta1 0.9
--beta2 0.98
--mlm_probability 0.025
--warmup_steps 10000
--overwrite_output_dir
--n_process 24
혼합 정밀도를 자극하려면 -fp16 태그를 추가하십시오. (먼저 소스에서 '에이펙스'를 설치해야합니다).
/example/sample_data/ft/ 의 템플릿 데이터를 참조하십시오. 자신의 데이터로 dnabert를 미세 조정하려는 경우 데이터를 동일한 형식으로 처리하십시오. 시퀀스는 KMER 형식이므로 시퀀스를 이로 변환해야합니다. 또한이 변환을 위해 motif/motif_utils.py 에서 사용자 정의 기능 seq2kmer 제공합니다.
dnabert3
dnabert4
DNABERT5
dnabert6
미리 훈련 된 모델을 디렉토리로 다운로드하십시오. (다음 예제를 복제하려면 dnabert 6을 다운로드하십시오). 그런 다음 실행하여 패키지를 압축합니다.
unzip 6-new-12w-0.zip
또한 예측/visulization/motif_analysis를 위해 샘플 데이터 세트에서 미세 조정되는 KMER=6 모델을 제공합니다. 자신의 모델을 미세 조정하는 대신 미세 조정 모델을 사용하는 경우 미세 조정을 다운로드하여 examples/ft/6 에 넣으십시오.
미세 조정 모델
다음 예에서는 예를 들어 KMer = 6으로 dnabert를 사용합니다. 우리는 예를 들어 2 급 분류 작업 인 prom-core 사용합니다.
cd examples
export KMER=6
export MODEL_PATH=PATH_TO_THE_PRETRAINED_MODEL
export DATA_PATH=sample_data/ft/$KMER
export OUTPUT_PATH=./ft/$KMER
python run_finetune.py
--model_type dna
--tokenizer_name=dna$KMER
--model_name_or_path $MODEL_PATH
--task_name dnaprom
--do_train
--do_eval
--data_dir $DATA_PATH
--max_seq_length 100
--per_gpu_eval_batch_size=32
--per_gpu_train_batch_size=32
--learning_rate 2e-4
--num_train_epochs 5.0
--output_dir $OUTPUT_PATH
--evaluate_during_training
--logging_steps 100
--save_steps 4000
--warmup_percent 0.1
--hidden_dropout_prob 0.1
--overwrite_output
--weight_decay 0.01
--n_process 8
혼합 정밀도를 자극하려면 -fp16 태그를 추가하십시오. (먼저 소스에서 '에이펙스'를 설치해야합니다).
또한 예측/visulization/motif_analysis를 위해 샘플 데이터 세트에서 미세 조정되는 KMER=6 모델을 제공합니다. 자신의 모델을 미세 조정하는 대신 미세 조정 모델을 사용하는 경우 미세 조정을 다운로드하여 examples/ft/6 에 넣으십시오.
미세 조정 모델
모델이 미세 조정되면 실행하여 예측을 얻을 수 있습니다.
export KMER=6
export MODEL_PATH=./ft/$KMER
export DATA_PATH=sample_data/ft/$KMER
export PREDICTION_PATH=./result/$KMER
python run_finetune.py
--model_type dna
--tokenizer_name=dna$KMER
--model_name_or_path $MODEL_PATH
--task_name dnaprom
--do_predict
--data_dir $DATA_PATH
--max_seq_length 75
--per_gpu_pred_batch_size=128
--output_dir $MODEL_PATH
--predict_dir $PREDICTION_PATH
--n_process 48
위의 명령을 사용하면 미세 조정 된 DNABERT 모델이 MODEL_PATH 에서로드되며 DATA_PATH 에 저장된 dev.tsv 파일에 예측하고 PREDICTION_PATH 에서 예측 결과를 저장합니다.
혼합 정밀도를 자극하려면 -fp16 태그를 추가하십시오. (먼저 소스에서 '에이펙스'를 설치해야합니다).
dnabert의 시각화는 2 단계로 구성됩니다. 주의 점수를 calcualate 및 음모.
하나의 모델 만 계산하십시오 (예 : DNABERT6)
export KMER=6
export MODEL_PATH=./ft/$KMER
export DATA_PATH=sample_data/ft/$KMER
export PREDICTION_PATH=./result/$KMER
python run_finetune.py
--model_type dna
--tokenizer_name=dna$KMER
--model_name_or_path $MODEL_PATH
--task_name dnaprom
--do_visualize
--visualize_data_dir $DATA_PATH
--visualize_models $KMER
--data_dir $DATA_PATH
--max_seq_length 81
--per_gpu_pred_batch_size=16
--output_dir $MODEL_PATH
--predict_dir $PREDICTION_PATH
--n_process 96
위의 명령을 사용하면 미세 조정 된 DNABERT 모델이 MODEL_PATH 에서로드되고 DATA_PATH 에 저장된 dev.tsv 파일의주의 점수를 계산하고 PREDICTION_PATH 에서 결과를 저장합니다.
혼합 정밀도를 자극하려면 -fp16 태그를 추가하십시오. (먼저 소스에서 '에이펙스'를 설치해야합니다).
#### 5.2 플로팅 도구
주의 점수가 생성되면 motif/find_motifs.py 사용하여 모티프 분석을 더 진행할 수 있습니다.
cd ../motif
export KMER=6
export DATA_PATH=../examples/sample_data/ft/$KMER
export PREDICTION_PATH=../examples/result/$KMER
export MOTIF_PATH=./result/$KMER
python find_motifs.py
--data_dir $DATA_PATH
--predict_dir $PREDICTION_PATH
--window_size 24
--min_len 5
--pval_cutoff 0.005
--min_n_motif 3
--align_all_ties
--save_file_dir $MOTIF_PATH
--verbose
스크립트는 MOTIF_PATH 의 각 motif에 대해 .txt 파일과 Weblogo .png 파일을 생성합니다.
게놈 변형 분석 (예 : SNP)을 수행하려면 먼저 서열에 대한 예측이 생성되도록해야합니다. 그런 다음 dev.tsv 에서 어떤 서열을 지정하고 돌연변이를 수행 해야하는지 인덱스를 지정하는 파일 ( SNP/example_mut_file.txt 에서 템플릿)을 만듭니다. 첫 번째 열은 dev.tsv 의 서열 지수를 돌연변이 할 것을 나타낸다. 두 번째 및 세 번째 열은 시작 및 끝 인덱스이고 네 번째 열은 돌연변이의 대상입니다 (대체, 삽입, 삭제 등).
그러한 파일이 생성되면 서열에서 돌연변이를 수행 할 수 있습니다.
cd ../SNP
python mutate_seqs.py ./../examples/sample_data/ft/6/dev.tsv ./examples/ --mut_file ./example_mut_file.txt --k 6
또는 우리는 --mut_file 인수를 공백으로 남겨 두도록 선택할 수 있습니다. 여기서 프로그램은 모든 기저를 모든 서열에 대해 4 개의 가능한 4 개의 뉴클레오티드 ( 'a', 't', 'c'또는 'g')로 대체하려고 시도 할 수 있습니다. 이것은 논문에 포함 된 돌연변이 히트 맵을 플로팅하는 데 유용합니다. dev.tsv 에 많은 서열이 포함되어 있거나 입력 시퀀스가 매우 길면 명령이 가능한 모든 위치에서 돌연변이를 수행하려고 시도하므로 이것은 느리게 진행됩니다 .
cd ../SNP
python mutate_seqs.py ./../examples/sample_data/ft/6/dev.tsv ./examples/ --k 6
그 후, 우리는 생성 된 시퀀스를 다시 예측할 수 있습니다. 참고 : mut_file.txt 에 삽입/삭제가있는 경우 예측할 때 사용하는 max_seq_length 를 변경하는 것을 고려하십시오.
export KMER=6
export MODEL_PATH=../examples/ft/$KMER
export DATA_PATH=examples
export PREDICTION_PATH=examples
python ../examples/run_finetune.py
--model_type dna
--tokenizer_name=dna$KMER
--model_name_or_path $MODEL_PATH
--task_name dnaprom
--do_predict
--data_dir $DATA_PATH
--max_seq_length 75
--per_gpu_pred_batch_size=128
--output_dir $MODEL_PATH
--predict_dir $PREDICTION_PATH
--n_process 48
이것은 다시 $PREDICTION_PATH 에서 pred_results.npy 파일을 생성합니다. 위의 모든 것이 있으면 다음으로 이러한 돌연변이의 효과를 계산할 수 있습니다.
python SNP.py
--orig_seq_file ../examples/sample_data/ft/6/dev.tsv
--orig_pred_file ../examples/result/6/pred_results.npy
--mut_seq_file examples/dev.tsv
--mut_pred_file examples/pred_results.npy
--save_file_dir examples
이것은 원래 시퀀스 (원래 dev.tsv ), 원래 시퀀스 및 예측, 돌연변이 된 서열 및 예측, 그리고 모든 경우의 변화의 차이 점수 및 로그 승산 비율을 포함하는 save_file_dir 에 따라 mutations.tsv 절약 할 수 있습니다.
DNABERT에 대한 모든 시스템 요구 사항을 충족하고 콘다 환경이 올바르게 설정되어 있는지 친절하게하십시오. 우리는 최근 Amazon EC2 딥 러닝 AMI (Ubuntu 18.04)에서 파이프 라인을 성공적으로 테스트했습니다. 옵션으로 시스템/환경 설정을이 AMI와 비교할 수 있습니다.