当数据量大的时候,比如百万级别,使用 ChatGLM3-6b 推理的速度是很慢的。发现使用 vLLM 和 ChatGLM3-6b 批量推理极大的提高了推理效率。本文主要通过一个简单的例子进行实践。

1.安装 vLLM 和PyTorch [2]

除了 Python(本文使用 3.11)、CUDA(本文使用 11.8)外,还要安装 vllm、pytorch、xformers 等库,特别注意版本要一致。官方提供类库版本主要是针对 CUDA 12.1 版。如下所示:

# 用CUDA 11.8安装vLLM
# 指定vLLM版本
export VLLM_VERSION=0.2.6
# 指定Python版本
export PYTHON_VERSION=311
# 在线安装whl文件
pip install https://github.com/vllm-project/vllm/releases/download/v${VLLM_VERSION}/vllm-${VLLM_VERSION}+cu118-cp${PYTHON_VERSION}-cp${PYTHON_VERSION}-manylinux1_x86_64.whl

# 用CUDA 11.8重新安装PyTorch
pip uninstall torch -y
pip install torch --upgrade --index-url https://download.pytorch.org/whl/cu118

# 安装xformers库
pip3 install -U xformers --index-url https://download.pytorch.org/whl/cu118

2.离线批量推理例子 [3]

例子实现是比较简单的,主要是参数配置细节,如下所示:

from vllm import LLM, SamplingParams

# 定义批量数据
prompts = [
    "宪法规定的公民法律义务有",
    "属于专门人民法院的是",
    "无效婚姻的种类包括",
    "刑事案件定义",
    "税收法律制度",
]
sampling_params = SamplingParams(temperature=0.1, top_p=0.5, max_tokens=4096)
path = '/data/ssw/llm_model/chatglm3-6b'
llm = LLM(model=path, trust_remote_code=True, tokenizer_mode="auto", tensor_parallel_size=2, dtype="auto")
outputs = llm.generate(prompts, sampling_params)

# 输出结果
for output in outputs:
    prompt = output.prompt
    generated_text = output.outputs[0].text
    print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")

(1)temperature=0.1 [5]

控制采样随机性的浮点数。较低的值使模型更具确定性,而较高的值使模型更随机。0 意味着贪婪采样。

(2)top_p=0.5 [5]

控制要考虑的 top tokens 的累积概率的浮点数。必须在(0,1]之间。设置为 1 以考虑所有 token。

(3)max_tokens=4096 [5]

每个输出序列生成的最大 token 数。

(4)trust_remote_code=True [4]

当下载 model 和 tokenizer 时,信任远程代码(比如,来自 HuggingFace)。

(5)tokenizer_mode="auto" [4]

"auto"模式会在可用时使用快速分词器,而"slow"模式则始终使用慢分词器。

(6)tensor_parallel_size=2 [4]

用于张量并行的分布式执行的 GPU 数量。

(7)dtype="auto" [4]

模型权重和激活的数据类型。当前支持 float32,float16 和 bfloat16。如果设置为 auto,将使用模型配置文件中指定的 torch_dtype 属性。然而,如果配置中的 torch_dtype 是 float32,将使用 float16。

参考文献

[1] https://github.com/vllm-project/vllm/releases

[2] https://docs.vllm.ai/en/latest/

[3] https://github.com/vllm-project/vllm/blob/main/examples/offline_inference.py

[4] https://github.com/vllm-project/vllm/blob/main/vllm/entrypoints/llm.py

[5] https://github.com/vllm-project/vllm/blob/main/vllm/sampling_params.py

[6] 使用vLLM和ChatGLM3-6b批量推理(代码):https://github.com/ai408/nlp-engineering/blob/main/知识工程-大语言模型/公众号文章/使用vLLM和ChatGLM3-6b批量推理/chatglm3_6b_vllm.py


NLP工程化

1.本公众号以对话系统为中心,专注于Python/C++/CUDA、ML/DL/RL和NLP/KG/DS/LLM领域的技术分享。

2.本公众号Roadmap可查看飞书文档:https://z0yrmerhgi8.feishu.cn/wiki/Zpewwe2T2iCQfwkSyMOcgwdInhf

NLP工程化

飞书文档

使用vLLM和ChatGLM3-6b批量推理的更多相关文章

  1. AI应用开发实战 - 手写算式计算器

    扩展手写数字识别应用 识别并计算简单手写数学表达式 主要知识点 了解MNIST数据集 了解如何扩展数据集 实现手写算式计算器 简介 本文将介绍一例支持识别手写数学表达式并对其进行计算的人工智能应用的开 ...

  2. AI应用开发实战 - 手写识别应用入门

    AI应用开发实战 - 手写识别应用入门 手写体识别的应用已经非常流行了,如输入法,图片中的文字识别等.但对于大多数开发人员来说,如何实现这样的一个应用,还是会感觉无从下手.本文从简单的MNIST训练出 ...

  3. 自动驾驶轻松开发?华为云ModelArts赋能智慧出行

    作为战略新兴产业,人工智能已经开始广泛应用于多个领域.近几年,科技公司.互联网公司等各领域的企业纷纷布局自动驾驶.那么,自动驾驶技术究竟发展得如何了?日前,华为云携手上海交通大学创新中心举办的华为云人 ...

  4. 本科阶段就挑战自动驾驶开发?华为云ModelArts帮你轻松实现!

    欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...

  5. MLflow系列4:MLflow模型

    英文链接:https://mlflow.org/docs/latest/models.html 本文链接:https://www.cnblogs.com/CheeseZH/p/11946260.htm ...

  6. MLflow系列1:MLflow入门教程(Python)

    英文链接:https://mlflow.org/docs/latest/tutorial.html 本文链接:https://www.cnblogs.com/CheeseZH/p/11943280.h ...

  7. 我眼中的华为公有云AI平台--ModelArts

    前言 AWS Sagemaker has been a great deal for most data scientists who would want to accomplish a truly ...

  8. NVIDIA GPUs上深度学习推荐模型的优化

    NVIDIA GPUs上深度学习推荐模型的优化 Optimizing the Deep Learning Recommendation Model on NVIDIA GPUs 推荐系统帮助人在成倍增 ...

  9. Apache Hudi在Hopworks机器学习的应用

    Hopsworks特征存储库统一了在线和批处理应用程序的特征访问而屏蔽了双数据库系统的复杂性.我们构建了一个可靠且高性能的服务,以将特征物化到在线特征存储库,不仅仅保证低延迟访问,而且还保证在服务时间 ...

  10. [源码解析] PyTorch 分布式(16) --- 使用异步执行实现批处理 RPC

    [源码解析] PyTorch 分布式(16) --- 使用异步执行实现批处理 RPC 目录 [源码解析] PyTorch 分布式(16) --- 使用异步执行实现批处理 RPC 0x00 摘要 0x0 ...

随机推荐

  1. 《最新出炉》系列初窥篇-Python+Playwright自动化测试-16-处理模态对话框弹窗

    1.简介 我们在日常工作中,会经常遇到弹出警告框的问题,弹框无法绕过,必须处理才可以执行后续的测试,所以弹框处理也是我们必须掌握的一个知识.宏哥在java+selenium系列文章中介绍过这部分内容. ...

  2. Spring Boot虚拟线程与Webflux在JWT验证和MySQL查询上的性能比较

    早上看到一篇关于Spring Boot虚拟线程和Webflux性能对比的文章,觉得还不错.内容较长,我就不翻译了,抓重点给大家介绍一下这篇文章的核心内容,方便大家快速阅读. 测试场景 作者采用了一个尽 ...

  3. Modbus转profinet网关连接1200PLC在博图组态与英威腾驱动器通讯程序案例

    Modbus 转 profinet 网关连接 1200PLC 在博图组态与英威腾驱动器通讯程序案例 本案例给大家介绍由兴达易控 modbus 转 profinet 网关连接 1200PLC 在博图软件 ...

  4. ESS、RSS、TSS

    回归平方和 ESS,残差平方和 RSS,总体平方和 TSS 残差平方和越小,自变量与因变量之间的相关性越好 总变差(TSS):被解释变量Y的观测值与其平均值的离差平方和(总平方和)(说明 Y 的总变动 ...

  5. Python socket实现ftp文件下载服务

    简要 使用Python socket和多线程实现一个FTP服务下载.下面的示例是固定下载某一个任意格式文件. 仅仅为了展示如果使用socket和多线程进行文件下载 服务端代码 import socke ...

  6. WebKit Insie: Active 样式表

    WebKit Inside: CSS 样式表的匹配时机介绍了当 HTML 页面有不同 CSS 样式表引入时,CSS 样式表开始匹配的时机.后续文章继续介绍 CSS 样式表的匹配过程,但是在匹配之前,首 ...

  7. pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple

    pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simpleLooking in indexes: https://pypi.tuna.t ...

  8. scnhealthcheck

    在CPU补丁中,Oracle提供了一个脚本 scnhealthcheck.sql 用于检查数据库当前SCN的剩余情况.该脚本的算法和以上描述相同,最终将最大合理SCN 减去当前数据库SCN,计算得出一 ...

  9. Unity anchoredPosition转localPosition

    参考 https://zhuanlan.zhihu.com/p/119442308 在已经有结果的情况下,先捋一下unity对相关字段的注释就能得出很多公式 (rectMinPos表示左下角在父节点坐 ...

  10. 一步步带你剖析Java中的Reader类

    本文分享自华为云社区<深入理解Java中的Reader类:一步步剖析>,作者:bug菌. 前言 在Java开发过程中,我们经常需要读取文件中的数据,而数据的读取需要一个合适的类进行处理.J ...