1.1 什么是 LLM 推理?核心概念与应用场景
定义:
大型语言模型(Large Language Models, LLMs)推理(Inference)是指利用已经过大规模数据训练好的 LLM,针对给定的输入(通常称为 Prompt),生成符合预期或任务要求的输出的过程。 简单来说,推理就是让训练好的模型“思考”并“回答”我们的问题或完成我们提出的任务。
与训练的对比:
特征 | 训练 (Training) | 推理 (Inference) |
---|---|---|
目标 | 学习数据中的模式和规律,调整模型参数,使其能够完成特定任务。 | 利用已学习到的模型参数,根据输入生成输出。 |
数据 | 大规模的标注或无标注数据集。 | 单个或批量的输入 Prompt。 |
计算资源 | 通常需要大量的计算资源(GPU/TPU),耗时较长。 | 对计算资源的需求相对较低,通常更注重速度和效率。 |
参数更新 | 模型参数在训练过程中不断更新。 | 模型参数在推理过程中保持不变。 |
主要过程 | 前向传播计算损失、反向传播更新梯度、参数优化。 | 仅进行前向传播,根据输入计算输出。 |
企业级应用案例:
LLM 推理技术在企业级应用中展现出巨大的潜力,以下是一些典型的例子:
- 智能客服: 利用 LLM 理解用户意图,提供即时、个性化的客户支持,自动回复常见问题,降低人工客服压力。
- 知识检索与管理: 构建企业内部知识库,通过自然语言查询快速获取所需信息,提升员工效率。
- 自动化报告生成: 基于结构化或非结构化数据,自动生成业务报告、市场分析等,减少人工撰写时间。
- 合同分析与审核: 快速分析合同条款,识别潜在风险,提高合同审核效率和准确性。
- 行业分析与趋势预测: 分析大量的行业报告、新闻资讯等,提取关键信息,预测市场趋势,为企业决策提供支持。
- 内容创作与营销文案生成: 自动生成产品描述、营销邮件、社交媒体文案等,提高内容生产效率。
- 代码辅助与生成: 帮助开发人员编写代码,提供代码建议和自动补全,提高开发效率和代码质量。
1.2 Transformer 模型架构回顾(推理关键组件)
Transformer 模型是现代 LLM 的基石。理解其在推理过程中的工作方式对于优化和应用 LLM 至关重要。
Decoder-only 模型(例如 GPT 系列、Qwen 系列):
Decoder-only 模型主要用于生成任务。其推理过程是自回归的,意味着模型一次生成一个 token,并将已生成的 token 作为下一步生成的输入,循环往复直到生成结束符或达到预设的最大长度。
在推理过程中,当输入一个 Prompt 时,首先会被转换为 token 序列。这些 token 会依次通过 Decoder 的各个层。每一层都包含自注意力机制和前馈神经网络。
-
数据流: 输入的 token 序列首先进入自注意力层。在自注意力层中,每个 token 会与其他所有 token(包括自身)进行交互,计算出一个加权平均的表示。这个过程涉及到计算每个 token 的 Query、Key 和 Value 向量,然后计算 Query 和 Key 之间的相似度(通常使用点积),得到注意力权重。这些权重 用于加权 Value 向量,最终得到每个 token 的上下文表示。为了保证自回归特性,Decoder 中的自注意力会进行 Masking,防止模型在预测当前位置的 token 时“看到”未来的信息。
-
计算方式: 自注意力机制的核心计算可以概括为:
-
- 将输入 token 的嵌入 (Embedding) 分别乘以权重矩阵 得到 Query (Q)、Key (K)、Value (V) 向量。
- 计算注意力分数:,其中 是 Key 向量的维度。
- Masked Self-Attention 会在计算 softmax 之前对注意力分数进行 Masking,将未来位置的注意力权重设置为负无穷大。
-
自注意力层的输出会进一步传递到前馈神经网络进行非线性变换,增强模型的表达能力。每一层 Decoder 的输出会作为下一层 Decoder 的输入,最终最后一层 Decoder 的输出会经过一个线性层和 Softmax 函数,得到下一个 token 的概率分布。模型会根据这个概率分布选择下一个要生成的 token(选择策略将在后续章节详细介绍)。
Encoder-Decoder 模型(例如 T5):
Encoder-Decoder 模型通常用于序列到序列的任务。其推理过程分为两个阶段:
-
Encoder 阶段: Encoder 处理输入的 Prompt,将其编码成一系列的上下文向量,这些向量蕴含了输入序列的语义信息。Encoder 的每一层也包含自注意力机制和前馈神经网络,类似于 Decoder,但不进行 Masking。
-
Decoder 阶段: Decoder 接收 Encoder 输出的上下文向量,并以自回归的方式生成目标序列。Decoder 的每一层包含 Masked Self-Attention、Encoder-Decoder Attention 和前馈神经网络。
-
Encoder-Decoder Attention: 这一层允许 Decoder 在生成每个目标 token 时,关注 Encoder 编码的整个输入序列。它使用 Decoder 前一层的输出作为 Query,Encoder 的输出作为 Key 和 Value,计算注意力权重并加权求和,从而将输入信息融入到目标序列的生成过程中。
自注意力机制在推理中的作用:
在 LLM 的推理过程中,自注意力机制扮演着至关重要的角色:
- 上下文理解: 自注意力机制允许模型在生成每个 token 时,考虑到输入 Prompt 中所有相关的 token,以及已经生成的序列中的所有 token。通过计算不同 token 之间的关联性,模型能够更好地理解当前需要生成的内容应该是什么。例如,在回答问题时,模型会关注问题中的关键词;在生成文章时,模型会关注前文的主题和风格。
- 长距离依赖: 传统的循环神经网络在处理长序列时容易出现信息衰减的问题。而自注意力机制可以直接计算序列中任意两个位置之间的依赖关系,无论它们相隔多远,这使得 LLM 能够更好地处理长文本输入和生成。
- 生成连贯性: 通过在每一步都关注之前生成的内容,自注意力机制确保了生成文本的连贯性和逻辑性。模型能够记住已经说过的内容,并在此基础上生成下一个合理的 token。
1.3 推理的基本流程与环境搭建
使用 LLM 进行推理的基本流程通常包括以下几个步骤:
- 输入(Prompt)的 Tokenization: 将输入的文本 Prompt 转换为模型能够理解的数字表示(tokens)。
- 模型加载: 将预训练好的 LLM 模型加载到内存中,通常会加载模型的权重参数。
- 前向传播: 将 tokenized 的输入送入模型,模型根据 Prompt 和自身的参数进行计算,生成输出的 logits(未归一化的概率)。
- 解码(Decoding): 根据模型输出的 logits,按照某种策略(例如贪婪解码、采样等)选择最终的输出 token。
- 输出的 Detokenization: 将模型输出的 tokens 转换回人类可读的文本。
环境搭建:
要开始使用 vLLM
进行 LLM 推理,需要搭建以下环境:
- Python 安装: 确保您的系统中安装了 Python 3.8 或更高版本。
- 常用库安装: 使用 pip 安装必要的库,包括 PyTorch、Hugging Face Transformers 和 。 是一个专门为快速高效的 LLM 推理而设计的库。
pip install torch torchvision torchaudio
pip install transformers
pip install vllm
- GPU 配置:
vLLM
依赖于 NVIDIA GPU 进行加速。请确保您的系统配备了支持 CUDA 的 NVIDIA GPU,并安装了相应的驱动程序和 CUDA 工具包。您可以参考 NVIDIA 官方文档进行安装。
代码示例:
以下是使用 vLLM
和 transformers
库进行基本推理流程的 Python 代码示例。
输入(Prompt)的 Tokenization:
from transformers import AutoTokenizer
model_name = "Qwen/Qwen2.5-7B" # 使用 Qwen2.5-7B 模型
tokenizer = AutoTokenizer.from_pretrained(model_name)
prompt = "What is the capital of France?"
inputs = tokenizer(prompt)
input_ids = inputs["input_ids"]
print(f"Tokenized input IDs: {input_ids}")
模型加载(vLLM
示例)与基本的前向传播实现:
from vllm import LLM
model_name = "Qwen/Qwen2.5-7B"
# 使用 vLLM 加载模型,这会将模型的权重参数加载到 GPU 内存中
llm = LLM(model=model_name)
prompt = "What is the capital of France?"
# 使用 vLLM 的 generate 方法进行推理,该方法封装了前向传播和解码过程
outputs = llm.generate(prompt)
# vLLM 的 generate 方法直接返回生成结果,包含了 tokenization 和 detokenization
for output in outputs:
generated_text = output.outputs[0].text
print(f"Generated text: {generated_text}")
输出的 Detokenization(在 vLLM
的 generate
方法中已完成):
如上面的代码所示,vLLM
的 generate
方法会自动处理输出的 detokenization。如果您需要单独进行 detokenization,可以使用 transformers
库提供的 tokenizer
:
output_ids = outputs[0].outputs[0].token_ids
output_text = tokenizer.decode(output_ids, skip_special_tokens=True)
print(f"Detokenized output: {output_text}")
1.4 推理性能指标与初步评估
请注意,本节介绍的性能评估方法是初步的,更深入的性能分析将在后续章节中进行。
评估 LLM 推理性能对于优化模型部署至关重要。以下是一些关键的性能指标及其测量方法(使用 vLLM
):
- 延迟(Latency): 指从输入 Prompt 到模型生成第一个输出 token 或完整输出序列所需的时间。
import time
from vllm import LLM
model_name = "Qwen/Qwen2.5-7B"
# 使用 vLLM 加载模型
llm = LLM(model=model_name)
prompt = "Write a short story about a cat."
start_time = time.time()
# 使用 vLLM 的 generate 方法进行推理
outputs = llm.generate(prompt)
end_time = time.time()
latency = (end_time - start_time) * 1000 # 转换为毫秒
for output in outputs:
generated_text = output.outputs[0].text
print(f"Generated text: {generated_text}")
print(f"Latency: {latency:.2f} ms")
- 吞吐量(Throughput): 指单位时间内模型能够处理的输入样本数量或生成的 token 数量。
import time
from vllm import LLM
model_name = "Qwen/Qwen2.5-7B"
# 使用 vLLM 加载模型
llm = LLM(model=model_name)
prompts = ["Write a short poem.", "Translate 'Hello' to Spanish.", "Summarize this article: ..."] * 10 # 多个 prompt
start_time = time.time()
# 使用 vLLM 的 generate 方法处理多个 prompt
outputs = llm.generate(prompts)
end_time = time.time()
total_time = end_time - start_time
num_prompts = len(prompts)
throughput_requests_per_second = num_prompts / total_time
total_generated_tokens = sum(len(output.outputs[0].token_ids) for output in outputs)
throughput_tokens_per_second = total_generated_tokens / total_time
print(f"Throughput (requests/s): {throughput_requests_per_second:.2f}")
print(f"Throughput (tokens/s): {throughput_tokens_per_second:.2f}")
- 内存占用(Memory Usage): 指模型在推理过程中占用的 GPU 内存大小。
import torch
from vllm import LLM
model_name = "Qwen/Qwen2.5-7B"
# 使用 vLLM 加载模型,模型在初始化时会占用显存
llm = LLM(model=model_name)
if torch.cuda.is_available():
memory_allocated = torch.cuda.max_memory_allocated() / (1024 ** 3)
print(f"Max GPU memory allocated: {memory_allocated:.2f} GB")
else:
print("CUDA is not available.")
# 注意:torch.cuda.max_memory_allocated() 记录了进程在运行期间分配的最大的 GPU 内存,
# 这包括了模型权重以及中间计算结果占用的内存。
影响推理性能的关键因素初步分析:
- 模型大小: 更大的模型通常需要更多的计算和内存资源。
- 输入/输出序列长度: 更长的序列会增加计算量。
- 硬件设备: GPU 的性能直接影响推理速度。
- Batch Size: 同时处理多个请求可以提高吞吐量。
推理评估的其他重要指标(初步介绍):
- 准确性(Accuracy): 在某些任务中(例如问答),需要评估模型输出的正确性。
- 公平性(Fairness): 模型在不同群体上的表现是否一致,是否存在偏见。
- 鲁棒性(Robustness): 模型在面对输入扰动或变化时的性能稳定性。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费
】
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。