AI agent skill · by @aipoch
Borzoi
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.
Archived 2026-10-23 · Source updated 2026-10-12 · License: Apache-2.0. Check the original repository for the latest version.
SKILL.md instructions
# Borzoi — DNA → Functional Track Prediction
## Prerequisites
| Requirement | Minimum | Recommended |
| ----------- | ------- | ----------- |
| Python | 3.10+ | 3.11 |
| CUDA | 12.1+ | 12.4+ |
| GPU VRAM | 16 GB | 24 GB+ |
## How to run
```python
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:
```python
c = host.compute.create(provider)
job = c.submitJob(
intent="Borzoi track prediction for 1 locus — 1×GPU, ~2 min",
inputs=[{"src": "borzoi_run.py", "dstFilename": "borzoi_run.py"}],
command="python3 borzoi_run.py", # env selection is host-specific — see compute_details for your provider
outputs=["tracks.npz"],
timeoutSeconds=1800,
)
print(job.job_id) # cell ends here — kernel never blocks on compute
```
Retain the exact returned `job_id`. Query that saved ID with the non-blocking
`c.attachJob(job_id).status()` or `.result()` when its state or result is relevant; do not scan Job
history. A final `.result()` read reports whether its follow-up was `suppressed` or had already been
`committed`; otherwise the app starts the later analysis turn for an unread final result. See the
`remote-compute-ssh` skill for details.
If the provider exposes a weight-cache mount, point `HF_HOME` at it inside
`borzoi_run.py` (path is in `compute_details`).
## Troubleshooting
| Symptom | Cause | Fix |
| --------------------------- | ----------------------- | --------------------------------------------------------------- |
| `module has no __version__` | Package exposes no attr | Use `importlib.metadata.version("borzoi-pytorch")` |
| Shape mismatch on input | Wrong window length | Pad/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.