Full AI/Bioinformatics development environment for GPU/DGX machines. Built on NVIDIA PyTorch 25.10 with CUDA support.
This is an optional developer convenience environment — think of it as:
"A researcher's laptop in a container."
It is intended for:
- OmniBioAI contributors and researchers
- Exploratory AI/LLM prototyping
- Single-cell and multi-omics experimentation
- Notebook-driven development (Python + R)
- GPU-accelerated model training and inference
This is not part of the OmniBioAI production stack. It is not:
- A Tool Execution Service (TES) runtime
- A production or cloud deployment image
- Used by OmniBioAI pipelines at runtime
| Component | Role |
|---|---|
| OmniBioAI Workbench | Production platform |
| Tool Execution Service (TES) | Stateless execution |
| Tool Runtime Images | Minimal, contract-driven |
| This Repository | Interactive development only |
| Category | Tools |
|---|---|
| Deep Learning | PyTorch 2.9 (GPU), TorchVision, TensorRT, Flash Attention, Transformer Engine |
| ML/Data Science | Scikit-learn, XGBoost, LightGBM, Polars, Pandas, NumPy, SciPy |
| Bioinformatics | GATK 4.5, Samtools, BCFTools, FastQC, SnpEff, Nextflow, BEDTools |
| Genomics/R | R 4.x, Bioconductor, DESeq2, limma, edgeR, ComplexHeatmap, scran, scater |
| LLM/AI | Transformers, SentenceTransformers, HuggingFace Hub, Accelerate, Safetensors, Ollama |
| Semantic search | FAISS CPU indexing with CUDA-backed embedding generation |
| Visualization | Matplotlib, Seaborn, Plotly, Bokeh, TensorBoard |
| Notebook | JupyterLab 4.x (pre-configured, GPU-enabled) |
- NVIDIA GPU (A100, H100, or DGX system recommended)
- NVIDIA Container Toolkit installed on host
- Docker with GPU support
- 50GB+ free disk space for the image build; plan substantially more for CUDA layers, R/Bioconductor packages, model caches, and datasets
docker pull ghcr.io/omnibioai/omnibioai-dev-env:latest
bash run_ai_dev.shgit clone https://github.com/OmniBioAI/omnibioai-dev-docker
cd omnibioai-dev-docker
docker build -t ghcr.io/omnibioai/omnibioai-dev-env:latest .
bash run_ai_dev.shbash run_ai_dev.sh [OPTIONS]
Options:
--jupyter Start JupyterLab automatically
--ollama Start Ollama server automatically
--build Force rebuild image from Dockerfile
--help Show help--build builds the image from the current directory and requires access to
the NVIDIA base image and all build dependencies. Without it, the launcher
uses a local image when available, otherwise pulls from GHCR and falls back
to a local build if the pull fails.
This launches an interactive container with:
- Full GPU access (
--gpus all) - Shared memory for PyTorch DataLoader (
--ipc=host) - HuggingFace cache mounted (
~/.cache/huggingface) - Ollama models mounted (
~/.ollama) - Current directory mounted as
/workspace - JupyterLab on port
8888 - Ollama server on port
11434
The launcher removes any existing container named omnibio_dev_foundry
before starting a new one. The current directory is mounted at /workspace,
so work saved there remains on the host. After ending a session, resume the
same container with:
docker start -ai omnibio_dev_foundryJupyter is configured without a token or password for local convenience, and
the launcher publishes its port on all host interfaces by default. Do not
expose port 8888 directly to an untrusted network. Prefer a firewall or an
SSH tunnel, or modify run_ai_dev.sh to bind the host side to
127.0.0.1 and configure Jupyter authentication for shared environments.
# Via flag (recommended)
bash run_ai_dev.sh --jupyter
# Or manually inside container
jupyter lab --ip=0.0.0.0 --port=8888 --allow-root --no-browserThen open: http://localhost:8888
# Via flag
bash run_ai_dev.sh --ollama
# Or manually inside container
ollama serve &
ollama pull llama3
ollama run llama3 "Summarize the role of TP53 in cancer"Inside the container, verify CUDA and all tools:
# PyTorch GPU
python -c "import torch; print('CUDA:', torch.cuda.is_available()); print('GPU:', torch.cuda.get_device_name(0))"
# Bioinformatics tools
nextflow -version
gatk --version
samtools --version | head -1
fastqc --version
snpeff -version
# R + Bioconductor
R -e "library(DESeq2); packageVersion('DESeq2')"If CUDA returns False, verify:
- NVIDIA drivers are installed
- Docker is configured with GPU support
nvidia-container-toolkitis available
The validated local DGX Spark candidate uses the digest-pinned NVIDIA PyTorch
25.10 base (sha256:42263b2424fc237b34c4fc4a91c30d603c57eed36e37d31ff6d9a4f1f801edee)
on ARM64/CUDA 13.0. It preserves NVIDIA's PyTorch, TorchVision, Flash Attention,
Apex, TorchAO, Torch-TensorRT, and Transformer Engine builds. The
requirements.dgx.txt file is a pip constraints file for those preinstalled
packages; do not install it with pip install -r.
Build the candidate without replacing the existing dgx-gpu-v1 tag:
docker build \
--cache-from omnibioai-dev-docker:dgx-gpu-v1 \
-t omnibioai-dev-docker:dgx-gpu-v2 .Pinned semantic-search dependencies are:
- Transformers 4.56.2 (4.57.x is incompatible with NVIDIA's bundled TorchAO)
- SentenceTransformers 5.1.2
- FAISS CPU 1.12.0 (native CPython 3.12 AArch64 wheel)
- NumPy 2.1.0, Accelerate 1.11.0, and Safetensors 0.6.2
Run the complete dependency, FAISS, GPU, CUDA, and NVML smoke test:
docker run --rm --gpus all --ipc=host \
--ulimit memlock=-1 --ulimit stack=67108864 \
-v "$HOME/.cache/huggingface:/root/.cache/huggingface:ro" \
omnibioai-dev-docker:dgx-gpu-v2 \
omnibioai-dgx-smoke-test --offline-modelsFor a dependency/FAISS-only check that does not require a GPU or model cache:
docker run --rm omnibioai-dev-docker:dgx-gpu-v2 \
omnibioai-dgx-smoke-test --skip-gpu --skip-modelsThe smoke test creates normalized synthetic IndexFlatIP indexes at 1024,
2560, and 4096 dimensions, verifies self-neighbor identity, and verifies index
serialization/reload. FAISS is CPU-only; embedding inference remains CUDA
enabled through NVIDIA PyTorch.
Model metadata is pinned to immutable Hugging Face revisions by the smoke test:
| Model | Dimension | Query instruction and normalization |
|---|---|---|
mixedbread-ai/mxbai-embed-large-v1 |
1024 | Prefix retrieval queries with Represent this sentence for searching relevant passages: ; encode documents without it; use normalize_embeddings=True. |
Qwen/Qwen3-Embedding-4B |
2560 | Use Instruct: {task}\nQuery:{query} for queries, no instruction for documents, left-padding, last-token pooling, and L2 normalization. |
Qwen/Qwen3-Embedding-8B |
4096 | Same Qwen3 instruction, pooling, padding, and normalization behavior. |
The automated model check loads pinned configs and tokenizers and validates the
SentenceTransformers module layout without loading model weights. Full model
inference is intentionally not part of the image build: the 4B/8B weights are
large and must not be downloaded implicitly. Use the pinned revisions in
scripts/dgx_smoke_test.py when explicitly running real-model inference.
Ollama is installed from a versioned, SHA-256-verified ARM64 release archive.
Do not restore the generic Ollama installer in this image: during a Docker build
it can detect the host GPU and install a driver inside the container. Such a
driver shadows the host libraries injected by NVIDIA Container Toolkit and can
produce Driver/library version mismatch while CUDA compute still works.
The NVIDIA base currently includes the deprecated pynvml compatibility
distribution because nvidia-resiliency-ext requires it. nvidia-ml-py is
also installed and provides the actual bindings. The compatibility package is
therefore retained rather than removed merely to suppress its deprecation
warning.
Rollback is non-destructive: stop using dgx-gpu-v2 and launch the preserved
omnibioai-dev-docker:dgx-gpu-v1 tag. Do not retag or overwrite v1.
# Inside the container (recommended)
huggingface-cli login
# Or via environment variable
export HUGGINGFACE_TOKEN=hf_xxxxxxxxxxxxxxxxxxxxxThe launcher does not currently forward a host-side HUGGINGFACE_TOKEN
environment variable automatically. Set it inside the container or update
the launcher to pass it explicitly with Docker's -e option.
import torch
import scanpy as sc
print(f"Using GPU: {torch.cuda.get_device_name(0)}")
adata = sc.read_h5ad("/workspace/data/sample.h5ad")
sc.pp.normalize_total(adata)
sc.pp.log1p(adata)
sc.pp.highly_variable_genes(adata)
sc.tl.pca(adata)
sc.pl.pca_variance_ratio(adata)- Prototyping new OmniBioAI plugins
- Exploratory single-cell analysis (Scanpy/Seurat workflows)
- LLM prompt and RAG experimentation
- Model benchmarking and training
- Notebook-based research
- Rapid testing before productionization
| File | Description |
|---|---|
Dockerfile |
Main image definition |
requirements.txt |
Portable Python dependencies |
requirements.dgx.txt |
DGX-specific packages (pre-installed in base, docs only) |
run_ai_dev.sh |
Container launch script |
tests/ |
Validation tests |
pyproject.toml |
Project metadata |
.gitignore |
Prevents secrets/caches from being committed |
.dockerignore |
Prevents data/models from being baked into image |
This dev environment is designed to work alongside the
OmniBioAI platform
(checked out locally as omnibioai/) —
a unified AI-powered bioinformatics workbench supporting:
- 231 enabled bioinformatics plugins (platform snapshot; this count changes as plugins are added or retired)
- RNA-seq, single-cell, spatial omics, variant calling
- TES workflow execution (Slurm, K8s, AWS Batch, Azure)
- RAG-powered literature search (PubMed + FAISS)
- ML model registry
- Multi-cloud support (AWS, Azure, GCP)
Apache License 2.0. This repository currently does not include a LICENSE
file; add the license file before distributing the repository as a licensed
release.
If you use this environment in your research, please cite:
OmniBioAI Dev Environment (2025)
Manish Kumar
https://github.com/OmniBioAI/omnibioai-dev-docker