大模型简介
大模型是单个具有庞大参数数量的神经网络模型,不是由多个小模型组成的。
大型神经网络模型通过庞大的规模和复杂的网络架构,能够在单一框架内学习和处理极其广泛和复杂的数据和任务,捕捉和学习数据中的深层次模式和关系。
参数规模:千亿-万亿数量的参数
训练数据:涉及多领域的庞大数据量,数据多样化,以保证模型良好的泛化能力
计算资源:需要庞大的计算资源训练资源,需要多个高性能的GPU或TPU进行并行训练,需要持续数周或数月。
大模型与单独模型的差异
大模型与单独模型的差异表现在规模、复杂性、训练数据量、计算资源需求、应用范围等。
- 模型规模:大模型已到达千亿参数规模
- 架构复杂:大模型采用更加复杂的架构,如transformer架构,有效处理序列数据,捕捉长距离依赖关系。
- 数据需求:为避免过拟合,具有更好的泛化能力,大模型需要十亿到万亿规模的数据。
- 计算资源:大模型需要巨大的资源,训练周期以周或月为单位
- 泛化能力:大模型由于庞大的参数和复杂的数据处理能力,具有更好的泛化能力。
- 多任务学习:大模型不需要针对特定任务重新学习或微调,以前的单独模型则需要为每个任务单独训练模型。
- 可解释性:大模型内部的决策过程难以解释和理解。小模型则容易分析和理解。
大模型和小模型的训练过程的步骤基本一致。
学习策略
基础知识
大模型以机器学习、深度学习为基础,这些在google tensorflow学习者教程中都有。
嵌入的概念:将资源(如文本、音视频)转换数字形式,即某固定长度的向量。
大模型的历史和演进
2017年Transformer模型,大模型发展的重大里程碑,引入自注意力机制。在处理序列化数据时,为每个元素分配不同的注意力权重。 处理长距离依赖关系时表现出色,极大提高模型处理自然语言处理任务(NLP)的能力。
2018年google BERT模型,基于transformer,引入双向训练概念,模型在学习一个词时,同时考虑前边和后边的上下文信息。当时NLP处理很出色。
GPT由openai开发,是一系列基于transformer的大语言模型。采用预训练加微调的模式。首先是在大规模语料集上进行预训练,学习语言的通用模式和结构,然后在特定任务上进行微调。
Llama由meta开发
Phi由微软开发
演进过程
- 自注意力机制 transformer
- 双向上下文理解 bert
- 预训练加微调 gpt
- 层次化结构 都是通过层次化的设计,有效支持神经网络结构参数规模的增加。
GPT工作原理
预训练
庞大的语言文本库训练大模型,目标是预测出给定文本的下一个词。学习到丰富的语言知识和世界知识。
微调
使用具体任务的数据集合对大模型进一步训练,以调整参数。微调使GPT在各种NLP任务上表现出色,例如文本分类、问答、文本生成等。这个微调过程与训练大模型的步骤类似,差异在于需要基于现有大模型和遵循训练模型时的数据格式。
生成文本:根据文本前缀生成下一个词,然后把新生成的词作为下一次生成的一部分输入,如此循环直到生成结束符或达到预定长度。
python语言
机器学习库
tensorflow
pyTorch
调用大模型接口
例如openai
提示词:明确的描述想要做什么。
提示词的基本原则
- 展示和描述:通过说明、示例,明确想要什么。例如想按照字母排序或者按情感对段落分类。
- 提供质量数据:例如试图构建一个分类器或让模型遵循一种模式,需要给出足够的例子。
- 检查设置: temperature and top_p会影响模型如何产生一个响应。
所以改善结果满足预期的方式,和上述三个原则密切相关。
- 产生的结果和你期待的是否接近
- 是否提供了足够的例子
- 检查例子是否有错误
- temperature and top_p是否正确
了解大模型的训练过程
GPT系列模型的训练流程可粗略分为四个阶段:预训练、有监督微调、奖励建模、强化学习。
- 预训练(Pretraining)
让模型通过自监督学习的方式,从大规模文本数据中获得与具体任务无关的知识和语言能力,得到一个基础模型。
- 二次预训练
在原模型的基础上,再次使用某种语言的大规模文本资料进行训练,即为二次预训练。例如基于llama使用中文语料进行二次预训练,得到chinese-llama基础模型。
- 有监督微调(Supervised Fine-Tune,SFT)
根据标注的有监督微调数据集对基础模型进行有监督的微调,得到SFT模型。
- 奖励建模(Reward Modeling,RM)
收集人工标注的对比数据,训练奖励模型。
- 强化学习(Reinforcement Learning,RL)
基于奖励模型,使用近端策略优化(Proximal Policy Optimization,PPO)算法进行强化学习,得到RL模型。
要在具体业务上使用大模型,需要做的是如何微调。
关注领域动态
开源与工具
向量数据库
向量即为一组数字、一个数字列表,可以表示多维空间中的一个点。
向量数据库用于存储向量。
传统数据库用于精准匹配,向量数据库用于相似性匹配。
ollama获取、运行大模型、访问大模型接口
下载安装ollama后,执行ollama run 模型名称,即可下载模型和运行模型,且提供一个端口接口访问
例如ollama run llama3:70b 将下载30G大小的模型,运行成功后可在命令行与模型交互,提供11434端口接口http请求。
curl -X POST http://localhost:11434/api/generate -d '{
"model": "llama3:70B",
"prompt":"Why is the sky blue?"
}'
LLaMA-Factory大模型微调
https://github.com/hiyouga/LLaMA-Factory/tree/main
LLM-And-More从创意到服务的一站式LLM解决方案
用户可以轻松地通过本项目进行模型训练并一键生成所需的产品服务
https://github.com/IceBearAI/LLM-And-More
MaxKB快速搭建基于LLM的知识库问答系统
https://gitee.com/fit2cloud-feizhiyun/MaxKB
hf-mirror模型镜像
基于LLM开发应用的框架
Langchain(py)
需要要编写py code,没有可视化配置页面。
dify(py)
配置页面https://github.com/langgenius/dify
使用
git clone https://github.com/langgenius/dify.git
cd dify
cd docker
(启动docker)
docker compose up -d
浏览器访问localhost
ccchhhlll1988@163.com/chl_admin/chl_admin_123
创建营运后选择模型,一部分是需要输入api key的某些公司的大模型服务,一种是运行大模型的工具(例如ollama),前者收费,后者本地运行超慢超时,无法继续配置。
flowise(js)
配置页面
尝试
搭建知识库问答系统
docker安装maxkb
ollama运行llama3
maxkb配置API域名 http://host.docker.internal:11434
电脑配置为apple m2 pro+16G内存,本地运行大模型,交互回馈超级慢。
使用transformers运行大模型
pip3 install --index-url http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com transformers torch accelerate
test.py 来自hf-mirror的示例
命令行执行HF_ENDPOINT=https://hf-mirror.com python test.py
结果:下载模型很久,下载中,下载模型失败
收获:一种运行大模型的方式
LLama-Factory尝试
github clone ok
找不到llamafactory-cli,没有找到如何安装
使用docker方式部署,下载时间长,docker打包中。耗时7个小时,最终失败。
failed to fetch anonymous token: unexpected status from GET request to https://authn.nvidia.com/token?scope=repository%3Anvidia%2Fpytorch%3Apull%2Cpush&service=registry: 401 Unauthorized
思考:是否可以提供如下格式的一批数据集,进行微调,得到一个可以解析条款pdf的模型。
思考:大模型微调成本很大,可更新知识库以增强大模型对业务的支持。
如何更新知识库?
Langchain,基于LLM开发应用的框架。
RGA Retrieval Augmented Generation 检索增强生成
使用RGA支持特定业务问答系统。
https://python.langchain.com/v0.1/docs/use_cases/question_answering/
典型的RAG应用有两个部分,索引部分、检索和生成部分。
索引部分:加载、分段、嵌入(转换为固定长度的数值向量)与存储。
检索与生成
检索:根据用户输入,找到相似性分段
生成:提词+用户输入+相似分段,用大模型得到答案
参考:https://zhuanlan.zhihu.com/p/655409035
涉及文本相似性,将相似文档交给大模型进行总结。
Extracting structured output提取结构化输出
将文本(例如PDF、http返回值)提取为符合既定scheme的结构化输出。
Extracting structured output | 🦜️🔗 LangChain
支持长文本、文件、定义scheme、依据样例
MaxKB+Ollama
优点是页面操作,不需要编写脚本。
智能体agent
agent允许LLM自主决定如何完成任务。agent决定执行哪些操作,然后执行操作,观察结果,并重复这个过程,直到任务完成。