用EvalScope在4090上跑DeepSeek性能测试:从config.toml到结果验证的完整配置
1. 单卡 4090 跑 DeepSeek为什么一定要先做性能压测如果你刚在 4090 上把 DeepSeek 跑起来能对话、能出结果那只是“跑通”离“跑得稳”还差一步。4090 只有 24GB 显存DeepSeek 这类模型在量化后虽然能塞进去但并发一上来显存、KV Cache、请求排队会立刻暴露瓶颈。我见过太多人本地部署完直接上业务结果两个人同时提问就开始转圈最后只能回退到单用户。EvalScope 就是解决这个问题的工具。它是魔搭社区推出的模型评测与性能基准测试框架内置 MMLU、CMMLU、C-Eval、GSM8K、HumanEval 等常用基准同时支持 LLM、多模态、embedding、reranker 的评测。对我们这次场景来说最关键的是它的 Performance Evaluator 模块可以对一个已经跑起来的推理服务发起压测统计吞吐、首 token 延迟、每 token 输出时间、QPS 等指标并生成可视化报告。这篇文章聚焦一件事在单卡 4090 本地部署 DeepSeek 之后怎么用 EvalScope 做推理性能压测。我会给出 config.toml 骨架、模型服务地址与并发参数配置、可复制的启动命令以及吞吐和延迟的验证动作。适合已经能跑通 DeepSeek 服务、想搞清楚“这张卡到底能扛多少并发”的读者。整个流程可以独立复现不需要额外硬件。2. 前置准备EvalScope 安装与 DeepSeek 服务确认2.1 创建环境并安装 EvalScope建议用 Python 3.10避免依赖冲突。conda 环境是可选的但强烈建议隔离。conda create -n evalscope python3.10 conda activate evalscope安装 EvalScope 本体和性能测试依赖。如果你只做 perf 压测装[perf]就够了想顺带跑基准评测装[all]。pip install evalscope pip install evalscope[perf]装完后可以用evalscope --help确认命令可用。如果提示找不到命令检查一下当前 conda 环境是否激活。2.2 确认 DeepSeek 服务已经以 OpenAI 兼容接口暴露EvalScope 的 perf 模式通过 HTTP 打请求所以你的 DeepSeek 服务必须暴露一个 OpenAI 兼容的/v1/chat/completions接口。常见做法是用 Ollama、vLLM 或 llama.cpp 起服务。以 Ollama 为例默认地址是http://127.0.0.1:11434/v1/chat/completions模型名类似deepseek-r1:32b。先用 curl 确认服务活着curl http://127.0.0.1:11434/v1/models能返回模型列表说明接口通了。如果这一步失败后面的压测没有意义先把服务调通。注意4090 上跑 32B 模型通常需要量化版本显存占用和量化方式会直接影响压测结果。压测前记录好你用的量化类型如 Q4_K_M否则数据没法横向对比。3. EvalScope 的 config.toml 骨架与并发参数配置EvalScope 的 perf 既支持命令行参数也支持配置文件。命令行适合快速试config.toml 适合把一套测试固化下来反复跑。下面是一个针对 4090 DeepSeek 的骨架。3.1 config.toml 骨架[perf] # 模型服务地址必须是 OpenAI 兼容接口 url http://127.0.0.1:11434/v1/chat/completions # 模型名称要和 /v1/models 返回的一致 model deepseek-r1:32b # 服务 API 类型OpenAI 兼容填 openai api openai # 并发与请求数量 parallel 5 # 并发数4090 建议从 1 开始逐步加 number 80 # 总请求数太小统计不稳建议 50 log_every_n_query 5 # 每 5 个请求打一次日志 # 超时设置本地大模型首 token 可能很慢给足时间 connect_timeout 6000 read_timeout 6000 # 输出 token 控制影响吞吐统计 max_tokens 2048 min_tokens 512 # 数据集openqa 是开放式问答适合压测 dataset openqa # 结果名称会作为 wandb 记录名和结果库名 name deepseek-r1-32b-4090-p5 # 调试模式能看到每个请求的细节 debug true几个参数需要重点解释。parallel是并发数4090 单卡建议从 1 开始依次试 1、5、10观察吞吐和延迟的拐点。number是总请求数80 是一个比较稳的起点太少会被冷启动和抖动干扰。max_tokens和min_tokens决定每次生成的长度长度越长吞吐统计越能反映真实负载。3.2 并发参数怎么选4090 的显存决定了并发上限。并发越高KV Cache 占用越大一旦超过显存服务会开始排队甚至 OOM。我的建议是做一个并发梯度1、5、10分别记录吞吐和平均延迟。如果 10 并发时延迟暴涨、吞吐反而下降说明已经过了最优并发点。参数含义4090 建议值parallel并发请求数1 / 5 / 10 梯度测试number总请求数80 起max_tokens单次最大输出2048min_tokens单次最小输出512connect_timeout连接超时6000read_timeout读取超时6000提示read_timeout一定要给大。本地 32B 模型首 token 可能要十几秒甚至更久超时设小了会大量失败数据不可用。4. 可复制的启动命令与压测执行4.1 用命令行直接发起压测如果你不想写配置文件直接用命令行也能跑。下面这条是 4090 单卡 5 并发的完整命令可以直接复制evalscope perf \ --parallel 5 \ --url http://127.0.0.1:11434/v1/chat/completions \ --model deepseek-r1:32b \ --log-every-n-query 5 \ --connect-timeout 6000 \ --read-timeout 6000 \ --max-tokens 2048 \ --min-tokens 512 \ --api openai \ --debug \ --number 80 \ --dataset openqa \ --name deepseek-r1-32b-4090-p5把--parallel改成 1 或 10就能得到不同并发下的结果。--name建议带上并发数方便后面区分结果库。4.2 用 config.toml 启动如果已经把配置写进 config.toml可以这样调用evalscope perf --config config.toml这种方式适合把测试固化比如每天跑一次回归或者对比不同量化版本。4.3 压测过程中的观察点命令跑起来后终端会按log_every_n_query的频率打印进度。重点看几个信号请求是否大量失败、首 token 时间是否稳定、有没有超时。如果失败率突然升高多半是并发超过了服务承载能力或者显存吃紧。5. 结果验证吞吐、延迟与指标解读压测结束后EvalScope 会输出一张统计表。下面是我在 4090 上跑 DeepSeek 32B 量化版的一组参考结果并发分别为 1、5、10指标1 并发5 并发10 并发测试耗时 (s)1921.774578.334612.153成功请求808080失败请求000吞吐 (tokens/s)30.47995.0293.049平均 QPS0.0420.1380.131平均延迟 (s)24.01934.70771.745首 token 时间 (s)24.01934.70771.745每输出 token 时间 (s)0.0330.0660.201平均输出 token 数732.163686.913712.0从这组数据能看出几个关键结论。第一并发从 1 提到 5吞吐从 30 涨到 95提升接近 3 倍说明单并发时 GPU 利用率不足。第二并发从 5 提到 10吞吐几乎没变95 到 93但平均延迟从 34.7 秒涨到 71.7 秒翻了一倍多。这说明 4090 在这套配置下的最优并发大约在 5 附近再往上加只会让用户等更久不会提升总吞吐。5.1 核心指标含义Throughput(average tokens/s)是平均每秒处理的 token 数衡量整体产能。Average time to first token是首 token 延迟直接决定用户感知的“卡不卡”。Average time per output token是每个输出 token 的耗时反映解码速度。Average QPS是每秒完成的请求数适合和业务量对标。5.2 用可视化看趋势EvalScope 支持把结果推到 wandb 看板。先装 wandbpip install wandb本地启动 wandb 服务wandb server start -e HOSThttp://127.0.0.1:8080 --wandb-api-key your_api_key --name deepseek-4090-perf然后在压测命令里带上--name结果会自动记录。看板上可以直观看到吞吐随并发变化的曲线比看表格更容易发现拐点。5.3 顺带跑一次基准评测性能之外如果你还想确认模型质量没被量化拖垮可以用 EvalScope 跑一个小规模基准evalscope eval \ --model deepseek-r1:32b \ --api-url http://127.0.0.1:11434/v1 \ --api-key EMPTY \ --eval-type service \ --datasets gsm8k \ --limit 10--limit 10表示只取 10 条样本快速验证链路。结果会给出准确率比如 0.9 表示 10 题对 9 题。这一步不是必须但能帮你确认服务返回的内容是正常的而不是压测时只测了个空壳。6. 本篇常见错排查6.1 连接超时或大量失败最常见的原因是read_timeout设太小。本地 32B 模型首 token 动辄十几秒默认 120 秒在某些长输出场景下也不够。把connect_timeout和read_timeout都设到 6000基本能覆盖。另一个原因是服务地址写错。确认--url指向的是/v1/chat/completions不是/v1/models也不是根路径。6.2 显存不足导致服务崩溃4090 只有 24GB并发一高KV Cache 会迅速吃满显存。如果压测中服务进程被杀先降低parallel再检查量化版本是否合适。Q4 量化通常比 Q8 更省显存但质量会有差异需要自己权衡。6.3 吞吐数据异常低如果吞吐只有个位数先确认模型是不是每次都在重新加载。有些服务在空闲后会卸载模型第一个请求触发加载导致首 token 极慢。压测前先手动发一个请求预热再开始正式测试。6.4 结果名称冲突--name重复时结果库可能被覆盖。建议在名称里带上并发数和时间戳比如deepseek-r1-32b-4090-p5-0712。6.5 模型名不匹配--model必须和/v1/models返回的名称完全一致大小写和冒号都不能错。不一致时服务会返回 404压测直接失败。如果你在接入自己的服务时遇到鉴权或地址问题可以到 TaoToken 的接入文档里对照 OpenAI 兼容接口的写法API Keys 在控制台生成模型对话入口可以用来快速验证服务是否正常返回。长期做编码和 Agent 场景的话Coding Plan 会更省心。7. 把压测变成习惯而不是一次性任务4090 上跑 DeepSeek性能不是固定值。换一个量化版本、改一次上下文长度、升级一次推理框架吞吐和延迟都会变。我试过同一张卡仅仅把量化从 Q8 换成 Q45 并发下的吞吐就从 70 多涨到 95。所以压测不该只做一次而应该固化成脚本每次改动后跑一遍用数据说话。实操上你可以把 config.toml 和启动命令放进一个 shell 脚本配合--name带上版本号结果自动进 wandb。这样一段时间后你手里就有一条完整的性能曲线知道这张 4090 到底在什么配置下最划算。压测的终点不是那张统计表而是你对自己这套部署的边界心里有数。

相关新闻

深入 bb Provider Bridge 协议:thread/delta 语义语法与 Delta Assembler 的设计思想

深入 bb Provider Bridge 协议:thread/delta 语义语法与 Delta Assembler 的设计思想

深入 bb Provider Bridge 协议:thread/delta 语义语法与 Delta Assembler 的设计思想 【免费下载链接】bb The agent IDE that builds itself 项目地址: https://gitcode.com/gh_mirrors/bb14/bb bb 是"自我构建"的智能体 IDE,而它的多 AI 提供商接入能力,核心…

2026/9/26 14:59:59 阅读更多 →
多Agent系统失控与治理:FCoP协议与调用链追踪实战

多Agent系统失控与治理:FCoP协议与调用链追踪实战

1. 多 Agent 系统为什么会走向失控1.1 从单体 Agent 到多 Agent 协作的演进逻辑2024 年之前,大多数团队对 Agent 的理解还停留在“一个模型加几个工具函数”的阶段。一个 Agent 负责理解用户意图、调用 API、返回结果,链路短、状态少、出问题也好排查。但…

2026/9/26 14:59:59 阅读更多 →
中通顶象验证码逆向全解析:从抓包到风控加固

中通顶象验证码逆向全解析:从抓包到风控加固

这两年做Web安全与反爬对抗,我绕不开一个东西——验证码。尤其是中通快递这类体量巨大的业务系统,页面上的顶象验证码几乎成了所有自动化脚本的第一道拦路虎。很多朋友在群里问“中通顶象验证码逆向怎么搞”,我今天不打算给一个所谓的“秒过方…

2026/9/26 14:58:59 阅读更多 →

最新新闻

群晖硬盘不兼容怎么办?用 Synology_HDD_db 脚本快速解锁硬盘兼容性的完整指南

群晖硬盘不兼容怎么办?用 Synology_HDD_db 脚本快速解锁硬盘兼容性的完整指南

群晖硬盘不兼容怎么办?用 Synology_HDD_db 脚本快速解锁硬盘兼容性的完整指南 【免费下载链接】Synology_HDD_db Add your HDD, SSD and NVMe drives to your Synologys compatible drive database and a lot more 项目地址: https://gitcode.com/GitHub_Trending…

2026/9/26 15:49:21 阅读更多 →
ESP8266 驱动双 I2C 接口 OLED 屏幕:Arduino 示例程序与 TaoToken 配置骨架

ESP8266 驱动双 I2C 接口 OLED 屏幕:Arduino 示例程序与 TaoToken 配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/26 15:49:21 阅读更多 →
Moto 中的 AWS SSO Admin(sso-admin)服务模拟:Permission Set 与账户分配全解析

Moto 中的 AWS SSO Admin(sso-admin)服务模拟:Permission Set 与账户分配全解析

Mock测试 【免费下载链接】moto A library that allows you to easily mock out tests based on AWS infrastructure. 项目地址: https://gitcode.com/gh_mirrors/mo/moto 点击查看 免费下载 本篇指南聚焦 moto 开源项目对 AWS IAM Identity Center(原 …

2026/9/26 15:49:21 阅读更多 →
2026 大模型 API 选型:TaoToken 统一 Key 下的价格、性能与性价比全面对比

2026 大模型 API 选型:TaoToken 统一 Key 下的价格、性能与性价比全面对比

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/26 15:49:21 阅读更多 →
Unreal Engine 5 GAS GameplayAbilitySystem 完整指南:打开 GASDocumentation 示例项目做出第一个技能

Unreal Engine 5 GAS GameplayAbilitySystem 完整指南:打开 GASDocumentation 示例项目做出第一个技能

Unreal Engine 5 GAS GameplayAbilitySystem 完整指南:打开 GASDocumentation 示例项目做出第一个技能 【免费下载链接】GASDocumentation My understanding of Unreal Engine 5s GameplayAbilitySystem plugin with a simple multiplayer sample project. 项目地…

2026/9/26 15:49:21 阅读更多 →
DeepSearcher 接入 Docling:本地文件加载与 Web 爬取一体化实战指南

DeepSearcher 接入 Docling:本地文件加载与 Web 爬取一体化实战指南

人工智能大模型RAGAI Agent深度研究知识库 【免费下载链接】deep-searcher Open Source Deep Research Alternative to Reason and Search on Private Data. Written in Python. 项目地址: https://gitcode.com/gh_mirrors/de/deep-searcher 点击查看 免费下载 本指…

2026/9/26 15:48:21 阅读更多 →

日新闻

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、…

2026/9/26 0:00:25 阅读更多 →
学校官网模拟全流程实践:从页面布局到后端接口与部署

学校官网模拟全流程实践:从页面布局到后端接口与部署

如果你正在找一门 Web 大作业的题目,或者刚开始接触 Web 前端开发想做点能拿来展示的东西,“学校官网模拟”几乎是最稳的选择。题目看着简单,但要把导航、新闻列表、轮播 Banner、二级页面、后台数据都串起来,其实已经把前端布局、…

2026/9/26 0:00:25 阅读更多 →
超级玛丽游戏源码C++:从零搭建横版跳跃游戏工程

超级玛丽游戏源码C++:从零搭建横版跳跃游戏工程

简介:这是一份面向游戏开发初学者与C进阶学习者的超级玛丽(超级马里奥)游戏源码,基于C面向对象编程实现,适合想通过经典项目理解游戏主循环、角色类设计、地图关卡加载与物理碰撞检测的读者参考。压缩包共49个文件&…

2026/9/26 0:00:25 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/25 19:27:14 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/25 20:29:09 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/25 20:29:43 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/25 20:29:31 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/25 19:27:26 阅读更多 →