【大模型实战篇】从零构建基座大模型项目推介

 1. 背景介绍  

        近期一直在跟进大模型相关领域知识的学习,大模型的学习需要两条路并进,理论和实践。理论知识的学习,比如说对当前大模型的深度学习架构(预告:下周会带来关于transformer以及从数学角度理解transformer的分享)、不同基座大模型之间的架构对比分析(主流的就是GPT系列、LLama系列、Claude系列)、涉及的细分模块组成及功能等,但更重要的是对大模型的实践,这个实践包括了应用层,比如利用已有的大模型生态工具,如何解决实际生活、工作、业务问题。大模型生态能力,足以让一个小团队开发出一套可面向C端的工具包,而且越来越觉得小团队的创业逐步成为可能,自己也逐渐萌发创立自己团队的想法。也包括对于大模型基座模型训练、微调、RAG等技术,自己也正在按照所介绍的开源项目推进实操,后续会逐步做一些实战分享。

2. 项目简介

        最近遇到三个比较好的项目,可以对比起来参考。详细介绍了如何一步步打造基座模型,通过端到端从头开始构建,能够帮助从底层技术理解大模型如何由来。

        第一个项目是来自Andrej Karpathy的LLM101n课程【1】,Karpathy是前OpenAI的联合创始人。该课程的github项目内容目前已经被删除,但根据之前fork出来的内容,还是能够看到系列课程。该课程主要通过构建一个故事讲述者AI大语言模型(LLM)的处理流程来讲述相关大模型依赖的技术。你将能够与AI携手合作,创建、改进和插图小故事。从基础开始,端到端地构建一个类似于GPT的功能性Web应用程序,从头开始使用Python、C和CUDA,并且对计算机科学的前置要求极少,来实现创建、改进和插图小故事的chat工具。帮助对AI、大语言模型和深度学习有相对深入的理解。

        课程大纲如下:

第 01 章 Bigram 语言模型(语言建模)

第 02 章 Micrograd(机器学习、反向传播)

第 03 章 N-gram 模型(多层感知器、matmul、gelu)

第 04 章 Attention(attention、softmax、位置编码器)

第 05 章 Transformer(transformer、residue、layernorm、GPT-2)

第 06 章 Tokenization(minBPE、字节对编码)

第 07 章 优化(初始化、优化、AdamW)

第 08 章 提速系列 I:设备(设备,CPU,GPU,...)

第 09 章 提速系列 II:精度(混合精度训练,fp16,bf16,fp8,......)

第 10 章 提速系列 III:分布式(分布式优化、DDP、ZeRO)

第 11 章 数据集(数据集、数据加载、合成数据生成)

第 12 章 推理 I:kv-cache(kv-cache)

第 13 章 推理 II:量化(quantization)

第 14 章 微调 I:SFT(监督微调 SFT、PEFT、LoRA、聊天(chat))

第 15 章 微调 II:RL(强化学习,RLHF,PPO,DPO)

第 16 章 部署(API、Web 应用程序)

第 17 章 多模态(VQVAE、扩散 transformer)

         第二个项目是从头实现LLama3【2】,可以参考该git项目。 项目将会介绍端到端一步步实现Llama3的各个模块,包括每个张量和矩阵乘法。

        整个项目中将会介绍涉及的步骤如下,过程很清晰:

  • 分词器
  • 读取模型文件
  • 推断关于LLama3模型的细节
  • 文本转换为tokens
  • tokens转换为其嵌入表示
  • 使用RMS归一化对嵌入进行归一化
  • 构建Transformer的第一层
  • 从头实现注意力机制
  • 展开query
  • 实现第一层的第一个head
  • 将query权重与token嵌入相乘,以获得token的query
  • 位置编码
  • RoPE
  • 使用复数的点积来旋转向量
  • 获得每个token的旋转后的queries和keys值
  • 将queries和keys矩阵相乘
  • 屏蔽query-key得分
  • values(几乎是注意力机制的最后一步)
  • value向量
  • 注意力机制
  • 多头注意力机制
  • 权重矩阵,最后几个步骤之一
  • 对嵌入增量进行归一化,然后通过前馈神经网络运行
  • 加载前馈神经网络的权重并实现它
  • 第一层之后对每个token获得了新的编辑嵌入
  • 有了最终的嵌入,这是模型对下一个token的最佳猜测
  • 将嵌入解码为token值
  • 使用最后一个token的嵌入来预测下一个值

        第三个项目是《从零开始构建大型语言模型》这本书的源代码项目【3】,同样是逐步从头开始编写代码,由内而外地学习和理解大型语言模型(LLM)的工作原理。为了避免失效,可以参考该链接。引导创建自己的 LLM,通过清晰的文本、图表和示例来解释每个阶段。所以可以将这几个项目对照起来理解和实践。目标是训练和开发属于自己的虽小但功能齐全的模型的方法,反映了创建大规模基础模型(如GPT系列背后的模型)所采用的方法。此外,还包括加载更大的预训练模型权重以进行微调的代码。

        该项目包含的内容:

设置
        Python 设置提示
        安装需要使用的 Python 包和库
        Docker 环境设置指南
第 2 章:
        比较各种字节对编码(BPE)实现
        理解嵌入层和线性层之间的差异
        用简单数字理解数据加载器的直觉
第 3 章:
        比较高效的多头注意力实现
        理解 PyTorch 缓冲区
第 4 章:
        浮点运算次数分析
第 5 章:
        使用 Transformers 从 Hugging Face 模型中心加载权重的替代方法
        在Gutenberg数据集上预训练 GPT
        为训练循环增添特色(增加额外功能)
        优化预训练的超参数
第 6 章:
        对不同层进行微调以及使用更大模型的额外实验
        在 5 万条 IMDb 电影评论数据集上对不同模型进行微调
第 7 章:
        用于查找近似重复项和创建被动语态条目的数据集工具
        使用 OpenAI API 和 Ollama 评估指令响应
        生成用于指令微调的数据集
        使用 Llama 3.1 70B 和 Ollama 生成偏好数据集
        语言模型对齐的直接偏好优化(DPO)

    20241021新增项目:Zero-Chatgpt

        该开源项目的目的是想从0开始,将chatgpt的技术路线跑一遍。包括:数据收集 -> 数据清洗和去重 -> 词表训练 -> 语言模型预训练 -> 指令微调 -> 强化学习(rlhf,ppo)。最主要的是把代码和流程跑通。
        预训练数据:10B token,指令微调数据:30w条,rlhf数据:10w条,模型大小:0.1B。

        另外,作者还基于qwen实践了多模态的模型 Zero-Qwen-VL, 从0开始训练一个对中文支持更友好的图文大模型,跑通图文多模态的训练流程。项目用的是qwen-vl的图片编码器和Qwen2-0.5B-Instruct的语言模型。 作为学习的小例子还不错,给作者点赞。

3. 参考材料

【1】LLM101n

【2】LLAMA3 

【3】LLMs from scratch

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

源泉的小广场

感谢大佬的支持和鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值