大语言模型的后处理

后处理的输入

常规意义上的大模型处理流程

import torch
from transformers import LlamaForCausalLM, LlamaTokenizer

# 加载模型和tokenizer
model = LlamaForCausalLM.from_pretrained("decapoda-research/llama-7b-hf")
tokenizer = LlamaTokenizer.from_pretrained("decapoda-research/llama-7b-hf")

# 输入prompt
prompt = "Hello, I'm Claude. How can I assist you today?"
input_ids = tokenizer.encode(prompt, return_tensors="pt")

# 前向传播获取logits
output = model(input_ids=input_ids)
logits = output.logits

# logits形状: (batch_size, sequence_length, vocab_size)
print(logits.shape)

后处理的输入是logits,其实准确说是hidden states,经过embedding table 映射后得到了最终的logits。

# 采样超参数
temperature = 0.7
top_k = 50
top_p = 0.95
repetition_penalty = 1.2

# 对logits进行处理
logits = logits[:, -1, :] / temperature  # 应用温度
filtered_logits = top_k_top_p_filtering(logits, top_k=top_k, top_p=top_p)
filtered_logits = enforce_repetition_penalty(filtered_logits, input_ids, repetition_penalty)

# 从处理后的logits中采样token
probabilities = torch.softmax(filtered_logits, dim=-1)
next_token = torch.multinomial(probabilities, num_samples=1)

# 将新token添加到输入中,继续生成
input_ids = torch.cat((input_ids, next_token), dim=-1)
  • 首先定义了一些采样超参数,如温度(temperature)、top-k、top-p 和重复惩罚系数(repetition_penalty)。
  • 接下来, 对 logits 进行处理:
    • 应用温度缩放,控制输出的随机性。
    • 使用 top-k 和 top-p 过滤,保留概率最高的 k 个 token 或累积概率达到 p 的 token。
    • 应用重复惩罚,降低已生成 token 的概率,避免重复。

VLLM Sampler的处理

我们默认跑vllm benchmark test 的时候,sampling 参数配置:

    sampling_params = SamplingParams(
        n=args.n,
        # temperature=0.0 if args.use_beam_search else 1.0,
        temperature=0.0,
        top_p=1.0,
        use_beam_search=args.use_beam_search,
        ignore_eos=ignore_eos,
        max_tokens=max_tokens,
        repetition_penalty=args.repetition_penalty
    )

除了这些参数以外,SamplingParams(vllm/sampling_params.py)的默认配置我们主要关注:
在这里插入图片描述
其中由于temperature 设置为0,默认使用greedy sampling 方式进行logits 采样。
进入到Sampler 后处理(vllm/model_executor/layers/sampler.py,vllm/model_executor/sampling_metadata.py),do_top_p_top_kdo_min_p 采样bypass,最后softmax的输入shape 没有经过topk/p 的采样,输入shape为[bs, input_size, vocabulary_size]
在这里插入图片描述

因此,vocabulary size 如果太大,对softmax 性能的影响是一个很大的挑战。
从性能优化的角度考虑,可以先做一次logit 采样,通过设定合适的p/k 值保证模型输出精度。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

这个 TypeScript 技巧会让你大吃一惊

从字符串数组中提取自定义类型 “在 TypeScript 的世界里,自定义类型从字符串数组中显现,就像隐藏的宝石。” TypeScript 是一个操纵现有数据和发展良好实践的神奇工具。 今天,我们将探索如何以正确的方式从字符串数组中提取全名&#xff0c…

MPAndroidChart 详细使用 - BarChart

chart下面的方法 getDescription().setEnabled(boolean enabled);//设置描述是否显示 setPinchZoom(boolean enabled);//设置x轴和y轴能否同时缩放。默认是否 setScaleEnabled(boolean enabled);//是否支持缩放 setScaleXEnabled(boolean enabled);//启用/禁用x轴上的缩放 setS…

Vue2中子组件调用父组件的方法,父组件调用子组件的方法,父子组件互相传值和方法调用

💟 上一篇文章 组件之间的多种通信方式,一文彻底搞懂组件通信!​​​​​​​ 📝 系列专栏 vue从基础到起飞 目录 一、父组件调用子组件的方法 二、子组件调用父组件的方法 1、使用this.$emit()向父组件触发一个事件,父组件监听…

HTTPS 原理和 TLS 握手机制

HTTPS的概述与重要性 在当今数字化时代,网络安全问题日益凸显,数据在传输过程中的安全性备受关注。HTTPS 作为一种重要的网络通信协议,为数据的传输提供了强有力的安全保障。它是在 HTTP 的基础上发展而来,通过引入数据加密机制&a…

RazorSQL for Mac:强大而全面的数据库管理工具

RazorSQL for Mac是一款功能强大、操作简便的数据库管理工具。它专为Mac用户设计,支持连接超过30种不同类型的数据库,包括MySQL、Oracle、PostgreSQL等,为用户提供了全面的数据库管理解决方案。 RazorSQL具有强大的数据库浏览功能&#xff0c…

【吃透Java手写】3-SpringBoot-简易版-源码解析

【吃透Java手写】SpringBoot-简易版-源码解析 1 SpringbootDemo2 准备工作2.1 Springboot-my2.1.1 依赖2.1.2 SpringBootApplication2.1.3 SJBSpringApplication2.1.3.1 run方法 2.2 Springboot-user2.2.1 依赖2.2.2 UserController2.2.3 UserApplication 2.3 分析run方法的逻辑…

图神经网络(GNNs)在时间序列分析中的应用

时间序列数据是记录动态系统测量的主要数据类型,由物理传感器和在线过程(虚拟传感器)大量生成。时间序列分析对于解锁可用数据中隐含的丰富信息至关重要。随着图神经网络(GNNs)的最近进展,基于GNN的方法在时…

5月10日学习记录

[NCTF2019]True XML cookbook(xxe漏洞利用) 这题是关于xxe漏洞的实际应用,利用xxe漏洞的外部实体来进行ssrf探针内网的主机 和[NCTF2019]Fake XML cookbook的区别就在于xxe漏洞的利用方向,一个是命令执行,一个是SSRF 看题,打开…

JavaScript原理篇——Promise原理及笔试题实战演练

Promise 是 JavaScript 中用于处理异步操作的对象,它代表了一个可能还没有完成的操作的最终完成或失败,以及其结果值。Promise 对象有三种状态: Pending(进行中):初始状态,既不是成功&#xff0…

语言基础 /CC++ 可变参函数设计与实践,va_ 系列实战详解(强制参数和变参数的参数类型陷阱)

文章目录 概述va_ 系列定义va_list 类型va_start 宏从变参函数的强制参数谈起宏 va_start 对 char 和 short 类型编译告警宏 va_start 源码分析猜测 __va_start 函数实现 va_arg 宏宏 va_arg 无法接受 char 和 short为啥va_arg可解析int却不能解析float类型?宏 va_a…

Mybatis之ResultMap

前言 select语句查询得到的结果集是一张二维表,水平方向上看是一个个字段,垂直方向上看是一条条记录。而Java是面向对象的程序设计语言,对象是根据类定义创建的,类之间的引用关 系可以认为是嵌套的结构。在JDBC编程中&#xff0c…

PyTorch中定义自己的数据集

文章目录 1. 简介2. 查看PyTorch自带的数据集(可视化)3. 准备材料3.1 图片数据3.2 标签数据 4. 方法 1. 简介 尽管PyTorch提供了许多自带的数据集,如MNIST、CIFAR-10、ImageNet等,但它们对于没有经验的用户来说,理解数据加载器的工作原理以及…

【数据结构】栈的实现以及数组和链表的优缺点

个人主页:一代… 个人专栏:数据结构 1.栈 1.1栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进…

批量自定义重命名,一键添加顺序编号,文件夹管理更高效!

我们经常需要对文件夹进行管理和整理。然而,当面对大量需要改名的文件夹时,手动逐个修改不仅效率低下,还容易出错。那么,有没有一种方法能够批量自定义重命名文件夹,并在名称后自动添加顺序编号呢?答案是肯…

C++反汇编——多态,面试题01

文章目录 1.C的三大特性1.1封装1.2继承1.3多态1.3.1 虚函数1.3.2 多态代码反汇编分析。反汇编分析1——基类指针指向子类对象,构造过程。反汇编分析2——基类指针指向子类对象,调用虚函数getPrice()过程。反汇编分析3——基类对象,调用虚函数…

版本控制工具之Git的基础使用教程

Git Git是一个分布式版本控制系统,由Linux之父Linus Torvalds 开发。它既可以用来管理和追踪计算机文件的变化,也是开发者协作编写代码的工具。 本文将介绍 Git 的基础原理、用法、操作等内容。 一、基础概念 1.1 版本控制系统 版本控制系统&#x…

PSoc™62开发板之IoT应用

实验目的 使用PSoc62™开发板驱动OLED模块,实时监控室内的光照强度、温度信息 实验准备 PSoc62™开发板SSD1309 OLED模块DS18B20温度传感器BH1750光照传感器 模块电路 SSD1309 OLED模块的电路连接和模块配置教程请参考之前的文章,这里不详细展开描…

汽车EDI:IAC Elmdon EDI 对接指南

近期收到客户C公司的需求,需要与其合作伙伴IAC Elmdon建立EDI连接,本文将主要为大家介绍IAC Elmdon EDI 对接指南,了解EDI项目的对接流程。 项目需求 传输协议:OFTP2 IAC Elmdon 与其供应商之间使用的传输协议为OFTP2。OFTP2是…

云南区块链商户平台优化开发

背景 云南区块链商户平台是全省统一区块链服务平台。依托于云南省发改委、阿里云及蚂蚁区块链的国内首个省级区块链平台——云南省区块链平台同步上线,助力数字云南整体升级。 网页版并不适合妈妈那辈人使用,没有记忆功能,于是打算自己开发…

科技查新中医学科研项目查新点如何确立与提炼?案例讲解

一、前言 医学科技查新包括立项查新和成果查新两个部分,其中医学立项查新,它是指在医学科研项目申报开题之前,通过在一定范围内进行该课题的相关文献检索 ( 可以根据项目委托人的具体要求,进行国内检索或者进行国外检索 ) &#x…