评估MCP服务器中可扩展LLM推理的容器化开销:一项比较基准研究
摘要
近年来,通过面向服务的架构部署大型语言模型(LLM)在研究和生产环境中都得到了广泛的应用。然而,很少有研究系统地评估现实世界场景中模型主机的容器化和裸机部署之间的权衡,特别是对于涉及LLM的延迟敏感应用程序。本文研究了将负责托管使用多个数据集评估的轻量级LLM的MCP(模型上下文协议)服务器容器化的性能影响。 _通过比较基于容器的部署和裸机部署_,我们分析了多个并发负载级别的关键性能指标。目标是确定容器化执行(通常因其可扩展性、可重复性和易于部署而得到推广)是否会引入可测量的开销或损害实时模型推理质量。通过严格的基准测试和扩展的资源监控,我们提供了经验证据,表明容器化MCP服务的LLM与裸机实现保持了相当的推理质量,在低到中等并发用户负载下,延迟权衡可以忽略不计。我们的研究结果加强了容器化在生产系统和DevOps管道中提供可扩展LLM服务的可行性,在这些系统中,可靠性、模块化和自动化至关重要。 该代码可在以下网址获得:https://github.com/ResponsibleAILab/mcp_server_benchmark.
容器化MCP服务器框架
下图说明了容器化MCP服务器框架的架构。
Containerized MCP Server Framework
主要绩效指标
| 度量 | 含义 |
|---|---|
| BLEU | 措施 n元语法重叠 在生成的输出和参考之间。更高=更准确。 |
| 胭脂 | 措施 召回-基于相似性(侧重于捕获了多少引用)。 |
| Pass@1 | 生成输出的示例分数 完全匹配 (经常用于编码任务,更严格)。 |
| 平均延迟 | 服务器响应每个提示所用的平均时间(以毫秒为单位)。更低=更快。 |
关键成果
精度(蓝色、红色-L,Pass@1):\ 在所有数据集中,容器化部署与裸机部署几乎持平,差异在一个标准偏差以内,95%的置信区间重叠。
延迟时间:\ 裸机运行速度一直较快,特别是在较长的产量上(如羊驼),但集装箱开销适中,仍在实际公差范围内。
总体发现:\ 容器化带来的精度损失可以忽略不计,同时提供了可移植性、可重复性和易于部署的优点,使其成为可扩展LLM推理的可行选择。
裸金属与容器的评估指标(平均值±标准差)
BLEU
| 数据集 | 裸金属 | 容器 |
|---|---|---|
| 羊驼 | 0.0653±0.0022 | 0.0630±0.0014 |
| 布尔Q值 | 0.1221±0.0012 | 0.1204±0.0010 |
| SQuADv2 | 0.1507±0.0036 | 0.1482±0.0025 |
胭脂-L
| 数据集 | 裸金属 | 容器 |
|---|---|---|
| 羊驼 | 0.2513±0.0024 | 0.2527±0.0014 |
| 布尔Q | 0.6865±0.0071 | 0.6772±0.0057 |
| SQuADv2 | 0.6794±0.0063 | 0.6853±0.0121 |
Pass@1
| 数据集 | 裸金属 | 容器 |
|---|---|---|
| 羊驼 | 0.0190±0.0021 | 0.0164±0.0017 |
| 布尔Q | 0.6865±0.0071 | 0.6772±0.0057 |
| SQuADv2 | 0.3846±0.0110 | 0.3802±0.0124 |
延迟 *(毫秒)*
| 数据集 | 裸金属 | 容器 |
|---|---|---|
| 羊驼 | 2112.2±18.4 | 2153.1±22.4 |
| 布尔Q值 | 46.7±3.1 | 47.4±2.5 |
| SQuADv2 | 171.8±8.0 | 186.0±8.2 |
*笔记:* 所有值均报告为 平均值±标准偏差.
安装
- 安装Python v3.10+
- 设置Python虚拟环境
在Windows上(PowerShell)
python3 -m venv benchmark_venv
.\benchmark_venv\Scripts\Activate
pip3 install -r requirements.txt
.\benchmark_venv\Scripts\Deactivate在Linux/macOS上
python3 -m venv benchmark_venv
source benchmark_venv/bin/activate
pip3 install -r requirements.txt
deactivate所有操作系统选项都需要Docker
- Windows使用Docker桌面
- Linux安装docker
运行
执行下面的bash脚本时,您不希望处于venv中。它将调用其他程序运行裸机和容器shell脚本。
./run_all.sh这将运行10次裸机和容器迭代,保存每次迭代的结果
比较结果
将results_bare\_\*和results_ctn\_\*替换为运行以下命令时生成的结果。
python3 compare_multi_run_suite.py \
--bare results_bare_20250720_101500 results_bare_20250720_111530 results_bare_20250720_121601 results_bare_20250720_131633 results_bare_20250720_141704 \
--ctn results_ctn_20250720_102040 results_ctn_20250720_112115 results_ctn_20250720_122146 results_ctn_20250720_132218 results_ctn_20250720_142249 \
--out multi_run_report这是一个比较并保存所有裸机和容器报告以评估结果的示例。
引用
如果你觉得这项工作有用,请按如下方式引用:
@inproceedings{SteeleFeng2025MCP,
author = {Michael Steele and Yunhe Feng},
title = {Evaluating Containerization Overhead in {MCP} Servers for Scalable {LLM} Inference: A Comparative Benchmark Study},
booktitle = {Proceedings of the Integrated Approaches to Testing Data-Centric {AI} Systems: Methods, Metrics, and Benchmarks Workshop at {IEEE} Artificial Intelligence x Software Engineering ({AIxSE})},
year = {2025},
publisher = {IEEE},
note = {Workshop paper}
}致谢
这项工作得到了美国国家科学基金会CCF-2447834的部分支持。
