【LLM】大模型落地-从理论到实践
简述
按个人偏好和目标总结了学习目标和路径(可按需学习),后续将陆续整理出相应学习资料和资源。
学习目标
- 熟悉主流LLM(Llama, ChatGLM, Qwen)的技术架构和技术细节;有实际应用RAG、PEFT和SFT的项目经验
- 较强的NLP基础,熟悉BERT、T5、Transformer和GPT的实现和差异,能快速掌握业界进展,有对话系统相关研发经验
- 掌握TensorRT-LLM、vLLM等主流推理加速框架,熟悉模型量化、FlashAttention等推理加速技术方案,对分布式训练DeepSpeed框架有实战经验
- 熟悉Pytorch,具备扎实的深度学习和机器学习基础,对C/C++、Cuda、计算机系统有一定了解
参考项目
参考书籍
- 大规模语言模型:从理论到实践 -- 张奇、桂韬、郑锐、黄萱菁 https://intro-llm.github.io/intro-llm

- ChatGPT原理与实战 https://github.com/liucongg/ChatGPTBook

参考课程
面向开发者的LLM入门课程(吴恩达课程-中文版)
https://github.com/datawhalechina/prompt-engineering-for-developers/blob/main/README.md普林斯顿-COS 597G (Fall 2022): Understanding Large Language Models
https://www.cs.princeton.edu/courses/archive/fall22/cos597G/斯坦福-CS324 - Large Language Models
https://stanford-cs324.github.io/winter2022/
教程
- Huggingface Transformers官方课程 https://huggingface.co/learn/nlp-course/
- Transformers快速入门(快速调包BERT系列)
https://transformers.run/
学习方式
- 力求快速应用 (先调包,再深入学习)
- 在实践中动手学习,力求搞懂每个关键点
- 【原理学习】+【代码实践】 + 【输出总结】
基础知识
视频课程:
书籍
- 深度学习入门:基于Python的理论与实践:numpy实现MLP、卷积的训练
-《深度学习进阶:自然语言处理》:numpy实现Transformers、word2vec、RNN的训练 - Dive In Deep Learning(动手学深度学习) https://d2l.ai/
- 《神经网络与深度学习》https://nndl.github.io/
- 《机器学习方法》:李航老师的机器学习 + 深度学习
- 深度学习入门:基于Python的理论与实践:numpy实现MLP、卷积的训练
强化学习
- 强化学习教程-蘑菇书EasyRL(李宏毅强化学习+强化学习纲要)https://datawhalechina.github.io/easy-rl/
- 动手学强化学习 https://github.com/boyu-ai/Hands-on-RL/blob/main/README.md
后续路径
应用:
Zero Shot / Few Shot 快速开箱即用
Prompt调优:
- 上下文学习In-Context Learning, ICL
- 思维链 Chain of Thought, COT
RAG (Retrive Augment Generate)
- 基于文档分块、向量索引和LLM生成,如Langchain文档问答
领域数据-指令微调LLM
PEFT (Parameter Efficient Fintuning):
- LORA (Low-Rank Adaption of LLMs)
- QLORA
- SLORA
- P-Tuning v2
参数高效的微调,适合用于纠正模型输出格式(PEFT上限不高,并向LLM输入的知识有限)
SFT (Supervised Fintuning):
- 全参数监督微调,使用prompt指令样本全量微调LLM(可以注入新的领域知识)
- 需要控制样本配比(领域数据 + 通用数据)
对齐
对齐人类偏好 (RLHF):
- RewardModel 奖励模型 (排序标注,判断答案价值)
- RL (PPO, 更新SFT模型)
专注基于强化学习的大语言模型对齐,有前景的方向是SuperhumanAI AutoALign
预训练
小模型预训练 (GPT2, TinyLlama)
不考虑训练参数规模较大的语言模型
训练推理优化:
- 模型量化
- 推理加速
- 蒸馏
- 推理框架(vLLM、TensorRT-LLM、Llama.cpp)
学习目录
第1章 技术与需求分析
1.1 技术分析
1.1.1 LLM的发展历程与趋势
1.1.2 开源LLM生态
- Llama系列
- Mistral / Mixtral-8X7B-MOE :https://mistral.ai/news/mixtral-of-experts/
- ChatGLM / Baichuan
1.2 市场需求分析
1.2.1 需求和就业市场分析
- 预训练、对齐
- 微调、应用
- 推理加速
1.2.2、商业落地分析(2C、2B应用场景)
第2章 ChatGPT背景与原理
2.1 ChatGPT的背景知识
2.1.1 ChatGPT发展趋势
2.1.2 ChatGPT的能力
2.2 ChatGPT的工作原理
2.2.1 预训练与提示学习阶段
2.2.2 结果评价与奖励建模阶段
2.2.3 强化学习与自我进化阶段
2.3 算法细节
2.3.1 标注数据
2.3.2 建模思路
2.3.3 存在问题
第3章 预训练语言模型
3.1 Transformer
- 图解Transformer:http://jalammar.github.io/illustrated-transformer/
- 论文:《Attention Is All Your Need》
3.1.1 Transformer结构
详解Transformer原理:https://www.cnblogs.com/justLittleStar/p/17322172.html
3.1.2 Transformer实战
Torch代码详解和训练实战:https://www.cnblogs.com/justLittleStar/p/17786071.html
3.2 生成式预训练语言模型GPT
3.2.1 GPT详解
论文
- GPT-1:Improving Language Understanding by Generative Pre-Training
- GPT-2: Language Models are Unsupervised Multitask Learners
- GPT-3:Language Models are Few-Shot Learners
- GPT-3衍生模型CodeX: Evaluating Large Language Models Trained on Code
- GPT-4:GPT-4 Technical Report(openai.com)
博客
- GPT2图解:http://jalammar.github.io/illustrated-gpt2/
- GPT2图解(中文):https://www.cnblogs.com/zhongzhaoxie/p/13064404.html
- GPT3分析:How GPT3 Works - Visualizations and Animations
- GPT2模型源码阅读系列一GPT2LMHeadModel
GPT原理分析:https://www.cnblogs.com/justLittleStar/p/17322259.html
3.2.2 GPT实现
3.2.2.1 动手用Numpy实现GPT
60行代码实现GPT,可加载GPT2 128M进行推理:https://www.cnblogs.com/justLittleStar/p/17925108.html
3.2.2.3 动手用C++实现GPT
ToDo
参考:CPP实现Transformer
3.2.3 GPT训练和微调
3.2.3.1 训练GPT2语言模型
Transformers库GPT实现分析:ToDo
3.2.3.2 GPT2微调-文本摘要实战
- 数据预处理模块
- GPT-2模型模块
- 模型训练和推理模块
3.2.3.3 MiniGPT项目详解
双数加法:https://blog.csdn.net/wxc971231/article/details/132000182
3.2.3.4 NanoGPT项目详解
- 代码分析:https://zhuanlan.zhihu.com/p/601044938
- 训练实战:莎士比亚数据训练
3.3 Mask语言模型
3.3.1 BERT
原理
- BERT可视化:A Visual Guide to Using BERT for the First Time
- BERT原理:https://www.cnblogs.com/justLittleStar/p/17322240.html
实战
- BERT结构和预训练代码实现:ToDo
- BERT预训练实战:动手学深度学习-BERT预训练 Colab
- 基于HuggingFace的BERT预训练
- BERT微调:文本分类实战、BERT-CRF实体识别实战、BERT+指针网络(UIE)信息抽取实战
3.3.2 BERT衍生系列
- RoBERTa
- ALBERT
- SimBERT
3.4 其他
3.4.1 T5
3.4.1.1 T5模型介绍
3.4.2 UniLM
3.4.2.1 UniLM模型介绍
3.4.2.2 基于夸夸闲聊数据的UniLM模型实战
- 数据预处理
- UniLM模型
- 模型训练与推理
第4章 提示学习与大型语言模型
4.1 提示学习PromptLearning
4.1.1 提示学习介绍
4.1.2 提示模板设计
4.1.3 答案空间映射设计
4.2 上下文学习
4.2.1 上下文学习介绍
4.2.2 预训练阶段提升上下文
4.2.3 推理阶段优化上下文
4.3 指令数据构建
4.3.1 手动和自动构建指令
4.3.2 开源指令数据集
4.3.3 基于提示的文本情感分析实战
https://github.com/liucongg/ChatGPTBook/tree/main/PromptProj
- 数据预处理
- 模型结构与训练模块
第5章 开源大型语言模型
5.1 Mistral
Mistral 7B Tutorial: https://www.datacamp.com/tutorial/mistral-7b-tutorial
5.1.1 Mistral的模型结构
5.1.3 Mistral 源码解析
5.1.4 Mistral-6B微调
5.2 Llama源码
5.2.1 Llama1
Llama1源码深入解析: https://zhuanlan.zhihu.com/p/648365207
5.2.2 Llama2
- Llama2的优化
- Llama2源码解析
llama 2详解: https://zhuanlan.zhihu.com/p/649756898
- Llama2-6B微调
5.3 ChatGLM
5.2.1 ChatGLM简介
5.2.2 ChatGLM-6B微调
ChatGLM2微调保姆级教程: https://zhuanlan.zhihu.com/p/643856076
5.4 CodeLlama
5.2.1 CodeLlama简介
5.2.2 CodeLlama微调
第6章 LLM微调
6.1 全量指令微调
6.2 高效模型微调PEFT简介
6.3 LORA系列
6.3.1 LoRA(Low Rank Adapter)
ChatGLM-6B: https://zhuanlan.zhihu.com/p/625468667
ChatGLM2微调保姆级教程:https://zhuanlan.zhihu.com/p/643856076
6.3.2 QLoRA
用bitsandbytes、4比特量化和QLoRA打造亲民的LLM:https://www.cnblogs.com/huggingface/p/17816374.html
6.3.3 AdaLoRa
6.3.4 SLoRA
6.4 P-Tuning系列
6.4.1 P-Tuning V1
6.4.2 P-Tuning V2
6.5 基于LLM微调的信息抽取实战
6.5.1 ChatGLM项目简介
6.5.2 数据预处理模块
6.5.3 Freeze微调模块
6.5.4 LoRA微调模块
6.5.5 P-Tuning v2微调模块
6.6 Deepspeed-Chat SFT 实践
6.6.1 代码结构
6.6.2 数据预处理
6.6.3 自定义模型
6.6.4 模型训练
6.6.5 模型推理
第7章 大型语言模型预训练
7.1 大型预训练模型简介
7.2 预训练模型中的分词器
7.2.1 BPE详解
7.2.2 WordPiece
7.2.3 Unigram
7.2.4 SentencePiece详解
7.3 分布式训练
7.3.1 分布式训练概述
7.3.2 分布式训练并行策略
7.3.3 分布式训练的集群架构
7.3.4 分布式深度学习框架
7.3.4.1 Megatron-LM详解
7.3.4.2 DeepSpeed详解
7.3.4.3 Colossal-AI
7.4 基于DeepSpeed的LLM预训练实战
7.4.1 GLM项目简介
7.4.2 数据预处理模块
7.4.3 执行模型训练
7.5 DeepSpeed实践
7.5.1 基础概念
7.5.2 LLaMA 分布式训练实践
7.6 MOE
7.6.1 基础概念
7.6.2 Mixstral-8X7B-MOE-介绍
第8章 LLM应用
8.1 推理规划
8.1.1 思维链提示(Chain-of-Thought Prompting)
8.1.2 由少至多提示(Least-to-Most Prompting)
8.2 综合应用框架
8.2.1 LangChain框架核心模块
9个范例带你入门langchain: https://zhuanlan.zhihu.com/p/654052645
8.2.2 知识库问答实践
8.3 智能代理AI Agent
LLM Powered Autonomous Agents: https://lilianweng.github.io/posts/2023-06-23-agent/
8.3.1 智能代理的组成
8.3.2 智能代理的应用实例
第9章 LLM推理加速
9.1 注意力优化
9.1.1 FlashAttention系列
9.1.2 PagedAttention
深入理解 BigBird 的块稀疏注意力: https://www.cnblogs.com/huggingface/p/17852870.html
https://hf.co/blog/big-bird
9.2 CPU推理加速
9.2.1 Llama.c应用与代码详解
9.2.2 Llama.cpp应用与代码详解
9.2.3 ChatGLM.cpp应用与代码详解
9.3 推理优化框架
9.3.1 TensorRT-LLM应用与代码详解
9.3.2 FasterTransformer应用与代码详解
9.3.3 FastServe框架
9.3.4 vLLM推理框架实践
9.4 分布式推理
第10章 强化学习
10.1 基础
10.1.1 强化学习概述
10.1.2 强化学习与有监督学习的区别
10.2 强化学习环境
10.3 强化学习算法
10.3.1 Q-learning算法
10.3.2 SARSA算法
10.3.3 DQN算法
10.3.4 Policy Gradient算法
10.3.5 Actor-Critic算法
第11章 PPO算法与RLHF理论实战
11.1 近端策略优化算法PPO简介
PPO:Proximal Policy Optimization Algorithms.
11.1.1 策略梯度算法回顾
11.1.2 广义优势估计
11.1.3 PPO算法原理剖析
11.1.4 PPO算法对比与评价
使用PPO算法进行RLHF的N步实现细节: https://www.cnblogs.com/huggingface/p/17836295.html
11.2 基于人类反馈的强化学习RLHF框架
RLHF:Augmenting Reinforcement Learning with Human Feedback
11.2.1 RLHF的流程
11.2.2 RLHF内部剖析
11.2.3 RLHF价值分析
11.2.4 RLHF问题分析
11.2.5 数据收集与模型训练
11.2.6 开源数据
RLHF实践
https://zhuanlan.zhihu.com/p/635569455
详解大模型RLHF过程(配代码解读)
https://zhuanlan.zhihu.com/p/624589622
11.3 InstructGPT模型分析
InstructGPT:Training language models to follow instructions with human feedback
11.3.1 模型简介
11.3.2 数据收集
11.3.3 模型原理
11.3.4 模型讨论
11.4 基于PPO的正向情感倾向性
https://github.com/liucongg/ChatGPTBook/tree/main/PPOProj
11.4.1 项目任务与数据集分析
11.4.2 数据预处理模块
11.4.3 模型训练模块
11.4.4 模型生成模块
11.4.5 模型评估模块
11.5 MOSS-RLHF 实践
11.5.1 奖励模型训练
11.5.2 PPO 微调
第12章 类ChatGPT实战
12.1 任务设计
12.2 数据准备
12.3 基于文档生成问题任务的类
12.3.1 SFT阶段
12.3.2 RM阶段
12.3.3 RL阶段
https://github.com/liucongg/ChatGPTBook/tree/main/RLHFProj
第13章 语言模型训练数据
13.1 数据来源
13.1.1 通用数据
13.1.2 专业数据
13.2 数据处理
13.2.1 低质过滤
13.2.2 冗余去除
13.2.3 隐私消除
13.2.4 词元切分
13.3 数据影响分析
13.3.1 数据规模影响
13.3.2 数据质量影响
13.3.3 数据多样性影响
13.4 开源数据集合
13.4.1 Pile
13.4.2 ROOTS
13.4.3 RefinedWeb
13.4.4 SlimPajama
第14章 大语言模型评估
14.1 模型评估概述
14.2 大语言模型评估体系
14.2.1 知识与能力
14.2.2 伦理与安全
14.2.3 垂直领域评估
14.3 大语言模型评估方法
14.3.1 评估指标
14.3.2 评估方法
14.4 大语言模型评估实践
14.4.1 基础模型评估
14.4.2 SFT/RL 模型评估
第15章 大模型原生应用
15.1.1 应用调研
大模型目前落地的,第一类ChatGPT、Bart、文心一言等,主要面向ToC提供chat能力(使用场景,内容创作,代码开发)通过会员收费或按Token计费。
模型训练百模大战,最后还是需要应用落地解决问题、能够满足用户需求,甚至创造需求、创造价值。
总的来说,就是规模化、自动化人的工作,替代人工,批量化、大规模生成或提供服务。
一些思考
在企业里面做7B、13B量级的微调,主要就是在搞数据、样本,技术壁垒不高。训练壁垒高,因为需要烧钱堆经验。
在这个日新月异的时代,如何具备不可替代性是个难题:
- 稀缺性(不可替代性)
- 稳定性 (表层的技术天天变,大模型/AIGC一天一个样,但底层的理论变化不大)
- 需求不持续(需求不持久,技术过时/热度褪去,技术达不到预期 + 新鲜劲没了)
- 不能越老越吃香(放到绝大多数行业都适用,但CS这行太明显了。不能把经验积累,持续10\20年创造价值)
在快速应用落地的同时。
尽量往底层靠,学习相对不变的技术(理论上变化很难)
:计算机系统知识(训练、推理、开发,模型推理部署工程化) + 数学
【LLM】大模型落地-从理论到实践的更多相关文章
- 计算广告CTR预估系列(七)--Facebook经典模型LR+GBDT理论与实践
计算广告CTR预估系列(七)--Facebook经典模型LR+GBDT理论与实践 2018年06月13日 16:38:11 轻春 阅读数 6004更多 分类专栏: 机器学习 机器学习荐货情报局 版 ...
- 华为高级研究员谢凌曦:下一代AI将走向何方?盘古大模型探路之旅
摘要:为了更深入理解千亿参数的盘古大模型,华为云社区采访到了华为云EI盘古团队高级研究员谢凌曦.谢博士以非常通俗的方式为我们娓娓道来了盘古大模型研发的"前世今生",以及它背后的艰难 ...
- Java 理论与实践: 修复 Java 内存模型,第 2 部分(转载)
在 JSR 133 中 JMM 会有什么改变? 活跃了将近三年的 JSR 133,近期发布了关于如何修复 Java 内存模型(Java Memory Model, JMM)的公开建议.在本系列文章的 ...
- (转)【重磅】无监督学习生成式对抗网络突破,OpenAI 5大项目落地
[重磅]无监督学习生成式对抗网络突破,OpenAI 5大项目落地 [新智元导读]"生成对抗网络是切片面包发明以来最令人激动的事情!"LeCun前不久在Quroa答问时毫不加掩饰对生 ...
- Java 理论与实践: 并发集合类
Java 理论与实践: 并发集合类 DougLea的 util.concurrent 包除了包含许多其他有用的并发构造块之外,还包含了一些主要集合类型 List 和 Map 的高性能的.线程安全的实现 ...
- Deep Learning中的Large Batch Training相关理论与实践
背景 [作者:DeepLearningStack,阿里巴巴算法工程师,开源TensorFlow Contributor] 在分布式训练时,提高计算通信占比是提高计算加速比的有效手段,当网络通信优化到一 ...
- 监督学习——决策树理论与实践(下):回归决策树(CART)
介绍 决策树分为分类决策树和回归决策树: 上一篇介绍了分类决策树以及Python实现分类决策树: 监督学习——决策树理论与实践(上):分类决策树 决策树是一种依托决策而建立起来的一种 ...
- 高翔《视觉SLAM十四讲》从理论到实践
目录 第1讲 前言:本书讲什么:如何使用本书: 第2讲 初始SLAM:引子-小萝卜的例子:经典视觉SLAM框架:SLAM问题的数学表述:实践-编程基础: 第3讲 三维空间刚体运动 旋转矩阵:实践-Ei ...
- 推荐系统系列(四):PNN理论与实践
背景 上一篇文章介绍了FNN [2],在FM的基础上引入了DNN对特征进行高阶组合提高模型表现.但FNN并不是完美的,针对FNN的缺点上交与UCL于2016年联合提出一种新的改进模型PNN(Produ ...
- 【C#代码实战】群蚁算法理论与实践全攻略——旅行商等路径优化问题的新方法
若干年前读研的时候,学院有一个教授,专门做群蚁算法的,很厉害,偶尔了解了一点点.感觉也是生物智能的一个体现,和遗传算法.神经网络有异曲同工之妙.只不过当时没有实际需求学习,所以没去研究.最近有一个这样 ...
随机推荐
- Java - CodeForces - 1230A
题目: Dawid有了 4 包糖果.第 i 包里面有 Ai 个糖果. Dawid想把这四包糖果送给两个朋友,能否让两个朋友收到相同数量的糖果?注意,不能拆开任何一包糖,不能把糖果留给自己或扔掉,四包糖 ...
- 资深工程师 VSCode C/C++ 必备开发插件
1.前言 俗话说"工欲善其事,必先利其器",下面介绍几个VSCode提高开发效率的插件,资深工程师必备. 2.基础插件 2.1.Chinese(Simplified) vscode ...
- Linux使用wget命令下载网络资源
之前接触的Linux环境大多是内网,一般都是采用传统的FTP服务器统一存放常用资源,有人需要时从FTP直接下载,若公司FTP没有想要的资源,还需联系管理维护人员下载上传对应的介质. 而目前随着云ECS ...
- 21.1 动态TLS--《Windows核心编程》
应用程序通过调用一组4个函数来使用动态 TLS,这些函数实际上最经常为 DLL 所使用. 通常情况下,如果DLL使用 TLS,那么当它用 DLL_PROCESS_ATTACH 标志调用它的 DllMa ...
- Linux-Shell 小数运算,四舍五入
在shell中做小数运算,可以借助bc 或者awk工具 一.使用bc做小数运算,scale指定小数点位数 1.加法运算(scale参数无效) #echo "5.999 + 5.001&quo ...
- NC16666 [NOIP2006]开心的金明
题目链接 题目 题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:"你的房间需要购买哪些物品,怎么布置,你说了算,只 ...
- Js的GC机制
Js的GC机制 在Js七种基本类型中的引用类型Object的变量其占据内存空间大且大小不固定,在堆内存中实际存储对象,在栈内存中存储对象的指针,对于对象的访问是按引用访问的.在栈区中执行的变量等是通过 ...
- Idea:Fetch failed: fatal: Could not read from remote repository
今天在idea工具中fetch github仓库报错:Fetch failed: fatal: Could not read from remote repository 查了以下需要调整下setti ...
- 分享一个Github相关彩蛋
楼上很多回答 都是基于手把手实操Github.Git源代码管理相关, 这些操作"无他,唯手熟尔". 今天提供一个github上阅读源码的小技巧,逆天级别的彩蛋. 要想成为大神,Gi ...
- 升级 vcpkg 遇到的一些坑
项目上有个需求要用到 wil 库,于是打开 cmd 输入: vcpkg install wil:x86-windows-static 等了很久,一直卡在配置命令 连续试了好几遍,还是不行,安装其他的静 ...

