大模型终极指南:零基础到精通,一文搞定!

news2024/11/15 10:13:57

随着 ChatGPT 的到来,大模型[1](Large Language Model,简称 LLM)成了新时代的 buzzword,各种 GPT 产品百花齐放。

大多数人直接用现有产品就可以了,但对于喜欢刨根问底的程序员来说,能够在本地运行会更有意思。但由于没有相关背景,笔者一开始在接触时, 很多 GitHub 上的搭建教程看得是云里雾里,而且这方面的介绍文章要不就是太晦涩难懂,要不就是太大众小白,于是就有了这篇文章, 主要介绍笔者在搭建大模型过程中学到的知识,以及如何在 macOS 上运行大模型。 笔者水平有限,不足之处请读者指出。

什么是大模型

通俗来讲,大模型就是输入大量语料,来让计算机获得类似人类的“思考”能力,使之能够理解自然语言,能够进行『文本生成』、『推理问答』、『对话』、『文档摘要』等工作。

既然是学习,那我们就可以用『上学参加工作』这件事来类比大模型的训练、使用过程:

  1. 找学校 :: 训练 LLM 需要大量的计算,因此 GPU 更合适,因此只有购买得起大量 GPU 的贵族学校才有资本训练自己的大模型

  2. 确定教材 :: 大模型顾名思义就是大,需要的数据量特别多,几千亿序列(Token)的输入基本是标配

  3. 找老师 :: 即用什么样的算法讲述“书本”中的内容,让大模型能够更好理解 Token 之间的关系

  4. 就业指导 :: 学完书本中的知识后,为了让大模型能够更好胜任某一行业,需要进行微调(fine tuning)指导

  5. 搬砖 :: 就业指导完成后,下面就要正式干活了,比如进行一次翻译、问答等,在大模型里称之为推导(infer)

在 LLM 中,Token[2] 被视为模型处理和生成的文本单位。它们可以代表单个字符、单词、子单词,甚至更大的语言单位,具体取决于所使用的分词方法(Tokenization)。 Token 是原始文本数据与 LLM 可以使用的数字表示之间的桥梁。在将输入进行分词时,会对其进行数字化,形成一个词汇表(Vocabulary),比如:The cat sat on the mat,会被分割成 “The”、“cat”、“sat” 等的同时,会生成下面的词汇表:

TokenID
The345
cat1256
sat1726

数字化的好处是便于计算机处理。但为了让计算机理解 Token 之间的联系,还需要把 Token 表示成稠密矩阵向量,这个过程称之为 embedding[3],常见的算法有:

  • 基于统计

  • Word2Vec,通过上下文统计信息学习词向量

  • GloVe,基于词共现统计信息学习词向量

  • 基于深度网络

  • CNN,使用卷积网络获得图像或文本向量

  • RNN/LSTM,利用序列模型获得文本向量

  • 基于神经网络

  • BERT,基于 Transformer 和掩码语言建模(Masked LM)进行词向量预训练

  • Doc2Vec,使用神经网络获得文本序列的向量

以 Transform 为代表的大模型采用自注意力(Self-attention)机制来学习不同 token 之间的依赖关系,生成高质量 embedding。

大模型的“大”,指的是用于表达 token 之间关系的参数多,主要是指模型中的权重(weight)与偏置(bias),例如 GPT-3 拥有 1750 亿参数,其中权重数量达到了这一量级,而词汇表 token 数只有 5 万左右。参考:

  • [How does an LLM “parameter” relate to a “weight” in a neural network?](https://datascience.stackexchange.com/questions/120764/how-does-an-llm-parameter-relate-to-a-weight-in-a-neural-network “How does an LLM “parameter” relate to a “weight” in a neural network?”)

发展历程

这一切的起源是 2017 年发布的 Attention Is All You Need[4] 论文,之后基于大量语料的预训练模型百花齐放,比如:

  • BERT(Bidirectional Encoder Representations from Transformers): Google 在 2018 年提出,创新性的双向预训练并行获取上下文语义信息,以及掩码语言建模(MLM)让模型更好地推断语义信息。它开创了预训练语言表示范式,对自然语言处理产生了深远影响。参数规模:110M 到 340M

  • GPT(Generative Pre-trained Transformer): OpenAI 在 2018 年提出,开创了仅使用自回归语言建模作为预训练目标而无需额外监督信号。它展示了通过无监督大规模预训练获得的语言生成能力,对研究与应用都带来重大影响。参数规模:1750 亿

  • Large LAnguage Model Approach(LLAMA): Meta 在 2021 年提出,首个开源模型。为构建更大规模、更通用的语言模型提供了系统化的方法与工具。参数规模:十亿到千亿

模型部署

在 LLM 中,Token 是输入的基本单元 由于在大模型的参数非常多,比如在 GPT-2 中,有 1.5B 参数,每个参数用 float32 表示,那么需要的内存大小为 4 bytes * 1,500,000,000 = 6GB ,更先进的模型如 LLAMA 有 65B 参数,那么需要的内存就需要 260G,这还是在不考虑词汇表的情况下。因此在进行模型实际部署时,会进行模型的压缩。

而且,在训练 LLM 中,CPU 与内存之间的传输速度往往是系统的瓶颈,核心数反而不是大问题,因此减小内存使用是首要优化点。使用内存占用更小的数据类型是一种直接的方式,比如 16 位的浮点数就可以直接将内存使用减倍。目前有几种相互竞争的 16 位标准,但英伟达在其最新一代硬件中引入了对 bfloat16 的支持,

FormatSignificandExponent
bfloat168 bits8 bits
float1611 bits5 bits
float3224 bits8 bits
量化 Quantization

将 16 位降至 8 位或 4 位是可能的,但不能使用硬件加速浮点运算。如果我们想对更小的类型进行硬件加速,就需要使用小整数和矢量化指令集。

这就是量化的过程。量化技术可以应用到现有的 32 位浮点运算模型中,通过将权值转换为较小的整数,这些整数的运算可以使用硬件加速指令集,如英特尔的 AVX。

量化模型的简单方法是,首先找出权重的最大值和最小值,然后将数值范围划分为整数类型中可用的桶数,8 位为 256 桶,4 位为 16 桶。这就是所谓的训练后量化(post-training quantization),也是量化模型的最简单方法。现在市面上主要有两类量化方法:

  • GPTQ[5] (Accurate Post-Training Quantization for Generative Pre-trained Transformers): 主要针对英伟达的 GPU

  • GGML (Large Language Models for Everyone): 侧重于 CPU 优化的量化方法,主要针对苹果 M1 和 M2 芯片做优化

社区用户 TheBloke[6] 把 Huggingface Transformers 库中的大多数 LLM 应用这些量化方法,这无疑极大方便了用户的使用。

动手实验

由于笔者实用的 macOS 系统,因此采用 GGML 量化后的模型,官方开源出来的模型大都以 Python 为主,效率可想而知,因此笔者一般会采用社区内的其他实现,比较有名的项目有:

  • ggerganov/llama.cpp: Port of Facebook’s LLaMA model in C/C++[7]

  • ggerganov/whisper.cpp: Port of OpenAI’s Whisper model in C/C++[8]

LLama

首先是编译,为了利用 Metal 的 GPU,可以用如下命令编译:

LLAMA_METAL=1 make  



之后需要去 Llama-2-7B-Chat-GGML[9] 中下载模型,3G 到 7G 不等,读者可以按需尝试即可。

./main -m ~/Downloads/llama-2-7b-chat.ggmlv3.q4_1.bin \  
       -p "Building a website can be done in 10 simple steps:" -n 512 -ngl 10  



得到输出

 Building a website can be done in 10 simple steps:  
  
 planning, domain name registration, hosting choice, selecting a CMS or building from scratch, developing the site content, designing the user interface, coding and debugging, testing for usability, and launching it.  
  
 Planning involves setting goals and objectives for your website, identifying your target audience, and determining its purpose.  
  
 Domain name registration is choosing a unique web address that reflects your brand or business identity.  
  
 Choosing the right hosting service ensures that your website loads quickly and efficiently. Popular choices include Bluehost, SiteGround, and  
 HostGator.  
  
 Selecting a Content Management System (CMS) or building one from scratch allows you to easily manage and update content without needing technical knowledge. Options include WordPress, Joomla, and Drupal.  
  
 Developing website content involves creating text, images, videos, and other media that convey your message and provide value to users.  
  
 Designing the user interface (UI) focuses on visual aspects of your site such as layout, color scheme, typography, and navigation.  
  
 Coding ensures your site functions correctly by writing clean HTML, CSS, and JavaScript code. Debugging involves identifying and fixing any errors or bugs that arise during testing.  
  
 Testing for usability means checking how easy it is for users to navigate through your site and find the information they need.  
Launching involves making your website live for all visitors to access, and promoting it through marketing channels such as social media and search engines. [end of text]  
  
llama_print_timings:        load time =  1267.46 ms  
llama_print_timings:      sample time =   204.14 ms /   313 runs   (    0.65 ms per token,  1533.23 tokens per second)  
llama_print_timings: prompt eval time =   397.22 ms /    14 tokens (   28.37 ms per token,    35.25 tokens per second)  
llama_print_timings:        eval time =  9504.40 ms /   312 runs   (   30.46 ms per token,    32.83 tokens per second)  
llama_print_timings:       total time = 10132.02 ms  
ggml_metal_free: deallocating


此外,llama.cpp 还提供了 WebUI 供用户使用,首先启动 server:

./server -m ~/Downloads/llama-2-7b-chat.ggmlv3.q4_1.bin -ngl 512  



它默认监听 8080 端口,打开浏览器就可以对话了

Whisper

和 llama 类似,采用 make 命令编译,之后去 ggerganov/whisper.cpp[10] 下载量化好的模型,然后转换音频即可,目前只接受 wav 格式,可以用 ffmpeg 转化

ffmpeg -loglevel -0 -y -i "$INPUT" -ar 16000 -ac 1 -c:a pcm_s16le "${INPUT}.wav"  
  
./main -m models/ggml-small.bin -f "$INPUT" \  
        -osrt -t 8 -p 4  



输出的 srt 文件如下所示:

1  
00:00:00,000 --> 00:00:05,520  
 Hello everyone and welcome to another episode of the Form 3 TET podcast.  
  
2  
00:00:05,520 --> 00:00:08,800  
 My name is Kevin Holtich, head of Pat from Engineering at Form 3.  
  
3  
00:00:08,800 --> 00:00:12,560  
 Today I'm really excited that I've been joined by Torsten Ball.  
  
4  
00:00:12,560 --> 00:00:13,920  
 How's it going, State Torsten?  



SizeParametersEnglish-only modelMultilingual modelRequired VRAMRelative speed
tiny39 Mtiny.entiny~1 GB~32x
base74 Mbase.enbase~1 GB~16x
small244 Msmall.ensmall~2 GB~6x
medium769 Mmedium.enmedium~5 GB~2x
large1550 MN/Alarge~10 GB1x

一般来说,英文的音频 small 模型就有够了,但是如果是中文,最好用最大的模型。

免费的 LLM 产品

尽管 ChatGPT 是收费的,而且还不面向中国,但现在市面上有非常多的其他选择,比如 Google 的 Bard[11],下图给出了一些常用服务, 读者都可以去体验试试:

单就写代码这个垂直领域来看,GitHub 的 Copilot[12] 无疑是老大哥,但它并非免费,下面有几个替代品:

  • Tabnine[13]: AI assistant that speeds up delivery and keeps your code safe

  • Codeium[14]: Free AI Code Completion & Chat

  • Amazon CodeWhisperer[15]: Build applications faster and more securely with your AI coding companion

  • SourceGraph Cody[16]: The AI that knows your entire codebase

  • Tabby[17]: Opensource, self-hosted AI coding assitant

  • fauxpilot/fauxpilot[18]: An open-source alternative to GitHub Copilot server

在这里插入图片描述

如何学习AI大模型?

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

在这里插入图片描述

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述

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

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

相关文章

python-SZ斐波那契数列/更相减损数

一:SZ斐波那契数列题目描述 你应该很熟悉斐波那契数列,不是吗?现在小理不知在哪里搞了个山寨版斐波拉契数列,如下公式: F(n) { $\ \ \ \ \ \ \ \ \ \ \ \ $ a,( n1) $\ \ \ \ \ \ \ \ \ \ \ \ $ b,( n2) $\ \ \ \ \ \ …

回归预测 | Matlab实现ReliefF-XGBoost多变量回归预测

回归预测 | Matlab实现ReliefF-XGBoost多变量回归预测 目录 回归预测 | Matlab实现ReliefF-XGBoost多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.ReliefF-xgboost回归预测代码,对序列数据预测性能相对较高。首先通过ReleifF对输入特征计算权…

Spring中的Web Service消费者集成(应该被淘汰的技术)

问题 最近需要对接一个老系统的web service接口,我已经有7,8年没有遇到过这种接口了。 思路 先用Spring空项目中的jaxws-maven-plugin插件生成一波web service客户端,然后,集成到现有的SpringBoot3项目中使用就可以了。 生成w…

人才有约,职为你:颐年集团携手粤荣学校共绘养老行业的美好未来

摘要:广州市白云区粤荣职业培训学校成功举办“人才有约,职为你”颐年集团养老机构线下招聘会 2024年9月19日下午2点30分,广州市白云区金骊城二楼热闹非凡。粤荣职业培训学校携手颐年集团,共同举办了主题为“人才有约,…

做短剧申请微信小程序备案整体的操作流程!

做国内短剧对接微信小程序,小程序备案是必不可少的,需要准备哪些资料,以及需要注意的事项,所需材料全部整理出来了,小程序从注册到类目和备案分为五个步骤来讲解,下面就由我来向大家介绍所有的操作流程。 …

【RabbitMQ】消息分发、事务

消息分发 概念 RabbitMQ队列拥有多个消费者时,队列会把收到的消息分派给不同的消费者。每条消息只会发送给订阅该队列订阅列表里的一个消费者。这种方式非常适合扩展,如果现在负载加重,那么只需要创建更多的消费者来消费处理消息即可。 默…

docker desktop windows stop

服务docker改为启动 cmd下查看docker版本 {"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors": ["https://hub.atomgit.com/"]…

详解c++:new和delete

文章目录 前言一、new和mallocnew的用法(爽点)自动构造 delete和freedelete的用法(爽点) 提醒 前言 提示:这里可以添加本文要记录的大概内容: 在C中,new 和 delete 是两个非常重要的操作符&am…

Python面相对象案例熟悉对MySQL的操作(案例一、学生管理系统,案例二、模拟注册与用户登录)有源码

Python面相对象案例熟悉对MySQL的操作 案例一,学生管理系统 对数据表的要求: 在mysql中创建数据库gamedb,创建用户表userinfo,字段如下: 用户编号uid(int,主键,自动增长) 用户姓名uname(varchar(20),非空) 用户昵称nickname(…

【Delphi】Delphi 中的 LiveBindings 使用场景与概念

LiveBindings 是 Delphi 提供的一种数据绑定机制,用于将 UI 控件与数据源(如数据库字段、对象属性等)进行动态连接。LiveBindings 允许开发人员通过可视化的方式绑定数据,省去了大量的手动编写代码,使 UI 更新和数据同…

RAG+Agent人工智能平台:RAGflow实现GraphRA知识库问答,打造极致多模态问答与AI编排流体验

1.RAGflow简介 全面优化的 RAG 工作流可以支持从个人应用乃至超大型企业的各类生态系统。大语言模型 LLM 以及向量模型均支持配置。基于多路召回、融合重排序。提供易用的 API,可以轻松集成到各类企业系统。支持丰富的文件类型,包括 Word 文档、PPT、exc…

『玉竹』基于Laravel 开发的博客、微博客系统和Android App

基于 Laravel 和 Filament 开发, 使用 Filament 开发管理后台,前端比较简洁。 博客大家都清楚是什么东西,微博客类似于微博之类的吧,有时候想要写的东西可能只有几句话,想要起个标题都不好起。 为了是微博客功能更好用&#xff0c…

Navicat导入Sql文件至Mysql数据库,事务失效

Mysql 版本:8.0.39 Navicat 版本:17.x、16.x 结论: Navicat 导入sql文件,事务不会生效,无论怎么设置 mysql.exe 导入sql文件,事务生效 测试 准备一张表 name约束不能为空,用于测试事务失败…

Qemu开发ARM篇-2、uboot交叉编译

文章目录 1、交叉编译工具安装2、uboot交叉编译3、FAQ 在继上一篇 Qemu开发ARM篇-1、环境搭建篇中,我们搭建安装了qemu虚拟机,在本节中,我们将演示如何安装交叉编译工具并交叉编译 uboot,在下一节中,我们将演示如何使用 qemu运…

如何快速找回Finalshell中VPS的SSH密码

买了vps亦或者重装了系统,就会更新SSH的连接密码,如果忘记保存或者遗忘,在邮箱里也找不到,再重装系统会非常麻烦。这时就需要在Finalshell中找回SHH的密码了。方法如下: 第一步:无认哪一种方法&#xff0c…

嵌入式入门小工程

此代码基于s3c2440 1.点灯 //led.c void init_led(void) {unsigned int t;t GPBCON;t & ~((3 << 10) | (3 << 12) | (3 << 14) | (3 << 16));t | (1 << 10) | (1 << 12) | (1 << 14) | (1 << 16);GPBCON t; }void le…

window下idea中scala的配置

目录 Scala安装步骤&#xff1a; 1.下载scala安装包 2.配置环境变量&#xff1a; 3.检查scala是否安装成功&#xff1a; 4.idea安装scala插件 5.导入scala-sdk 6.新建scala文件 Scala安装步骤&#xff1a; 1.下载scala安装包 访问Scala官网&#xff1a;https://www.sca…

MySQL高阶1907-按分类统计薪水

目录 题目 准备数据 分析数据 总结 题目 结果表 必须 包含所有三个类别。 如果某个类别中没有帐户&#xff0c;则报告 0 。 按 任意顺序 返回结果表。 查询每个工资类别的银行账户数量。 工资类别如下&#xff1a; "Low Salary"&#xff1a;所有工资 严格低于…

YOLOv8改进 | 特征融合篇,YOLOv8添加iAFF(多尺度通道注意力模块),并与C2f结构融合,提升小目标检测能力

摘要 特征融合,即来自不同层或分支的特征的组合,是现代网络架构中无处不在的一部分。虽然它通常通过简单的操作(如求和或拼接)来实现,但这种方式可能并不是最佳选择。在这项工作中,提出了一种统一且通用的方案,即注意力特征融合(Attentional Feature Fusion),适用于…

刷题训练之栈

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟练掌握字符串算法。 > 毒鸡汤&#xff1a;学习&#xff0c;学习&#xff0c;再学习 ! 学&#xff0c;然后知不足。 > 专栏选自&#xff1a;刷题…