Remote Modeling of FGFR Kinase Inhibitors with Boltz-1 Using dxflow#
Why This Case Study Matters#
FGFR kinases (FGFR1-3) are implicated in diverse cancers. Infigratinib (BGJ-398), an ATP-competitive inhibitor, is approved for FGFR2 fusion-driven cholangiocarcinoma and in trials for broader FGFR-addicted cancers. Understanding the structural basis of its activity supports:
Precision medicine — anticipating resistance mutations and optimizing analogs.
Biomarker discovery — linking structure to downstream gene expression.
In-silico screening — evaluating analogs computationally before synthesis.
Boltz-1, a generative diffusion model, predicts protein-ligand complex structures. This notebook demonstrates how to run Boltz-1 within the DiPhyx platform, integrate molecular modeling and transcriptomics, and interpret biological outcomes.
Pipeline Overview#
Stage |
Key Tool |
Output |
---|---|---|
A. Target & ligand prep |
UniProt, RDKit |
FGFR1-3 kinase sequences; 3D mol of Infigratinib |
B. Structure prediction |
Boltz-1 |
PDBs of FGFR–drug complexes + per-model confidence |
C. Expression signature |
Scanpy + GSEApy (bulk/SC datasets) |
Differential gene lists & pathway NES |
D. Interpretation |
PyMOL, volcano/heat-maps |
Structure-function narrative & design hypotheses |
Compute Recommendations: Run this notebook on GPU-enabled units on DiPhyx. Recommended instances include:
g4dn.4xlarge
(16 cores, 64 GB RAM, Tesla T4 GPU)
g4dn.2xlarge
(8 cores, 16 GB RAM, Tesla T4 GPU)
g6.2xlarge
(8 cores, 32 GB RAM, NVIDIA L4 GPU)
Practical Walk-through#
Prepare Inputs#
Fetch FGFR1 kinase domain and generate Infigratinib conformer:
"""Fetch FGFR1 kinase domain (residues 564‑822) and build a 3‑D conformer of
Infigratinib – all in pure Python so you can run inside a notebook."""
import os, requests, textwrap
from pathlib import Path
from rdkit import Chem
from rdkit.Chem import AllChem
boltz_input_path = Path("boltz_inputs");
boltz_input_path.mkdir(exist_ok=True)
# ▸ Fetch canonical SMILES for Infigratinib (PubChem CID 50909836) -----
url = "https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/50909836/property/IsomericSMILES/JSON"
smiles = requests.get(url, timeout=30).json()['PropertyTable']['Properties'][0]['IsomericSMILES']
print("SMILES:", smiles[:60], "…")
# Build 3‑D ligand
mol = Chem.AddHs(Chem.MolFromSmiles(smiles))
AllChem.EmbedMolecule(mol, randomSeed=42)
AllChem.UFFOptimizeMolecule(mol)
Chem.MolToMolFile(mol, boltz_input_path / "Infigratinib.mol")
print("Wrote 3D MOL →", boltz_input_path / "Infigratinib.mol")
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
Cell In[1], line 6
4 import os, requests, textwrap
5 from pathlib import Path
----> 6 from rdkit import Chem
7 from rdkit.Chem import AllChem
9 boltz_input_path = Path("boltz_inputs");
ModuleNotFoundError: No module named 'rdkit'
Generate YAML programmatically#
The snippet below downloads the full FGFR1 sequence from UniProt, slices the kinase domain (564–822), and writes a Boltz‑1 YAML in boltz_inputs/. It re‑uses the smiles variable created in the previous cell:
import os, requests, yaml, textwrap
from pathlib import Path
boltz_input_path = Path("boltz_inputs")
boltz_input_path.mkdir(exist_ok=True)
# ▸ Download full FGFR1 sequence (UniProt P11362) ----------------------
uniprots = {
"FGFR1": "P11362",
"FGFR2": "P21802",
"FGFR3": "P22607",
}
seq_dict = {}
for name, uid in uniprots.items():
url = f"https://www.uniprot.org/uniprot/{uid}.fasta"
fasta = requests.get(url, timeout=30).text
full_seq = "".join(l.strip() for l in fasta.splitlines() if not l.startswith(">"))
kd_seq = full_seq[563:822] # slice residues 564‑822 (python 0‑based)
seq_dict[name] = kd_seq
print(f"{name}: kinase domain length = {len(kd_seq)} aa")
inputs_dict ={}
for name, kd_seq in seq_dict.items():
yaml_dict = {
"version": 1,
"sequences": [
{"protein": {"id": "A", "sequence": textwrap.fill(kd_seq, 60)}},
{"ligand": {"id": "B", "smiles": smiles}},
]
}
outfile = os.path.join("boltz_inputs", f"{name.lower()}_infig.yaml")
with open(outfile, "w") as fh:
yaml.safe_dump(yaml_dict, fh, sort_keys=False)
inputs_dict[name] = outfile
print("Wrote", outfile)
FGFR1: kinase domain length = 259 aa
FGFR2: kinase domain length = 258 aa
FGFR3: kinase domain length = 243 aa
Wrote boltz_inputs\fgfr1_infig.yaml
Wrote boltz_inputs\fgfr2_infig.yaml
Wrote boltz_inputs\fgfr3_infig.yaml
3.2 Run Boltz‑1 using dxflow#
We want to use dxflow library to run Boltz-1 on DiPhyx. The first step is to install dxrflow and make a session using your DiPhyx email
and password
. If you don’t have a DiPhyx account, you can create one here.
# Lets make sure that dxflow is installed
!pip install dxflow -U
from dxflow.session import Session
# Create a dxflow session with your credentials
session = Session(email='YOUR@EMAIL', password='YOUR_PASSWORD')
Requirement already satisfied: dxflow in c:\users\bgosh\miniconda3\envs\boltz1\lib\site-packages (0.1.5)
Collecting dxflow
Downloading dxflow-0.1.6-py3-none-any.whl.metadata (2.8 kB)
Requirement already satisfied: requests>=2.26.0 in c:\users\bgosh\miniconda3\envs\boltz1\lib\site-packages (from dxflow) (2.32.3)
Requirement already satisfied: pyyaml>=5.4.1 in c:\users\bgosh\miniconda3\envs\boltz1\lib\site-packages (from dxflow) (6.0.2)
Requirement already satisfied: colorama>=0.4.4 in c:\users\bgosh\miniconda3\envs\boltz1\lib\site-packages (from dxflow) (0.4.6)
Requirement already satisfied: charset-normalizer<4,>=2 in c:\users\bgosh\miniconda3\envs\boltz1\lib\site-packages (from requests>=2.26.0->dxflow) (3.4.2)
Requirement already satisfied: idna<4,>=2.5 in c:\users\bgosh\miniconda3\envs\boltz1\lib\site-packages (from requests>=2.26.0->dxflow) (3.10)
Requirement already satisfied: urllib3<3,>=1.21.1 in c:\users\bgosh\miniconda3\envs\boltz1\lib\site-packages (from requests>=2.26.0->dxflow) (2.4.0)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\bgosh\miniconda3\envs\boltz1\lib\site-packages (from requests>=2.26.0->dxflow) (2025.4.26)
Downloading dxflow-0.1.6-py3-none-any.whl (27 kB)
Installing collected packages: dxflow
Attempting uninstall: dxflow
Found existing installation: dxflow 0.1.5
Uninstalling dxflow-0.1.5:
Successfully uninstalled dxflow-0.1.5
Successfully installed dxflow-0.1.6
Now that you are connected to your DiPhyx account, let’s see if you have any running compute-units. If you don’t have any compute-units yet, you can create one by going to the DiPhyx dashboard and clicking on “Create Compute Unit”.
compute_unit_manager = session .get_compute_manager()
compute_unit_manager.list()
Name | Status | IP | Cluster Type | CPU | Memory(GB) | Disk
------------+------------+---------------+----------------------+-----+------------+-----------------------------
Boltz_Demo | PREPARING | 54.211.250.47 | AWS:g6.2xlarge | 8 | 32 | {boot: 512, volume: 256}
TEST | TERMINATED | 54.235.60.203 | AWS:T2 Medium | 2 | 4 | {boot: 16, volume: 48}
Note: If there is no compute-unit, you can either create it via the DiPhyx dashboard
or create it using thedxflow
SDK.
Now lets select the Boltz_Demo
compute-unit with the ip=<ip_address>
, which is a GPU-enabled unit that we will use to run Boltz-1.
Note: If you are running this notebook on the same machine, you don’t need to specify the
ip
address, as the compute-unit is already connected to your notebook (just usecompute_unit_manager.get_unit()
). However, it is a good practice to specify theip
address to ensure that the compute-unit is connected to the correct notebook.
compute_unit = compute_unit_manager.get_unit(name='Boltz_Demo') # or ip_address='<your_compute_unit_ip_address>'
compute_unit.projects.list() # This will show you the list of the project currently available on the compute unit
No data to display
Now lets get the”Boltz-1” flow from the dxflow registery:
flow_manager = session.get_flow_registery_manager()
# flow_manager.list() # This will show you the list of the flows currently available on the flow manager
boltz1_flow = flow_manager.get_by_name('Boltz-1') # This will get the flow with the name 'boltz_flow'""
boltz1_flow.get_variables() # This will show you the variables of the flow, their description, type and default value
{'INPUT': {'label': 'Input file or directory',
'hint': "file.yaml/fasta or directory path. Don't remove /volume/",
'default': '/volume/boltz_inputs/file.yaml',
'condition': {'key': 'DOCKER_COMPOSE_PROFILE_A', 'value': 'default'},
'required': True},
'OUTPUT': {'label': 'Output directory',
'hint': "Output directory will be at /volume/output. Don't remove /volume/",
'default': '/volume/boltz_outout/',
'condition': {'key': 'DOCKER_COMPOSE_PROFILE_A', 'value': 'default'},
'required': True},
'RECYCLE_STEPS': {'label': 'Recycle Steps',
'hint': 'number of recycling iterations',
'default': '10',
'condition': {'key': 'DOCKER_COMPOSE_PROFILE_A', 'value': 'default'},
'required': False},
'DIFFUSION_SAMPLES': {'label': 'Diffusion Samples',
'hint': 'The number of poses for the diffusion model',
'default': '5',
'condition': {'key': 'DOCKER_COMPOSE_PROFILE_A', 'value': 'default'},
'required': False},
'FLAT32_PERCISION': {'label': 'Float Percision',
'hint': 'Floating-point accuracy level',
'options': ['high', 'medium'],
'default': 'medium',
'required': False},
'CACHE_DIRECTORY': {'label': 'Cache directory',
'hint': "Cache directory. Don't remove /volume/",
'default': '/volume/boltz_cache/',
'condition': {'key': 'DOCKER_COMPOSE_PROFILE_A', 'value': 'default'},
'required': False},
'OTHER_FLAGS': {'label': 'Additional Flags',
'hint': 'Enter flags as used in the terminal',
'default': '--use_msa_server',
'condition': {'key': 'DOCKER_COMPOSE_PROFILE_A', 'value': 'default'},
'required': False},
'RUN_SCRIPT': {'label': 'Script path',
'hint': "This script will be executed only if 'Script Mode' is selected.",
'default': '/volume/run_script.sh',
'condition': {'key': 'DOCKER_COMPOSE_PROFILE_A', 'value': 'script'},
'required': False},
'profiles': {'DOCKER_COMPOSE_PROFILE_A': {'label': 'Execution Method',
'hint': 'Choose how to run your model — using parameters or a custom script',
'options': [{'label': 'Parameter Mode', 'value': 'default'},
{'label': 'Script Mode', 'value': 'script'}],
'default': 'default',
'required': False}}}
Moving the data to the compute-unit#
If you are running this notebook on the same compute-unit as Boltz-1, you can skip this step. If you are running it on your local machine, or a differnt compute-unit, you need to move the data to the compute-unit. The code below moves the yamls files boltz_inputs
directory to the compute-unit.
compute_unit.get_storage() # This will initilize the storage manager for the compute unit
# Destination path in the compute unit storage
for name, input_file in inputs_dict.items():
# Upload each input file to the compute unit storage
# Note: Make sure the destination path is correct and accessible in your compute unit environment.
# The dst path will be under /volume/ path and you should not add it in the dst.
compute_unit.storage.upload(src=input_file, dst=str(boltz_input_path))
print(f"Uploaded {input_file} to {boltz_input_path}")
Uploaded boltz_inputs\fgfr1_infig.yaml to boltz_inputs
Uploaded boltz_inputs\fgfr2_infig.yaml to boltz_inputs
Uploaded boltz_inputs\fgfr3_infig.yaml to boltz_inputs
The next step is to create the project. If this is first time creating boltz-1 project on this compute-unit, it will take couple of minutes to download the container image on this machine.
boltz_job_input_path = f"/volume/{boltz_input_path.name}" # Path to the input YAML files in the compute unit storage
boltz_job_output_path = "/volume/boltz_output"
variables = {
"INPUT": boltz_job_input_path, # Path to the input YAML files in the compute unit storage
"OUTPUT": boltz_job_output_path,
"RECYCLE_STEPS": 10,
"DIFFUSION_SAMPLES": 8,
"OTHER_FLAGS": "--use_msa_server"
}
boltz_project = compute_unit.projects.create(flow_name='Boltz-1', variables=variables)
Now, lets run the projects
boltz_project.start()
print("Started Boltz-1 project with variables:", variables)
Project is signaled to START successfully
Started Boltz-1 project with variables: {'INPUT': '/volume/boltz_inputs', 'OUTPUT': '/volume/boltz_output', 'RECYCLE_STEPS': 10, 'DIFFUSION_SAMPLES': 8, 'OTHER_FLAGS': '--use_msa_server'}
To monitor the project’s progress, you can view the logs in real-time or access the log history using the following commands:
boltz_project.realtime_logs() # or boltz_project.logs(realtime=True)
========================================
Container: 4f3a9b71364d
========================================
Date Message
2025-05-28 21:58:20 Downloading the CCD dictionary to /volume/boltz_cache/ccd.pkl. You may change the cache directory with the --cache flag.
2025-05-28 21:58:21 Downloading the model weights to /volume/boltz_cache/boltz1_conf.ckpt. You may change the cache directory with the --cache flag.
2025-05-28 21:58:30 Processing input data.
2025-05-28 21:58:30 Checking input data.
2025-05-28 21:58:30 Running predictions for 3 structures
2025-05-28 21:58:35 Generating MSA for /volume/boltz_inputs/fgfr1_infig.yaml with 1 protein entities.
2025-05-28 21:58:35
2025-05-28 21:58:35 0%| | 0/3 [00:00<?, ?it/s]
2025-05-28 21:58:35
2025-05-28 21:58:35 0%| | 0/150 [elapsed: 00:00 remaining: ?]
2025-05-28 21:58:35
2025-05-28 21:58:35 COMPLETE: 0%| | 0/150 [elapsed: 00:00 remaining: ?]
2025-05-28 21:58:35
2025-05-28 21:58:35 SUBMIT: 0%| | 0/150 [elapsed: 00:00 remaining: ?]
2025-05-28 21:58:36
2025-05-28 21:58:36 COMPLETE: 100%|██████████| 150/150 [elapsed: 00:00 remaining: 00:00]
2025-05-28 21:58:36 COMPLETE: 100%|██████████| 150/150 [elapsed: 00:01 remaining: 00:00]
2025-05-28 21:58:38 Generating MSA for /volume/boltz_inputs/fgfr3_infig.yaml with 1 protein entities.
2025-05-28 21:58:38
2025-05-28 21:58:38 33%|███▎ | 1/3 [00:03<00:06, 3.07s/it]
2025-05-28 21:58:38
2025-05-28 21:58:38 0%| | 0/150 [elapsed: 00:00 remaining: ?]
2025-05-28 21:58:38
2025-05-28 21:58:38 SUBMIT: 0%| | 0/150 [elapsed: 00:00 remaining: ?]
2025-05-28 21:58:38
2025-05-28 21:58:38 PENDING: 0%| | 0/150 [elapsed: 00:00 remaining: ?]Sleeping for 6s. Reason: PENDING
2025-05-28 21:58:44
2025-05-28 21:58:44 RUNNING: 0%| | 0/150 [elapsed: 00:06 remaining: ?]
2025-05-28 21:58:44
2025-05-28 21:58:44 RUNNING: 4%|▍ | 6/150 [elapsed: 00:06 remaining: 02:40]Sleeping for 8s. Reason: RUNNING
2025-05-28 21:58:53
2025-05-28 21:58:53 RUNNING: 4%|▍ | 6/150 [elapsed: 00:15 remaining: 02:40]
2025-05-28 21:58:53
2025-05-28 21:58:53 RUNNING: 9%|▉ | 14/150 [elapsed: 00:15 remaining: 02:25]Sleeping for 6s. Reason: RUNNING
2025-05-28 21:58:59
2025-05-28 21:58:59 RUNNING: 9%|▉ | 14/150 [elapsed: 00:21 remaining: 02:25]
2025-05-28 21:58:59
2025-05-28 21:58:59 RUNNING: 13%|█▎ | 20/150 [elapsed: 00:21 remaining: 02:18]Sleeping for 8s. Reason: RUNNING
2025-05-28 21:59:07
2025-05-28 21:59:07 RUNNING: 13%|█▎ | 20/150 [elapsed: 00:29 remaining: 02:18]
2025-05-28 21:59:07
2025-05-28 21:59:07 RUNNING: 19%|█▊ | 28/150 [elapsed: 00:29 remaining: 02:08]Sleeping for 8s. Reason: RUNNING
2025-05-28 21:59:16
2025-05-28 21:59:16 RUNNING: 19%|█▊ | 28/150 [elapsed: 00:38 remaining: 02:08]
2025-05-28 21:59:16
2025-05-28 21:59:16 RUNNING: 24%|██▍ | 36/150 [elapsed: 00:38 remaining: 01:59]Sleeping for 6s. Reason: RUNNING
2025-05-28 21:59:22
2025-05-28 21:59:22 RUNNING: 24%|██▍ | 36/150 [elapsed: 00:44 remaining: 01:59]
2025-05-28 21:59:22
2025-05-28 21:59:22 RUNNING: 28%|██▊ | 42/150 [elapsed: 00:44 remaining: 01:53]Sleeping for 10s. Reason: RUNNING
2025-05-28 21:59:32
2025-05-28 21:59:32 RUNNING: 28%|██▊ | 42/150 [elapsed: 00:54 remaining: 01:53]
2025-05-28 21:59:32
2025-05-28 21:59:32 RUNNING: 35%|███▍ | 52/150 [elapsed: 00:54 remaining: 01:42]Sleeping for 8s. Reason: RUNNING
2025-05-28 21:59:41
2025-05-28 21:59:41 RUNNING: 35%|███▍ | 52/150 [elapsed: 01:03 remaining: 01:42]
2025-05-28 21:59:41
2025-05-28 21:59:41 RUNNING: 40%|████ | 60/150 [elapsed: 01:03 remaining: 01:33]Sleeping for 6s. Reason: RUNNING
2025-05-28 21:59:47
2025-05-28 21:59:47 RUNNING: 44%|████▍ | 66/150 [elapsed: 01:09 remaining: 01:27]Sleeping for 5s. Reason: RUNNING
2025-05-28 21:59:47
2025-05-28 21:59:47 RUNNING: 40%|████ | 60/150 [elapsed: 01:09 remaining: 01:33]
2025-05-28 21:59:52
2025-05-28 21:59:52 RUNNING: 44%|████▍ | 66/150 [elapsed: 01:14 remaining: 01:27]
2025-05-28 21:59:52
2025-05-28 21:59:52 RUNNING: 47%|████▋ | 71/150 [elapsed: 01:14 remaining: 01:23]Sleeping for 8s. Reason: RUNNING
2025-05-28 22:00:01
2025-05-28 22:00:01 RUNNING: 53%|█████▎ | 79/150 [elapsed: 01:23 remaining: 01:14]Sleeping for 10s. Reason: RUNNING
2025-05-28 22:00:01
2025-05-28 22:00:01 RUNNING: 47%|████▋ | 71/150 [elapsed: 01:23 remaining: 01:23]
2025-05-28 22:00:11
2025-05-28 22:00:11 RUNNING: 53%|█████▎ | 79/150 [elapsed: 01:33 remaining: 01:14]
2025-05-28 22:00:11
2025-05-28 22:00:11 RUNNING: 59%|█████▉ | 89/150 [elapsed: 01:33 remaining: 01:03]Sleeping for 9s. Reason: RUNNING
2025-05-28 22:00:20
2025-05-28 22:00:20 RUNNING: 59%|█████▉ | 89/150 [elapsed: 01:42 remaining: 01:03]
2025-05-28 22:00:20
2025-05-28 22:00:20 RUNNING: 65%|██████▌ | 98/150 [elapsed: 01:42 remaining: 00:54]Sleeping for 6s. Reason: RUNNING
2025-05-28 22:00:27
2025-05-28 22:00:27 RUNNING: 65%|██████▌ | 98/150 [elapsed: 01:49 remaining: 00:54]
2025-05-28 22:00:27
2025-05-28 22:00:27 RUNNING: 69%|██████▉ | 104/150 [elapsed: 01:49 remaining: 00:48]Sleeping for 7s. Reason: RUNNING
2025-05-28 22:00:34
2025-05-28 22:00:34 RUNNING: 69%|██████▉ | 104/150 [elapsed: 01:56 remaining: 00:48]
2025-05-28 22:00:34
2025-05-28 22:00:34 RUNNING: 74%|███████▍ | 111/150 [elapsed: 01:56 remaining: 00:40]Sleeping for 9s. Reason: RUNNING
2025-05-28 22:00:43
2025-05-28 22:00:43 COMPLETE: 74%|███████▍ | 111/150 [elapsed: 02:05 remaining: 00:40]
2025-05-28 22:00:45
2025-05-28 22:00:45 COMPLETE: 100%|██████████| 150/150 [elapsed: 02:05 remaining: 00:00]
2025-05-28 22:00:45 COMPLETE: 100%|██████████| 150/150 [elapsed: 02:06 remaining: 00:00]
2025-05-28 22:00:46 Generating MSA for /volume/boltz_inputs/fgfr2_infig.yaml with 1 protein entities.
2025-05-28 22:00:46
2025-05-28 22:00:46 67%|██████▋ | 2/3 [02:11<01:16, 76.57s/it]
2025-05-28 22:00:46
2025-05-28 22:00:46 0%| | 0/150 [elapsed: 00:00 remaining: ?]
2025-05-28 22:00:46
2025-05-28 22:00:46 SUBMIT: 0%| | 0/150 [elapsed: 00:00 remaining: ?]
2025-05-28 22:00:46
2025-05-28 22:00:46 PENDING: 0%| | 0/150 [elapsed: 00:00 remaining: ?]Sleeping for 9s. Reason: PENDING
2025-05-28 22:00:55
2025-05-28 22:00:55 RUNNING: 0%| | 0/150 [elapsed: 00:09 remaining: ?]
2025-05-28 22:00:55
2025-05-28 22:00:55 RUNNING: 6%|▌ | 9/150 [elapsed: 00:09 remaining: 02:31]Sleeping for 9s. Reason: RUNNING
2025-05-28 22:01:05
2025-05-28 22:01:05 RUNNING: 12%|█▏ | 18/150 [elapsed: 00:19 remaining: 02:18]Sleeping for 6s. Reason: RUNNING
2025-05-28 22:01:05
2025-05-28 22:01:05 RUNNING: 6%|▌ | 9/150 [elapsed: 00:19 remaining: 02:31]
2025-05-28 22:01:11
2025-05-28 22:01:11 RUNNING: 12%|█▏ | 18/150 [elapsed: 00:25 remaining: 02:18]
2025-05-28 22:01:11
2025-05-28 22:01:11 RUNNING: 16%|█▌ | 24/150 [elapsed: 00:25 remaining: 02:12]Sleeping for 7s. Reason: RUNNING
2025-05-28 22:01:18
2025-05-28 22:01:18 RUNNING: 16%|█▌ | 24/150 [elapsed: 00:32 remaining: 02:12]
2025-05-28 22:01:18
2025-05-28 22:01:18 RUNNING: 21%|██ | 31/150 [elapsed: 00:32 remaining: 02:05]Sleeping for 7s. Reason: RUNNING
2025-05-28 22:01:26
2025-05-28 22:01:26 RUNNING: 21%|██ | 31/150 [elapsed: 00:40 remaining: 02:05]
2025-05-28 22:01:26
2025-05-28 22:01:26 RUNNING: 25%|██▌ | 38/150 [elapsed: 00:40 remaining: 01:57]Sleeping for 10s. Reason: RUNNING
2025-05-28 22:01:36
2025-05-28 22:01:36 RUNNING: 25%|██▌ | 38/150 [elapsed: 00:50 remaining: 01:57]
2025-05-28 22:01:36
2025-05-28 22:01:36 RUNNING: 32%|███▏ | 48/150 [elapsed: 00:50 remaining: 01:46]Sleeping for 7s. Reason: RUNNING
2025-05-28 22:01:43
2025-05-28 22:01:43 RUNNING: 32%|███▏ | 48/150 [elapsed: 00:57 remaining: 01:46]
2025-05-28 22:01:43
2025-05-28 22:01:43 RUNNING: 37%|███▋ | 55/150 [elapsed: 00:57 remaining: 01:39]Sleeping for 7s. Reason: RUNNING
2025-05-28 22:01:51
2025-05-28 22:01:51 RUNNING: 37%|███▋ | 55/150 [elapsed: 01:05 remaining: 01:39]
2025-05-28 22:01:51
2025-05-28 22:01:51 RUNNING: 41%|████▏ | 62/150 [elapsed: 01:05 remaining: 01:32]Sleeping for 10s. Reason: RUNNING
2025-05-28 22:02:01
2025-05-28 22:02:01 RUNNING: 41%|████▏ | 62/150 [elapsed: 01:15 remaining: 01:32]
2025-05-28 22:02:01
2025-05-28 22:02:01 RUNNING: 48%|████▊ | 72/150 [elapsed: 01:15 remaining: 01:21]Sleeping for 5s. Reason: RUNNING
2025-05-28 22:02:06
2025-05-28 22:02:06 RUNNING: 48%|████▊ | 72/150 [elapsed: 01:20 remaining: 01:21]
2025-05-28 22:02:06
2025-05-28 22:02:06 RUNNING: 51%|█████▏ | 77/150 [elapsed: 01:20 remaining: 01:16]Sleeping for 9s. Reason: RUNNING
2025-05-28 22:02:16
2025-05-28 22:02:16 RUNNING: 51%|█████▏ | 77/150 [elapsed: 01:30 remaining: 01:16]
2025-05-28 22:02:16
2025-05-28 22:02:16 RUNNING: 57%|█████▋ | 86/150 [elapsed: 01:30 remaining: 01:06]Sleeping for 10s. Reason: RUNNING
2025-05-28 22:02:26
2025-05-28 22:02:26 RUNNING: 57%|█████▋ | 86/150 [elapsed: 01:40 remaining: 01:06]
2025-05-28 22:02:26
2025-05-28 22:02:26 RUNNING: 64%|██████▍ | 96/150 [elapsed: 01:40 remaining: 00:56]Sleeping for 6s. Reason: RUNNING
2025-05-28 22:02:32
2025-05-28 22:02:32 RUNNING: 64%|██████▍ | 96/150 [elapsed: 01:46 remaining: 00:56]
2025-05-28 22:02:32
2025-05-28 22:02:32 RUNNING: 68%|██████▊ | 102/150 [elapsed: 01:46 remaining: 00:50]Sleeping for 5s. Reason: RUNNING
2025-05-28 22:02:38
2025-05-28 22:02:38 RUNNING: 68%|██████▊ | 102/150 [elapsed: 01:52 remaining: 00:50]
2025-05-28 22:02:38
2025-05-28 22:02:38 RUNNING: 71%|███████▏ | 107/150 [elapsed: 01:52 remaining: 00:45]Sleeping for 8s. Reason: RUNNING
2025-05-28 22:02:46
2025-05-28 22:02:46 RUNNING: 71%|███████▏ | 107/150 [elapsed: 02:00 remaining: 00:45]
2025-05-28 22:02:46
2025-05-28 22:02:46 RUNNING: 77%|███████▋ | 115/150 [elapsed: 02:00 remaining: 00:36]Sleeping for 10s. Reason: RUNNING
2025-05-28 22:02:56
2025-05-28 22:02:56 RUNNING: 77%|███████▋ | 115/150 [elapsed: 02:10 remaining: 00:36]
2025-05-28 22:02:56
2025-05-28 22:02:56 RUNNING: 83%|████████▎ | 125/150 [elapsed: 02:10 remaining: 00:26]Sleeping for 10s. Reason: RUNNING
2025-05-28 22:03:07
2025-05-28 22:03:07 RUNNING: 83%|████████▎ | 125/150 [elapsed: 02:21 remaining: 00:26]
2025-05-28 22:03:07
2025-05-28 22:03:07 RUNNING: 90%|█████████ | 135/150 [elapsed: 02:21 remaining: 00:15]Sleeping for 8s. Reason: RUNNING
2025-05-28 22:03:15
2025-05-28 22:03:15 RUNNING: 90%|█████████ | 135/150 [elapsed: 02:29 remaining: 00:15]
2025-05-28 22:03:15
2025-05-28 22:03:15 RUNNING: 95%|█████████▌| 143/150 [elapsed: 02:29 remaining: 00:07]Sleeping for 8s. Reason: RUNNING
2025-05-28 22:03:23
2025-05-28 22:03:23 COMPLETE: 95%|█████████▌| 143/150 [elapsed: 02:37 remaining: 00:07]
2025-05-28 22:03:25
2025-05-28 22:03:25 COMPLETE: 100%|██████████| 150/150 [elapsed: 02:37 remaining: 00:00]
2025-05-28 22:03:25 COMPLETE: 100%|██████████| 150/150 [elapsed: 02:39 remaining: 00:00]
2025-05-28 22:03:25
2025-05-28 22:03:25 100%|██████████| 3/3 [04:51<00:00, 114.72s/it]
2025-05-28 22:03:25 100%|██████████| 3/3 [04:51<00:00, 97.07s/it]
2025-05-28 22:03:52 GPU available: True (cuda), used: True
2025-05-28 22:03:52 HPU available: False, using: 0 HPUs
2025-05-28 22:03:52 TPU available: False, using: 0 TPU cores
2025-05-28 22:03:52 You are using a CUDA device ('NVIDIA L4') that has Tensor Cores. To properly utilize them, you should set `torch.set_float32_matmul_precision('medium' | 'high')` which will trade-off precision for performance. For more details, read https://pytorch.org/docs/stable/generated/torch.set_float32_matmul_precision.html#torch.set_float32_matmul_precision
2025-05-28 22:03:52 LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]
Result visuzalization#
You can visualize the results of the Boltz-1 run using PyMOL
or any other molecular visualization tool (e.g. ParaView
). The output PDB files will be located in the /volume/boltz_outputs
directory on your compute unit.