1 LLM模型
1.1 概述
Large Language Model(LLM)
,也称为大型语言模型
,是一种基于机器学习和自然语言处理技术的模型,它通过对大量的文本数据进行训练,来学习服务人类语言理解和生成的能力
LLM的核心思想是通过大规模的无监督训练来学习自然语言的模式和语言结构,这在一定程度上能够模拟人类的语言认知和生成过程
与传统的NLP模型相比,LLM能够更好地理解和生成自然文本,同时还能够表现出一定的逻辑思维和推理能力
近年来,LLM得到了广泛的应用,其中最具代表性的是谷歌的BERT和OpenAI的GPT系列。这些模型在多个自然语言处理领域已经取得了显著的成果,包括文本分类、命名实体识别、情感分析、机器翻译、自动问答等
然而,在实际应用中,LLM面临着更多的挑战
- 首先,LLM需要大量的计算资源和大规模的数据集来训练,这对于一般的企业和个人来说十分困难
- 其次,由于LLM模型的复杂性和计算量较大,对于实时的语言处理应用来说,LLM在应用效率和响应速度上还存在一定的局限性
因此,如何解决模型训练和应用过程中的计算性能和效率问题,是LLM面临的主要挑战之一
1.2 主要应用
LLM在实际应用中有多种形式,以下是一些具体的示例:
- 自然语言理解:通过语法词汇、句法语义、语境等相互作用,使计算机能够理解人类语言。如通过语音合成功能,实现文字转语音的技术。另外,基于LLM技术的英语学习App可以针对不同的用户让机器进行自适应教学,帮助用户更加高效地学习英语
- 机器翻译:LLM可以利用大量的文本数据进行翻译学习,提高翻译准确度和语音翻译度,同时加速翻译速度,例如谷歌翻译等体验都有明显提升
- 情感分析:LLM技术可以通过对大量数据进行分析,实现对人们在社交媒体上对商品、服务和品牌等的评价,从而帮助企业了解消费者的心态,并根据情感信息来优化其营销策略
- 机器学习语音识别:在语音识别领域,LLM技术可以通过深度学习算法等技术改进,从而在分辨率、声音重叠、噪音和复杂语音语言中实现更好的语音识别效果。同时,在语音交互上,也可以进行一些基于LLM的定制,例如智能音箱、语音接待员和客户服务机器人等
- 文本生成:LLM技术在文本生成方面的应用可以在文本摘要、翻译和自动化写作等方面进行适用。例如,LLM模型可以从短篇小说的背景信息中自动生成描述、对话等内容,同时还可以通过对不同风格的文本进行学习,并从中学习创造性的文本生成
2 GPU环境
2.1 阿里云
购买一台自己的GPU服服务器
购买阿里云服务器可以通过以下步骤进行:
访问阿里云官网并注册一个账户
登录您的阿里云账户,选择"产品与服务",然后选择"云服务器 ECS"
在云服务器ECS页面上,您可以选择不同的实例类型和配置,根据您的需求选择适合的服务器规格。这些规格包括CPU、内存、存储空间等
配置网络和安全组,您可以设置网络类型、公网带宽、IP地址等
根据您的需求选择购买时长,可以选择包年包月或按小时计费,这里如果只是为了测试或玩一玩,可以选择最便宜的方式
配置系统和软件,您可以选择操作系统和其他软件预装选项
查看订单和价格,确认无误后,点击"立即购买"
在支付页面选择合适的支付方式完成购买
完成支付后,您将收到购买服务器的确认信息和服务器登录凭证
安装基础的python环境
首先复制公网ip,使用ssh工具连接自己的服务器,用户名默认是root,密码为自定义密码,登陆进来首先会系统初始化GPU环境,等待完成后会自动重启
自动重启后,可以用
nvidia-smi
查看nvidia驱动配置安装git,后面很多项目或者模型下载会用到,包括git lfs
# 安装git yum install git -y # 安装git lfs(大文件下载) curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.rpm.sh | sudo bash yum install git-lfs git lfs install
安装anaconda,并创建自己的python环境
# 安装anaconda环境 wget https://repo.anaconda.com/archive/Anaconda3-2023.03-1-Linux-x86_64.sh chmod +x Anaconda3-2023.03-1-Linux-x86_64.sh ./Anaconda3-2023.03-1-Linux-x86_64.sh # 创建自己的python环境 conda create -n gpt310 python=3.10 anaconda
安装pytorch,这里的cuda选cu117,因为上面的服务器的cuda是11.4的,这里的cu117是可以向下兼容的
# 切换到gpt310 source activate gpt310 # 安装gpu版的pytorch, 需要在GPU环境下安装,否则安装是cpu版本 pip install torch==2.0.0+cu117 torchvision==0.15.1+cu117 torchaudio==2.0.1 --index-url https://download.pytorch.org/whl/cu117
在Python中导入PyTorch并检查CUDA是否可用
import torch # 检查PyTorch是否使用了CUDA if torch.cuda.is_available(): print("CUDA可用") else: print("CUDA不可用")
还可以使用
torch.cuda.get_device_capability()
函数来获取计算机上支持的CUDA设备的计算能力。这可以帮助您确定所安装的CUDA版本是否与您的显卡兼容
用完机器记得关机,不然会一直扣费
2.2 AutoDL
AutoDL平台简介
AutoDL算力平台
是指为自动化深度学习(AutoDL)任务提供计算资源和基础设施的平台。由于深度学习任务通常需要大量的计算资源和存储空间,为了有效地执行AutoDL任务,需要具备相应的算力平台
一个优秀的AutoDL算力平台通常具备以下特点:
- 高性能计算:提供强大的计算能力,包括高性能的CPU、GPU或专用的AI芯片等。这些计算资源可以支持AutoDL任务的模型训练、超参数搜索和架构搜索等计算密集型任务
- 分布式计算:支持分布式计算和训练,使得AutoDL任务可以在多个计算节点上并行执行,从而加快任务的完成时间。这对于大规模数据和复杂模型的AutoDL任务尤为重要
- 数据存储和管理:提供高效的数据存储和管理系统,以支持大规模数据集的存储和访问。这可以确保AutoDL任务能够快速、可靠地访问所需的训练数据和验证数据
- 任务调度和资源管理:具备任务调度和资源管理功能,可以有效地管理多个AutoDL任务的执行,包括资源分配、优先级管理和任务调度等,以保证任务的顺利进行
- 易用性和灵活性:提供友好的用户界面和工具,使得用户可以方便地配置和管理AutoDL任务。同时,提供灵活的配置选项,以满足不同任务和需求的定制化要求
AutoDL算力平台的设计和功能旨在提供高效、可扩展和易用的计算资源,以支持AutoDL任务的快速迭代和大规模应用。它们可以帮助研究人员和开发者更加便捷地进行AutoDL实验和模型优化,从而推动自动化深度学习领域的发展
购买算力
选择计费方式和显卡
选择是否需要扩展数据盘,以及基础镜像,这里选Miniconda环境
启动机器,进入终端可以看到
+--------------------------------------------------AutoDL--------------------------------------------------------+ 目录说明: ╔═════════════════╦════════╦════╦═════════════════════════════════════════════════════════════════════════╗ ║目录 ║名称 ║速度║说明 ║ ╠═════════════════╬════════╬════╬═════════════════════════════════════════════════════════════════════════╣ ║/ ║系 统 盘║一般║实例关机数据不会丢失,可存放代码等。会随保存镜像一起保存。 ║ ║/root/autodl-tmp ║数 据 盘║ 快 ║实例关机数据不会丢失,可存放读写IO要求高的数据。但不会随保存镜像一起保存 ║ ╚═════════════════╩════════╩════╩═════════════════════════════════════════════════════════════════════════╝ CPU :0.5 核心 内存:2 GB GPU :No devices were found 存储: 系 统 盘/ :46% 12G/25G 数 据 盘/root/autodl-tmp:65% 33G/50G +----------------------------------------------------------------------------------------------------------------+ *注意: 1.系统盘较小请将大的数据存放于数据盘或网盘中,重置系统时数据盘和网盘中的数据不受影响 2.清理系统盘请参考:https://www.autodl.com/docs/qa/
安装git-lfs以及ssl等依赖
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash sudo apt-get install git-lfs git lfs install sudo apt-get install openssl sudo apt-get install libssl-dev
安装pytorch环境
# 创建自己的python环境 conda create -n gpt310 python=3.10 anaconda # 切换到gpt310 source activate gpt310 # 安装gpu版的pytorch, 需要在GPU环境下安装,否则安装是cpu版本 pip install torch==2.0.0+cu117 torchvision==0.15.1+cu117 torchaudio==2.0.1 --index-url https://download.pytorch.org/whl/cu117
在Python中导入PyTorch并检查CUDA是否可用
import torch # 检查PyTorch是否使用了CUDA if torch.cuda.is_available(): print("CUDA可用") else: print("CUDA不可用")
其它事项
- 控制台下容器实例就是租用的机器,自定义服务是将容器内的6006端口映射到公网
- /root/autodl-tmp可以放一些数据或模型,开关机不会丢失,但不随镜像一起保存
- 无卡开机模型不带GPU,很便宜,一小时0.01元
2.3 本地
👻没有显卡,🤕伤不起🤕
3 Langchain-ChatGLM
🤖️ 一种利用 langchain 思想实现的基于本地知识库的问答应用,目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案
💡 受 GanymedeNil 的项目 document.ai 和 AlexZhangji 创建的 ChatGLM-6B Pull Request 启发,建立了全流程可使用开源模型实现的本地知识库问答应用。现已支持使用 ChatGLM-6B 等大语言模型直接接入,或通过 fastchat api 形式接入 Vicuna, Alpaca, LLaMA, Koala, RWKV 等模型
✅ 本项目中 Embedding 默认选用的是 GanymedeNil/text2vec-large-chinese,LLM 默认选用的是 ChatGLM-6B。依托上述模型,本项目可实现全部使用开源模型离线私有部署
⛓️ 本项目实现原理如下图所示,过程包括加载文件 -> 读取文本 -> 文本分割 -> 文本向量化 -> 问句向量化 -> 在文本向量中匹配出与问句向量最相似的top k
个 -> 匹配出的文本作为上下文和问题一起添加到prompt
中 -> 提交给LLM
生成回答
从文档处理角度来看,实现流程如下:
ChatGLM-6B模型硬件需求
注:如未将模型下载至本地,请执行前检查$HOME/.cache/huggingface/
文件夹剩余空间,模型文件下载至本地需要15GB存储空间。注:一些其它的可选启动项见项目启动选项模型下载方法可参考常见问题中Q8
量化等级 | 最低 GPU 显存(推理) | 最低 GPU 显存(高效参数微调) |
---|---|---|
FP16(无量化) | 13 GB | 14 GB |
INT8 | 8 GB | 9 GB |
INT4 | 6 GB | 7 GB |
3.1 准备工作
项目环境准备
先在/home
目录下创建huangyc
文件夹,进入huangyc
目录下后,拉取项目代码
git clone https://github.com/imClumsyPanda/langchain-ChatGLM.git
安装必要库
# centos系统下
yum install libX11 -y
yum install libXext -y
pip uninstall detectron2
# ubuntu系统不需要
进入langchain-ChatGLM
文件夹,安装依赖库,AutoDl平台下好像需要加-i参数
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
模型准备
从huggingface开放模型下找到自己的需要的模型,用git lfs下载,如果在AutoDl平台,可以把模型下载到/root/autodl-tmp
git clone https://huggingface.co/THUDM/chatglm-6b-int4.git
可以用ls -lh .
命令查看下载的文件大小是否正常
下载完的chatglm-6b-int4
模型文件夹,放到langchain-ChatGLM
项目的model
文件夹下,没有model
文件夹的话,自己创建下
如果下载失败的话,可以试下用wget下载,例如
wget --no-check-certificate https://huggingface.co/THUDM/chatglm-6b-int4/resolve/main/pytorch_model.bin
3.2 推理
3.2.1 修改配置
打开langchain-ChatGLM/config/model_config.py
,修改如下配置
# supported LLM models
# llm_model_dict 处理了loader的一些预设行为,如加载位置,模型名称,模型处理器实例
llm_model_dict = {
......
"chatglm-6b-int4": {
"name": "chatglm-6b-int4",
- "pretrained_model_name": "THUDM/chatglm-6b-int4",
+ "pretrained_model_name": "model/chatglm-6b-int4",
"local_model_path": None,
"provides": "ChatGLM"
}
......
}
# LLM 名称
LLM_MODEL = "chatglm-6b-int4"
# 如果你需要加载本地的model,指定这个参数 ` --no-remote-model`,或者下方参数修改为 `True`
NO_REMOTE_MODEL = False
这样模型会从本地加载
修改webui.py
,用于启动Web 交互
(demo
.queue(concurrency_count=3)
- .launch(server_name='0.0.0.0',
+ .launch(server_name='localhost',
server_port=7860, # AutoDl平台用的是6006
show_api=False,
- share=False,
+ share=True,
inbrowser=False))
阿里云服务器那边需要开放7860端口
3.2.2 启动web服务
进入到langchain-ChatGLM
项目下,执行webui.py
python webui.py
如果发现端口被占用了,可以用netstat -atunlp | grep 7860
命令查看并杀死占用该端口的进程(自己判断)
打开网页,你的ip:7860,就可以看到如下界面,默认是对话界面
可以切换到知识库测试,在这里可以上传自己的文档到知识库
后台看下当前显存占用,模型用的是chatglm-6b-int4
模型
之后测试上传了《流畅的Python》高清官方中文版.pdf
,后台一直在更新知识库,等了十几分钟,还没结束,我就切换到普通对话了,又测了十几轮对话,突然爆了显存不够,不知道是不是上传知识库引起的,还是随着对话增加,显存一直没释放
3.2.3 pycharm远程配置
PyCharm远程配置解释器和项目提供了以下几个重要的用途和优势:
- 远程开发:您可以在本地使用PyCharm编写代码,并将代码部署和运行在远程服务器上。这意味着您不需要在本地配置和安装与远程服务器环境相同的软件和依赖项。您可以利用服务器上的计算资源和环境来进行开发和测试,减轻了本地机器的负担
- 统一开发环境:通过远程配置解释器和项目,您可以在本地使用PyCharm的功能和工具来开发和调试代码。您可以享受PyCharm提供的智能代码补全、调试器、版本控制集成等功能,无需切换到其他编辑器或远程终端
- 协作与团队开发:远程配置解释器和项目使团队成员可以共享相同的开发环境。无论是在本地还是远程服务器上,团队成员可以使用相同的配置和依赖项来开发和测试代码。这有助于确保代码在不同环境下的一致性,并促进团队协作和开发效率
- 远程调试和错误排查:通过配置远程解释器,您可以在本地使用PyCharm的调试器来调试远程服务器上的代码。这样,您可以逐步执行代码、观察变量和监控程序状态,以便更轻松地进行错误排查和修复
- 远程部署和管理:通过远程配置项目,您可以将本地的代码同步到远程服务器上,并在服务器上运行和管理项目。这简化了部署过程,并使您能够直接在远程服务器上操作项目文件和资源
PyCharm远程配置解释器和项目提供了一种方便而高效的方式,让您可以在本地使用PyCharm进行开发和调试,同时利用远程服务器的优势来运行和部署代码。这对于需要在远程环境下进行开发和协作的场景非常有用,如远程服务器上的Web开发、数据处理和云计算等任务
pycharm远程配置参考本站的Spark集群搭建章节下的配置远程解释器
3.3 相关技术
langchain: langchain、LangChain:为你定制一个专属的GPT
LangChain是一个用于开发基于语言模型的应用程序开发框架,用户可以利用LangChain的模块来改善大语言模型的使用,通过输入自己的知识库来定制化自己的大语言模型
faiss: Faiss Documentation、[python] 向量检索库Faiss使用指北
所谓相似性搜索是指通过比较多维空间中数据之间的相似性来搜索与输入数据最相似的目标数据。例如人脸识别中,通过比较人脸向量之前的距离来识别当前人脸与哪张人脸相似。因此,该技术被广泛应用于信息检索、计算机视觉、数据分析等领域。如果要检索的数据很多时,那么就需要一个向量检索库来加速检索
Faiss包含多种相似性搜索方法,并提供cpu和gpu版本支持。Faiss的优势在于通过较小的精度损失提高向量相似度的检索速度和减少内存使用量
ChatGLM-6B: chatglm、github THUDM/ChatGLM-6B
ChatGLM-6B
是一个开源的、支持中英双语的对话语言模型,基于General Language Model (GLM)架构,具有62亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4量化级别下最低只需6GB显存)。 ChatGLM-6B使用了和ChatGPT
相似的技术,针对中文问答和对话进行了优化。经过约1T标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62亿参数的ChatGLM-6B已经能生成相当符合人类偏好的回答Hugging Face: Hugging Face
Hugging Face
是一个知名的开源社区和公司,专注于自然语言处理(NLP)和机器学习(ML)领域。他们开发了许多流行的开源工具和库,使得构建和应用NLP模型更加便捷
4 localGPT
等待