当前位置: 首页 > news >正文

Qwen2.5简要全流程以及QA

1 输入prompt 得到input id

input id: [B,L]   # batch size , lenth

2 embeding之后得到 input_embeds: [B,L,D]   # demensions

3 进入Transformer层

先通过linear层得到shape不变的 QKV

多头注意力 分割Dimension , kv变成 [B,H,L,head_dim] h是head,head_dim * head = Dimension

(如果有kvcache的话):

new key [B, H, 1 head_dim]

past key [B,H,L_prev,dim]

concat:[B,H,L_prev+1,dim]

Attn输出 [B,L,D]

outputs = self.transformer(input_ids, ...)

final_hidden_states = outputs[0]  # shape: [B, L, D]

logits = self.lm_head(final_hidden_states)  # shape: [B, L, vocab_size]

self.transformer 是由多层 Qwen2Block(带 attention + feedforward)堆叠组成,每层更新一次 hidden state。最终最后一层输出的 hidden state 就是 final_hidden_states。

logits = lm_head(final_hidden_states)

  → [B, L, vocab_size]

(值是每个位置对每个词的预测得分)

遇到到是哪个token_id之后 用tokenizer.decode()得到最终的词

lm_head是什么

语言建模头(Language Modeling Head)

一个线性层,将输出的hidden_states映射到词表维度

# vocab_size = 151936, hidden_size = 4096

self.lm_head = nn.Linear(4096, 151936, bias=False)

得到logits之后还有一个sampling的过程

greedy sampling 直接取最大值

next_token = ops.argmax(next_token_logits, axis=-1)  # [B]

Top-k / Top-p Sampling:

# 用 softmax 得到概率

probs = ops.softmax(next_token_logits, axis=-1)  # [B, vocab_size]

# 根据策略采样

next_token = sample_from(probs, top_k=50, top_p=0.95, temperature=1.0)

top_k 取前k个概率大的

top_p 累积概率小于0.95

相关文章:

  • 5.第五章:数据分类的方法论
  • 实时操作系统在服务型机器人中的关键作用
  • 航电系统之信息融合技术篇
  • React+TypeScript:现代化前端路由导航系统开发详解
  • 机器学习中的特征存储是什么?我需要一个吗?
  • PC接入deepseek
  • 【数据可视化-29】食物营养成分数据可视化分析
  • Qt C++/Go/Python 面试题(持续更新)
  • MySQL的图形管理工具-MySQL Workbench的下载安装及使用【保姆级】
  • [Redis] Redis最佳实践
  • 【Ubuntu】提升 docker ps -a 输出的可读性:让 Docker 容器状态更清晰
  • K8S学习路线图:从入门到精通的技术成长指南
  • 图像可视化
  • PCB常见封装类型
  • RSUniVLM论文精读
  • 【深度】如何通过MCP实现多智能体之间的协同
  • IDEA导入并启动若依项目步骤(SpringBoot+Vue3)
  • 【华为HCIP | 华为数通工程师】821—多选解析—第十五页
  • m365是什么,和o365的区别
  • 自动化标注软件解析
  • 铁路五一假期运输今日启动,预计发送旅客1.44亿人次
  • 解放日报头版:人民城市共建共享展新卷
  • 新华社评论员:汇聚起工人阶级和广大劳动群众的磅礴力量
  • “90后”樊鑫履新乌兰察布市察右中旗副旗长人选
  • 日月谭天丨赖清德强推“脱中入北”是把台湾带向死路
  • 千亿市值光储龙头董事长向母校合肥工业大学捐赠1亿元