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 the dxflow 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 use compute_unit_manager.get_unit()). However, it is a good practice to specify the ip 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.