AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


自己动手在Mac M1上搭建一个大模型聊天机器人
发布日期:2024-06-29 11:44:50 浏览次数: 3298 来源:智能体爱好者


随着AI技术的发展和各种大模型聊天助手的普及,类ChatGPT服务在我们的日常工作生活中扮演着越来越重要的角色。作为普通用户,我现在使用类ChatGPT服务越来越高频了:想查个技术点,了解某个概念,或者写一篇文档的思路等,都会首先问问大模型聊天机器人。作为一名技术人员,很自然地会想到自己亲手去搭建一个大模型聊天机器人

1. 前提条件

我们来看看,搭建一个这样的聊天机器人,需要什么条件?

1.使用开源的大模型。我们先不去管大模型是怎么训练而成的,而是把它当成一个黑盒子,类似于某种标准模块,它可以根据查询(一段文字)生成结果(另一段文字)。很多大模型厂商发布了开源的模型,我们可以直接拿来使用。

2.大模型的推理框架,也就是运行时环境。所谓推理,就是根据查询生成结果的过程。大模型在逻辑上是一堆神经网络参数,存储形式是一个二进制文件,对这个文件的加载和调用需要深度学习相关知识,得益于大模型良好的生态,有很多开源的推理框架可以帮我们做到这一点。

3.聊天服务的前端UI。这块也有很多现成的开源项目。

4.运行大模型推理的硬件。我们知道大模型的训练需要大量的GPU等资源,而推理虽然需要的资源较少,但推理的速度与硬件配置高低有很大关系。影响推理速度的关键资源是GPU和内存,更多的GPU、更大的内存,推理速度就会更快。同样得益于技术社区的努力,一些基础的大模型(如llama 7b)也能够在CPU上运行,只是速度可能稍慢,这对于没有独立显卡的普通PC或笔记本用户来说是一个福音。

参照以上条件,我们的任务就比较简单了。

2. 相关资源

去哪里获取大模型?

Hugging Face网站(huggingface.co)是一家开发自然语言处理(NLP)和机器学习相关工具、并提供大模型托管服务的平台,相当于机器学习领域的github(不过国内不能访问,你懂的)。可以在这个网站上找到并下载各种预训练或经过微调的大模型。

国内阿里旗下的魔塔社区(modelscope.cn)也是同类型的网站,同样可以下载各种模型文件。不过魔塔社区的影响力不如Hugging Face,很多大模型都是优先在Hugging Face上发布,魔塔社区只是搬运,魔塔上很多模型包括Qwen2的说明文档都是英文的。不过由于Hugging Face在国内不能访问(需要翻墙),将魔塔社区作为平替也是可以的。

去哪里找大模型推理和前端UI框架?

对于开发人员,结合搜索引擎,很容易在github上找到各种大模型推理和前端UI项目,关注大模型相关社区或公众号也是一个较好的途径。

3.软硬件环境

硬件环境

我使用的电脑是苹果iMac(M1芯片),16G内存。M1芯片集成了CPU、GPU和NPU,CPU和GPU共享内存池,我这款电脑是8核CPU+7核GPU+16核神经网络引擎。理论上GPU和NPU都能够加速推理过程,不过由于M1芯片推出时间较早,可能没有针对大模型适配。

软件依赖

llama.cpp

在本地运行开源模型的最有效方法是使用llama.cpp项目,llama.cpp是由机器学习专家Georgi Gerganov开发的开源大模型推理框架,最初是为了在本地运行Meta的Llama大模型,经过开源社区的努力,现在能够支持包括Google的Gemma、国内的通义千问、百川等在内的大模型,该项目在github上当前已有60K star。其功能概述如下:
  • 纯C/C++实现

  • 高性能,没有额外内存分配

  • 没有第三方依赖

  • 针对苹果芯片进行了优化

  • 支持多种硬件和OS,包括Mac、Linux、Windows等

  • 自带一个Web Server和基于web的聊天客户端

Python3

在机器学习领域,主流的编程语言是python,很多大模型周边的工具都是用python实现的,所以我们需要python3运行环境。我的系统上已经安装了python3,如果没有,需要自行安装一下。

4.操作步骤

1.克隆llama.cpp项目
git clone https://github.com/ggerganov/llama.cppcd llama.cpp

2.编译llama.cpp

make

在Mac上编译,默认会打开GPU推理。

编译完之后,我们看看产出物,下图红色的是生成的可执行文件,其中:

llama-cli 是以命令行运行大模型的命令。
llama-server 是以web server启动大模型推理服务。

3.下载大模型

我们从huggingface网站下载大模型文件,为了操作方便,先安装huggingface-cli工具:
pip3 install huggingface_hub
Huggingface网站有各种各样的模型,选择哪一款大模型,需要根据推理框架和本机内存大小而定。llama.cpp需要使用GGUF格式的模型,模型运行时所需的内存跟文件大小基本上是一致的,参照下图。如果模型文件大小超过机器内存限制,可能会加载失败。

我们使用阿里近期发布的Qwen2大模型,我选择的是 Qwen2-7B-Instruct-GGUF (https://huggingface.co/Qwen/Qwen2-7B-Instruct-GGUF/tree/main)

在上图中,最后5个文件都表示同一个大模型,只是按照不同的量化格式压缩的(关于模型量化,下次单写一篇),下载其中一个即可。我下载的是qwen2-7b-instruct-q5_0.gguf,文件大小为5.32G,在16G内存上跑问题不大,下载命令:
cd models  #下载的模型文件需要放在llama.cpp/models目录下huggingface-cli download Qwen/Qwen2-7B-Instruct-GGUF qwen2-7b-instruct-q5_0.gguf --local-dir . --local-dir-use-symlinks False

下载完,在llama.cpp/models目录下检查模型文件是否存在:

4.启动推理服务器

先启动命令行试一下:
cd .../llama-cli -m ./models/qwen2-7b-instruct-q5_0.gguf -n 256 --repeat_penalty 1.0 --color -i -r "User:" -f prompts/chat-with-bob.txt
启动后,可以看到如下输出:

现在大模型在扮演名叫Bob的聊天机器人,等待用户输入,我们来试一下:

不知道它为什么会回答欧洲杯是在法国举办的?难道是通义千问训练数据的问题?

命令行只是验证一下大模型能否在本地正常运行,用处不是很大,接下来启动一个Web服务器:
./llama-server -m ./models/qwen2-7b-instruct-q5_0.gguf -c 4096

可以看到如下输出:

Web服务器在本机的8080端口监听,我们可以用浏览器打开http://127.0.0.1:8080/ 看下,在这个页面,可以进行简单的对话了,我录了个屏,回答还算顺畅,但是准确率就不提了(首都位于中国东部。。。)

5.运行聊天客户端UI

Web Server默认的界面有很多参数设置,有点复杂,对普通用户不是很友好。此外,llama.cpp还有一个自带的Web聊天客户端,位于examples/server/public_simplechat目录,可以使用如下命令启动:
#重新开个终端窗口执行:cd examples/server/public_simplechatpython3 -m http.server 8088
不过,这个聊天UI也没好到哪里去,我也录了个屏。

生成速度还是比较快的,但是通义千问对llama.cpp的介绍可以说是胡说八道,也就是出现幻觉,原因可能是Qwen2-7B的训练数据集中没有相应的语料

5.结论

以上内容就是在本人在PC上搭建大模型聊天机器人的全部过程,虽然比较简陋,离实用还有很大距离,不过基本上跑通了大模型聊天机器人的部署流程。我是以Mac为例介绍的,但对Windows或Linux系统也应该是适用的。如果你有兴趣也可以尝试一下,欢迎评论交流。



53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询