大语言模型私有化部署和个性化调优的技术实践

news2024/11/15 13:48:39

简介

本文介绍如何在不依赖任何三方服务的情况下,私有化部署和使用大语言模型,以及如何以较低成本让大语言模型使用自己的数据来产生个性化输出。

本文偏技术向,读者需要具备一定技术背景,如有不懂之处,欢迎留言交流。

1、什么是大语言模型?

大语言模型(Large Language Model, LLM)是一种擅长自然语言处理的 AI 模型,它可以学习和理解自然语言的语法和语义,完成知识搜索、概括、翻译、创作等任务,并具备一定逻辑判断能力。根据上述天赋技能,可以看到 LLM 的应用场景相当广泛。比如它可以直接取代传统的翻译软件;可以帮你整理和归纳一段文字的重点;可以根据少量提示创作一个完整的故事;甚至可以为你分析体检报告。如果利用好 LLM 的语言处理优势,能够极大提升工作生产效率,让死气沉沉的文本焕发生机。

2、为什么要私有化部署?

当前 LLM 通常包含数十亿参数,需要通过大量的文本数据训练来优化这些参数,参数量越大,模型预测效果越好,所需要的算力也越高。

也就是说,训练 LLM 需要海量的数据,无论是制造或使用 LLM 都需要很大的算力。对消费级计算设备(如一般家用电脑)来说,虽然并不需要训练 LLM,但仅仅是安装和运行 LLM,目前都是一件很困难的事情。

原因一方面是 LLM 模型的文件体积很大,一个包含 60 亿参数的模型通常在 20GB 以上,这块赶上一个 3A 游戏的体量了,恐怕没人愿意在自己的电脑上安装一个 20GB 的聊天机器人;另一方面是加载和运行模型需要很高的硬件条件,比如内存至少需要在 16GB 以上,如果想要在移动设备上使用,就更困难了。

目前市面上大多数应用的背后其实都依赖三方服务,通过 API 调用三方服务提供的接口来访问部署在远端的 LLM。而 API 提供方坐拥数据和算力,消费者要享受流畅无限制的体验,自然需要付费使用。目前提供 API 的三方服务多为外国公司,如 OpenAI。

个人或国内企业如果通过 OpenAI 使用 ChatGPT,必然存在数据安全风险,任何通过 API 发往外部的数据都有可能被窃取或用于其他用途;同时,这样的方式也不利于国内企业发展和国家监管。如果不想被卡脖子,有两种选择:一种是自研 LLM,目前国内已有多家知名企业入局研发;另一种也是本文要介绍的,就是使用开源 LLM 并实现私有化部署,并在此基础上做一些定制化和产品建设,这更适合国内大量硬件或技术条件不佳的中小型公司使用。

3、技术路线

图片

如上图,一句话描述就是将现有知识库(Knowledge base)和用户输入(User prompt)组合成一个具备上下文的模型输入(Context-aware prompt),送入 LLM(Language model)得到输出(Result)。

和市面上常见的套壳聊天框不同的是,用户输入(User prompt)是直接进入 LLM,这样模型输出的内容可能是相当泛化的,说人话就是不太接地气。而如果需要模型接地气地输出,则需要提供上下文(context),构造上下文是整个路线最为重要的环节。

3.1、知识库(Knowledge base)

Knowledge base 可以是一个现有知识库,比如产品说明书、用户手册等等,这些数据往往是领域特定知识,也是后面产生“个性化”的依据。

3.2、用户输入(User Prompt)

User prompt 就是用户的提问内容,与其让用户随意输入,不如适当做一些规则限制或引导,比如固定格式的提问,因为 prompt 对模型的输出结果影响较大。

3.3、带上下文的模型输入(Context-aware Prompt)

具体举一例:

请根据以下信息回答问题:
苹果是一种水果、香蕉是一种水果、白菜是一种蔬菜
问题是:水果有哪些?

其中「请根据以下信息回答问题:」和「问题是:」为固定内容,「水果有哪些?」是 user prompt,其余部分就是 context。

这里 context 的具体内容需要跟 user prompt 有关联性,可以理解成有一种查找算法从现有知识库中提取和用户提问相关的内容:

context = f(knowledge, user prompt)

3.4、Embedding 和向量数据库(Vector Database)

实现这种算法需要用到 Embedding 模型和向量数据库(Vector Database)。通过 Embedding 可以得到文本向量,通过向量数据库可以进行相似度搜索(Similarity Search)。

补充内容:在自然语言处理领域中,Embedding 通常指将单词或短语映射到低维向量空间中的表示。这种表示可以捕捉单词或短语的语义和语法信息,便于计算机进行自然语言处理任务,如文本分类、情感分析、机器翻译等。市面上有很多开源的 Embedding 模型可用,例如:Word2Vec、GloVe、BERT 等等。当然 OpenAI 提供的 Embedding API 背后也许就是基于这些开源模型的优化。

向量数据库可以对其存储的向量进行 CRUD 操作,而相似度搜索是这里最关键的部分。可以使用常见的 k-近邻算法(k-NN)来查找与给定向量最相似的向量,不过这件事通常由向量数据库完成,我们只需要默认使用或这根据需要选择最恰当的算法即可,不必自己实现一遍。

具体的方式如下图:

图片

可以看到这里 User prompt 通过 Embedding API 被转换成了一组数字,这组数字就是文本向量。上面这个图其实还缺少对向量数据库的来源说明,向量数据库其实也由相同的 Embedding API 产生,即:

knowledge => Embedding API => vector database

文本向量进入向量数据库查询就得到了一组相关文档(Relevant documents),不过需要注意的是这里相关文档还不是 context,相关文档是 Embedding 模型的原始输入,可能还不能直接用作 context,需要做一些格式化或精简,来确保模型输入内容不会超限。

3.5、语言模型(Language model)

既然向量数据库已经能够给出相关文档了,那为啥还要塞给语言模型处理一遍呢?读者可以自己思考一下这个问题。

市面上的语言模型有太多,常见闭源的有 GPT-3、Bard、PanGu,开源的有 LLaMA、GLM、Moss 等等,都是可以拿来用的,不过使用成本各不相同。不过既然要私有化部署,那么最直接的方式是选择开源模型。

大多数开源模型都给出了运行方法,不过使用前依然需要仔细评估每个模型的要求和部署成本,比如有的模型不支持中文输出,有的模型对硬件的要求很高,有的模型依赖特别的环境等等。

4、其他技术路线

上述技术路线的成本相对较低(因为没有模型训练过程),可操作空间比较灵活,但对于需要深度定制模型的业务场景来说,Fine-tuning 可能是更好的选择。Fine-tuning 是一种对预训练模型进行微调来适应新任务或数据集的方法,模型训练的算力要求较高并且流程相对复杂,需要谨慎评估算力和技术成本。

5、项目实践

我采用上述技术路线,使用纯开源模型和技术,在本地实现和部署了一个用于搜索浏览器书签内容的 AI 助理,AI 可以从浏览器保存的历史书签中,以自然语言对话的形式找到你要想但忘记标题的网址。

  • 项目代码:https://github.com/micooz/ai-bookmark

  • 操作系统和硬件条件:macOS Ventura、64GB RAM、Apple M1

  • Framework:Langchain(TypeScript)

  • LLM:ChatGLM-6B

  • Embedding Model:text2vec-large-chinese

  • Vector Database:HNSWLib

使用效果:

图片

6、注意事项和待解决的问题

总结几个需要注意的问题:

  • 需要合理选择 LLM 和 Embedding Model,不同 LLM 和 Embedding 的性能截然不同。
  • 为了方便实践验证,我选择了支持单文件存储的 HNSWLib 作为向量数据库,请不要在生产环境下使用,应该采用更可靠和专业的存储方案。

待解决的问题:

  • 模型体积较大,一套下来 30GB 左右,还没办法为普通用户提供离线服务。
  • macOS 平台目前只能采用 Pytorch mps 加速方案,但即便如此,模型推导性能和资源占用情况依然很不理想,不太适合在没有专业 GPU 的设备上部署。

不过好在已经有人利用机器学习编译(Machine Learning Compilation,MLC)方案让模型能够在 iOS、Android、Web 浏览器上跑起来了:https://github.com/mlc-ai/mlc-llm

7、总结

本文介绍了大语言模型私有化部署和个性化调优的技术实践,采用开源大语言模型、Embedding 模型以及向量数据库的技术选型,实现了基于现有知识数据的个性化 AI 助理。期待后续挖掘出有更多有趣的 AI 应用场景,基于此方案可以让 AI 更加专注领域知识的处理。同时也期待有更多别出心裁的方案让大模型的使用成本进一步降低。

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ARM——驱动——inmod加载内核模块

在上一篇文章的代码上添加出错处理 #include <linux/init.h> // 包含初始化宏和函数 #include <linux/kernel.h> // 包含内核函数和变量 #include <linux/fs.h> // 包含文件操作的结构和函数 #include <linux/kdev_t.h> /…

记忆化搜索与状态压缩:优化递归与动态规划的利器

记忆化搜索是解决递归和动态规划问题的一种高效优化技术。它结合了递归的灵活性和动态规划的缓存思想&#xff0c;通过保存已经计算过的子问题结果&#xff0c;避免了重复计算&#xff0c;大幅提升了算法的效率。当问题状态复杂时&#xff0c;状态压缩技术可以进一步优化空间使…

密码生成器(HTML+CSS+JavaScript)

&#x1f30f;个人博客主页&#xff1a;心.c ​ 前言&#xff1a;前两天写了密码生成器&#xff0c;现在跟大家分享一下&#xff0c;大家如果想使用随便拿&#xff0c;如果哪里有问题还请大佬们给我指出&#xff0c;感谢支持 &#x1f525;&#x1f525;&#x1f525;专题文章&…

《断点回归的非参数估计及 Stata 实现》

目录 一、引言 二、文献综述 三、理论原理 四、实证模型 五、稳健性检验 六、程序代码及解释 七、代码运行结果及解释 一、引言 断点回归&#xff08;Regression Discontinuity&#xff0c;RD&#xff09;设计是一种准实验方法&#xff0c;用于评估政策或干预措施的因果…

鉴权Cookies、授权session、token

2 鉴权、授权 区别&#xff1a;一个存在浏览器&#xff0c;一个存在服务器&#xff0c;session存到服务端当中 问1&#xff1a;http协议是一个典型的无状态协议&#xff0c;无记忆&#xff0c;那第一次登录下次是不是还要登录一次&#xff1f; ANS&#xff1a;不需要 因为Co…

C++设计模式3:工厂模式

工厂模式都是在那种有着大量类的程序里面使用的&#xff0c;比如我突然要产生许多的类&#xff0c;这时候就可以用工厂模式&#xff0c;工厂模式有如下三种类型。 简单工厂 用户输入实例化的信息(比如产品名称)&#xff0c;向工厂申请对象&#xff0c;工厂返回相应的对象&…

npm install报错,解决记录:11个步骤诊断和解决问题

在处理npm install报错时&#xff0c;可以遵循以下步骤来诊断和解决问题&#xff1a; 查看错误信息&#xff1a; 错误信息通常会给出问题的线索&#xff0c;例如依赖包版本冲突、网络问题、权限问题等。 更新npm和Node.js&#xff1a; 首先尝试更新npm和Node.js到最新版本&…

地平线—征程2(Journey 2-J2)芯片详解(16)—DDR系统

写在前面 本系列文章主要讲解地平线征程2(Journey 2-J2)芯片的相关知识,希望能帮助更多的同学认识和了解征程2(Journey 2-J2)芯片。 若有相关问题,欢迎评论沟通,共同进步。(*^▽^*) 错过其他章节的同学可以电梯直达目录↓↓↓ 地平线—征程2(Journey 2-J2)芯片详解…

新开发体育直播平台的创业指南:降低赛事版权成本方法

在全球化浪潮下&#xff0c;体育赛事已成为连接世界各地观众的情感纽带&#xff0c;其巨大的影响力不仅激发了全球观众的热情&#xff0c;也催生了体育赛事直播行业的蓬勃发展。然而&#xff0c;高昂的版权费用如同一道难以逾越的门槛&#xff0c;让众多新进入者和小型体育直播…

【与C++的邂逅】--- 类与对象(下)

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; 与C的邂逅 本节我们继续学习类与对象下&#xff0c;下面给出本节内容大纲。 &#x1f3e0; 再谈构造 &#x1f4cc; 构造函数体赋值 在创建对象时&…

【图形学】TA之路-基于Unity Shader编程之初体验

学习shader之前你必须知道的事情&#xff1a; Unity开发引擎、Direct3D、Shader他们之间的关系 Direct3D 是一个底层图形 API&#xff0c;它直接与 GPU &#xff08;显卡&#xff09;交互&#xff0c;提供了访问硬件加速功能的接口。Unity 开发引擎&#xff0c;它封装了很多底…

[Linux] 认识系统服务(daemon)

参考&#xff1a;《鸟哥的Linux私房菜》 一、什么是 daemon 与服务&#xff08;service&#xff09; 在英语中的daemon就有守护进程&#xff0c;后台程序的意思。简单来说就是一直在后台运行的进程&#xff0c;我们就称之为服务(service)&#xff0c;或者是守护进程(daemon)。…

Java爬虫图像处理:从获取到解析

在互联网时代&#xff0c;数据的价值日益凸显&#xff0c;而爬虫技术作为获取网络数据的重要手段&#xff0c;其应用范围越来越广泛。本文将探讨Java爬虫在图像处理方面的应用&#xff0c;包括如何从网络中获取图像数据&#xff0c;以及如何对这些数据进行解析和处理。 Java爬…

实现Kruskal算法连通游戏地图地牢

前置知识 c分享&#xff5c;并查集从入门到出门 - 力扣&#xff08;LeetCode&#xff09; 彻底搞懂克鲁斯卡尔&#xff08;Kruskal&#xff09;算法&#xff08;附C代码实现&#xff09; - QuanHa - 博客园 (cnblogs.com) 白色点矩形是地牢&#xff0c;其中白线是按照krsukal…

网络编程知识点总结

物理链路网络运输会话表示应用 物链网运会表应 实际的数据帧 TCP和UDP的异同&#xff08;笔试面试&#xff09; 主机&#xff1a;host 转换&#xff1a;to 网络&#xff1a;network uint32_t htonl(uint32_t hostlong); //将4字节无符号整数的主机字节序转换为网络字节序&a…

云计算实训32——roles基本用法、使用剧本安装nginx、使用roles实现lnmp

一、安装nginx并更改其端口 编辑hosts配置文件 [rootmo ~]# vim /etc/ansible/hosts 创建目录 [rootmo ~]# mkdir /etc/ansible/playbook 编辑配置文件 [rootmo ~]# vim /etc/ansible/playbook/nginx.yml 执行测试 [rootmo ~]# ansible-playbook /etc/ansible/playbook/n…

菜鸟的进击之.net6控制台应用程序接收参数

1、新建控制台应用程序&#xff0c;新建-添加项目-控制台应用 2、3、下一步&#xff0c;填写项目名称和代码存放的位置 3、下一步&#xff0c;框架选择.net 6 &#xff0c;点击创建 4、然后项目就创建完成啦&#xff0c; 5、在可以直接在Program.cs写方法一些简单的逻辑&#x…

Rustrover、IDEA 的 Rust 类型不显示(已解决)

关键词&#xff1a;rustrover 类型不显示&#xff0c;rustrover 不显示类型&#xff0c;IntelliJ IDEA Rust 类型不显示&#xff0c;IntelliJ IDEA Rust 不显示类型 若移动端访问不佳&#xff0c;请使用 –> Github版 背景 博主手欠&#xff0c;使用 IntelliJ IDEA 时&am…

四款流行英文翻译工具,助你轻松应对翻译难题

作为一名教培行业的工作人员&#xff0c;我经常需要处理大量的英文文件&#xff0c;从教材到学术论文&#xff0c;再到各种国际交流的资料。翻译工具成了我工作中不可或缺的帮手。今天&#xff0c;我就来跟大家聊聊我用过的几款翻译工具在翻译英文文件时的表现如何呢&#xff1…

超越IP-Adapter!阿里提出UniPortrait,可通过文本定制生成高保真的单人或多人图像。

阿里提出UniPortrait&#xff0c;能根据用户提供的文本描述&#xff0c;快速生成既忠实于原图又能灵活调整的个性化人像&#xff0c;用户甚至可以通过简单的句子来描述多个不同的人物&#xff0c;而不需要一一指定每个人的位置。这种设计大大简化了用户的操作&#xff0c;提升了…