genmol-nim

Par nvidia · skills

Générez de nouvelles molécules drug-like à l'aide du microservice NIM GenMol. À utiliser pour la génération de novo, la décoration de scaffold, l'extension de motif, l'optimisation de lead, la notation SAFE, le classement QED ou LogP, les appels API hébergés par NVIDIA, ou le déploiement local via Docker. GenMol accepte la notation SAFE dans le champ smiles, et non des SMILES ordinaires.

npx skills add https://github.com/nvidia/skills --skill genmol-nim

GenMol NIM

Générez des molécules de type médicament avec GenMol. Utilisez ce guide pour une première utilisation en mode hébergé ou local ; chargez les fichiers supplémentaires uniquement si nécessaire :

  • references/api.md : endpoints, schéma, flags Docker, champs de réponse.
  • references/science.md : cas d'usage, forces, limites et transitions.
  • references/parameters.md : motifs SAFE et effets de réglage.
  • references/validation.md : vérifications chimiques et d'artefacts.
  • references/examples.md : motifs de requête compacts.

Choisir le mode

Posez la question uniquement si le contexte est flou :

API NVIDIA hébergée ou NIM Docker local ?

  • Hébergé : https://health.api.nvidia.com/v1/biology/nvidia/genmol/generate
  • Local : http://localhost:8000/generate

Les requêtes hébergées utilisent Authorization: Bearer $NGC_API_KEY. Le démarrage Docker local pris en charge utilise NGC_API_KEY (ou NVIDIA_API_KEY via le préflight) pour la connexion au registre, les vérifications d'entitlement et les téléchargements de modèles à la première exécution ; passez-le au conteneur avec -e NGC_API_KEY. Les requêtes d'inférence locales n'utilisent aucun header d'authentification après readiness. Le démarrage sans clé avec cache chaud varie selon l'image/version et ne doit pas être supposé.

Docker local

Utilisez d'abord l'env shell ; sourcez le .env à la racine du repo uniquement s'il existe. N'imprimez pas les clés. Pour les réponses de configuration locale, incluez cette séquence : préflight env, docker login, docker run, boucle readiness, puis une requête localhost sans authentification. N'inventez pas de cache par défaut et ne supprimez pas le fallback NVIDIA_API_KEY.

Pour le préflight de démarrage exact (sourçage de .env, fallback NVIDIA_API_KEY, --shm-size=2G, les deux flags --ulimit, docker login et le docker run pour nvcr.io/nim/nvidia/genmol:1.0.1), copiez le bloc de commande dans references/api.md sous Docker run reference verbatim.

GenMol est mono-GPU ; NIM_TEST_GPU a pour défaut 0. Attendez la readiness :

until curl -sf http://localhost:8000/v1/health/ready; do sleep 5; done

Entrée SAFE

Le champ API s'appelle smiles, mais GenMol s'attend à la notation SAFE. Les positions masquées utilisent [*{min-max}].

  • De novo : safe_input = "[*{20-30}]"
  • Décoration d'échafaudage : safe_input = scaffold_to_safe("C1CC(=O)NC1", 10, 15)
  • Extension de motif : safe_input = f"[*{{5-10}}].{motif_safe}.[*{{5-10}}]"
  • Optimisation de lead : encodez le hit, puis remplacez un fragment par .[*{5-12}]

Utilisez safe-mol pour la génération conditionnée. Les échafaudages en anneau simples peuvent lever SAFEFragmentationError ; repliez-vous sur le SMILES original plus un masque SAFE.

Voir l'helper scaffold_to_safe dans references/examples.md sous Scaffold Decoration.

Les masques plus larges augmentent la diversité ; les masques serrés maintiennent la taille des analogues plus prévisible.

Motif de requête

import os
import requests

HOSTED = True
url = (
    "https://health.api.nvidia.com/v1/biology/nvidia/genmol/generate"
    if HOSTED else "http://localhost:8000/generate"
)
headers = {"Content-Type": "application/json"}
if HOSTED:
    headers["Authorization"] = f"Bearer {os.getenv('NGC_API_KEY')}"

payload = {
    "smiles": "[*{20-30}]",  # notation SAFE
    "num_molecules": 30,
    "temperature": "1.0",    # chaîne, pas float
    "noise": "1.0",          # chaîne, pas float
    "step_size": 1,
    "scoring": "QED",        # ou "LogP"
    "unique": False,
}

response = requests.post(url, headers=headers, json=payload, timeout=180)
response.raise_for_status()
result = response.json()

Pièges :

  • temperature et noise sont des chaînes.
  • num_molecules est 1-1000 ; les molécules invalides/dupliquées peuvent être filtrées, donc demandez plus quand l'utilisateur a besoin d'un nombre minimum.
  • scoring est "QED" pour la ressemblance aux médicaments ou "LogP" pour la lipophilie.
  • Définissez unique=True pour les listes d'analogues dédupliquées.

Enregistrer et reporter la sortie

Triez les molécules par score, imprimez les meilleures rangs et écrivez un fichier .smi comme montré dans references/examples.md sous Save Ranked Results. Pour la validité chimique, l'unicité, les alertes PAINS et la visualisation avec RDKit, lisez references/validation.md.

Limites et dépannage

  • Moins de molécules que demandé est attendu après filtrage.
  • Les chaînes SAFE invalides causent status: "failed" ou des erreurs de validation.
  • Installez safe-mol uniquement pour les workflows d'échafaudage, motif ou optimisation de lead ; les masques de novo fonctionnent sans conversion.
  • Le démarrage local télécharge environ 20 GB dans LOCAL_NIM_CACHE.
  • Problèmes de conteneur : confirmez nvidia-smi, NVIDIA Container Toolkit et --runtime=nvidia ; utilisez NIM_TEST_GPU pour choisir le seul GPU visible.

Skills similaires