Borzoi — DNA → Functional Track Prediction

SkillAI & models

Predict genome-wide functional tracks (RNA-seq, CAGE, DNase, ChIP) from DNA sequence with Borzoi. Use this skill when: (1) Scoring the regulatory effect of a variant on expression/accessibility, (2) Generating predicted coverage tracks for a locus, (3) Prioritising non-coding variants by predicted track delta.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Borzoi — DNA → Functional Track Prediction skill

What this skill tells your AI

The instructions your AI receives, as published by pku-yuangroup/openai4s in skills/borzoi/SKILL.md and read by ahel’s review.

Prerequisites

RequirementMinimumRecommended
Python3.10+3.11
CUDA12.1+12.4+
GPU VRAM16 GB24 GB+

How to run

from borzoi_pytorch import Borzoi

model = Borzoi.from_pretrained("johahi/borzoi-replicate-0").cuda().eval()
# input: (batch, 4, 524288) one-hot DNA  → output: (batch, tracks, 6144) bins

Borzoi consumes ~524 kb one-hot windows and emits binned predictions across 7,611 human tracks (the separate 2,608-track mouse head is off by default; enable via enable_mouse_head=True and select with forward(..., is_human=False)). For variant scoring, run ref/alt windows centred on the variant and compare per-track output.

Output format

(B, T, L) tensor — T tracks × L 32-bp bins. Track metadata (assay, biosample) is in borzoi_pytorch.pytorch_borzoi_model.TRACKS_DF (or model.tracks_df when using the AnnotatedBorzoi subclass) — the base Borzoi model has no targets attribute.

Remote compute

Needs ≥24 GB VRAM and either pre-cached HF weights or egress to huggingface.co. Read compute_details({provider, mode:'read'}) for an environment with borzoi-pytorch, then:

c = host.compute.create(provider)
job = c.submit_job(
    intent="Borzoi track prediction for 1 locus — 1×GPU, ~2 min",
    inputs=[{"src": "borzoi_run.py", "dst_filename": "borzoi_run.py"}],
    command="python3 borzoi_run.py",   # env selection is host-specific — see compute_details for your provider
    outputs=["tracks.npz"],
    timeout_seconds=1800,
)
print(job.job_id)   # cell ends here — kernel never blocks on compute

Then poll from a later cell. .result() is one non-blocking probe of the remote and is what harvests the outputs once the job is terminal — nothing runs in the background, so a job you never poll is never harvested. While the job is still running it returns {"status": "running", …}; end the cell and call it again later:

r = c.attach_job(job_id).result()   # {status, exit_code, output_files,
                                    #  featured_files, remote_workdir, …}
if r["status"] == "succeeded":
    for path in r["featured_files"]:      # paths under hpc/<job_id>/
        host.save_artifact(path)
    c.close()
# `unknown` is not a finished job — poll again rather than closing over it.

See the remote-compute-ssh / remote-compute-nvidia skill for the orchestration details.

If the provider exposes a weight-cache mount, point HF_HOME at it inside borzoi_run.py (path is in compute_details).

Troubleshooting

SymptomCauseFix
module has no __version__Package exposes no attrUse importlib.metadata.version("borzoi-pytorch")
Shape mismatch on inputWrong window lengthPad/crop to 524288 bp (fixed; not exposed as a model attribute)

Next: combine track deltas with evo2 likelihood deltas for a two-axis variant prioritisation.

Signals

GitHub stars
404
Forks
48
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
borzoi-pku-yuangroup
Source
github.com/pku-yuangroup/openai4s