高级用法#
本页介绍 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
,则可能会生成非常大的日志,这些日志可能难以管理。但是,如果将日志级别设置为更高级别(例如 INFO
或 WARNING
),则可能会错过重要的调试信息。
通常建议将日志级别设置为 INFO
或 WARNING
,除非您有更详细日志记录的特定需求。