赞
踩
随着 ChatGPT 的到来,大模型[1](Large Language Model,简称 LLM)成了新时代的 buzzword,各种 GPT 产品百花齐放。
大多数人直接用现有产品就可以了,但对于喜欢刨根问底的程序员来说,能够在本地运行会更有意思。但由于没有相关背景,笔者一开始在接触时, 很多 GitHub 上的搭建教程看得是云里雾里,而且这方面的介绍文章要不就是太晦涩难懂,要不就是太大众小白,于是就有了这篇文章, 主要介绍笔者在搭建大模型过程中学到的知识,以及如何在 macOS 上运行大模型。 笔者水平有限,不足之处请读者指出。
通俗来讲,大模型就是输入大量语料,来让计算机获得类似人类的“思考”能力,使之能够理解自然语言,能够进行『文本生成』、『推理问答』、『对话』、『文档摘要』等工作。
既然是学习,那我们就可以用『上学参加工作』这件事来类比大模型的训练、使用过程:
在 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],常见的算法有:
以 Transform 为代表的大模型采用自注意力(Self-attention)机制来学习不同 token 之间的依赖关系,生成高质量 embedding。
大模型的“大”,指的是用于表达 token 之间关系的参数多,主要是指模型中的权重(weight)与偏置(bias),例如 GPT-3 拥有 1750 亿参数,其中权重数量达到了这一量级,而词汇表 token 数只有 5 万左右。参考:
这一切的起源是 2017 年发布的 Attention Is All You Need[4] 论文,之后基于大量语料的预训练模型百花齐放,比如:
在 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
|
将 16 位降至 8 位或 4 位是可能的,但不能使用硬件加速浮点运算。如果我们想对更小的类型进行硬件加速,就需要使用小整数和矢量化指令集。
这就是量化的过程。量化技术可以应用到现有的 32 位浮点运算模型中,通过将权值转换为较小的整数,这些整数的运算可以使用硬件加速指令集,如英特尔的 AVX。
量化模型的简单方法是,首先找出权重的最大值和最小值,然后将数值范围划分为整数类型中可用的桶数,8 位为 256 桶,4 位为 16 桶。这就是所谓的训练后量化(post-training quantization),也是量化模型的最简单方法。现在市面上主要有两类量化方法:
社区用户 TheBloke[6] 把 Huggingface Transformers 库中的大多数 LLM 应用这些量化方法,这无疑极大方便了用户的使用。
由于笔者实用的 macOS 系统,因此采用 GGML 量化后的模型,官方开源出来的模型大都以 Python 为主,效率可想而知,因此笔者一般会采用社区内的其他实现,比较有名的项目有:
首先是编译,为了利用 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, 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:
代码语言:javascript
复制
./server -m ~/Downloads/llama-2-7b-chat.ggmlv3.q4_1.bin -ngl 512
它默认监听 8080 端口,打开浏览器就可以对话了
和 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,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?
|
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 模型就有够了,但是如果是中文,最好用最大的模型。
尽管 ChatGPT 是收费的,而且还不面向中国,但现在市面上有非常多的其他选择,比如 Google 的 Bard[11],下图给出了一些常用服务, 读者都可以去体验试试:
单就写代码这个垂直领域来看,GitHub 的 Copilot[12] 无疑是老大哥,但它并非免费,下面有几个替代品:
说来可笑,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-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。