89 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# LNP API 与 GPU 显存测试
这里有两套测试:
- `run_lnp_batch_stress.sh`:专门复现 LNP 批量调用的显存问题。
- `run_cases.sh`:检查健康状态、器官列表、单条预测、批量预测、异常输入和小规模配方优化。
## 1. 复现 LNP 批量显存场景
推荐先运行与问题最接近的场景:
```bash
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
bash server_test_cases/run_lnp_batch_stress.sh ladder
```
完整测试(关闭 LLM 对照 + 阶梯 + 500 条持续压力):
```bash
bash server_test_cases/run_lnp_batch_stress.sh full
```
每个场景都会打印并写入 CSV:运行前显存、采样峰值、显存增量、耗时、HTTP 状态。结果文件名形如 `vram-results-20260922-160000.csv`。
可以设置显存上限,让超过阈值时测试直接失败。例如期望不超过 20GB:
```bash
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% 的组分比例。也可以自行生成:
```bash
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
bash server_test_cases/run_cases.sh
```
如果 API 端口或 GPU 编号不同:
```bash
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 进程的变化为准。