本地部署大模型QPS推理测试

目录

  • 1、测试环境
    • 1.1、显卡
    • 1.2、模型
    • 1.3、部署环境
      • 1.3.1、docker
      • 1.3.2、执行命令
  • 2、测试问题
    • 2.1、20字左右问题
    • 2.2、50字左右问题
    • 2.3、100字左右问题
  • 3、测试代码
    • 3.1、通用测试代码
    • 3.2、通用测试代码(仅供参考)
  • 4、测试结果
    • 4.1、通用测试结果
    • 4.2、RAG测试结果

1、测试环境

1.1、显卡

在这里插入图片描述

1.2、模型

Qwen2.5-32B-Instruct

1.3、部署环境

xinference

1.3.1、docker

docker run  \
-v ~/.xinference:/root/.xinference \
-v ~/.cache/huggingface:/root/.cache/huggingface \
-v ~/.cache/modelscope:/root/.cache/modelscope \
-e XINFERENCE_MODEL_SRC=modelscope \
-p 9998:9997 \
--gpus all \
--shm-size 20g \
--name xinference \
registry.cn-hangzhou.aliyuncs.com/xprobe_xinference/xinference:latest \xinference-local \
-H 0.0.0.0 \
--log-level debug

1.3.2、执行命令

xinference launch --model_path ~/.cache/modelscope/hub/qwen/Qwen2___5-32B-Instruct --model-engine vLLM --model-name qwen2.5-instruct --size-in-billions 32 --model-format pytorch --quantization none --n-gpu 4  --gpu-idx 0,1,2,3

2、测试问题

以下是三个需要模型“深度思考”的问题(用ChatGTP得到):

2.1、20字左右问题

宇宙中是否存在多重宇宙,如果存在,它们之间如何相互影响?

2.2、50字左右问题

人工智能是否可能真正理解“情感”的含义?如果可以,情感的理解会如何影响人类与 AI 的关系?

2.3、100字左右问题

在人类社会的未来发展中,科技不断进步是否会导致人类完全依赖技术?如果技术突然崩溃,人类是否具备足够的韧性重新建立自给自足的社会?如何在高速发展的同时保留这种生存能力?

3、测试代码

3.1、通用测试代码

import requests
import time
from concurrent.futures import ThreadPoolExecutor
import uuid
from openai import OpenAIclient = OpenAI(base_url="http://127.0.0.1:9998/v1", api_key="not used actually")def openai_request():try:response = client.chat.completions.create(model="qwen2.5-instruct",messages=[{"role": "user", "content": "在人类社会的未来发展中,科技不断进步是否会导致人类完全依赖技术?如果技术突然崩溃,人类是否具备足够的韧性重新建立自给自足的社会?如何在高速发展的同时保留这种生存能力?"}],stream=True,)for chunk in response:content = chunk.choices[0].delta.contentif content:# print(content, end='', flush=True)passreturn Trueexcept requests.RequestException as e:print(f"请求失败: {e}")return False# 计算QPS
def calculate_qps(num_requests, num_threads):with ThreadPoolExecutor(max_workers=num_threads) as executor:start_time = time.time()futures = [executor.submit(openai_request) for _ in range(num_requests)]successful_requests = sum([future.result() for future in futures])end_time = time.time()duration = end_time - start_time  # 测试时长qps = successful_requests / duration  # 计算 QPSreturn qps, successful_requests, durationreq_test = [(10,10),(10,20),(10,50),(20,20),(20,50),(50,50),(50,100)]for num_threads,num_requests in req_test:qps, successful_requests, duration = calculate_qps(num_requests, num_threads)print(f"并发请求数: {num_threads}")print(f"请求个数: {num_requests}")print(f"总测试时长: {duration:.2f}秒")print(f"QPS: {qps:.2f} 请求/秒")print(f"成功请求数量: {successful_requests}")print("*"*33)

3.2、通用测试代码(仅供参考)

import requests
import time
from concurrent.futures import ThreadPoolExecutor
import uuid
from openai import OpenAI
# 测试的 URL 和 payload
url = "http://127.0.0.1:7860/v1/chat/completions"
payload = {"conversation_id": "0","messages": [{"role": "user","content": "空调系统由哪几个系统组成"  # 你可以根据需求更换成其他问题},],"stream": True,"temperature": 0
}# 单次请求函数
def send_request():try:payload["conversation_id"] = str(uuid.uuid4())response = requests.post(url, json=payload, stream=True)for chunk in response.iter_content(chunk_size=512):  # 分块接收响应if chunk:chunk = chunk.decode('utf-8', errors='ignore').strip()# 这里可以对流式响应进行处理# print(chunk)  # 可选,输出流式返回的每个部分return True  # 如果成功接收到响应,返回 Trueexcept requests.RequestException as e:print(f"请求失败: {e}")return False# 计算QPS
def calculate_qps(num_requests, num_threads):with ThreadPoolExecutor(max_workers=num_threads) as executor:start_time = time.time()futures = [executor.submit(send_request) for _ in range(num_requests)]successful_requests = sum([future.result() for future in futures])end_time = time.time()duration = end_time - start_time  # 测试时长qps = successful_requests / duration  # 计算 QPSreturn qps, successful_requests, durationreq_test = [(10,10),(10,20),(10,50),(20,20),(20,50),(50,50),(50,100)]for num_threads,num_requests in req_test:qps, successful_requests, duration = calculate_qps(num_requests, num_threads)print(f"并发请求数: {num_threads}")print(f"请求个数: {num_requests}")print(f"总测试时长: {duration:.2f}秒")print(f"QPS: {qps:.2f} 请求/秒")print(f"成功请求数量: {successful_requests}")print("*"*33)

4、测试结果

4.1、通用测试结果

并发请求数请求个数时间s-20QPS-20时间s-50QPS-50时间s-100QPS-100
101025.540.3928.950.3530.560.33
102047.850.4257.460.3564.240.31
1050122.270.41135.080.37151.010.33
202034.520.5835.910.5644.840.45
205083.040.693.560.53106.350.47
505049.911.0054.110.9266.720.75
50100101.470.99110.770.90123.490.81

4.2、RAG测试结果

并发请求数请求个数时间sQPS失败
1010002968.060.330
10100299.890.330
1050178.770.280
102061.240.330
101032.870.30
202054.890.360
2040108.230.361
2050136.970.352
5050120.850.1532
50100224.150.0882

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/491633.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

测试工程师八股文04|计算机网络 和 其他

一、计算机网络 1、http和https的区别 HTTP和HTTPS是用于在互联网上传输数据的协议。它们都是应用层协议,建立在TCP/IP协议栈之上,用于客户端(如浏览器)和服务器之间的通信。 ①http和https的主要区别在于安全性。http是一种明…

【Tomcat】第一站:理解tomcat与Socket

目录 1. Tomcat 1.1 Tomcat帮助启动http服务器。 1.2 tomcat理解: 2. 计算机网络最基本的流程 2.1 信息是怎么来的? 2.2 端口是干什么的? 3. 简单的Socket案例 服务端 客户端 启动: 3.2 在Tomcat发送信息,看…

抖音SEO短视频矩阵源码系统开发分享

在数字营销的前沿阵地,抖音短视频平台凭借其独特的魅力和庞大的用户基础,已成为社交媒体领域一股不可小觑的力量。随着平台影响力的持续扩大,如何有效提升视频内容的可见度与流量成为了内容创作者关注的焦点。在此背景下,一套专为…

使用 DeepSpeed 微调 OPT 基础语言模型

文章目录 OPT 基础语言模型Using OPT with DeepSpeedmain.py 解析1、导入库和模块2、解析命令行参数3、main 函数3.1 设备与分布式初始化3.2 模型与数据准备3.3 定义评估函数3.4 优化器与学习率调度器设置3.5 使用 deepspeed 进行模型等初始化3.6 训练循环3.7 模型保存 4、dsch…

window QT/C++ 与 lua交互(mingw + lua + LuaBridge + luasocket)

一、环境与准备工作 测试环境:win10 编译器:mingw QT版本:QT5.12.3 下载三种源码: LuaBridge源码:https://github.com/vinniefalco/LuaBridge LUA源码(本测试用的是5.3.5):https://www.lua.org/download.html luasocket源码:https://github.com/diegonehab/luasocket 目…

边缘智能创新应用大赛获奖作品系列三:边缘智能强力驱动,机器人天团花式整活赋能千行百业

边缘智能技术快速迭代,并与行业深度融合。它正重塑产业格局,催生新产品、新体验,带动终端需求增长。为促进边缘智能技术的进步与发展,拓展开发者的思路与能力,挖掘边缘智能应用的创新与潜能,高通技术公司联…

中后台管理信息系统:Axure12套高效原型设计框架模板全解析

中后台管理信息系统作为企业内部管理的核心支撑,其设计与实现对于提升企业的运营效率与决策能力具有至关重要的作用。为了满足多样化的中后台管理系统开发需求,一套全面、灵活的原型设计方案显得尤为重要。本文将深入探讨中后台管理信息系统通用原型方案…

云计算HCIP-OpenStack03

书接上回: 云计算HCIP-OpenStack02-CSDN博客 10.KeyStone keystone-Openstack,IAM服务(统一身份认证)-云服务 建议先去了解Hadoop(大数据生态系统)中的kerberos(LDAPkerberos的鉴权机制&#xf…

el-table打印PDF预览,表头错位的解决方案

文章目录 背景与需求需求分析解决方案方案一:vue-print-nb插件安装引入使用 方案二安装使用 方案三 总结 背景与需求 本例以vue2项目为例,vue3与react等同理。 有个项目需要打印的功能,网页使用vue2写的,主体内容为表格el-table&a…

uniapp炫酷导航按钮及轮播指示器组件

一个拥有炫酷动效的导航按钮和指示器uniapp组件,帮你构建更炫酷的官网、宣传页、产品介绍等页面。 目前测试了vue2语法在h5和微信小程序的适配,其他平台理论上也能用。 下载及使用方法地址:iliya-desgin 展示: 目标页面出现在可视…

SAM大模型实践(一)

参考着segment-geospatial 项目主页的介绍,尝试复现一下Example-satallite的案例。 Satellite - segment-geospatialhttps://samgeo.gishub.org/examples/satellite/ 过程当中遇到了一些坑给大家做点分享,主要有几种情况,一个是torch…

如何为IntelliJ IDEA配置JVM参数

在使用IntelliJ IDEA进行Java开发时,合理配置JVM参数对于优化项目性能和资源管理至关重要。IntelliJ IDEA提供了两种方便的方式来设置JVM参数,以确保你的应用程序能够在最佳状态下运行。本文将详细介绍这两种方法:通过工具栏编辑配置和通过服…

解决电脑网速慢问题:硬件检查与软件设置指南

电脑网速慢是许多用户在使用过程中常见的问题,它不仅会降低工作效率,还可能影响娱乐体验。导致电脑网速慢的原因多种多样,包括硬件问题、软件设置和网络环境等。本文将从不同角度分析这些原因,并提供提高电脑网速的方法。 一、检查…

探索Starship:一款用Rust打造的高性能终端

在终端的世界里,效率和美观往往并行不悖。今天,我们要介绍的是一款名为Starship的终端工具,它以其轻量级、高颜值和强大的自定义功能,赢得了众多开发者的青睐。 安装 任选一种方式进行安装 Windows 🪟 # scoop scoo…

快速启动Go-Admin(Gin + Vue3 + Element UI)脚手架管理系统

Go-Admin 是一个基于 Gin Vue Element UI & Arco Design & Ant Design 的前后端分离权限管理系统脚手架。它包含了多租户支持、基础用户管理功能、JWT 鉴权、代码生成器、RBAC 资源控制、表单构建、定时任务等功能。该项目的主要编程语言是 Go 和 JavaScript。 ps&a…

SEC_ASA 第二天作业

拓扑 按照拓扑图配置 NTP,Server端为 Outside路由器,Client端为 ASA,两个设备的 NTP传输使用MD5做校验。(安全 V4 LAB考点) 提示:Outside路由器作为 Server端要配置好正确的时间和时区,ASA防…

《深入探究:C++ 在多方面对 C 语言实现的优化》

目录 一、C 在 C 上进行的优化二、C 关键字(C 98)三、C 的输入输出1. cin 和 cout 的使用2. cin、cout 和 scanf()、printf() 的区别 三、命名空间1. 命名空间的使用2. 嵌套命名空间3. 在多个头文件中使用相同的命名空间 四、函数缺省值1. 缺省值的使用2…

vue3修改elementui-plus的默认样式的几种方法

#创作灵感 今天写vue的前端项目,因为需要去修改elementui-plus中drawer的默认样式,所以刚好将修改步骤记录下来。 一共提供了三种方法,但亲测第二种最好用。 使用第二种是可以无视自己的代码中是否定义了该盒子,因为有时候盒子的…

Fiddler简单使用

Fiddler使用方法 1.作用 接口测试,发送自定义请求,模拟小型的接口测试定位前后端bug,抓取协议包,前后端联调构建模拟测试场景,数据篡改,重定向弱网测试,模拟限速操作,弱网&#xf…

如何通过递延型指标预测项目的长期成果?

递延型指标(Deferred Metrics)是指那些并不立即反映或直接影响当前操作、决策或行为的指标,而是随着时间的推移,才逐渐显现出影响效果的指标。这类指标通常会在一段时间后反映出来,或者需要一定的周期才能展现其成果或…