2.8 KiB
Raw Blame History

LNP API 与 GPU 显存测试

这里有两套测试:

  • run_lnp_batch_stress.sh:专门复现 LNP 批量调用的显存问题。
  • run_cases.sh:检查健康状态、器官列表、单条预测、批量预测、异常输入和小规模配方优化。

1. 复现 LNP 批量显存场景

推荐先运行与问题最接近的场景:

bash server_test_cases/run_lnp_batch_stress.sh repro

repro 会依次提交:

  1. 32 条不同 LNP 配方,use_llm=true、外层 batch_size=32。这是原先最容易从约 10GB 涨到 63GB 的场景。
  2. 500 条不同 LNP 配方,仍使用外层 batch_size=32,检查多轮处理后是否持续涨显存。

逐级观察批量大小与显存的关系:

bash server_test_cases/run_lnp_batch_stress.sh ladder

完整测试(关闭 LLM 对照 + 阶梯 + 500 条持续压力):

bash server_test_cases/run_lnp_batch_stress.sh full

每个场景都会打印并写入 CSV:运行前显存、采样峰值、显存增量、耗时、HTTP 状态。结果文件名形如 vram-results-20260922-160000.csv。

可以设置显存上限,让超过阈值时测试直接失败。例如期望不超过 20GB:

MAX_GPU_MIB=20480 bash server_test_cases/run_lnp_batch_stress.sh repro

这里采样的是整张卡的显存;测试时请尽量不要让其他任务共用该卡。

2. Mock 数据

已附带三组可直接提交的数据:

  • mock_batch_32_llm.json:核心显存回归场景。
  • mock_batch_500_llm.json:最大请求量与持续处理场景。
  • mock_batch_128_no_llm.json:关闭 LLM 的对照组。

这些数据从项目 data/interim/internal.csv 抽取不同 SMILES,再随机生成满足总和 100% 的组分比例。也可以自行生成:

python3 server_test_cases/generate_mock_batch.py \
  --count 200 \
  --batch-size 32 \
  --use-llm \
  --source-csv data/interim/internal.csv \
  --output /tmp/lnp-batch-200.json

生成过程使用固定随机种子,便于前后版本用完全相同的数据对比。

3. 其他功能测试

服务启动后执行:

bash server_test_cases/run_cases.sh

如果 API 端口或 GPU 编号不同:

API_PORT=18000 GPU_INDEX=0 bash server_test_cases/run_cases.sh

用例包含:

  1. 健康检查与模型状态。
  2. 可用器官列表。
  3. 启用 LLM 的单条预测,检查输出完整性、有限数和 biodistribution 归一化。
  4. 64 条关闭 LLM 的吞吐对照。
  5. 32 条启用 LLM 的显存回归测试。
  6. 2 条合法 + 3 条非法输入,检查批量接口的局部容错。
  7. 小范围 /optimize 配方搜索,检查优化功能和返回结果。

GPU 显存采样来自整张卡;如果还有其他进程使用同一张卡,请以 nvidia-smi 中 API 进程的变化为准。