大模型入门指南

随着 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” 等的同时,会生成下面的词汇表:

|
Token

|

ID

|
| — | — |
|

The

|

345

|
|

cat

|

1256

|
|

sat

|

1726

|
|

|

|

数字化的好处是便于计算机处理。但为了让计算机理解 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 的支持,

|
Format

|

Significand

|

Exponent

|
| — | — | — |
|

bfloat16

|

8 bits

|

8 bits

|
|

float16

|

11 bits

|

5 bits

|
|

float32

|

24 bits

|

8 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,可以用如下命令编译:

代码语言:javascript

复制

LLAMA_METAL=1 make

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

代码语言:javascript

复制

./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

得到输出

代码语言:javascript

复制

 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, andHostGator.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:

代码语言:javascript

复制

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

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

Whisper

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

代码语言:javascript

复制

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 文件如下所示:

代码语言:javascript

复制

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

|
Size

|

Parameters

|

English-only model

|

Multilingual model

|

Required VRAM

|

Relative speed

|
| — | — | — | — | — | — |
|

tiny

|

39 M

|

tiny.en

|

tiny

|

~1 GB

|

~32x

|
|

base

|

74 M

|

base.en

|

base

|

~1 GB

|

~16x

|
|

small

|

244 M

|

small.en

|

small

|

~2 GB

|

~6x

|
|

medium

|

769 M

|

medium.en

|

medium

|

~5 GB

|

~2x

|
|

large

|

1550 M

|

N/A

|

large

|

~10 GB

|

1x

|

一般来说,英文的音频 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

总结

说来可笑,ChatGPT 的开发者 OpenAI 并不像其名字那样开放,ChatGPT 的源码与模型数据是不对外开放的,但不久, Meta 在 2023 年 2 月份开源了 LLaMA 1[19],并在 7 月接着发布了进阶的 Llama 2[20],而且允许商用。 Meta 此举无疑极大推进的大模型的发展,坊间甚至一度流传这么一篇文章:[Google “We Have No Moat, And Neither Does OpenAI”](https://www.semianalysis.com/p/google-we-have-no-moat-and-neither “Google “We Have No Moat, And Neither Does OpenAI””),说 Meta 才是大模型时代的最大赢家, OpenAI、Google 都要靠边站。

大模型时代到来了,你的工作离被取代还远吗?

大模型岗位需求

大模型时代,企业对人才的需求变了,AIGC相关岗位人才难求,薪资持续走高,AI运营薪资平均值约18457元,AI工程师薪资平均值约37336元,大模型算法薪资平均值约39607元。
在这里插入图片描述

掌握大模型技术你还能拥有更多可能性

• 成为一名全栈大模型工程师,包括Prompt,LangChain,LoRA等技术开发、运营、产品等方向全栈工程;

• 能够拥有模型二次训练和微调能力,带领大家完成智能对话、文生图等热门应用;

• 薪资上浮10%-20%,覆盖更多高薪岗位,这是一个高需求、高待遇的热门方向和领域;

• 更优质的项目可以为未来创新创业提供基石。

可能大家都想学习AI大模型技术,也想通过这项技能真正达到升职加薪,就业或是副业的目的,但是不知道该如何开始学习,因为网上的资料太多太杂乱了,如果不能系统的学习就相当于是白学。为了让大家少走弯路,少碰壁,这里我直接把全套AI技术和大模型入门资料、操作变现玩法都打包整理好,希望能够真正帮助到大家。

-END-


👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

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

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

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

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

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

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

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

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉大模型视频和PDF合集👈

观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈

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

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

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

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

👉获取方式:

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

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

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

相关文章

华为机考入门python3--(18)牛客18- 识别有效的IP地址和掩码并进行分类统计

分类:字符串 知识点: 字符串是否由数字组成 my_str.isdigit() 字符串填充 不足8位左侧填充0 my_str.zfill(8) 题目来自【牛客】 import sys def classify_ip(ip_mask): ip_class, is_private_ip, mask_class ignore_ip, 0, valid_mask# 解…

【C++】日期计算机

个人主页:救赎小恶魔 欢迎大家来到小恶魔频道 好久不见,甚是想念 今天我们要讲述的是一个日期类计算机的代码实现 引言: 我们日常生活中可能会有一个烦恼。 今天几月几号?过n天后又是几月几号?某年某月某天和x年…

比特币中的符文是什么?

比特币中的符文是什么? 比特币符文是存在于比特币区块链上的独特的、可替代的代币。它们旨在代表具有独特特征和元数据的可替代资产。 Ordinals 协议的创建者 Casey Rodamor 最近放弃了一项替代 BRC-20 可替代代币协议的提案,该替代方案被称为 Runes。 破…

【k8s】Kubernetes 1.29.4离线安装部署(总)

(一)kubernetes1.29.4离线部署之-安装文件准备 (二)kubernetes1.29.4离线部署之-镜像文件准备 (三)kubernetes1.29.4离线部署之-环境初始化 (四)kubernetes1.29.4离线部署之-组件安装…

掌握Linux Shell脚本函数:提高脚本效率与可维护性

目录标题 1、什么是Shell函数?2、如何定义Shell函数?3、Shell函数参数4、返回值5、实例:使用函数进行文件备份6、为什么使用函数?7、最佳实践 在编写Linux shell脚本时,函数是组织和重用代码的重要手段。本文将介绍如何…

现货白银价格走势分析别走弯路!

参与现货白银投资离不开对其价格走势的分析,虽然相关的分析方法有很多种,但说到直观高效的方法,技术分析就是很多专业投资者所钟爱的选择。投资者可以通过平台交易软件所自带的技术指标和画线工具,来辅助自己的分析,实…

前缀和 求数列的子序列的K倍区间

(直接截图比复制文字要好多了) 不会做的时候我去看了之前做的关于这道题目的笔记, (Ak 1)% k 1 (Ak 1 Ak)% k 1 只要发现了同余数的情况就说明有一个区间满足了题目的要求。 这个方法的精妙之处就在于前缀和包括了…

嵌入式Linux driver开发实操(二十一):linux device driver basic设备驱动程序基础

linux的架构框图: 内核空间是内核(即操作系统的核心)执行(即运行)并提供其服务的地方。 用户空间是执行用户应用程序的地方。 内核模块是可以根据需要加载和卸载到内核中的代码片段。它们扩展了内核的功能,而无需重新启动系统。自定义代码可以通过两种方法添加到Linux内…

C++ —— 继承

什么是继承? 继承是指一种代码可以被复用的机制,在一个类的基础上进行扩展,产生的新类叫做派生类,被继承的类叫基类。(也可称为子类和父类) 继承的写法: class B : 继承方式 A (…

Java高级阶段面试题库(Redis数据库、MQ消息队列、kafka、SpringBoot + SpringCloud、MySQL、JVMJUC、其它)

文章目录 1. Redis数据库篇(忽略)1.1 简单介绍一下redis1.2 单线程的redis为什么读写速度快?1.3 redis为什么是单线程的?1.4 redis服务器的的内存是多大?1.5 为什么Redis的操作是原子性的,怎么保证原子性的?1.6 你还用过其他的缓存吗?这些…

学习Django

1.python安装是会有几个主要目录: 2.如果某个路径加入了环境变量,那么在命令行直接输入他下面的文件就能找到,不用输入完整路径 2.过程 (1)安装 (2)建项目 在终端: (…

快速回复app是什么样

在电商领域,掌握一些必备的软件工具是提高工作效率、优化运营流程以及提升用户体验的关键。本文将为您介绍做电商必备的几个软件,帮助您更好地开展电商业务。 ​ 快速回复APP:重新定义沟通效率 在快节奏的现代社会中,人们对于沟通…

ZeRO论文阅读

一.前情提要 1.本文理论为主,并且仅为个人理解,能力一般,不喜勿喷 2.本文理论知识较为成体系 3.如有需要,以下是原文,更为完备 Zero 论文精读【论文精读】_哔哩哔哩_bilibili 二.正文 1.前言 ①为什么用该技术&…

Linux网络设置

将Linux主机接入到网络,需要配置网络相关设置 一般包括:主机名;IP/netmask;路由:默认网关;DNS服务器:主DNS服务器,次DNS服务器,第三个DNS服务器 网卡的配置文件在&…

java:观察者模式

java:观察者模式 1 前言 观察者模式,又被称为发布-订阅(Publish/Subscribe)模式,他定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所…

百面算法工程师 | 卷积基础知识——Convolution

目录 8.1 图像卷积过程 8.2 卷积层基本参数 8.3 卷积后图像的长和宽大小的计算方式 8.4 卷积神经网络中的权重共享 8.5 上采样中的反卷积 8.6 空洞卷积 8.7 深度可分离卷积 8.8 为什么可分离卷积中Depthwise卷积后还要进行pointwise卷积 8.9 分组卷积 Group Conv 8.1…

AI视频教程下载:ChatGPT个人生产力提升指南

在本课程中,您将学习如何成功地将ChatGPT融入您的工作和生活,以优化您的社交媒体内容并扩展您的业务。 您将学习如何使用ChatGPT自动创建、校对、总结和翻译文本,以及如何与机器人沟通以实现您的目标。 您还将学习如何创建jQuery代码、编程…

倪海厦是怎么去思考问题的(一)下

1《天纪》是自然法则 2自然法则是个《真理》 3《真理》不需要再证实 4《真理》没有二元对立 紧接着第三点:真理不需要再去证实。现在有很多的人呢,看书学习,自认为自己很聪明,总要去证实一些东西。证明谁的说法是错的&#xff…

麒麟龙芯loongarch64 electron 打包deb包

在麒麟龙芯(loongarch64)电脑上 使用electron 开发桌面应用。之前用electron-packager 打包出来的是文件夹 是 unpack 包。现在需要打包deb包,依据开发指南开始打包。 在项目文件夹下 打开终端 输入 npm run packager 先打包unpack包 然后…

ATFX汇市:澳大利亚一季度CPI年率大降,澳元升值态势延续

▲ATFX图 据澳大利亚统计局数据,第一季度CPI年率最新值3.6%,相比前值4.1%大降0.5个百分点,但仍高于3.5%的预期值。历史数据看,自从2022年四季度创出7.8%阶段性高点之后,澳大利亚的季度CPI年率就保持着稳定的下降态势。…