Introduction
In this tutorial, you'll learn how to use NVIDIA's BioNeMo Inference Runtime (BioIR) to accelerate biomolecular structure prediction models on GPUs. BioIR is a Python library that helps speed up AI models used in protein folding, which is crucial for understanding diseases and developing new medicines. We'll walk through setting up BioIR and running a simple example that demonstrates its performance improvements over standard PyTorch implementations.
Prerequisites
Before starting this tutorial, ensure you have the following:
- Python 3.8 or higher installed
- NVIDIA GPU with CUDA support (H100 recommended for best results)
- NVIDIA CUDA toolkit installed
- Basic knowledge of Python and PyTorch
Step-by-Step Instructions
1. Install Required Dependencies
1.1 Set up your Python environment
First, create a virtual environment to keep your project isolated:
python -m venv bionemo_env
source bionemo_env/bin/activate # On Windows: bionemo_env\Scripts\activate
1.2 Install necessary packages
Install PyTorch and other required libraries:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install biopython numpy
1.3 Install BioIR
Install the BioNeMo Inference Runtime:
pip install bionemo-inference-runtime
2. Prepare a Simple Protein Folding Model
2.1 Create a basic model file
Let's create a simple model that simulates the structure prediction task. This will help us understand how BioIR works:
import torch
import torch.nn as nn
class SimpleProteinModel(nn.Module):
def __init__(self):
super().__init__()
self.layer1 = nn.Linear(1000, 500)
self.layer2 = nn.Linear(500, 250)
self.layer3 = nn.Linear(250, 100)
def forward(self, x):
x = torch.relu(self.layer1(x))
x = torch.relu(self.layer2(x))
x = self.layer3(x)
return x
# Create model instance
model = SimpleProteinModel()
2.2 Create test data
Generate some dummy data to simulate protein structures:
import torch
# Generate dummy input data
input_data = torch.randn(100, 1000)
print(f"Input shape: {input_data.shape}")
3. Run Model with Standard PyTorch
3.1 Execute baseline model
First, run the model using standard PyTorch to establish a baseline:
# Standard PyTorch execution
with torch.no_grad():
output = model(input_data)
print(f"Output shape: {output.shape}")
print("Standard PyTorch execution completed")
3.2 Measure performance
Time the standard execution to compare with BioIR later:
import time
time_start = time.time()
for i in range(10):
with torch.no_grad():
_ = model(input_data)
time_end = time.time()
print(f"Standard execution time: {time_end - time_start:.4f} seconds")
4. Run Model with BioIR Acceleration
4.1 Import BioIR components
Now, let's use BioIR to accelerate our model:
from bionemo.inference.runtime import BioIRRuntime
# Initialize BioIR runtime
runtime = BioIRRuntime(model, device='cuda')
# Prepare input for BioIR
input_tensor = input_data.to('cuda')
# Run model with BioIR acceleration
with torch.no_grad():
output_bioir = runtime(input_tensor)
print(f"BioIR output shape: {output_bioir.shape}")
4.2 Compare performance
Measure the time taken with BioIR:
time_start = time.time()
for i in range(10):
with torch.no_grad():
_ = runtime(input_tensor)
time_end = time.time()
print(f"BioIR execution time: {time_end - time_start:.4f} seconds")
5. Advanced BioIR Usage
5.1 Enable replica scaling
BioIR supports scaling across multiple GPUs:
# For multi-GPU setup
runtime_multi = BioIRRuntime(model, device='cuda', num_replicas=4)
# Run with multi-GPU support
with torch.no_grad():
output_multi = runtime_multi(input_tensor)
print(f"Multi-GPU output shape: {output_multi.shape}")
5.2 Optimize kernel selection
BioIR automatically selects optimized kernels. You can also manually specify:
# Force specific kernel optimization
runtime_optimized = BioIRRuntime(model, device='cuda', kernel_optimization='auto')
# Run optimized version
with torch.no_grad():
output_opt = runtime_optimized(input_tensor)
print(f"Optimized output shape: {output_opt.shape}")
6. Benchmark Results
6.1 Analyze throughput improvements
Compare the performance improvements:
# Calculate performance improvement
std_time = time_end - time_start
bioir_time = time_end - time_start # Replace with actual BioIR timing
improvement = std_time / bioir_time
print(f"Performance improvement: {improvement:.2f}x faster")
Summary
In this tutorial, you've learned how to set up and use NVIDIA's BioNeMo Inference Runtime (BioIR) to accelerate biomolecular structure prediction models. You installed the required dependencies, created a simple protein folding model, and compared standard PyTorch execution with BioIR-accelerated execution. BioIR provides significant performance improvements by optimizing kernel selection, using CUDA graphs, and enabling replica scaling across multiple GPUs. This technology is crucial for advancing protein folding research and could help accelerate drug discovery and disease understanding.
Remember that BioIR works best with NVIDIA GPUs and is particularly effective for large-scale biomolecular modeling tasks. As you continue working with BioIR, you'll find it becomes even more powerful when dealing with real protein folding datasets and complex models like Boltz-2.

