LLM探索:环境搭建与模型本地部署

前言

最近一直在炼丹(搞AIGC这块),突然发现业务代码都索然无味了…

上次发了篇AI画图的文章,ChatGPT虽然没法自己部署,但现在开源的LLM还是不少的,只要有一块差不多的显卡,要搞个LLM本地部署还是没问题的。

本文将介绍这以下两个国产开源LLM的本地部署

  • ChatGLM-6B
  • MOSS

本文先简单的把模型跑起来,后续将继续我近期在LLM方向的一些探索记录~

概念

开始之前,先来看看一些基础概念。

AIGC

引用以下 mbalib 的内容

AIGC(AI Generated Content) 即人工智能生成内容,又称“生成式AI”(Generative AI),被认为是继专业生产内容(PGC)、用户生产内容(UGC)之后的新型内容创作方式。

互联网内容生产方式经历了PGC——UGC——AIGC的过程。PGC(Professionally Generated Content)是专业生产内容,如Web1.0和广电行业中专业人员生产的文字和视频,其特点是专业、内容质量有保证。UGC(User Generated Content)是用户生产内容,伴随Web2.0概念而产生,特点是用户可以自由上传内容,内容丰富。**AIGC(AI Generated Content)**是由AI生成的内容,其特点是自动化生产、高效。随着自然语言生成技术NLG和AI模型的成熟,AIGC逐渐受到大家的关注,目前已经可以自动生成文字、图片、音频、视频,甚至3D模型和代码。

最近很多的ChatGPT、AI画图,就都属于这个领域。

LLM

引用以下 wikipedia 的内容

A large language model (LLM) is a language model consisting of a neural network with many parameters (typically billions of weights or more), trained on large quantities of unlabeled text using self-supervised learning or semi-supervised learning. LLMs emerged around 2018 and perform well at a wide variety of tasks. This has shifted the focus of natural language processing research away from the previous paradigm of training specialized supervised models for specific tasks.

中文也就是「大语言模型」,现在很火的ChatGPT就是这个LLM的代表,大模型有一个关键的属性:参数量,参数量的大小决定了大模型的能力(不能说是绝对的,但肯定是正相关)。

以下是常见LLM的参数量:

LLM名称参数量
ChatGPT 3.5175B
ChatGLM6B
MOSS16B
LLaMA7B/13B/33B/65B

篇幅关系只列举这几个,更多的可以看文后的参考资料。

搭建环境

硬件

首先要有一台搭载了NVIDIA显卡的Linux系统服务器/电脑。

显存需要达到8G及以上,不然跑不动~

系统推荐使用最新的Ubuntu(22.04)或者其衍生版,以下是我在测试过程中使用的两台服务器配置。

服务器1

  • CPU: Intel® Core™ i9-10940X CPU @ 3.30GHz
  • 内存:64G
  • 显卡:NVIDIA GeForce RTX 2080 Ti

服务器2

  • CPU:Intel® Xeon® Gold 5318Y CPU @ 2.10GHz x2
  • 内存:128G
  • 显卡: Tesla T4 x4

软件

说完了硬件,再看看软件。

驱动

首先,需要显卡驱动,Ubuntu系的发行版安装显卡驱动比喝水还容易,这就是为啥推荐炼丹用Ubuntu的理由。

PS:完全可以一键完成,不需要再去网上查什么复制了几百遍的博客然后下载一堆东西又是编译又是卸载nouveau啥的了~

Ubuntu桌面版可以直接用「软件更新」App一键安装显卡驱动。

Ubuntu服务器版本,使用 nvidia-detector 命令检测需要安装的驱动版本,示例:

$ nvidia-detector
nvidia-driver-530

使用 ubuntu-drivers list 获取可安装的驱动列表,示例:

$ ubuntu-drivers list
nvidia-driver-418-server, (kernel modules provided by nvidia-dkms-418-server)
nvidia-driver-530, (kernel modules provided by linux-modules-nvidia-530-generic-hwe-22.04)
nvidia-driver-450-server, (kernel modules provided by linux-modules-nvidia-450-server-generic-hwe-22.04)
nvidia-driver-515, (kernel modules provided by linux-modules-nvidia-515-generic-hwe-22.04)
nvidia-driver-470-server, (kernel modules provided by linux-modules-nvidia-470-server-generic-hwe-22.04)
nvidia-driver-525-server, (kernel modules provided by linux-modules-nvidia-525-server-generic-hwe-22.04)
nvidia-driver-515-server, (kernel modules provided by linux-modules-nvidia-515-server-generic-hwe-22.04)
nvidia-driver-510, (kernel modules provided by linux-modules-nvidia-510-generic-hwe-22.04)
nvidia-driver-525, (kernel modules provided by linux-modules-nvidia-525-generic-hwe-22.04)
nvidia-driver-470, (kernel modules provided by linux-modules-nvidia-470-generic-hwe-22.04)

然后使用 ubuntu-drivers install nvidia-driver-530 来安装驱动,示例:

$ ubuntu-drivers install nvidia-driver-530

All the available drivers are already installed.

就这么简单

PS:当然非要自己去NVIDIA官网下载也可以,具体可以看看参考资料。

Python

搞AI,Python是必备的,但我们不直接使用系统的Python环境,而是使用conda来管理。

推荐使用 miniconda3 比 anaconda 轻量。

按照官网说明按照 miniconda3 之后,只需要使用以下命令即可创建指定版本的python环境

conda create -n 环境名称 python=3.10

如果遇到网络环境问题,可以参考我之前这篇文章,配置一下国内镜像:配置pip国内镜像加快python第三方库安装速度~

ChatGLM-6B

介绍

这是清华和智谱公司搞的开源LLM,截止本文撰写时,其在国产开源LLM里面算是天花板的存在了~

ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。 ChatGLM-6B 使用了和 ChatGPT 相似的技术,针对中文问答和对话进行了优化。经过约 1T 标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62 亿参数的 ChatGLM-6B 已经能生成相当符合人类偏好的回答。

硬件需求

量化等级最低 GPU 显存(推理)最低 GPU 显存(高效参数微调)
FP16(无量化)13 GB14 GB
INT88 GB9 GB
INT46 GB7 GB

本地部署

下载项目代码
git clone https://github.com/THUDM/ChatGLM-6B.git

PS:也可以使用我 fork 魔改的版本,主要做了以下修改:

  • 部署和模型微调默认开启多卡加速
  • 重写API接口,更直观

换成以下命令即可

git clone https://github.com/Deali-Axy/ChatGLM-6B.git

创建虚拟环境

建议使用 conda 管理

conda create -n chatglm python==3.8

安装依赖
cd ChatGLM-6B
conda activate chatglm
pip install -r requirements.txt
conda install cudatoolkit=11.7 -c nvidia

PS:没有安装 cudatoolkit 的话,会报 RuntimeError: Library cudart is not initialized 错误

但 issues 里也有人说可以通过使用CPU输出量化模型后直接调用的方式解决,暂未尝试。

issues 地址: github.com/THUDM/ChatG…

下载模型和启动

项目代码里有命令行和web界面两种demo,任意选一个运行,程序会自动从 huggingface 下载预训练模型。

PS: huggingface 的模型理论上是可以直接下载的,如果遇到网络问题,请自行使用代理或者从官方提供的某云盘下载模型。

# 命令行 demo
python cli_demo.py
# 使用 Gradio 实现的简单Web界面
python web_demo.py

Gradio 的默认端口是7860,可以通过在 launch() 方法里传入 server_port 参数自定义端口。

使用量化模型

如果显存没有13G以上,则无法运行FP16精度模型,只能运行量化后的模型,需要修改一下代码。

打开上述的 cli_demo.pyweb_demo.py 代码

找到以下加载模型的代码,修改一下参数

model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()

将上面的代码修改为下面这样以使用量化模型

# 按需修改,目前只支持 4/8 bit 量化
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).quantize(4).half().cuda()

运行效果

image

多卡加速

如果显卡多,可以使用多卡运行以加速推理。

依然是打开上述的 cli_demo.pyweb_demo.py 代码。

找到以下加载模型的代码

model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()

修改为

from utils import load_model_on_gpus
model = load_model_on_gpus("THUDM/chatglm-6b", num_gpus=4)

num_gpus 参数为要使用的显卡数量

我看了 load_model_on_gpus 这个方法的代码,它是通过 auto_configure_device_map 方法把 transformer分成30层,然后再分配到指定数量的显卡上,没法像 CUDA_VISIBLE_DEVICES 环境变量一样通过显卡编号来指定,只能按顺序来分配。

如果机器上同时要运行其他模型,可以考虑先运行这个ChatGLM,再运行其他的,或者重写 auto_configure_device_map 方法,让其可以灵活指定显卡。

授权

模型不可以直接商用,据说商用需要购买一年180w的许可证。

MOSS

介绍

这个是复旦开源的大模型,使用下来和ChatGLM最大的区别是推理速度特别慢

MOSS是一个支持中英双语和多种插件的开源对话语言模型,moss-moon系列模型具有160亿参数,在FP16精度下可在单张A100/A800或两张3090显卡运行,在INT4/8精度下可在单张3090显卡运行。MOSS基座语言模型在约七千亿中英文以及代码单词上预训练得到,后续经过对话指令微调、插件增强学习和人类偏好训练具备多轮对话能力及使用多种插件的能力。

硬件需求

量化等级加载模型完成一轮对话(估计值)达到最大对话长度2048
FP1631GB42GB81GB
Int816GB24GB46GB
Int47.8GB12GB26GB

本地部署

下载代码
git clone https://github.com/OpenLMLab/MOSS.git

创建虚拟环境

建议使用 conda 管理

conda create -n moss python==3.8

安装依赖
cd MOSS
conda activate moss
pip install -r requirements.txt
conda install cudatoolkit=11.7 -c nvidia

下载模型和启动

项目代码里有命令行和web界面两种demo,任意选一个运行,程序会自动从 huggingface 下载预训练模型。

# 命令行 demo
python moss_cli_demo.py
# 使用 Gradio 实现的简单Web界面
python moss_web_demo_gradio.py

修改默认模型和多卡加速

因为MOSS对显存的要求比较高,因此默认用的是4位量化的模型,这里我使用一台4块T4的服务器来部署,所以直接使用FP16模型。

修改 moss_web_demo_gradio.py,找到以下代码

parser.add_argument("--model_name", default="fnlp/moss-moon-003-sft-int4",
                    ...)

default 参数改为 fnlp/moss-moon-003-sft

然后再设置一下多卡加速,把GPU参数设置为四个显卡的编号

parser.add_argument("--gpu", default="0,1,2,3", type=str)

然后启动,就可以看到四张显卡都吃满了

image

使用下来最大的感受就是慢,往往要一两分钟才能生成一个回答。

我看了下GitHub issues,有很多人也提出了同样的问题。两张A100还需要10s起步,100s左右的生成时间,看来短时间内是无解了,只能等官方优化了~

详见:

  • github.com/OpenLMLab/M…

授权

模型采用 GNU AFFERO GENERAL PUBLIC LICENSE 许可证,可以免费商用。

如何学习大模型

现在社会上大模型越来越普及了,已经有很多人都想往这里面扎,但是却找不到适合的方法去学习。

作为一名资深码农,初入大模型时也吃了很多亏,踩了无数坑。现在我想把我的经验和知识分享给你们,帮助你们学习AI大模型,能够解决你们学习中的困难。

我已将重要的AI大模型资料包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习,等录播视频免费分享出来,需要的小伙伴可以扫取。

一、AGI大模型系统学习路线

很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。

在这里插入图片描述

二、AI大模型视频教程

在这里插入图片描述

三、AI大模型各大学习书籍

在这里插入图片描述

四、AI大模型各大场景实战案例

在这里插入图片描述

五、结束语

学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。通过学习AI大模型,我们可以深入了解深度学习、神经网络等核心概念,并将其应用于自然语言处理、计算机视觉、语音识别等领域。同时,掌握AI大模型还能够为我们的职业发展增添竞争力,成为未来技术领域的领导者。

再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。

因此,学习AI大模型是一项有前景且值得投入的时间和精力的重要选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/756312.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

安卓应用开发学习:获取经纬度及地理位置描述信息

前段时间,我在学习鸿蒙应用开发的过程中,在鸿蒙系统的手机上实现了获取经纬度及地理位置描述信息(鸿蒙应用开发学习:手机位置信息进阶,从经纬度数据获取地理位置描述信息)。反而学习时间更长的安卓应用开发…

基于知识图谱的医药问答系统实战

数据及代码地址见文末 1.项目配置 (1)Neo4j数据库安装 JDK 安装:https://www.oracle.com/java/technologies/javase-downloads.html Neo4j 安装:https://neo4j.com/download-center/ 配置好 JDK 和 Neo4j 的环境变量 启动:neo4j.bat console 第一次启动有默认用户名和密…

《昇思25天学习打卡营第3天|张量 Tensor》

文章目录 前言:今日所学:1. 创建张量2. 张量的属性3.张量索引与运算4. NumPy与Tensor的转换5. 稀疏张量 前言: 张量?张亮?张量是什么? 张量是一个可以用来表示在一些矢量、标量和其他张量之间的线性关系的…

逆风而行:提升逆商,让困难成为你前进的动力

一、引言 生活,总是充满了未知与变数。有时,我们会遇到阳光明媚的日子,享受着宁静与和谐;但更多时候,我们却不得不面对那些突如其来的坏事件,如工作的挫折、人际关系的困扰、健康的挑战等。这些事件如同突…

每日一题——Python实现PAT乙级1059 C语言竞赛(举一反三+思想解读+逐步优化)四千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 时间复杂度分析 空间复杂度分析 代码优化建议 总结 我要更强 优化方法…

秋招突击——第九弹——Redis缓存

文章目录 引言正文缓存基础旁路缓存模式(重点)读穿透(了解)写穿透(了解)异步缓存写入模式面试重点 缓存异常场景缓存穿透缓存击穿缓存雪崩面试重点 缓存一致性怎么保证?缓存一致性问题是什么方案…

使用SpringBoot整合filter

SpringBoot整合filter,和整合servlet类似,也有两种玩儿法 1、创建一个SpringBoot工程,在工程中创建一个filter过滤器,然后用注解WebFilter配置拦截的映射 2、启动类还是使用ServletComponentScan注解来扫描拦截器注解WebFilter 另…

Vue2中管理$bus事件,统一移除事件

1. vue2中使用了,很多bus,在有些地方忘记清理了,导致重复事件bug. 对bus进行改造,实现清除遗留. 下面的简单实现. 1.eventbus.js // eventBus.js import Vue from vue;class EventBusClass extends Vue {constructor() {super();this.listeners [];}on(event, callback, con…

实测备受好评的三款独享IP网站服务商

一、引言 在如今互联网快速发展的时代,网络爬虫、数据抓取等任务对于许多企业和个人来说愈发重要,而在这个过程中,一个稳定、高效且安全的独享IP资源显得尤为重要。作为专业的测评团队,我们深知一款优秀的独享IP服务商需要具备哪…

2-19 基于matlab的薄板弯曲的算例

基于matlab的薄板弯曲的算例,利用有限元方法编制matlab程序。对二维薄板进行单元化,输出薄板结构参数及载荷,输出弯曲情况,并可视化展示。程序已调通,可直接运行。 2-19 薄板弯曲 有限元方法 薄板结构参数 - 小红书 (x…

【MySQL】InnoDB架构

本文MySQL版本是8.X版本 这是官方文档给出来的架构图:MySQL :: MySQL 8.0 Reference Manual :: 17.4 InnoDB Architecture 可以看出,整体上是分成两部分的:内存结构(提高效率)和磁盘结构(数据持久化),下面将把每个区域都大致做一个…

Java程序员学习Go开发Higress的WASM插件

Java程序员学习Go开发Higress的WASM插件 契机 ⚙ 今年天池大赛有higress相关挑战,研究一下。之前没搞过go,踩了很多坑,最主要的就是tinygo打包,多方寻求解决无果,结论是tinygo0.32go1.19无法在macos arm架构下打包。…

【微服务】Alibaba Cloud Linux环境下Docker以及MySQL安装

部署Docker 1.安装dnf dnf是新一代的rpm软件包管理器 yum -y install dnf2.安装社区版Docker(docker-ce) 添加docker-ce的dnf源 dnf config-manager --add-repohttps://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo安装Alibaba Cloud…

从灵感到实践:Kimi辅助完成学术论文选题的文艺之旅

学境思源,一键生成论文初稿: AcademicIdeas - 学境思源AI论文写作 昨天我们为大家介绍了ChatGPT辅助完成实现设计(AI与学术的交响:ChatGPT辅助下的实验设计新篇章)。今天我们再来看看Kimi对于论文选题都能提供哪些帮助…

kali/ubuntu安装vulhub

无须更换源,安装docker-compose apt install docker.io docker -vdocker-compose #提示没有,输入y安装mkdir -p /etc/docker vi /etc/docker/daemon.json #更换dockerhub国内源┌──(root㉿kali)-[/home/kali/vulhub-master/tomcat/CVE-2017-12615] …

轻量级模型,重量级性能,TinyLlama、LiteLlama小模型火起来了

小身板,大能量。 当大家都在研究大模型(LLM)参数规模达到百亿甚至千亿级别的同时,小巧且兼具高性能的小模型开始受到研究者的关注。 小模型在边缘设备上有着广泛的应用,如智能手机、物联网设备和嵌入式系统&#xff0…

【数据分析】1、用Pandas计算数据相关性系数

相关性系数和相关分析是了解变量之间关系的重要工具。通过合理选择相关性系数和科学分析数据,能够有效揭示变量之间的关系,为进一步研究和决策提供有力支持。在实际应用中,应结合业务背景、数据特性和统计原则,谨慎解释和应用相关…

Pythonnet能导入clr,但无法引入System模块?

【pythonnet详解】—— Python 和 .NET 互操作的库_pythonnet 详细使用-CSDN博客 Python中动态调用C#的dll动态链接库中方法_python 如何调用c# dll-CSDN博客 需求&#xff1a;Python调用并传List<float>类型参数给.Net 起初&#xff1a;直接 # 创建一个Python浮点数…

ElasticSearch 和 MySQL的区别

MySQLElasticSearch 数据库&#xff08;database&#xff09;索引&#xff08;index&#xff09;数据表&#xff08;table&#xff09; 类型&#xff08;type&#xff09; 记录文档&#xff08;document&#xff0c;json格式&#xff09; 一、ES基础命令 1. ES cat查询命令 2.…

keil软件的一些使用技巧

1.MDK 的 TAB 键支持块操作 也就是可以让一片代码整体右移固定的几个位&#xff0c;也可以通过 SHIFTTAB 键整体左移固定的几个位。 2.快速注释与快速消注释 就是先选中你要注释的代码区&#xff0c;然后右键&#xff0c;选择Advanced→Comment Selection 就可以了。 3.快速打…