CodonTransformer / scripts /slurm /run_inference_multiple.sh
anzhi2710gmailcom's picture
Upload folder using huggingface_hub
53e66de verified
Raw
History Blame Contribute Delete
3.23 kB
#!/usr/bin/env bash
set -euo pipefail
# Multiple variable inference for one protein sequence.
# Run this inside an allocated/interactive GPU session. No SLURM resources are requested here.
PROJECT_DIR="${PROJECT_DIR:-/public/home/scnb9biwet/jiangqq/CodonTransformer-main}"
HF_HOME="${HF_HOME:-/public/home/scnb9biwet/.cache/huggingface}"
CONDA_ENV="${CONDA_ENV:-struct-evo}"
PROTEIN="${PROTEIN:-MFWY}"
ORGANISM="${ORGANISM:-Escherichia coli general}"
OUTPUT_CSV="${OUTPUT_CSV:-${PROJECT_DIR}/outputs/multiple_predictions.csv}"
NUM_SEQUENCES="${NUM_SEQUENCES:-5}"
TEMPERATURE="${TEMPERATURE:-0.5}"
TOP_P="${TOP_P:-0.95}"
MATCH_PROTEIN="${MATCH_PROTEIN:-1}"
OFFLINE="${OFFLINE:-1}"
cd "${PROJECT_DIR}"
mkdir -p "$(dirname "${OUTPUT_CSV}")"
export HF_HOME
export PYTHONPATH="${PROJECT_DIR}/model:${PYTHONPATH:-}"
export PROTEIN
export ORGANISM
export OUTPUT_CSV
export NUM_SEQUENCES
export TEMPERATURE
export TOP_P
export MATCH_PROTEIN
export OFFLINE
export PYTHONFAULTHANDLER=1
if [[ "${OFFLINE}" == "1" ]]; then
export HF_HUB_OFFLINE=1
export TRANSFORMERS_OFFLINE=1
fi
if [[ -n "${CONDA_ENV}" ]] && command -v conda >/dev/null 2>&1; then
# shellcheck disable=SC1091
source "$(conda info --base)/etc/profile.d/conda.sh"
conda activate "${CONDA_ENV}"
fi
python - <<'PY'
import os
import pandas as pd
import torch
from transformers import AutoTokenizer, BigBirdForMaskedLM
from CodonTransformer.CodonJupyter import format_model_output
from CodonTransformer.CodonPrediction import predict_dna_sequence
protein = os.environ["PROTEIN"]
organism = os.environ["ORGANISM"]
output_csv = os.environ["OUTPUT_CSV"]
num_sequences = int(os.environ["NUM_SEQUENCES"])
temperature = float(os.environ["TEMPERATURE"])
top_p = float(os.environ["TOP_P"])
match_protein = os.environ.get("MATCH_PROTEIN", "1") == "1"
local_files_only = os.environ.get("OFFLINE", "1") == "1"
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(f"HF_HOME: {os.environ.get('HF_HOME')}")
print(f"Device: {device}")
print(f"Local files only: {local_files_only}")
print(
"Sampling: "
f"num_sequences={num_sequences}, temperature={temperature}, "
f"top_p={top_p}, match_protein={match_protein}"
)
tokenizer = AutoTokenizer.from_pretrained(
"adibvafa/CodonTransformer",
local_files_only=local_files_only,
)
model = BigBirdForMaskedLM.from_pretrained(
"adibvafa/CodonTransformer",
local_files_only=local_files_only,
).to(device)
outputs = predict_dna_sequence(
protein=protein,
organism=organism,
device=device,
tokenizer=tokenizer,
model=model,
attention_type="original_full",
deterministic=False,
temperature=temperature,
top_p=top_p,
num_sequences=num_sequences,
match_protein=match_protein,
)
rows = []
for index, output in enumerate(outputs, start=1):
print(f"\nSequence {index}")
print(format_model_output(output))
rows.append(
{
"sequence_index": index,
"protein_sequence": output.protein,
"organism": output.organism,
"predicted_dna": output.predicted_dna,
}
)
pd.DataFrame(rows).to_csv(output_csv, index=False)
print(f"Saved predictions to {output_csv}")
PY