最近自己在学习大模型,会从推理、部署、微调,最后实现微调后成功调用工具。
大模型 ( Large Model )是指具有大规模参数和复杂计算结构的机器学习模型。 这些模型通常由深度神经网络构建而成,拥有数十亿甚至数千亿个参数。大模型通过训练海量数据来学习复杂的模式和特征,具有更强大的泛化能力,可以对未见过的数据做出准确的预测。
大语言模型 (Large Language Model): 通常是具有大规模参数和计算能力的自然语言处理模型,例如 OpenAI 的 GPT-3 模型。这些模型可以通过大量的数据和参数进行训练,以生成人类类似的文本或回答自然语言的问题。大型语言模型在自然语言处理、文本生成和智能对话等领域有广泛应用。
GPT ( Generative Pre-trained Transformer ): GPT 和 ChatGPT 都是基于 Transformer 架构的语言模型,但它们在设计和应用上存在区别:GPT 模型旨在生成自然语言文本并处理各种自然语言处理任务,如文本生成、翻译、摘要等。它通常在单向生成的情况下使用,即根据给定的文本生成连贯的输出。
ChatGPT : ChatGPT 则专注于对话和交互式对话。它经过特定的训练,以更好地处理多轮对话和上下文理解。ChatGPT 设计用于提供流畅、连贯和有趣的对话体验,以响应用户的输入并生成合适的回复。
本地部署大模型涉及三个方面需求:训练、微调和推理,其中
- 训练:算力最密集,消耗的算力通常是推理过程的至少三个数量级以上;
- 微调:算力需求低于训练,但高于推理;
- 推理:算力消耗最低;
国盛证券的报告《Chatgpt 需要多少算力》中估算,GPT-3训练一次的成本约为140万美元,对于一些更大的 LLM 模型,训练成本介于200万美元至1200万美元之间。
一、软硬件需求
1.硬件
-
租用在线GPU服务,通过云计算平台获取大模型所需的计算能力;
-
配置个人计算机或服务器,组建一个适合大模型使用需求的计算机系统;
-
GPU和CPU
**CPU** **(** **Central Processing Unit** **)** :
-
少核高频:CPU通常有较少的核心数(例如4到16个核心),但每个核心的频率较高。
-
复杂控制单元:CPU的核心具有复杂的控制单元,能够高效地处理复杂的指令和任务调度。
-
缓存层次:CPU有大容量的缓存(L1、L2、L3),用于加速数据访问和指令执行。
**GPU** **(** **Graphics Processing Unit** **)** :
-
多核低频:GPU有成千上万个小核心,每个核心的频率较低,但可以同时执行大量简单指令。
-
SIMD架构:GPU采用单指令多数据(SIMD)架构,适合并行处理大规模的数据。
-
专用硬件单元:GPU有专门用于纹理处理、光栅化、像素着色等图形任务的硬件单元。
-
大模型领域这种生成式人工智能,需要强大的算力来生成文本、图像、视频等内容,训练这样的模型需要的是GPU+计算架构,比如NVIDIA的GPU和CUDA计算架构。比如ChatGPT,训练过程中涉及大量的矩阵运算,本身并不难,但是量很大,需要的是强力的GPU结合CUDA(Compute Unified Device Architecture)计算平台来执行高效的AI计算。
显卡型号怎么选?
当前主要有NVIDIA和AMD两家GPU厂商,由于CUDA的存在,在大模型领域NVIDIA的显卡就是刚需。目前A系列和H系列均禁售,选择4090和3090这种消费级显卡,在深度学习领域同样出色,性价比更高
-
做大模型训练,GeForce RTX 4090不行,主要是4090的内存带宽、通信带宽和延迟在并行训练中与A100差距大
-
做大模型推理,GeForce RTX 4090性价比高于A100
-
做大模型微调,最好A100,GeForce RTX 4090也可以,但是需要多卡
匹配GPU的标准是:根据应用需求,先关注显存大小,必须满足官方的最低显存要求。超算级别显卡A100、H100、A800、H800为80G显存,消费级显卡中,4090和3090显存为24GB。
以ChatGLM-6B模型为例,官方给出的硬件配置说明如下:
量化登记 | 推理时GPU显存占用 | 微调时GPU显存占用 |
---|---|---|
单精度 | 20G | 22G |
半精度 | 13G | 14G |
INT 8 | 8G | 9G |
INT 4 | 6G | 7G |
进行少量对话时,可以采用单机单卡:
量化登记 | 推理时GPU显存占用 | 微调时GPU显存占用 | 最低显卡配置 | 显卡显存 |
---|---|---|---|---|
单精度 | 20G | 22G | 4090 | 24G |
半精度 | 13G | 14G | 3090 | 24G |
INT 8 | 8G | 9G | 2080Ti | 11G |
INT 4 | 6G | 7G | 2060s | 8G |
进行多轮对话时,可以采用单机多卡:
量化登记 | 推理时GPU显存占用 | 微调时GPU显存占用 | 最低显卡配置 | 显卡显存 |
---|---|---|---|---|
单精度 | 30G | 22G | 3090双卡 | 48G |
半精度 | 20G | 14G | 3090 | 24G |
INT 8 | 12G | 9G | 3080Ti | 12G |
INT 4 | 10G | 7G | 2080Ti | 11G |
2.软件
-
操作系统 Ubuntu>Windows
-
编程语言Python为主,如何配置编程环境?
-
推荐使用anaconda管理python环境
-
pytorch:在NLP领域,huggingface社区的开源的transformers库使用pytorch实现了市面上绝大多数开源的预训练模型
二、Ollama运行
1.安装ollama
macOS
Windows preview
Linux
curl -fsSL https://ollama.com/install.sh | sh
2.启动大模型
ollama run llama3.1
3.推理
产生响应:
curl http://localhost:11434/api/generate -d '{
"model": "llama3.1",
"prompt":"Why is the sky blue?"
}'
与模型对话:
curl http://localhost:11434/api/chat -d '{
"model": "llama3.1",
"messages": [
{ "role": "user", "content": "why is the sky blue?" }
]
}'
二、Hugging Face+ChatGLM3-6B
我的配置:
NVIDIA GeForce RTX 2080 Ti
13th Gen Intel® Core™ i7-13700KF
1.部署
-
安装Ubuntu
-
安装显卡驱动
sudo apt install gcc
sudo apt install g++
sudo apt install make
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
此时可以通过nvidia-smi查看最高兼容的cuda版本
- 安装anaconda
- 安装pytorch
需要与本地的CUDA版本相匹配,可以到pytorch.org/get-started...中查看适合的版本
验证Pytorch安装结果
-
下载模型demo工程
#安装git
https://github.com/THUDM/ChatGLM3
#单独创建文件夹
sudo mkdir /opt/chatglm3
#进入目录、下载工程
git clone https://github.com/THUDM/ChatGLM3.git
#安装依赖
cd ChatGLM3
pip install -r requirements.txt
#新建文件夹保存模型,去HF下载前需要先安装git-lfs(large file storage)与初始化
sudo mkdir chatglm3-6b
sudo apt-get install git-lfs
可以从Hugging Face中手动下载模型二进制文件、权重文件,速度会比pip快。也可以从魔塔下载。
PyTorch模型中的safetensors文件和bin文件区别
safetensors文件
格式:safetensors是PyTorch框架中的一种文件格式,用于安全地保存和加载张量数据。
用途:它通常用于存储模型的权重和其他参数,确保数据在保存时不会丢失精度,并且在不同的系统和设备之间具有更好的兼容性。
特点:safetensors格式的文件可能包含了一些额外的元数据,用于验证数据的完整性和一致性。
bin文件
格式:bin是一种通用的二进制文件格式,它可以被用来存储各种类型的数据,包括但不限于模型权重。
用途:在PyTorch中,.bin文件通常与模型的配置文件一起使用,用于保存和加载预训练模型的权重。
特点:bin文件不特定于PyTorch,它不包含用于验证的元数据,因此在跨平台使用时可能需要额外的处理来确保兼容性和数据的正确性。
结论
主要区别:safetensors文件是PyTorch特有的,更注重数据的安全性和兼容性;而bin文件是一种更通用的二进制格式,可能用于多种不同的应用场景。
在PyTorch模型中的使用:两者都可以用来保存模型参数,但safetensors可能提供了更多关于数据安全和校验的特性。
Qwen2的模型文件中就没有bin文件(关于Instruct后缀:指示学习(Instruct Learning)和提示(Prompt Learning)学习区别)
2.推理
利用python命令可以直接运行工程中的demo文件。
注意:官方demo工程中加载的都是Hugging Face上的模型文件,由于我们已经下载到本地,所以可以改成加载本地的模型文件来启动。
3.微调
3.1什么是大模型微调?
大模型微调(Fine-tuning)是指在已经预训练好的大型语言模型基础上,使用特定的数据集进行进一步的训练,以使模型适应特定任务或领域。
其根本原理在于,机器学习模型只能够代表它所接收到的数据集的逻辑和理解,而对于其没有获得的数据样本,其并不能很好地识别/理解,且对于大模型而言,也无法很好地回答特定场景下的问题。
例如,一个通用大模型涵盖了许多语言信息,并能够进行流畅的对话。但是如果需要医药方面能够很好地回答患者问题的应用,就需要为这个通用大模型提供很多新的数据以供学习和理解。例如,布洛芬到底能否和感冒药同时吃?为了确定模型可以回答正确,我们就需要对基础模型进行微调。
3.2为什么需要微调?
预训练模型(Pre-trained Model),或者说基础模型(Foundation Model),已经可以完成很多任务,比如回答问题、总结数据、编写代码等。但是,并没有一个模型可以解决所有的问题,尤其是行业内的专业问答、关于某个组织自身的信息等,是通用大模型所无法触及的。在这种情况下,就需要使用特定的数据集,对合适的基础模型进行微调,以完成特定的任务、回答特定的问题等。在这种情况下,微调就成了重要的手段。
3.3怎么微调?
分类
根据微调对整个预训练模型的调整程度,微调可以分为全微调和重用两个方法:
-
全微调(Full Fine-tuning):全微调是指对整个预训练模型进行微调,包括所有的模型参数。在这种方法中,预训练模型的所有层和参数都会被更新和优化,以适应目标任务的需求。这种微调方法通常适用于任务和预训练模型之间存在较大差异的情况,或者任务需要模型具有高度灵活性和自适应能力的情况。Full Fine-tuning需要较大的计算资源和时间,但可以获得更好的性能。
-
部分微调(Repurposing):部分微调是指在微调过程中只更新模型的顶层或少数几层,而保持预训练模型的底层参数不变。这种方法的目的是在保留预训练模型的通用知识的同时,通过微调顶层来适应特定任务。Repurposing通常适用于目标任务与预训练模型之间有一定相似性的情况,或者任务数据集较小的情况。由于只更新少数层,Repurposing相对于Full Fine-tuning需要较少的计算资源和时间,但在某些情况下性能可能会有所降低。
PEFT(Parameter-Efficient Fine-Tuning)是一种针对大型模型参数高效微调的技术,旨在解决全参数微调(Full Fine-Tuning)在大型模型上占用大量显存且速度慢的问题。PEFT通过优化模型的部分参数,而不是全部参数,从而实现了在保持模型性能的同时,减少计算资源和时间的消耗。PEFT方法主要包括LoRA(Low-Rank Adaptation)、Prefix-Tuning、Prompt-Tuning、Adapter等,这些方法各有特点,适用于不同的应用场景。
具体方法
LoRA微调
LoRA(Layer-wise Relevance Adjustment)微调是一种特定于语言模型的微调技术,旨在解决传统微调方法中的一些问题,如过拟合、灵活性不足等。LoRA微调技术由Google AI提出,并用于改进BERT(Bidirectional Encoder Representations from Transformers)等语言模型。
LoRA微调的主要思想是在微调阶段,根据任务的需求,逐层地调整不同层的重要性,以提高模型在特定任务上的性能。与传统微调方法不同,LoRA微调并不是简单地调整所有参数的学习率或者解冻所有层进行端到端的微调,而是根据每层的重要性和贡献程度来调整学习率。
P-tuning v2微调
P-tuning v2 是一种改进版的模型微调方法,旨在提高多语言模型的性能和泛化能力。该技术由北京大学的研究人员提出,用于改进跨语言和多语言任务中的预训练模型微调效果。
P-tuning v2 是 P-tuning(Parameter tuning)技术的升级版本,在原有 P-tuning 的基础上进行了改进和优化。P-Tuning仅对大模型的Embedding加入新的参数。P-Tuning-V2,将大模型的Embedding和每一层前都加上新的参数。
Adapter 微调
Adapter 微调技术最早由Pfeiffer 等人在2019年的一篇论文中提出。在这篇论文中,作者介绍了 Adapter 微调技术,并提出了 AdapterHub 框架,用于快速且有效地应用 Adapter 微调技术于不同的预训练模型和自然语言处理任务中。这个框架使得研究人员和从业者能够更轻松地利用适配器微调技术来适应各种任务,而无需重新训练整个模型,从而大大提高了模型的适应性和可用性。
Adapter 微调技术是一种用于微调预训练模型的方法,它旨在减少对整个模型参数的修改,而是专注于修改一小部分的参数。这种方法的主要思想是在预训练模型的基础上添加称为适配器的小型参数集合,用于特定任务的微调。
微调的步骤
大部分的大模型微调,都有以下几个主要步骤:
-
准备数据集:收集和准备与目标任务相关的训练数据集。确保数据集质量和标注准确性,并进行必要的数据清洗和预处理。
-
选择预训练模型/基础模型:根据目标任务的性质和数据集的特点,选择适合的预训练模型。
-
设定微调策略:根据任务需求和可用资源,选择适当的微调策略。考虑是进行全微调还是部分微调,以及微调的层级和范围。
-
设置超参数:确定微调过程中的超参数,如学习率、批量大小、训练轮数等。这些超参数的选择对微调的性能和收敛速度有重要影响。
-
初始化模型参数:根据预训练模型的权重,初始化微调模型的参数。对于全微调,所有模型参数都会被随机初始化;对于部分微调,只有顶层或少数层的参数会被随机初始化。
-
进行微调训练:使用准备好的数据集和微调策略,对模型进行训练。在训练过程中,根据设定的超参数和优化算法,逐渐调整模型参数以最小化损失函数。
-
模型评估和调优:在训练过程中,使用验证集对模型进行定期评估,并根据评估结果调整超参数或微调策略。这有助于提高模型的性能和泛化能力。
-
测试模型性能:在微调完成后,使用测试集对最终的微调模型进行评估,以获得最终的性能指标。这有助于评估模型在实际应用中的表现。
-
模型部署和应用:将微调完成的模型部署到实际应用中,并进行进一步的优化和调整,以满足实际需求。
3.4本地微调实践
数据集
暂时无法在飞书文档外展示此内容
暂时无法在飞书文档外展示此内容
解析后的数据集
暂时无法在飞书文档外展示此内容
暂时无法在飞书文档外展示此内容
CUDA_VISIBLE_DEVICES=0 NCCL_P2P_DISABLE="1" NCCL_IB_DISABLE="1" python finetune_hf.py data/AdvertiseGen_fix /media/zr/Data/Models/LLM/chatglm3-6b configs/lora.yaml
CUDA_VISIBLE_DEVICES=0 NCCL_P2P_DISABLE="1" NCCL_IB_DISABLE="1" python finetune_hf.py data/AdvertiseGen_fix ../chatglm3-6b configs/lora.yaml
参数说明
CUDA_VISIBLE_DEVICES=0 表示对于cuda来说本次微调只会用到第0个GPU
NCCL_P2P_DISABLE="1" 表示关闭P2P传输,使用在GPU之间直接利用CUDA访问
NCCL_IB_DISABLE**=**"1" 表示关闭IB/RoCE传输,使用IP套接字代替。
NCCL是NVIDIA集合通信库(NVIDIA Collective Communications Library)的简称,是用于加速多GPU之间通信的库,能够实现集合通信和点对点通信。
#报错缺依赖就装
pip install ruamel.yaml
pip install nltkpip install rouge_chinese
显存不够,尝试量化后微调
修改文件:finetune_hf.py
pip install bitsandbytes
int4量化后训练还是提示GPU内存不够,应该是量化有问题,但是找不到资料(下面证实量化没问题)
3.5 上云微调
选了PAI-DSW:技工交互式变成环境,内置了Jupyter Lab、WebIDE及Terminal,同时提供底层的sudo权限
选择了V100的GPU,显存是16G, 注意,服务器上本身已经安装了很多相关的依赖,但是跟我们需要的版本不一定兼容,一定要使用conda建个干净的环境自己装依赖。
wget https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Linux-x86_64.sh
---用conda建个新环境
mkdir /opt/chatglm3
cd /opt/chatglm3
git clone https://github.com/THUDM/ChatGLM3.git
pip install -r requirements.txt
cd /opt/chatglm3/ChatGLM3/
git clone https://www.modelscope.cn/ZhipuAI/chatglm3-6b.git
cd /opt/chatglm3/ChatGLM3/finetune_demo/
pip install -r requirements.txt
mkdir data
cd /opt/chatglm3/ChatGLM3/finetune_demo/data
wget https://cloud.tsinghua.edu.cn/seafhttp/files/c69126d6-6464-43ca-8a55-c2e073294784/AdvertiseGen.tar.gz
tar -zxvf AdvertiseGen.tar.gz
cd /opt/chatglm3/ChatGLM3/finetune_demo
touch parse.py
vim parse.py -- 增加解析代码
python parse.py
cd /opt/chatglm3/ChatGLM3/finetune_demo
CUDA_VISIBLE_DEVICES=0 NCCL_P2P_DISABLE="1" NCCL_IB_DISABLE="1" python finetune_hf.py data/AdvertiseGen_fix ../chatglm3-6b configs/lora.yaml
直接微调还是内存不足,但是量化后可以进行微调
此时显示显存占用确实也是11GB,说明我量化代码找对了,但是显存太极限11560>11264。
然而量化后微调进度到达17%会报错,显示代码传参有问题,但是是底层代码了,直接放弃不看了。(后面在A10上也复现了,这个17%是刚好checkpoint到500到存储中间结果,然后环境自带的依赖不兼容导致的问题,解决方案就是用conda自己装依赖)
换A10显卡,这个有24G显存,不过申请好在服务器上显示只有22G。
这样看来,直接微调需要大概19G的显存
训练完成后的输出信息
使用微调后的模型进行推理
3.6模型合并与保存(todo)
接下来会学习如何把lora训练好的模型进行合并,部署到本地。
如何系统的去学习大模型LLM ?
大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 "AI会取代那些行业
?""谁的饭碗又将不保了?
"等问题热议不断。
事实上,抢你饭碗的不是AI,而是会利用AI的人。
继科大讯飞、阿里、华为
等巨头公司发布AI产品后,很多中小企业也陆续进场!超高年薪,挖掘AI大模型人才! 如今大厂老板们,也更倾向于会AI的人,普通程序员,还有应对的机会吗?
与其焦虑......
不如成为「掌握AI工具的技术人
」,毕竟AI时代,谁先尝试,谁就能占得先机!
但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高。
针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料
分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程
等, 😝有需要的小伙伴,可以 扫描下方二维码 领取🆓**↓↓↓**
一、LLM大模型经典书籍
AI大模型已经成为了当今科技领域的一大热点,那以下这些大模型书籍就是非常不错的学习资源。
二、640套LLM大模型报告合集
这套包含640份报告的合集,涵盖了大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(几乎涵盖所有行业)
三、LLM大模型系列视频教程
四、LLM大模型开源教程(LLaLA/Meta/chatglm/chatgpt)
LLM大模型学习路线 ↓
阶段1:AI大模型时代的基础理解
-
目标:了解AI大模型的基本概念、发展历程和核心原理。
-
内容:
- L1.1 人工智能简述与大模型起源
- L1.2 大模型与通用人工智能
- L1.3 GPT模型的发展历程
- L1.4 模型工程
- L1.4.1 知识大模型
- L1.4.2 生产大模型
- L1.4.3 模型工程方法论
- L1.4.4 模型工程实践
- L1.5 GPT应用案例
阶段2:AI大模型API应用开发工程
-
目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
-
内容:
- L2.1 API接口
- L2.1.1 OpenAI API接口
- L2.1.2 Python接口接入
- L2.1.3 BOT工具类框架
- L2.1.4 代码示例
- L2.2 Prompt框架
- L2.3 流水线工程
- L2.4 总结与展望
阶段3:AI大模型应用架构实践
-
目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
-
内容:
- L3.1 Agent模型框架
- L3.2 MetaGPT
- L3.3 ChatGLM
- L3.4 LLAMA
- L3.5 其他大模型介绍
阶段4:AI大模型私有化部署
-
目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
-
内容:
- L4.1 模型私有化部署概述
- L4.2 模型私有化部署的关键技术
- L4.3 模型私有化部署的实施步骤
- L4.4 模型私有化部署的应用场景
这份 LLM大模型资料
包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程
等, 😝有需要的小伙伴,可以 扫描下方二维码 领取🆓**↓↓↓**