高级用法#

本页介绍 MolMIM NIM 的高级和非标准用法,包括在本地基准测试 NIM 的性能以及控制 NIM 的日志级别以进行监控和调试。

基准测试#

对诸如 MolMIM 等自编码器风格模型的准确性和性能进行基准测试,对于评估其有效性至关重要。准确性可以通过评估重建准确率来衡量,即模型从其编码表示中准确生成原始输入 SMILES 字符串的能力。性能可以通过模型从输入开始生成输出所需的时间来衡量,这被称为解码时间。下面提供的脚本演示了如何针对单个 SMILES 字符串示例,对这种模型的准确性和性能进行基准测试。它向模型的 /hidden 端点发送 POST 请求以编码输入 SMILES 字符串,然后向 /decode 端点发送另一个 POST 请求,以将编码表示解码回 SMILES 字符串。该脚本测量每个步骤所花费的时间,并检查生成的 SMILES 字符串是否与原始输入匹配。通过修改 smiles 变量并向模型的端点发送多个请求,可以轻松扩展此脚本以覆盖多个 SMILES 字符串。

import requests
import time

# You can change this line to match the URL and/or port of the MolMIM NIM
url = "http://127.0.0.1:8000"

# Input SMILES
smiles = "CC[C@@H](OC)[C@H](Cl)C(=O)N1CCCCC1"

# Send POST request to /hidden endpoint
data = {"sequences": [smiles]}
start_time = time.time()
response = requests.post(f"{url}/hidden", json=data)
hidden_time = time.time() - start_time
hidden_output = response.json()


# Send POST request to /decode endpoint
response = requests.post(f"{url}/decode", json=hidden_output)
decode_time = time.time() - (start_time + hidden_time)
output = response.json()["generated"][0]

if output == smiles:
    matches = True
else:
    matches = False

print(f"Matches: {matches}")
print(f"Hidden time: {hidden_time:.03f}")
print(f"Decode time: {decode_time:.03f}")

该脚本应生成类似于以下内容的输出

Matches: True
Hidden time: 0.029
Decode time: 1.660

日志记录#

控制日志级别#

可以使用环境变量 NIM_LOG_LEVEL 控制 NIM 的日志级别。此变量允许您指定要在容器日志中看到的日志记录详细程度。

可用的日志级别#

以下是可用的日志级别

  • DEBUG:此级别记录服务器每个端点的所有输入和输出。这对于调试目的可能很有用,但它也可能产生非常大的日志,应仅在必要时使用。

  • INFO:此级别记录有关服务器运行的重要事件和信息。

  • WARNING:此级别记录有关潜在问题或错误的警告。

  • ERROR:此级别记录服务器运行期间发生的错误。

  • CRITICAL:此级别记录阻止服务器正常运行的严重错误。

默认日志级别#

如果未为 NIM_LOG_LEVEL 提供值,则默认日志级别将为 CRITICAL。这意味着仅记录严重错误,并抑制其他级别的日志记录。

设置日志级别#

要设置日志级别,您可以在启动 NIM 时传递 NIM_LOG_LEVEL 环境变量。例如

docker run -e NIM_LOG_LEVEL=DEBUG 

这将日志级别设置为 DEBUG,它记录服务器每个端点的所有输入和输出。

最佳实践#

在设置日志级别时,您应考虑日志记录详细程度和日志大小之间的权衡。如果将日志级别设置为 DEBUG,则可能会生成非常大的日志,这些日志可能难以管理。但是,如果将日志级别设置为更高级别(例如 INFOWARNING),则可能会错过重要的调试信息。

通常建议将日志级别设置为 INFOWARNING,除非您有更详细日志记录的特定需求。