
- 在main.tex中添加table选项以支持表格高亮 - 精简introduction.tex中的国内外研究现状描述 - 重构technology.tex中的LLM发展历程部分,优化表格格式
193 lines
25 KiB
TeX
193 lines
25 KiB
TeX
% 第二章:相关技术介绍
|
||
|
||
\section{相关技术介绍}
|
||
|
||
\subsection{大型语言模型 (LLM)}
|
||
|
||
\subsubsection{LLM 的起源、发展历程和关键里程碑事件}
|
||
|
||
大型语言模型(LLM)是一种能够理解、生成并与人类语言交互的人工智能技术。这些模型通过在海量数据集上训练,能够应对科学、技术、艺术和文化等广泛领域的问题,成为信息检索、内容创作和自然语言理解的关键工具。LLM 主要基于 Transformer 架构,通过处理大规模文本数据来捕捉语言的复杂模式、语法规则和语义关系。
|
||
|
||
自然语言处理(NLP)的发展为 LLM 奠定了基础。1966 年,约瑟夫·魏泽鲍姆创建的 ELIZA 被认为是第一个使用 NLP 的程序,它能根据用户输入的关键词给出预设响应。随着计算机性能的提升,特别是在 20 世纪 90 年代,NLP 技术得到了显著发展。
|
||
|
||
词语表示方式的演进是 LLM 发展的关键环节。传统机器学习方法使用数字表格表示词语,难以捕捉词语间关系。词嵌入技术通过神经网络模型训练解决了这一问题,使模型能够根据上下文理解词语含义。现代 LLM 采用自注意力机制,能够聚焦输入中的相关部分,评估每个词语在上下文中的重要性,从而提升理解和生成能力。
|
||
|
||
2017 年 Transformer 模型的引入是 LLM 发展的重要转折点。基于自注意力机制的 Transformer 架构能有效处理长序列数据并实现并行计算,为大规模语言模型的训练铺平了道路。2018 年,谷歌发布了 BERT,在自然语言理解任务中取得显著进展;同年,OpenAI 发布了 GPT-1,展示了生成连贯文本的能力。
|
||
|
||
随后几年,LLM 的规模和能力持续增长。2019 年的 GPT-2 生成更具说服力的文本;2020 年拥有 1750 亿参数的 GPT-3 达到了前所未有的语言理解和生成水平;2022 年 ChatGPT 的发布引起公众广泛关注;2023 年 GPT-4 在准确性方面有所提升,并具备了多模态能力。除 OpenAI 外,谷歌的 BERT、PaLM 和 Gemini 系列,Meta 的 Llama 系列,以及 Anthropic 的 Claude 系列等成为主流 LLM。开源模型如 BLOOM 和 LLaMA 的出现进一步推动了该领域发展。
|
||
|
||
LLM 发展的显著趋势是参数规模的扩大和能力的演变。参数规模从最初的几百万发展到目前的数千亿甚至万亿,训练数据也从数十亿词语增长到数万亿 tokens,这一趋势被称为"新的摩尔定律"。随着模型发展,LLM 从最初的文本生成和补全,逐渐展现出复杂推理、解决数学问题、翻译语言和编写代码等高级能力。近年来,多模态 LLM 的出现扩展了应用范围,使其能够处理和生成文本、图像、音频等多种类型数据。 \textbf{表 \ref{tab:llm_milestones}} 总结了 LLM 发展中的关键里程碑事件。
|
||
|
||
|
||
\begin{table}[!ht]
|
||
\centering
|
||
\caption{LLM 发展中的关键里程碑事件}
|
||
\label{tab:llm_milestones}
|
||
\begin{tabular}{>{\centering\arraybackslash}p{1.5cm}>{\centering\arraybackslash}p{2.8cm}p{10cm}}
|
||
\toprule
|
||
\rowcolor[gray]{0.9} \textbf{年份} & \textbf{里程碑} & \textbf{重要性} \\
|
||
\midrule
|
||
1966 & ELIZA & 第一个使用 NLP 的聊天机器人,基于关键词模拟对话。 \\
|
||
\addlinespace[0.5ex]
|
||
\rowcolor[gray]{0.95} 2017 & Transformer 架构 & 引入自注意力机制和平行处理,使得模型更加高效和上下文感知。 \\
|
||
\addlinespace[0.5ex]
|
||
2018 & BERT & 第一个突破性的 LLM,在自然语言理解方面取得了显著进展。 \\
|
||
\addlinespace[0.5ex]
|
||
\rowcolor[gray]{0.95} 2018 & GPT-1 & 第一个使用 Transformer 架构进行生成文本的概念验证。 \\
|
||
\addlinespace[0.5ex]
|
||
2019 & GPT-2 & 展示了生成令人信服的文本的能力,引发了关于潜在滥用的担忧。 \\
|
||
\addlinespace[0.5ex]
|
||
\rowcolor[gray]{0.95} 2020 & GPT-3 & 参数规模显著增大(1750 亿),展示了前所未有的语言理解和生成能力,成为 ChatGPT 的基础。 \\
|
||
\addlinespace[0.5ex]
|
||
2022 & ChatGPT & 面向消费者的应用程序,凭借其对话能力使 LLM 引起了主流关注。 \\
|
||
\addlinespace[0.5ex]
|
||
\rowcolor[gray]{0.95} 2023 & GPT-4 & 多模态模型,具有更高的准确性和推理能力。 \\
|
||
\addlinespace[0.5ex]
|
||
2023 & LLaMA & 流行的开源 LLM,推动了 AI 的普及。 \\
|
||
\addlinespace[0.5ex]
|
||
\rowcolor[gray]{0.95} 2025 & DeepSeek-R1 & 在美国境外开发的高性能开源推理模型,凸显了 LLM 开发领域日益激烈的全球竞争。 \\
|
||
\addlinespace[0.5ex]
|
||
2025 & Claude 3 & GPT 模型的竞争者,强调乐于助人、诚实和无害,具有强大的推理和多模态能力。 \\
|
||
\addlinespace[0.5ex]
|
||
\rowcolor[gray]{0.95} 2025 & Gemini & 一系列多模态 AI 模型,旨在跨不同设备运行并涵盖广泛的用途,包括推理。 \\
|
||
\bottomrule
|
||
\end{tabular}
|
||
\end{table}
|
||
|
||
\subsubsection{LLM 辅助编码}
|
||
大型语言模型在辅助软件开发和编码方面展现出巨大的潜力。它们通过理解和生成代码,可以显著提高开发效率并改善代码质量。LLM 在代码生成、代码补全、错误检测与修复等多个方面都有具体的应用。
|
||
|
||
在代码生成方面,LLM 能够根据自然语言描述生成代码片段甚至完整的函数。开发者可以使用自然语言描述所需功能,LLM 即可生成相应的代码,从而加速开发过程。例如,开发者只需描述一个排序算法,LLM 就能生成相应的代码实现。一些知名的 LLM,如 OpenAI 的 Codex、Meta 的 Code Llama 和 Google 的 PaLM 2,都经过专门优化用于代码生成。此外,LLM 还可以生成代码文档和注释,提高代码可读性和可维护性。
|
||
|
||
代码补全是 LLM 在编码辅助方面的另一重要应用。LLM 能够根据已有代码上下文,预测并建议接下来可能需要的代码片段或整行代码,甚至生成完整的函数或类。GitHub Copilot、Tabnine 和 Replit Ghostwriter 等工具通过集成到集成开发环境(IDE)中,为开发者提供实时的代码建议,显著提高了编码效率。LLM 能够理解多种编程语言的语法、编码风格和编程实践,从而提供更智能、更准确的补全建议。
|
||
|
||
在错误检测与修复方面,LLM 也展现出强大能力。LLM 可以分析代码,识别潜在的错误模式或问题,帮助开发者快速找到并修复 bug。它们能够理解代码的语法、编码风格和编程实践,从而识别出代码中的错误和潜在漏洞。一些研究表明,LLM 甚至能够根据错误信息和上下文生成修复代码的建议。然而,需要注意的是,LLM 生成的代码可能并非总是完美,仍需要开发者进行审查和验证。
|
||
|
||
综上所述,大型语言模型正日益成为软件开发过程中不可或缺的辅助工具。它们通过代码生成、代码补全和错误检测与修复等功能,极大地提升了开发效率和代码质量。随着 LLM 技术的不断发展,其在软件开发领域的应用前景将更加广阔。
|
||
|
||
\subsection{提示工程技术}
|
||
提示工程(Prompt Engineering)是设计和优化输入提示(prompts)的系统方法,旨在精确引导大型语言模型(LLMs)生成符合预期的输出。随着生成式人工智能技术的发展,提示工程已成为充分发挥模型能力的关键环节。通过精心构建提示的格式、结构、语言和上下文,提示工程能够显著提升模型理解用户意图的准确性,并引导其生成更加精确、相关且高质量的回应。专业的提示工程师通过设计最优化的输入指令,使其与生成式 AI 系统的内部机制高效协同,从而获取更为精准和有用的输出结果。
|
||
|
||
提示工程的重要性主要体现在三个方面:首先,它能够显著提升模型性能,使 LLM 更准确地把握用户意图并生成高质量回复;其次,通过提供结构化指令和丰富上下文,提示工程能够引导模型避开其训练数据中潜在的偏见和局限性;最后,精心设计的提示能够优化用户与 AI 系统的交互体验,提高沟通效率和满意度。在实际应用中,提示工程已成为连接用户需求与 AI 能力的关键桥梁,对于充分发挥大型语言模型的潜力至关重要。
|
||
|
||
提示工程实践涉及多项核心原则和技术策略。首要原则是清晰性和精确性,即提示应当明确界定任务边界、避免模糊表述,并提供充分的背景信息和具体的输出要求(包括格式、长度、风格和语气等)。其次,上下文管理是提示工程的关键技术,通过提供相关事实、参考资料和关键概念定义,可以显著提高模型输出的相关性和准确性。第三,少样本学习(few-shot learning)技术通过在提示中嵌入示例性的输入-输出对,为模型提供直观的任务示范,有效引导其生成符合预期的回应。第四,迭代优化是提示工程的核心方法论,通过系统性地测试不同表述方式和结构,并基于模型反馈持续调整,可以逐步提升提示效果。第五,任务分解策略将复杂问题拆分为一系列相互关联的子任务,通过连贯的提示序列引导模型逐步解决问题,有效提升处理复杂任务的能力。此外,角色定义技术通过为模型赋予特定身份或专业背景,能够引导其从特定视角生成更加专业和一致的回应。
|
||
|
||
\subsection{模型量化技术}
|
||
模型量化(Model Quantization)是大型语言模型(LLMs)中使用的一种技术,旨在将高精度数据(通常是 32 位浮点数 (FP32) 或 16 位浮点数 (FP16))的权重和激活值转换为低精度数据类型,如 8 位整数 (INT8) 或 4 位整数 (INT4)。模型量化的主要目的是减少模型的内存占用、提高推理速度并降低能耗,使其更易于部署在资源受限的设备上,如移动设备或边缘服务器。
|
||
|
||
模型量化通过减少表示模型参数所需的比特数来实现这些目标。从数学角度看,量化过程可以表示为将浮点值映射到整数值的过程。对于线性量化,这一过程可以用以下公式表示:
|
||
|
||
\begin{equation}
|
||
q = \text{round}\left(\frac{r - r_{\text{min}}}{s}\right)
|
||
\end{equation}
|
||
|
||
其中,$q$ 是量化后的整数值,$r$ 是原始浮点值,$r_{\text{min}}$ 是浮点值的最小值,$s$ 是量化比例因子(scale factor)。反量化过程则可以表示为:
|
||
|
||
\begin{equation}
|
||
\hat{r} = s \cdot q + r_{\text{min}}
|
||
\end{equation}
|
||
|
||
其中,$\hat{r}$ 是反量化后的浮点值,通常与原始值 $r$ 存在一定的量化误差 $\epsilon = r - \hat{r}$。
|
||
|
||
这种转换显著降低了存储模型所需的内存空间,并且由于低精度运算通常比高精度运算更快,因此可以提高模型的推理速度。此外,更快的计算和减少的内存访问通常会降低功耗,这对于电池供电的设备尤其重要。
|
||
|
||
模型量化有多种不同的技术,主要可分为以下几类:
|
||
|
||
\textbf{训练后量化 (Post-Training Quantization, PTQ)}:这种方法在模型完成训练后应用量化,将模型权重从浮点表示转换为低精度定点整数,无需重新训练。对于权重 $W$ 的线性量化可表示为:
|
||
|
||
\begin{equation}
|
||
W_q = \text{round}\left(\frac{W - W_{\text{min}}}{s_W}\right), \quad s_W = \frac{W_{\text{max}} - W_{\text{min}}}{2^n - 1}
|
||
\end{equation}
|
||
|
||
其中,$W_q$ 是量化后的权重,$n$ 是量化位数(如 INT8 中的 8),$s_W$ 是量化比例因子。PTQ 实现简单快捷,但可能导致一定性能下降。PTQ 可进一步分为静态量化和动态量化。静态量化在量化时使用校准数据确定激活值范围并适当缩放。动态量化仅量化权重,而激活在推理期间保持较高精度,并根据运行时观察到的范围动态量化。
|
||
|
||
\textbf{量化感知训练 (Quantization-Aware Training, QAT)}:这种方法在模型预训练或微调期间引入权重转换,允许模型在训练过程中适应低精度表示。在前向传播过程中,QAT 使用量化操作的可微分近似:
|
||
|
||
\begin{equation}
|
||
\tilde{W} = W + \text{stop\_gradient}(\text{fake\_quant}(W) - W)
|
||
\end{equation}
|
||
|
||
其中,$\text{fake\_quant}$ 是量化-反量化操作,$\text{stop\_gradient}$ 确保梯度不通过量化操作传播。QAT 通常比 PTQ 产生更高性能,但需要大量计算资源和代表性训练数据。
|
||
|
||
\textbf{权重共享 (Weight Sharing)}:涉及对相似权重进行聚类并共享相同的量化值,减少唯一权重数量,进一步压缩模型。对于 $k$ 个聚类中心 $C = \{c_1, c_2, \ldots, c_k\}$,权重 $W$ 被映射到最近的聚类中心:
|
||
|
||
\begin{equation}
|
||
W_q = \arg\min_{c \in C} ||W - c||^2
|
||
\end{equation}
|
||
|
||
\textbf{混合精度量化 (Mixed Precision Quantization)}:在训练或推理过程中使用不同数值精度的组合(例如 FP16 和 FP32),以在性能和精度之间取得平衡。
|
||
|
||
\textbf{二值化和三值化 (Binary and Ternary Quantization)}:将权重分别量化为两个值(+1 和 -1)或三个值(+1、0 和 -1),是极端的量化形式。二值化可表示为:
|
||
|
||
\begin{equation}
|
||
W_b = \text{sign}(W) = \begin{cases}
|
||
+1, & \text{if } W \geq 0 \\
|
||
-1, & \text{if } W < 0
|
||
\end{cases}
|
||
\end{equation}
|
||
|
||
这些极端量化形式显著减小模型尺寸和计算复杂度的同时,精度下降也更明显。
|
||
|
||
不同的量化级别(如 INT8 和 INT4)对模型性能和资源消耗影响不同。一般来说,更低的量化级别(例如从 INT8 到 INT4)可以进一步减少模型大小并提高推理速度,但通常会导致更大精度损失。量化误差可以通过以下方式进行分析:
|
||
|
||
\begin{equation}
|
||
\epsilon = W - \hat{W} = W - (s_W \cdot W_q + W_{\text{min}})
|
||
\end{equation}
|
||
|
||
其中,$\epsilon$ 是量化误差,$W$ 是原始权重,$\hat{W}$ 是反量化后的权重。对于均匀分布的权重,量化误差的方差可以近似为:
|
||
|
||
\begin{equation}
|
||
\text{Var}(\epsilon) \approx \frac{s_W^2}{12}
|
||
\end{equation}
|
||
|
||
这表明量化比例因子 $s_W$ 越大,量化误差也越大。对于 $n$ 位量化,内存占用和原始 32 位浮点表示相比可以减少:
|
||
|
||
\begin{equation}
|
||
\text{内存减少比例} = \frac{32 - n}{32} \times 100\%
|
||
\end{equation}
|
||
|
||
例如,8 位量化可以减少 75\% 的内存占用,而 4 位量化可以减少 87.5\% 的内存占用。
|
||
|
||
INT8 量化通常被认为是性能和精度之间的良好折衷方案,可在保持较高模型准确性的同时,显著降低内存占用和提高推理速度。INT4 量化更为激进,可实现更高压缩率和更快速度,但通常伴随更明显精度下降,更适用于对资源限制非常严格但对精度要求相对较低的场景。选择合适的量化技术和级别需要在模型大小、推理速度和精度之间进行权衡,通常取决于具体应用场景和硬件条件。
|
||
|
||
\subsubsection{监督式微调(SFT)概述}
|
||
|
||
随着大规模预训练语言模型(Large Language Models,
|
||
LLMs)在自然语言处理领域展现出强大的通用能力,如何有效地将这些模型适配到特定的应用场景或下游任务中,成为了研究与实践的关键环节。监督式微调(Supervised
|
||
Fine-Tuning,
|
||
SFT)正是实现这一目标的核心技术之一。它指的是在一个已经经过大规模无标注数据预训练的基础语言模型上,利用一套有标注的、高质量的特定任务数据(通常表现为``指令-响应''或``输入-输出''对的形式)进行进一步训练的过程。
|
||
|
||
SFT的``监督''特性体现在其训练数据的形式上。与预训练阶段模型从海量文本中自主学习语言模式不同,SFT阶段向模型明确展示了在给定输入(如用户提问、指令)下,期望的、正确的输出(如恰当的回答、符合要求的文本)。模型在学习过程中,通过优化目标函数,不断调整自身参数,力求使其生成的响应尽可能地逼近标注数据中的目标响应。这种有指导的学习方式使得模型能够更精准地理解特定任务的格式要求、知识范畴以及交互模式。
|
||
|
||
采用SFT的主要目的在于提升模型在特定领域的性能表现和任务遵循能力。预训练模型虽然知识广博,但在特定专业领域或具体任务上的表现可能不够精确或不符合特定规范。通过在相关的高质量标注数据上进行微调,可以有效地向模型注入领域知识,提升其回答的准确性和相关性。同时,SFT也是引导模型学习遵循特定指令、模仿某种对话风格或角色的重要手段,使其行为更加符合人类预期,从而更好地服务于实际应用需求。因此,SFT是连接通用预训练模型与特定应用场景的关键桥梁,是使大模型``落地''不可或缺的技术步骤。在本研究中,我们采用SFT技术来定制化训练语言模型,以满足特定交互任务的需求。
|
||
|
||
\subsection{QLoRA 微调方法}
|
||
QLoRA(Quantization-aware Low-Rank Adaptation)是一种高效微调大型语言模型(LLMs)的方法,它结合了量化和低秩自适应技术,旨在在资源受限的情况下实现与全精度微调相当的性能。QLoRA 的主要原理是在微调过程中冻结预训练 LLM 的权重并将其量化为 4 位精度,然后引入少量可训练的低秩适配器(Low-Rank Adapters, LoRA)。微调期间,梯度通过冻结的 4 位量化预训练语言模型反向传播到这些低秩适配器中。
|
||
|
||
QLoRA 引入了多项创新技术以在节省内存的同时不牺牲性能。首先是 4 位 NormalFloat (NF4) 数据类型,这是一种专为正态分布权重设计的新数据类型,在信息论上最优,并在实证研究中优于 4 位整数和 4 位浮点数。NF4 基于分位数化,确保每个量化区间分配相等数量的输入张量值,从而有效利用内存。其次是双重量化 (Double Quantization),通过对第一步量化的量化常数再次进行量化,进一步减少平均内存占用,在不显著损失性能的情况下节省额外内存。最后是分页优化器 (Paged Optimizers),利用 NVIDIA 统一内存特性管理训练期间的内存峰值,特别是在处理长序列的小批量数据时,从而避免内存不足错误。
|
||
|
||
QLoRA 的主要优势在于其能够在资源受限情况下实现高效微调。通过将预训练模型量化到 4 位并仅训练少量低秩适配器,QLoRA 显著降低了微调所需的 GPU 内存。例如,QLoRA 能够将微调一个 650 亿参数模型的平均 GPU 内存需求从超过 780GB 降低到低于 48GB,且不降低运行时或预测性能。这使得在单个消费级 GPU 上微调大型模型成为可能,从而大大降低了微调 LLM 的门槛。研究表明,使用 QLoRA 微调的 LLM 在各种任务上可以达到与全精度微调相当甚至更好的性能。
|
||
|
||
低秩适配器(LoRA)是 QLoRA 的关键组成部分。LoRA 的核心思想是,大型预训练模型在适应下游任务时,其权重变化具有低秩特性。因此,LoRA 冻结原始预训练模型的权重,并在每个 Transformer 层的自注意力模块中注入两个小的低秩矩阵(A 和 B)。LoRA 的数学原理可以表示为:
|
||
|
||
\begin{equation}
|
||
W = W_0 + \Delta W = W_0 + BA
|
||
\end{equation}
|
||
|
||
其中,$W_0 \in \mathbb{R}^{d \times k}$ 是预训练模型中的原始权重矩阵,$\Delta W = BA$ 是低秩更新,$B \in \mathbb{R}^{d \times r}$,$A \in \mathbb{R}^{r \times k}$,且秩 $r \ll \min(d, k)$。通过这种方式,原本需要训练 $d \times k$ 个参数,现在只需要训练 $r \times (d + k)$ 个参数。例如,当 $d = k = 1000$ 且 $r = 8$ 时,可训练参数数量从 $10^6$ 减少到约 $1.6 \times 10^4$,减少了约 98.4\%。
|
||
|
||
微调过程中仅更新这些低秩矩阵的参数,原始模型的权重保持不变。这大大减少了需要训练的参数数量,从而降低了计算成本和内存需求。LoRA 的线性设计也确保与完全微调的模型相比,不会引入额外推理延迟。在推理阶段,可以将低秩更新与原始权重合并:$W = W_0 + BA$,从而不增加模型的推理延迟。QLoRA 通过结合量化和 LoRA,为在资源受限环境中高效微调大型语言模型提供了有力方法,使得研究人员和从业人员能够更容易利用和定制最先进的 LLM,推动 NLP 领域进一步发展。
|
||
|
||
\subsection{Unsloth 算子}
|
||
|
||
Unsloth 是一个开源软件,旨在简化大型语言模型(LLMs)的微调过程。它提供用户友好的界面和强大功能,可帮助 AI 开发初学者和专家轻松管理资源、优化性能并集成各种 AI 工具以提高模型准确性。Unsloth 的核心优势在于其能够显著加速 LLM 的训练和推理过程,同时降低内存使用。
|
||
|
||
Unsloth 通过手动推导所有计算密集型数学步骤并编写自定义 GPU 内核来实现加速,而无需更改硬件。它支持 NVIDIA 自 2018 年以来的各种 GPU,包括 Tesla T4 到 H100,并可移植到 AMD 和英特尔 GPU。Unsloth 还与 Hugging Face 的 Transformers 库无缝集成,并支持其 TRL、Trainer 和 Seq2SeqTrainer 类。
|
||
|
||
Unsloth 的主要特点和优势包括:加速微调:能够将 LLM(如 Llama、Mistral、Gemma 和 Phi)的微调速度提高 2 倍以上,某些情况下甚至高达 30 倍。降低内存使用:显著减少微调过程中 VRAM 消耗,通常可减少高达 70\%-90\% 的内存使用,使得在有限 GPU 资源的机器上微调更大模型成为可能。零精度损失:声称在使用 QLoRA(4 位)和 LoRA(16 位)进行微调时不会造成精度下降。广泛模型支持:支持各种流行 LLM 架构,包括 Llama(版本 1、2 和 3)、Mistral、Gemma 和 Phi-3,以及 Mixtral、MOE、Cohere 和 Mamba 等所有模型。多种训练算法支持:除标准微调外,还支持强化学习技术,如 DPO、GRPO、PPO、奖励建模和在线 DPO,以及 KTO 和 DoRA 训练算法。动态 4 位量化:引入动态 4 位量化方法,旨在提高准确性,同时仅比标准 BnB 4 位量化多使用不到 10\% 的 VRAM。优化内核:所有核心操作均使用 OpenAI 的 Triton 语言编写,并具有手动反向传播引擎,提高了性能。易于使用和集成:提供易于使用的笔记本,用户可快速开始微调模型,并与 Hugging Face 生态系统无缝集成。更快推理:对其支持的所有模型实现 2 倍更快的推理速度。模型导出:微调后模型可轻松导出为 GGUF、Ollama、vLLM 和 Hugging Face 等各种格式。Windows 支持:可在 Linux 和 Windows 上运行。Unsloth 通过优化内存使用和速度,使得在资源有限环境中进行 LLM 微调和推理变得更容易、更高效,推动了 LLM 技术的更广泛应用。
|
||
|
||
\subsection{Gradio 框架}
|
||
|
||
Gradio 是一个开源 Python 包,允许用户快速构建机器学习模型、API 或任何任意 Python 函数的演示或 Web 应用程序。用户可以使用 Gradio 的内置共享功能在几秒钟内分享其演示或 Web 应用程序的链接。该框架无需 JavaScript、CSS 或 Web 托管经验。
|
||
|
||
Gradio 的主要功能包括:快速简便设置:通过 pip 安装,在项目中添加几行代码即可创建 Gradio 界面。与任何 Python 库无缝使用:只要用户能编写 Python 函数,Gradio 即可运行。展示和共享:可嵌入 Python 笔记本或作为网页呈现。Gradio 界面可自动生成公共链接,方便用户与同事共享,使其能远程与用户计算机上的模型交互。永久托管:创建界面后,可永久托管在 Hugging Face Spaces 上,Hugging Face 将在服务器上托管界面并提供共享链接。使用 \texttt{gr.Interface} 构建演示:\texttt{gr.Interface} 是高级类,旨在为接受一个或多个输入并返回一个或多个输出的机器学习模型创建演示。它接受三个核心参数:\texttt{fn}:要包装用户界面的函数,通常是机器学习模型的预测函数;\texttt{inputs}:用于输入的 Gradio 组件,数量应与函数参数数量匹配;\texttt{outputs}:用于输出的 Gradio 组件,数量应与函数返回值数量匹配。使用 \texttt{gr.Blocks} 构建自定义演示:对于更可定制的布局和数据流,Gradio 提供使用 \texttt{gr.Blocks} 类的低级方法。Blocks 支持控制组件显示位置、处理多个数据流和更复杂交互(例如输出作为其他函数输入),以及根据用户交互更新组件属性/可见性。使用 \texttt{gr.ChatInterface} 构建聊天机器人:包含高级类 \texttt{gr.ChatInterface},专用于创建聊天机器人 UI。用户提供函数,Gradio 将创建功能齐全的聊天机器人 UI。Gradio Python 和 JavaScript 生态系统:不仅是 UI 库,更是通过 UI 和 API 与机器学习模型交互的框架,在性能、安全性、响应能力方面提供强大保证。包含用于以编程方式在 Python 或 JavaScript 中构建或查询机器学习应用的完整 Python 和 JavaScript 库生态系统。Gradio Sketch:无需代码即可构建 Gradio 应用,只需在终端中键入 gradio sketch 即可打开编辑器,允许用户通过 Web 编辑器定义和修改组件、调整布局、添加事件。流式输出:通过使用 \texttt{yield} 语句的简单 Python 生成器提供流式传输,支持令牌到令牌的文本生成流式传输、逐步图像生成更新,甚至通过 HTTP Live Streaming (HLS) 协议实现流畅音频/视频流式传输。Gradio 框架的主要优势在于其易用性、灵活性以及与机器学习生态系统的强大集成,使其成为构建和共享机器学习模型演示的理想选择。 |