大语言模型数据流程源码解读(基于llama3模型)

news/2024/10/30 7:05:11/

文章目录

  • 前言
  • 一、数据进入LlamaForCausalLM(LlamaPreTrainedModel)类
  • 二、数据进入LlamaModel(LlamaPreTrainedModel)类
    • 1、input_ids的embedding编码
    • 2、position_ids位置获取
    • 3、causal_mask因果mask构建
      • 1、causal_mask调用
      • 2、因果mask代码解读(_update_causal_mask)
    • 4、hidden_states获取
    • 5、decoder_layers解码
  • 三、数据进入LlamaDecoderLayer(nn.Module)类
    • 1、LlamaDecoderLayer类源码解读
    • 2、input_layernorm结构处理hidden_states输入
  • 四、数据进入LlamaSdpaAttention(LlamaAttention)类
    • 1、LlamaSdpaAttention类源码解读
    • 2、qkv获取
    • 3、位置rotary_emb编码
      • 1、位置编码调用
      • 2、位置编码源码
    • 4、位置编码应用
      • 1、位置编码应用调用方法
      • 2、位置编码apply_rotary_pos_emb应用
    • 5、past_key_value更新
    • 6、key与value重复
    • 7、因果关系处理
    • 8、attention实现方法torch.nn.functional.scaled_dot_product_attention
    • 9、attn_output进行线性
    • 10、返回值
  • 五、数据再次进入LlamaDecoderLayer(nn.Module)类
    • 1、hidden_states返回值处理
    • 2、FFN操作
    • 3、输出内容outputs
  • 六、数据再次进入LlamaModel类
    • 1、获取hidden_states内容
    • 2、hidden_states的norm方法
    • 3、后续源码
  • 七、数据再次进入LlamaForCausalLM类
    • 1、lm_head加工
    • 2、loss计算?和返回内容


前言

如果只是简单构建训练与推理的大语言模型,还是比较简单,直接使用huggignface调用即可。然而,理解其源码或内部原理是比较麻烦的,尽管我在之前文章给出了很多解释,但我还是想通过数据流走向来解读模型整个流程与源码内部机理。这样,我们可方便更深入的理解大语言模型


一、数据进入LlamaForCausalLM(LlamaPreTrainedModel)类

数据转成input_ids与attention_mask后该如何转换,我们首先看到原始数据会进入到下面调用方法self.model,其如下图:

在这里插入图片描述

我们知道input_ids与attention_mask是[1,96],是未进行embedding!

二、数据进入LlamaModel(LlamaPreTrainedModel)类

1、input_ids的embedding


http://www.ppmy.cn/news/1543030.html

相关文章

经验总结:typescript 和 axios 项目中大量接口该如何管理和组织

引言 本文旨在介绍一种方法,用于在 typescript 和 axios 的项目中,有效的组合和管理大量的 API 接口以及 interface。 假如我们根据 API 文档对所有的接口做了初步分类,大体如下: scm(某业务模块)├── inventory(库存业务)│…

使用 Kafka 和 MinIO 实现人工智能数据工作流

MinIO Enterprise Object Store 是用于创建和执行复杂数据工作流的基础组件。此事件驱动功能的核心是使用 Kafka 的 MinIO 存储桶通知。MinIO Enterprise Object Store 为所有 HTTP 请求(如 PUT、POST、COPY、DELETE、GET、HEAD 和 CompleteMultipartUpload&#xf…

保持HTTP会话状态:缓存策略与实践

在互联网技术领域,保持HTTP会话状态对于提供连贯和个性化的用户体验至关重要。本文将深入探讨HTTP会话状态的缓存策略,并提供实践指南和代码实现,包括如何在代码中添加代理信息以增强安全性和隐私保护。 HTTP会话状态的重要性 HTTP协议本身…

基于随机森林的智能手机用户行为分类及流量预测分析

1.项目背景 随着智能手机的快速发展,消费者对智能手机的使用行为和习惯也日趋多样化。特别是在5G时代的到来和各类应用的丰富发展背景下,智能手机使用模式呈现出新的特点,本项目使用模拟生成的700位用户智能手机使用数据进行深入分析&#x…

PHP内存马:不死马

内存马概念 内存马是无文件攻击的一种常用手段,利用中间件的进程执行某些恶意代码。首先要讲的是PHP不死马,实质上就是直接用代码弄一个死循环,强占一个 PHP 进程,并不间断的写一个PHP shell,或者执行一段代码。 不死…

HTML入门教程2:HTML发展历史

HTML的诞生 起源时间:1989年创始人:蒂姆伯纳斯-李(Tim Berners-Lee) HTML最初由蒂姆伯纳斯-李在CERN(欧洲核子研究中心)提出。当时,互联网正处于萌芽阶段,伯纳斯-李为了实现全球科…

微服务设计模式 - 重试模式(Retry Pattern)

微服务设计模式 - 重试模式(Retry Pattern) 定义 重试模式(Retry Pattern)是一种微服务中的设计模式,用于在临时性失败(如网络故障或暂时不可用的服务)发生时,自动重新尝试请求&…

Depcheck——专门用于检测 JavaScript 和 Node.js 项目中未使用依赖项的工具

文章目录 Depcheck 是什麽核心功能📚检测未使用的依赖🐛检测缺失的依赖✨支持多种文件类型🌍可扩展性 安装与使用1. 安装 Depcheck2. 使用 Depcheck Depcheck 的应用总结项目源码: Depcheck 是什麽 来看一个常见错误场景&#x1…