Repository files navigation

Foundation Machine Learning for Chemistry and Drug Discovery at Scale

Repository for MLOps pipeline for training, deploying, and monitoring MLFFs for chemistry and drug discovery.

The terms Machine Learning Force Field (MLFF) and Machine Learning Interatomic Potential (MLIP) are used interchangeably.

MLFF for (Quantum) Chemistry and Drug Discovery

Foundation models such as UMA (Universal Models for Atoms) and MACE (Message Passing Atomic Cluster Expansion) use massive pre-training datasets to capture complex, multi-body interactions and physical symmetries of molecules. In drug discovery, these pre-trained potentials allow for rapid, high-fidelity geometry optimizations, conformer searches, and molecular dynamics simulations of drug-target complexes without requiring system-specific retraining.

🚀 MLOps Framework & Resources

Hands-on guide for training, deploying, and monitoring MLFF model that scales automatically.

The guide covers

  1. Lifecycles - Active learning loop and data verification.
  2. Scaling - Distributed training architectures for HPC (SLURM) and AWS Cloud (SageMaker, FSx for Lustre).
  3. Serving - High-throughput FastAPI and Triton Inference Server wrapping.
  4. Monitoring - Real-time out-of-distribution (OOD) geometry & bond-clash detection.

🛠️ MLOps Core Scripts

Our pipeline consists of the following components under the mlops/ folder

  • dataset_prep.py: Converts .xyz/.extxyz coordinates into PyTorch Geometric graph datasets based on distance cutoffs.
  • train_pipeline.py: Distributed DDP training script in PyTorch that computes energies and derives forces analytically using double autograd. Logs metrics to MLflow.
  • inference_service.py: FastAPI microservice exposing /predict (energies and forces) and /optimize (structure relaxation integrating an ASE LBFGS optimizer).
  • monitor_drift.py: Detects atomic bond clashes and checks geometric drift using pairwise distance distributions to alert on OOD structures.

🏢 Orchestration & Infrastructure Templates

  • submit_hpc.sh: A SLURM submit template for multi-node, multi-GPU training clusters via torchrun.
  • run_sagemaker.py: AWS SageMaker SDK launcher targeting large multi-GPU instances (e.g. ml.p4d.24xlarge) utilizing FSx for Lustre.

🤖 Agent skills

Specialized agent skills have been integrated under the .agents/skills/ directory to guide AI (like Claude and Gemini) through computational chemistry and ML interatomic potential development tasks.

📋 Skill Agents Registry

Skill / ComponentAgent NameAction / Purpose
Molecular Graph & Scaffold SplittingScaffoldSplitAgentPrevents chemical space data leakage between train/val/test splits.
Multi-Task Learning with ACSMultitaskACSAgentMitigates negative transfer by checkpointing task-specific states independently.
Differentiable Information ImbalanceDIIFeatureSelectorSelects relevant molecular feature subsets via gradient descent.
Deep Ensembles UQEnsembleUQAgentPartitions total predictive uncertainty into aleatoric and epistemic components.
Activity Cliff AwarenessActivityCliffAgentAdjusts representation coordinates around cliff compounds using TSM loss.
Delta-ML & Transfer LearningDeltaTransferMLAgentAchieves chemical accuracy with small high-fidelity data via pre-training/fine-tuning.
Conformation Generation & DFT InputConformationDFTAgentPrepares optimized conformer coordinates and inputs for DFT (ORCA/Gaussian) solvers.
MLIP ASE CalculatorsMLIPASECalculatorAgentBridges PyTorch ML models to the Atomic Simulation Environment interface.
Geometry Optimization & MDASEDynamicsAgentRelaxes configurations and evaluates thermodynamic trajectory snapshots.
MLIP Active Learning LoopsMLIPActiveLearningAgentAutomates database expansion focusing labeling budgets on high-uncertainty regions.

⚙️ How to setup & use skill agents

Customizations are automatically discovered and loaded by agentic platforms (like Google Gemini and Anthropic Claude systems supporting custom workspace contexts) from standard workspace or global roots.

1. Installation

To install the skills in your active workspace, copy or create the skills directory in the workspace root:

# Workspace level installation
mkdir -p .agents/skills/
cp -r path/to/skills/* .agents/skills/

Alternatively, for global installation across all projects, copy the skills into the global config folder:

# Global configuration level
mkdir -p ~/.gemini/config/skills/
cp -r path/to/skills/*~/.gemini/config/skills/

2. How it works

Every skill folder contains a SKILL.md manifest with frontmatter (e.g. name and description triggers). When you prompt Claude or Gemini in the IDE with a related task (e.g. "Run a Langevin dynamics simulation on this structure"), the agent:

  1. Triggers matching rules based on your query description.
  2. Automatically loads the instructions inside SKILL.md.
  3. Discovers the target helper script and executes it or guides you in running it.

3. Manual command execution

You can also run any of the helper scripts directly from your terminal using the commands listed in the registry table above. Ensure dependencies (torch, ase, rdkit, numpy) are installed in your active Python environment:

pip install torch ase numpy rdkit

👨‍💻 Author

Rangsiman Ketkaew
ML PostDoc Researcher, ETH Zurich, Switzerland

About

Information of foundation ML for chemistry and drug discovery - Let's develop, train, optimize, and deploy models at scale

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Foundation Machine Learning for Chemistry and Drug Discovery at Scale

Repository for MLOps pipeline for training, deploying, and monitoring MLFFs for chemistry and drug discovery.

The terms Machine Learning Force Field (MLFF) and Machine Learning Interatomic Potential (MLIP) are used interchangeably.

MLFF for (Quantum) Chemistry and Drug Discovery

Foundation models such as UMA (Universal Models for Atoms) and MACE (Message Passing Atomic Cluster Expansion) use massive pre-training datasets to capture complex, multi-body interactions and physical symmetries of molecules. In drug discovery, these pre-trained potentials allow for rapid, high-fidelity geometry optimizations, conformer searches, and molecular dynamics simulations of drug-target complexes without requiring system-specific retraining.

🚀 MLOps Framework & Resources

Hands-on guide for training, deploying, and monitoring MLFF model that scales automatically.

The guide covers

  1. Lifecycles - Active learning loop and data verification.
  2. Scaling - Distributed training architectures for HPC (SLURM) and AWS Cloud (SageMaker, FSx for Lustre).
  3. Serving - High-throughput FastAPI and Triton Inference Server wrapping.
  4. Monitoring - Real-time out-of-distribution (OOD) geometry & bond-clash detection.

🛠️ MLOps Core Scripts

Our pipeline consists of the following components under the mlops/ folder

  • dataset_prep.py: Converts .xyz/.extxyz coordinates into PyTorch Geometric graph datasets based on distance cutoffs.
  • train_pipeline.py: Distributed DDP training script in PyTorch that computes energies and derives forces analytically using double autograd. Logs metrics to MLflow.
  • inference_service.py: FastAPI microservice exposing /predict (energies and forces) and /optimize (structure relaxation integrating an ASE LBFGS optimizer).
  • monitor_drift.py: Detects atomic bond clashes and checks geometric drift using pairwise distance distributions to alert on OOD structures.

🏢 Orchestration & Infrastructure Templates

  • submit_hpc.sh: A SLURM submit template for multi-node, multi-GPU training clusters via torchrun.
  • run_sagemaker.py: AWS SageMaker SDK launcher targeting large multi-GPU instances (e.g. ml.p4d.24xlarge) utilizing FSx for Lustre.

🤖 Agent skills

Specialized agent skills have been integrated under the .agents/skills/ directory to guide AI (like Claude and Gemini) through computational chemistry and ML interatomic potential development tasks.

📋 Skill Agents Registry

Skill / ComponentAgent NameAction / Purpose
Molecular Graph & Scaffold SplittingScaffoldSplitAgentPrevents chemical space data leakage between train/val/test splits.
Multi-Task Learning with ACSMultitaskACSAgentMitigates negative transfer by checkpointing task-specific states independently.
Differentiable Information ImbalanceDIIFeatureSelectorSelects relevant molecular feature subsets via gradient descent.
Deep Ensembles UQEnsembleUQAgentPartitions total predictive uncertainty into aleatoric and epistemic components.
Activity Cliff AwarenessActivityCliffAgentAdjusts representation coordinates around cliff compounds using TSM loss.
Delta-ML & Transfer LearningDeltaTransferMLAgentAchieves chemical accuracy with small high-fidelity data via pre-training/fine-tuning.
Conformation Generation & DFT InputConformationDFTAgentPrepares optimized conformer coordinates and inputs for DFT (ORCA/Gaussian) solvers.
MLIP ASE CalculatorsMLIPASECalculatorAgentBridges PyTorch ML models to the Atomic Simulation Environment interface.
Geometry Optimization & MDASEDynamicsAgentRelaxes configurations and evaluates thermodynamic trajectory snapshots.
MLIP Active Learning LoopsMLIPActiveLearningAgentAutomates database expansion focusing labeling budgets on high-uncertainty regions.

⚙️ How to setup & use skill agents

Customizations are automatically discovered and loaded by agentic platforms (like Google Gemini and Anthropic Claude systems supporting custom workspace contexts) from standard workspace or global roots.

1. Installation

To install the skills in your active workspace, copy or create the skills directory in the workspace root:

# Workspace level installation
mkdir -p .agents/skills/
cp -r path/to/skills/* .agents/skills/

Alternatively, for global installation across all projects, copy the skills into the global config folder:

# Global configuration level
mkdir -p ~/.gemini/config/skills/
cp -r path/to/skills/*~/.gemini/config/skills/

2. How it works

Every skill folder contains a SKILL.md manifest with frontmatter (e.g. name and description triggers). When you prompt Claude or Gemini in the IDE with a related task (e.g. "Run a Langevin dynamics simulation on this structure"), the agent:

  1. Triggers matching rules based on your query description.
  2. Automatically loads the instructions inside SKILL.md.
  3. Discovers the target helper script and executes it or guides you in running it.

3. Manual command execution

You can also run any of the helper scripts directly from your terminal using the commands listed in the registry table above. Ensure dependencies (torch, ase, rdkit, numpy) are installed in your active Python environment:

pip install torch ase numpy rdkit

👨‍💻 Author

Rangsiman Ketkaew
ML PostDoc Researcher, ETH Zurich, Switzerland

About

Information of foundation ML for chemistry and drug discovery - Let's develop, train, optimize, and deploy models at scale

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Foundation Machine Learning for Chemistry and Drug Discovery at Scale

Repository for MLOps pipeline for training, deploying, and monitoring MLFFs for chemistry and drug discovery.

The terms Machine Learning Force Field (MLFF) and Machine Learning Interatomic Potential (MLIP) are used interchangeably.

MLFF for (Quantum) Chemistry and Drug Discovery

Foundation models such as UMA (Universal Models for Atoms) and MACE (Message Passing Atomic Cluster Expansion) use massive pre-training datasets to capture complex, multi-body interactions and physical symmetries of molecules. In drug discovery, these pre-trained potentials allow for rapid, high-fidelity geometry optimizations, conformer searches, and molecular dynamics simulations of drug-target complexes without requiring system-specific retraining.

🚀 MLOps Framework & Resources

Hands-on guide for training, deploying, and monitoring MLFF model that scales automatically.

The guide covers

  1. Lifecycles - Active learning loop and data verification.
  2. Scaling - Distributed training architectures for HPC (SLURM) and AWS Cloud (SageMaker, FSx for Lustre).
  3. Serving - High-throughput FastAPI and Triton Inference Server wrapping.
  4. Monitoring - Real-time out-of-distribution (OOD) geometry & bond-clash detection.

🛠️ MLOps Core Scripts

Our pipeline consists of the following components under the mlops/ folder

  • dataset_prep.py: Converts .xyz/.extxyz coordinates into PyTorch Geometric graph datasets based on distance cutoffs.
  • train_pipeline.py: Distributed DDP training script in PyTorch that computes energies and derives forces analytically using double autograd. Logs metrics to MLflow.
  • inference_service.py: FastAPI microservice exposing /predict (energies and forces) and /optimize (structure relaxation integrating an ASE LBFGS optimizer).
  • monitor_drift.py: Detects atomic bond clashes and checks geometric drift using pairwise distance distributions to alert on OOD structures.

🏢 Orchestration & Infrastructure Templates

  • submit_hpc.sh: A SLURM submit template for multi-node, multi-GPU training clusters via torchrun.
  • run_sagemaker.py: AWS SageMaker SDK launcher targeting large multi-GPU instances (e.g. ml.p4d.24xlarge) utilizing FSx for Lustre.

🤖 Agent skills

Specialized agent skills have been integrated under the .agents/skills/ directory to guide AI (like Claude and Gemini) through computational chemistry and ML interatomic potential development tasks.

📋 Skill Agents Registry

Skill / ComponentAgent NameAction / Purpose
Molecular Graph & Scaffold SplittingScaffoldSplitAgentPrevents chemical space data leakage between train/val/test splits.
Multi-Task Learning with ACSMultitaskACSAgentMitigates negative transfer by checkpointing task-specific states independently.
Differentiable Information ImbalanceDIIFeatureSelectorSelects relevant molecular feature subsets via gradient descent.
Deep Ensembles UQEnsembleUQAgentPartitions total predictive uncertainty into aleatoric and epistemic components.
Activity Cliff AwarenessActivityCliffAgentAdjusts representation coordinates around cliff compounds using TSM loss.
Delta-ML & Transfer LearningDeltaTransferMLAgentAchieves chemical accuracy with small high-fidelity data via pre-training/fine-tuning.
Conformation Generation & DFT InputConformationDFTAgentPrepares optimized conformer coordinates and inputs for DFT (ORCA/Gaussian) solvers.
MLIP ASE CalculatorsMLIPASECalculatorAgentBridges PyTorch ML models to the Atomic Simulation Environment interface.
Geometry Optimization & MDASEDynamicsAgentRelaxes configurations and evaluates thermodynamic trajectory snapshots.
MLIP Active Learning LoopsMLIPActiveLearningAgentAutomates database expansion focusing labeling budgets on high-uncertainty regions.

⚙️ How to setup & use skill agents

Customizations are automatically discovered and loaded by agentic platforms (like Google Gemini and Anthropic Claude systems supporting custom workspace contexts) from standard workspace or global roots.

1. Installation

To install the skills in your active workspace, copy or create the skills directory in the workspace root:

# Workspace level installation
mkdir -p .agents/skills/
cp -r path/to/skills/* .agents/skills/

Alternatively, for global installation across all projects, copy the skills into the global config folder:

# Global configuration level
mkdir -p ~/.gemini/config/skills/
cp -r path/to/skills/*~/.gemini/config/skills/

2. How it works

Every skill folder contains a SKILL.md manifest with frontmatter (e.g. name and description triggers). When you prompt Claude or Gemini in the IDE with a related task (e.g. "Run a Langevin dynamics simulation on this structure"), the agent:

  1. Triggers matching rules based on your query description.
  2. Automatically loads the instructions inside SKILL.md.
  3. Discovers the target helper script and executes it or guides you in running it.

3. Manual command execution

You can also run any of the helper scripts directly from your terminal using the commands listed in the registry table above. Ensure dependencies (torch, ase, rdkit, numpy) are installed in your active Python environment:

pip install torch ase numpy rdkit

👨‍💻 Author

Rangsiman Ketkaew
ML PostDoc Researcher, ETH Zurich, Switzerland

About

Information of foundation ML for chemistry and drug discovery - Let's develop, train, optimize, and deploy models at scale

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Foundation Machine Learning for Chemistry and Drug Discovery at Scale

Repository for MLOps pipeline for training, deploying, and monitoring MLFFs for chemistry and drug discovery.

The terms Machine Learning Force Field (MLFF) and Machine Learning Interatomic Potential (MLIP) are used interchangeably.

MLFF for (Quantum) Chemistry and Drug Discovery

Foundation models such as UMA (Universal Models for Atoms) and MACE (Message Passing Atomic Cluster Expansion) use massive pre-training datasets to capture complex, multi-body interactions and physical symmetries of molecules. In drug discovery, these pre-trained potentials allow for rapid, high-fidelity geometry optimizations, conformer searches, and molecular dynamics simulations of drug-target complexes without requiring system-specific retraining.

🚀 MLOps Framework & Resources

Hands-on guide for training, deploying, and monitoring MLFF model that scales automatically.

The guide covers

  1. Lifecycles - Active learning loop and data verification.
  2. Scaling - Distributed training architectures for HPC (SLURM) and AWS Cloud (SageMaker, FSx for Lustre).
  3. Serving - High-throughput FastAPI and Triton Inference Server wrapping.
  4. Monitoring - Real-time out-of-distribution (OOD) geometry & bond-clash detection.

🛠️ MLOps Core Scripts

Our pipeline consists of the following components under the mlops/ folder

  • dataset_prep.py: Converts .xyz/.extxyz coordinates into PyTorch Geometric graph datasets based on distance cutoffs.
  • train_pipeline.py: Distributed DDP training script in PyTorch that computes energies and derives forces analytically using double autograd. Logs metrics to MLflow.
  • inference_service.py: FastAPI microservice exposing /predict (energies and forces) and /optimize (structure relaxation integrating an ASE LBFGS optimizer).
  • monitor_drift.py: Detects atomic bond clashes and checks geometric drift using pairwise distance distributions to alert on OOD structures.

🏢 Orchestration & Infrastructure Templates

  • submit_hpc.sh: A SLURM submit template for multi-node, multi-GPU training clusters via torchrun.
  • run_sagemaker.py: AWS SageMaker SDK launcher targeting large multi-GPU instances (e.g. ml.p4d.24xlarge) utilizing FSx for Lustre.

🤖 Agent skills

Specialized agent skills have been integrated under the .agents/skills/ directory to guide AI (like Claude and Gemini) through computational chemistry and ML interatomic potential development tasks.

📋 Skill Agents Registry

Skill / ComponentAgent NameAction / Purpose
Molecular Graph & Scaffold SplittingScaffoldSplitAgentPrevents chemical space data leakage between train/val/test splits.
Multi-Task Learning with ACSMultitaskACSAgentMitigates negative transfer by checkpointing task-specific states independently.
Differentiable Information ImbalanceDIIFeatureSelectorSelects relevant molecular feature subsets via gradient descent.
Deep Ensembles UQEnsembleUQAgentPartitions total predictive uncertainty into aleatoric and epistemic components.
Activity Cliff AwarenessActivityCliffAgentAdjusts representation coordinates around cliff compounds using TSM loss.
Delta-ML & Transfer LearningDeltaTransferMLAgentAchieves chemical accuracy with small high-fidelity data via pre-training/fine-tuning.
Conformation Generation & DFT InputConformationDFTAgentPrepares optimized conformer coordinates and inputs for DFT (ORCA/Gaussian) solvers.
MLIP ASE CalculatorsMLIPASECalculatorAgentBridges PyTorch ML models to the Atomic Simulation Environment interface.
Geometry Optimization & MDASEDynamicsAgentRelaxes configurations and evaluates thermodynamic trajectory snapshots.
MLIP Active Learning LoopsMLIPActiveLearningAgentAutomates database expansion focusing labeling budgets on high-uncertainty regions.

⚙️ How to setup & use skill agents

Customizations are automatically discovered and loaded by agentic platforms (like Google Gemini and Anthropic Claude systems supporting custom workspace contexts) from standard workspace or global roots.

1. Installation

To install the skills in your active workspace, copy or create the skills directory in the workspace root:

# Workspace level installation
mkdir -p .agents/skills/
cp -r path/to/skills/* .agents/skills/

Alternatively, for global installation across all projects, copy the skills into the global config folder:

# Global configuration level
mkdir -p ~/.gemini/config/skills/
cp -r path/to/skills/*~/.gemini/config/skills/

2. How it works

Every skill folder contains a SKILL.md manifest with frontmatter (e.g. name and description triggers). When you prompt Claude or Gemini in the IDE with a related task (e.g. "Run a Langevin dynamics simulation on this structure"), the agent:

  1. Triggers matching rules based on your query description.
  2. Automatically loads the instructions inside SKILL.md.
  3. Discovers the target helper script and executes it or guides you in running it.

3. Manual command execution

You can also run any of the helper scripts directly from your terminal using the commands listed in the registry table above. Ensure dependencies (torch, ase, rdkit, numpy) are installed in your active Python environment:

pip install torch ase numpy rdkit

👨‍💻 Author

Rangsiman Ketkaew
ML PostDoc Researcher, ETH Zurich, Switzerland

About

Information of foundation ML for chemistry and drug discovery - Let's develop, train, optimize, and deploy models at scale

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Foundation Machine Learning for Chemistry and Drug Discovery at Scale

Repository for MLOps pipeline for training, deploying, and monitoring MLFFs for chemistry and drug discovery.

The terms Machine Learning Force Field (MLFF) and Machine Learning Interatomic Potential (MLIP) are used interchangeably.

MLFF for (Quantum) Chemistry and Drug Discovery

Foundation models such as UMA (Universal Models for Atoms) and MACE (Message Passing Atomic Cluster Expansion) use massive pre-training datasets to capture complex, multi-body interactions and physical symmetries of molecules. In drug discovery, these pre-trained potentials allow for rapid, high-fidelity geometry optimizations, conformer searches, and molecular dynamics simulations of drug-target complexes without requiring system-specific retraining.

🚀 MLOps Framework & Resources

Hands-on guide for training, deploying, and monitoring MLFF model that scales automatically.

The guide covers

  1. Lifecycles - Active learning loop and data verification.
  2. Scaling - Distributed training architectures for HPC (SLURM) and AWS Cloud (SageMaker, FSx for Lustre).
  3. Serving - High-throughput FastAPI and Triton Inference Server wrapping.
  4. Monitoring - Real-time out-of-distribution (OOD) geometry & bond-clash detection.

🛠️ MLOps Core Scripts

Our pipeline consists of the following components under the mlops/ folder

  • dataset_prep.py: Converts .xyz/.extxyz coordinates into PyTorch Geometric graph datasets based on distance cutoffs.
  • train_pipeline.py: Distributed DDP training script in PyTorch that computes energies and derives forces analytically using double autograd. Logs metrics to MLflow.
  • inference_service.py: FastAPI microservice exposing /predict (energies and forces) and /optimize (structure relaxation integrating an ASE LBFGS optimizer).
  • monitor_drift.py: Detects atomic bond clashes and checks geometric drift using pairwise distance distributions to alert on OOD structures.

🏢 Orchestration & Infrastructure Templates

  • submit_hpc.sh: A SLURM submit template for multi-node, multi-GPU training clusters via torchrun.
  • run_sagemaker.py: AWS SageMaker SDK launcher targeting large multi-GPU instances (e.g. ml.p4d.24xlarge) utilizing FSx for Lustre.

🤖 Agent skills

Specialized agent skills have been integrated under the .agents/skills/ directory to guide AI (like Claude and Gemini) through computational chemistry and ML interatomic potential development tasks.

📋 Skill Agents Registry

Skill / ComponentAgent NameAction / Purpose
Molecular Graph & Scaffold SplittingScaffoldSplitAgentPrevents chemical space data leakage between train/val/test splits.
Multi-Task Learning with ACSMultitaskACSAgentMitigates negative transfer by checkpointing task-specific states independently.
Differentiable Information ImbalanceDIIFeatureSelectorSelects relevant molecular feature subsets via gradient descent.
Deep Ensembles UQEnsembleUQAgentPartitions total predictive uncertainty into aleatoric and epistemic components.
Activity Cliff AwarenessActivityCliffAgentAdjusts representation coordinates around cliff compounds using TSM loss.
Delta-ML & Transfer LearningDeltaTransferMLAgentAchieves chemical accuracy with small high-fidelity data via pre-training/fine-tuning.
Conformation Generation & DFT InputConformationDFTAgentPrepares optimized conformer coordinates and inputs for DFT (ORCA/Gaussian) solvers.
MLIP ASE CalculatorsMLIPASECalculatorAgentBridges PyTorch ML models to the Atomic Simulation Environment interface.
Geometry Optimization & MDASEDynamicsAgentRelaxes configurations and evaluates thermodynamic trajectory snapshots.
MLIP Active Learning LoopsMLIPActiveLearningAgentAutomates database expansion focusing labeling budgets on high-uncertainty regions.

⚙️ How to setup & use skill agents

Customizations are automatically discovered and loaded by agentic platforms (like Google Gemini and Anthropic Claude systems supporting custom workspace contexts) from standard workspace or global roots.

1. Installation

To install the skills in your active workspace, copy or create the skills directory in the workspace root:

# Workspace level installation
mkdir -p .agents/skills/
cp -r path/to/skills/* .agents/skills/

Alternatively, for global installation across all projects, copy the skills into the global config folder:

# Global configuration level
mkdir -p ~/.gemini/config/skills/
cp -r path/to/skills/*~/.gemini/config/skills/

2. How it works

Every skill folder contains a SKILL.md manifest with frontmatter (e.g. name and description triggers). When you prompt Claude or Gemini in the IDE with a related task (e.g. "Run a Langevin dynamics simulation on this structure"), the agent:

  1. Triggers matching rules based on your query description.
  2. Automatically loads the instructions inside SKILL.md.
  3. Discovers the target helper script and executes it or guides you in running it.

3. Manual command execution

You can also run any of the helper scripts directly from your terminal using the commands listed in the registry table above. Ensure dependencies (torch, ase, rdkit, numpy) are installed in your active Python environment:

pip install torch ase numpy rdkit

👨‍💻 Author

Rangsiman Ketkaew
ML PostDoc Researcher, ETH Zurich, Switzerland

About

Information of foundation ML for chemistry and drug discovery - Let's develop, train, optimize, and deploy models at scale

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Foundation Machine Learning for Chemistry and Drug Discovery at Scale

Repository for MLOps pipeline for training, deploying, and monitoring MLFFs for chemistry and drug discovery.

The terms Machine Learning Force Field (MLFF) and Machine Learning Interatomic Potential (MLIP) are used interchangeably.

MLFF for (Quantum) Chemistry and Drug Discovery

Foundation models such as UMA (Universal Models for Atoms) and MACE (Message Passing Atomic Cluster Expansion) use massive pre-training datasets to capture complex, multi-body interactions and physical symmetries of molecules. In drug discovery, these pre-trained potentials allow for rapid, high-fidelity geometry optimizations, conformer searches, and molecular dynamics simulations of drug-target complexes without requiring system-specific retraining.

🚀 MLOps Framework & Resources

Hands-on guide for training, deploying, and monitoring MLFF model that scales automatically.

The guide covers

  1. Lifecycles - Active learning loop and data verification.
  2. Scaling - Distributed training architectures for HPC (SLURM) and AWS Cloud (SageMaker, FSx for Lustre).
  3. Serving - High-throughput FastAPI and Triton Inference Server wrapping.
  4. Monitoring - Real-time out-of-distribution (OOD) geometry & bond-clash detection.

🛠️ MLOps Core Scripts

Our pipeline consists of the following components under the mlops/ folder

  • dataset_prep.py: Converts .xyz/.extxyz coordinates into PyTorch Geometric graph datasets based on distance cutoffs.
  • train_pipeline.py: Distributed DDP training script in PyTorch that computes energies and derives forces analytically using double autograd. Logs metrics to MLflow.
  • inference_service.py: FastAPI microservice exposing /predict (energies and forces) and /optimize (structure relaxation integrating an ASE LBFGS optimizer).
  • monitor_drift.py: Detects atomic bond clashes and checks geometric drift using pairwise distance distributions to alert on OOD structures.

🏢 Orchestration & Infrastructure Templates

  • submit_hpc.sh: A SLURM submit template for multi-node, multi-GPU training clusters via torchrun.
  • run_sagemaker.py: AWS SageMaker SDK launcher targeting large multi-GPU instances (e.g. ml.p4d.24xlarge) utilizing FSx for Lustre.

🤖 Agent skills

Specialized agent skills have been integrated under the .agents/skills/ directory to guide AI (like Claude and Gemini) through computational chemistry and ML interatomic potential development tasks.

📋 Skill Agents Registry

Skill / ComponentAgent NameAction / Purpose
Molecular Graph & Scaffold SplittingScaffoldSplitAgentPrevents chemical space data leakage between train/val/test splits.
Multi-Task Learning with ACSMultitaskACSAgentMitigates negative transfer by checkpointing task-specific states independently.
Differentiable Information ImbalanceDIIFeatureSelectorSelects relevant molecular feature subsets via gradient descent.
Deep Ensembles UQEnsembleUQAgentPartitions total predictive uncertainty into aleatoric and epistemic components.
Activity Cliff AwarenessActivityCliffAgentAdjusts representation coordinates around cliff compounds using TSM loss.
Delta-ML & Transfer LearningDeltaTransferMLAgentAchieves chemical accuracy with small high-fidelity data via pre-training/fine-tuning.
Conformation Generation & DFT InputConformationDFTAgentPrepares optimized conformer coordinates and inputs for DFT (ORCA/Gaussian) solvers.
MLIP ASE CalculatorsMLIPASECalculatorAgentBridges PyTorch ML models to the Atomic Simulation Environment interface.
Geometry Optimization & MDASEDynamicsAgentRelaxes configurations and evaluates thermodynamic trajectory snapshots.
MLIP Active Learning LoopsMLIPActiveLearningAgentAutomates database expansion focusing labeling budgets on high-uncertainty regions.

⚙️ How to setup & use skill agents

Customizations are automatically discovered and loaded by agentic platforms (like Google Gemini and Anthropic Claude systems supporting custom workspace contexts) from standard workspace or global roots.

1. Installation

To install the skills in your active workspace, copy or create the skills directory in the workspace root:

# Workspace level installation
mkdir -p .agents/skills/
cp -r path/to/skills/* .agents/skills/

Alternatively, for global installation across all projects, copy the skills into the global config folder:

# Global configuration level
mkdir -p ~/.gemini/config/skills/
cp -r path/to/skills/*~/.gemini/config/skills/

2. How it works

Every skill folder contains a SKILL.md manifest with frontmatter (e.g. name and description triggers). When you prompt Claude or Gemini in the IDE with a related task (e.g. "Run a Langevin dynamics simulation on this structure"), the agent:

  1. Triggers matching rules based on your query description.
  2. Automatically loads the instructions inside SKILL.md.
  3. Discovers the target helper script and executes it or guides you in running it.

3. Manual command execution

You can also run any of the helper scripts directly from your terminal using the commands listed in the registry table above. Ensure dependencies (torch, ase, rdkit, numpy) are installed in your active Python environment:

pip install torch ase numpy rdkit

👨‍💻 Author

Rangsiman Ketkaew
ML PostDoc Researcher, ETH Zurich, Switzerland

About

Information of foundation ML for chemistry and drug discovery - Let's develop, train, optimize, and deploy models at scale

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Foundation Machine Learning for Chemistry and Drug Discovery at Scale

Repository for MLOps pipeline for training, deploying, and monitoring MLFFs for chemistry and drug discovery.

The terms Machine Learning Force Field (MLFF) and Machine Learning Interatomic Potential (MLIP) are used interchangeably.

MLFF for (Quantum) Chemistry and Drug Discovery

Foundation models such as UMA (Universal Models for Atoms) and MACE (Message Passing Atomic Cluster Expansion) use massive pre-training datasets to capture complex, multi-body interactions and physical symmetries of molecules. In drug discovery, these pre-trained potentials allow for rapid, high-fidelity geometry optimizations, conformer searches, and molecular dynamics simulations of drug-target complexes without requiring system-specific retraining.

🚀 MLOps Framework & Resources

Hands-on guide for training, deploying, and monitoring MLFF model that scales automatically.

The guide covers

  1. Lifecycles - Active learning loop and data verification.
  2. Scaling - Distributed training architectures for HPC (SLURM) and AWS Cloud (SageMaker, FSx for Lustre).
  3. Serving - High-throughput FastAPI and Triton Inference Server wrapping.
  4. Monitoring - Real-time out-of-distribution (OOD) geometry & bond-clash detection.

🛠️ MLOps Core Scripts

Our pipeline consists of the following components under the mlops/ folder

  • dataset_prep.py: Converts .xyz/.extxyz coordinates into PyTorch Geometric graph datasets based on distance cutoffs.
  • train_pipeline.py: Distributed DDP training script in PyTorch that computes energies and derives forces analytically using double autograd. Logs metrics to MLflow.
  • inference_service.py: FastAPI microservice exposing /predict (energies and forces) and /optimize (structure relaxation integrating an ASE LBFGS optimizer).
  • monitor_drift.py: Detects atomic bond clashes and checks geometric drift using pairwise distance distributions to alert on OOD structures.

🏢 Orchestration & Infrastructure Templates

  • submit_hpc.sh: A SLURM submit template for multi-node, multi-GPU training clusters via torchrun.
  • run_sagemaker.py: AWS SageMaker SDK launcher targeting large multi-GPU instances (e.g. ml.p4d.24xlarge) utilizing FSx for Lustre.

🤖 Agent skills

Specialized agent skills have been integrated under the .agents/skills/ directory to guide AI (like Claude and Gemini) through computational chemistry and ML interatomic potential development tasks.

📋 Skill Agents Registry

Skill / ComponentAgent NameAction / Purpose
Molecular Graph & Scaffold SplittingScaffoldSplitAgentPrevents chemical space data leakage between train/val/test splits.
Multi-Task Learning with ACSMultitaskACSAgentMitigates negative transfer by checkpointing task-specific states independently.
Differentiable Information ImbalanceDIIFeatureSelectorSelects relevant molecular feature subsets via gradient descent.
Deep Ensembles UQEnsembleUQAgentPartitions total predictive uncertainty into aleatoric and epistemic components.
Activity Cliff AwarenessActivityCliffAgentAdjusts representation coordinates around cliff compounds using TSM loss.
Delta-ML & Transfer LearningDeltaTransferMLAgentAchieves chemical accuracy with small high-fidelity data via pre-training/fine-tuning.
Conformation Generation & DFT InputConformationDFTAgentPrepares optimized conformer coordinates and inputs for DFT (ORCA/Gaussian) solvers.
MLIP ASE CalculatorsMLIPASECalculatorAgentBridges PyTorch ML models to the Atomic Simulation Environment interface.
Geometry Optimization & MDASEDynamicsAgentRelaxes configurations and evaluates thermodynamic trajectory snapshots.
MLIP Active Learning LoopsMLIPActiveLearningAgentAutomates database expansion focusing labeling budgets on high-uncertainty regions.

⚙️ How to setup & use skill agents

Customizations are automatically discovered and loaded by agentic platforms (like Google Gemini and Anthropic Claude systems supporting custom workspace contexts) from standard workspace or global roots.

1. Installation

To install the skills in your active workspace, copy or create the skills directory in the workspace root:

# Workspace level installation
mkdir -p .agents/skills/
cp -r path/to/skills/* .agents/skills/

Alternatively, for global installation across all projects, copy the skills into the global config folder:

# Global configuration level
mkdir -p ~/.gemini/config/skills/
cp -r path/to/skills/*~/.gemini/config/skills/

2. How it works

Every skill folder contains a SKILL.md manifest with frontmatter (e.g. name and description triggers). When you prompt Claude or Gemini in the IDE with a related task (e.g. "Run a Langevin dynamics simulation on this structure"), the agent:

  1. Triggers matching rules based on your query description.
  2. Automatically loads the instructions inside SKILL.md.
  3. Discovers the target helper script and executes it or guides you in running it.

3. Manual command execution

You can also run any of the helper scripts directly from your terminal using the commands listed in the registry table above. Ensure dependencies (torch, ase, rdkit, numpy) are installed in your active Python environment:

pip install torch ase numpy rdkit

👨‍💻 Author

Rangsiman Ketkaew
ML PostDoc Researcher, ETH Zurich, Switzerland

About

Information of foundation ML for chemistry and drug discovery - Let's develop, train, optimize, and deploy models at scale

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Foundation Machine Learning for Chemistry and Drug Discovery at Scale

Repository for MLOps pipeline for training, deploying, and monitoring MLFFs for chemistry and drug discovery.

The terms Machine Learning Force Field (MLFF) and Machine Learning Interatomic Potential (MLIP) are used interchangeably.

MLFF for (Quantum) Chemistry and Drug Discovery

Foundation models such as UMA (Universal Models for Atoms) and MACE (Message Passing Atomic Cluster Expansion) use massive pre-training datasets to capture complex, multi-body interactions and physical symmetries of molecules. In drug discovery, these pre-trained potentials allow for rapid, high-fidelity geometry optimizations, conformer searches, and molecular dynamics simulations of drug-target complexes without requiring system-specific retraining.

🚀 MLOps Framework & Resources

Hands-on guide for training, deploying, and monitoring MLFF model that scales automatically.

The guide covers

  1. Lifecycles - Active learning loop and data verification.
  2. Scaling - Distributed training architectures for HPC (SLURM) and AWS Cloud (SageMaker, FSx for Lustre).
  3. Serving - High-throughput FastAPI and Triton Inference Server wrapping.
  4. Monitoring - Real-time out-of-distribution (OOD) geometry & bond-clash detection.

🛠️ MLOps Core Scripts

Our pipeline consists of the following components under the mlops/ folder

  • dataset_prep.py: Converts .xyz/.extxyz coordinates into PyTorch Geometric graph datasets based on distance cutoffs.
  • train_pipeline.py: Distributed DDP training script in PyTorch that computes energies and derives forces analytically using double autograd. Logs metrics to MLflow.
  • inference_service.py: FastAPI microservice exposing /predict (energies and forces) and /optimize (structure relaxation integrating an ASE LBFGS optimizer).
  • monitor_drift.py: Detects atomic bond clashes and checks geometric drift using pairwise distance distributions to alert on OOD structures.

🏢 Orchestration & Infrastructure Templates

  • submit_hpc.sh: A SLURM submit template for multi-node, multi-GPU training clusters via torchrun.
  • run_sagemaker.py: AWS SageMaker SDK launcher targeting large multi-GPU instances (e.g. ml.p4d.24xlarge) utilizing FSx for Lustre.

🤖 Agent skills

Specialized agent skills have been integrated under the .agents/skills/ directory to guide AI (like Claude and Gemini) through computational chemistry and ML interatomic potential development tasks.

📋 Skill Agents Registry

Skill / ComponentAgent NameAction / Purpose
Molecular Graph & Scaffold SplittingScaffoldSplitAgentPrevents chemical space data leakage between train/val/test splits.
Multi-Task Learning with ACSMultitaskACSAgentMitigates negative transfer by checkpointing task-specific states independently.
Differentiable Information ImbalanceDIIFeatureSelectorSelects relevant molecular feature subsets via gradient descent.
Deep Ensembles UQEnsembleUQAgentPartitions total predictive uncertainty into aleatoric and epistemic components.
Activity Cliff AwarenessActivityCliffAgentAdjusts representation coordinates around cliff compounds using TSM loss.
Delta-ML & Transfer LearningDeltaTransferMLAgentAchieves chemical accuracy with small high-fidelity data via pre-training/fine-tuning.
Conformation Generation & DFT InputConformationDFTAgentPrepares optimized conformer coordinates and inputs for DFT (ORCA/Gaussian) solvers.
MLIP ASE CalculatorsMLIPASECalculatorAgentBridges PyTorch ML models to the Atomic Simulation Environment interface.
Geometry Optimization & MDASEDynamicsAgentRelaxes configurations and evaluates thermodynamic trajectory snapshots.
MLIP Active Learning LoopsMLIPActiveLearningAgentAutomates database expansion focusing labeling budgets on high-uncertainty regions.

⚙️ How to setup & use skill agents

Customizations are automatically discovered and loaded by agentic platforms (like Google Gemini and Anthropic Claude systems supporting custom workspace contexts) from standard workspace or global roots.

1. Installation

To install the skills in your active workspace, copy or create the skills directory in the workspace root:

# Workspace level installation
mkdir -p .agents/skills/
cp -r path/to/skills/* .agents/skills/

Alternatively, for global installation across all projects, copy the skills into the global config folder:

# Global configuration level
mkdir -p ~/.gemini/config/skills/
cp -r path/to/skills/*~/.gemini/config/skills/

2. How it works

Every skill folder contains a SKILL.md manifest with frontmatter (e.g. name and description triggers). When you prompt Claude or Gemini in the IDE with a related task (e.g. "Run a Langevin dynamics simulation on this structure"), the agent:

  1. Triggers matching rules based on your query description.
  2. Automatically loads the instructions inside SKILL.md.
  3. Discovers the target helper script and executes it or guides you in running it.

3. Manual command execution

You can also run any of the helper scripts directly from your terminal using the commands listed in the registry table above. Ensure dependencies (torch, ase, rdkit, numpy) are installed in your active Python environment:

pip install torch ase numpy rdkit

👨‍💻 Author

Rangsiman Ketkaew
ML PostDoc Researcher, ETH Zurich, Switzerland

About

Information of foundation ML for chemistry and drug discovery - Let's develop, train, optimize, and deploy models at scale

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Contributors

Languages