Skip to navigation

Quickstart Guide

View as Markdown

This page assumes you have completed the Prerequisites (NGC account, API key, NGC registry login, and client software) and installed the software listed in the Support Matrix (Docker, NVIDIA Drivers, and the NVIDIA Container Toolkit).

Start NIM

  1. Export NGC_API_KEY variable.
export NGC_API_KEY=<your personal NGC key>
  1. NIM container automatically downloads models. To save time and bandwidth it is recommended to provide a local cache directory. This way NIM will be able to reuse already downloaded models. Execute the following command to set up the cache directory.
export LOCAL_NIM_CACHE=~/.cache/nim
mkdir -p "$LOCAL_NIM_CACHE"
sudo chmod 0777 -R "$LOCAL_NIM_CACHE"
  1. Run the NIM container with the following commands.
docker run -it \
--runtime=nvidia \
--gpus='"device=0"' \
-p 8000:8000 \
-e NGC_API_KEY \
-v "$LOCAL_NIM_CACHE":/opt/nim/.cache \
nvcr.io/nim/ipd/rfdiffusion:2

This command will start the NIM container and expose port 8000 for the user to interact with the NIM.

  1. Open a new terminal, leaving the terminal open with the just launched service. In the new terminal, wait until the health check endpoint returns {"status":"ready"} before proceeding. This can take a couple of minutes. You can use the following command to query the health check.
curl http://localhost:8000/v1/health/ready

Python Client Example

  1. Save the following Python example to a file named nim_client.py.
#!/usr/bin/env python3
import requests
import os
import json
from pathlib import Path
def get_reduced_pdb():
pdb = Path("1R42.pdb")
if not pdb.exists():
pdb.write_text(requests.get(f"https://files.rcsb.org/download/{pdb}").text)
lines = filter(lambda line: line.startswith("ATOM"), pdb.read_text().split("\n"))
return "\n".join(list(lines)[:400])
r = requests.post(
url="http://localhost:8000/biology/ipd/rfdiffusion/generate",
json={
"input_pdb": get_reduced_pdb(),
"contigs": "A20-60/0 50-100",
"hotspot_res": ["A50","A51","A52","A53","A54"],
"diffusion_steps": 15,
},
)
print(r, "Saving to output.pdb:\n", r.text[:200], "...")
Path("output.pdb").write_text(json.loads(r.text)["output_pdb"])
  1. Execute the example.
chmod +x nim_client.py
./nim_client.py
  1. The example saves results to the output.pdb file in PDB format. You can view the file using the following command.
less output.pdb

Shell Client Example

  1. Save the following Shell example to a file named nim_client.sh.
#!/usr/bin/env bash
set -e
URL=http://localhost:8000/biology/ipd/rfdiffusion/generate
if [ ! -e 1R42.pdb ]; then curl -O https://files.rcsb.org/download/1R42.pdb; fi
pdb=$(cat 1R42.pdb | grep ^ATOM | head -n 400 | awk '{printf "%s\\n", $0}')
request='{
"input_pdb": "'"$pdb"'",
"contigs": "A20-60/0 50-100",
"hotspot_res": ["A50","A51","A52","A53","A54"],
"diffusion_steps": 15
}'
curl -H 'Content-Type: application/json' \
-d "$request" "$URL"
  1. Execute the example. The example displays the results to the terminal in JSON format.
chmod +x nim_client.sh
./nim_client.sh

Stop the Container

When you are done, press Ctrl+C in the terminal running the container, or run docker stop with the container ID shown by docker ps. Because the command does not use --rm, the stopped container remains; remove it with docker rm and the container ID shown by docker ps -a.