ScratchLLMStepByStep——从零一步一步构建大语言模型

devtools/2024/11/30 7:10:27/

前言

在学习大语言模型的时候,总会遇到各种各样的名词,像自注意力多头因果自回归掩码残差连接归一化等等。这些名词会让学习者听的云里雾里,觉得门槛太高而放弃。

本教程将会带你从零开始一步一步的去构建每一个组件,揭开它们的神秘面纱,并最终用这些组件组装成一个迷你版的大语言模型。在构建过程中,我们会从实现原理的角度去剖析这些组件都是做什么的,又是怎么被设计出来的,做到知其然知其所以然

不仅如此,本专栏还会带你从零开始一步一步训练这个语言模型,经过预训练(Pretrain)、监督微调(SFT)、偏好学习(DPO)最终训练出一个可以进行对话聊天的大语言模型。整个过程会像探宝一样,你会因为将一个又一个新知识收入囊中而充满惊喜,也会因为弄懂了一个又一个的内部原理而持续收获到原来如此

专栏内容

本教程大体上可以分为四部分,分别如下:

  • 第一部分是关于语言模型的基本认识、分词器和嵌入;
  • 第二部分是关于多头因果自注意力、transformer块、GPT模型构建;
  • 第三部分是关于预训练、监督微调、偏好学习以及相关训练的数据集处理;
  • 最后一部分是关于自回归文本生成、kvcache、推理加速相关的内容;

教程具有清晰的章节结构,完整目录如下:

  • ScratchLLMStepByStep:带你从零认识语言模型
  • ScratchLLMStepByStep:带你从零认识Tokenizer
  • ScratchLLMStepByStep:带你从零训练tokenizer
  • ScratchLLMStepByStep:词嵌入和位置嵌入
  • ScratchLLMStepByStep:带你从零认识自注意力
  • ScratchLLMStepByStep:带你实现因果注意力机制
  • ScratchLLMStepByStep:带你实现多头注意力
  • ScratchLLMStepByStep:带你构建TransformerBlock
  • ScratchLLMStepByStep:带你构建GPTModel(制作中)
  • ScratchLLMStepByStep:带你构建高效数据加载器(制作中)
  • ScratchLLMStepByStep:带你进行模型预训练(制作中)
  • ScratchLLMStepByStep:带你进行分类监督微调(制作中)
  • ScratchLLMStepByStep:带你进行指令监督微调(制作中)
  • ScratchLLMStepByStep:带你开始DPO偏好学习(制作中)
  • ScratchLLMStepByStep:带你评估模型推理性能(制作中)
  • ScratchLLMStepByStep:带你压测模型推理性能(制作中)
  • ScratchLLMStepByStep:带你实现选词算法(制作中)
  • ScratchLLMStepByStep:带你加速模型推理(制作中)

前面几章带链接的已经制作完成,剩下的将会以每周一到两篇的频率更新。

本系列教程有如下特点:

  • 可运行的代码示例:每个章节都附有运行示例,帮助您更好地理解理论与实践的结合。
    在这里插入图片描述

  • 一步一步的演示:课程中对每个组件的实现过程都进行了逐步拆解和演示。
    -在这里插入图片描述

  • 详细的解释:对每一步用到的相关深度学习知识,都进行了解读和拓展说明。
    在这里插入图片描述

专栏附带资源

为了最大限度的降低学习门槛,本教程附带了可运行的notebook,notebook文件与专栏的教程目录一一对应。
在这里插入图片描述

所有的notebook都可以在jupyter中直接运行(内容示例如下)。
在这里插入图片描述

教程还附带了每个训练阶段所需数据集的下载地址
在这里插入图片描述
具体数据集的内容因训练类别而有所不同。

  • 分词器和预训练的数据格式基本相同,每条数据是一个text(如下所示)。
    在这里插入图片描述
  • SFT的训练数据会包含instruction、input和output。
    在这里插入图片描述
  • DPO的训练数据针对每条prompt都会有chosen(人类偏好)和reject(非人类偏好)两条回答。
    在这里插入图片描述
资源在哪里找到?

在每篇文章的相关资料链接上都附有notebook的github地址,打开后就能看到notebook文件和相关数据集文件。
在这里插入图片描述

从何处开始?

如果没有模型基础,可以先从认识模型开始,这篇教程会带你逐层解剖模型生成文本的过程:

  • 带你从零认识模型

如果不会搭建环境,可以参考下面两篇教程来搭建自己的环境:

  • conda&pytorch环境搭建笔记
  • vLLM&cuda安装笔记

如果没有使用过jupyter,这里有一篇笔记可以带你入门:

  • jupyter学习笔记

结语

我们设定本课程为付费模式的初衷有以下几点:

  • 对内容创作者的支持:本教程是经过多次实践整理而成的,付费将激励作者创作更多优质的教学内容,并回馈给广大的读者。
  • 学习的承诺:支付一小笔费用(仅相当于请作者喝了一杯咖啡),可以激励学习者投入更多时间与精力,努力回报这笔小的投资。

注:如果付费后github地址由于网络原因访问不顺畅,可以用csdn的私信功能联系获取。


http://www.ppmy.cn/devtools/138122.html

相关文章

社群赋能电商:小程序 AI 智能名片与 S2B2C 商城系统的整合与突破

摘要:本文聚焦于社群在电商领域日益凸显的关键地位,深入探讨在社群粉丝经济迅猛发展背景下,小程序 AI 智能名片与 S2B2C 商城系统如何与社群深度融合,助力电商突破传统运营局限,挖掘新增长点。通过分析社群对电商的价值…

计算机毕业设计Python+LSTM天气预测系统 AI大模型问答 vue.js 可视化大屏 机器学习 深度学习 Hadoop Spark

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

Next.js -服务端组件如何渲染

#题引:我认为跟着官方文档学习不会走歪路 服务器组件渲染到客户端发生了什么? 请求到达服务器 用户在浏览器中请求一个页面。 Next.js 服务器接收到这个请求,并根据路由找到相应的页面组件。服务器组件的渲染 Next.js 识别出请求的页面包含…

stm32单片机个人学习笔记13(USART串口协议)

前言 本篇文章属于stm32单片机(以下简称单片机)的学习笔记,来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记,只能做参考,细节方面建议观看视频,肯定受益匪浅。 STM32入门教程-2023版 细…

IDEA Mac快捷键(自查询使用)

Editing(编辑) Control Space 基本的代码补全(补全任何类、方法、变量)Control Shift Space 智能代码补全(过滤器方法列表和变量的预期类型)Command Shift Enter 自动结束代码,行末自动添…

python 基础语法

标识符 定义 类,变量,模块,函数的名称定义 规定 1.必须是字母或者_开头 2.其他组成必须是数字,_或者大小写字母开头 3,会区分大小写 保留字 定义 可以理解为此前已经被系统或库定义好的变量名称,我们不能…

iphone小程序设置burpsuite代理抓包

1、iphone、burpsuite链接同一wifi 2、burpsuite设置代理 3、iphone配置代理 4、浏览器访问“http://burp”,下载证书,安装证书 5、前往“设置”>“通用”>“关于本机”>“证书信任设置”。 在“针对根证书启用完全信任”下,开启对…

模拟实现STL中的list

目录 1.设计list的结点 2.设计list的迭代器 3.list类的设计总览 4.list类的迭代器操作 5.list类的四个特殊的默认成员函数 无参的默认构造函数 拷贝构造函数 赋值运算符重载函数 析构函数 6.list类的插入操作 7.list类的删除操作 8.list.hpp源代码 1.设计list的结点…