
NVIDIA
LoRA属于一种微调方法,它把低阶矩阵加进LLM架构的各层,仅训练这些矩阵,原始LLM权重则保持冻结状态。这是NVIDIA NeMo所支持的LLM定制工具中的一种(见图1)。
LLM的功能十分强大,不过在企业或特定领域的用例中往往需要定制。调优的方式有很多,从简单的提示工程到监督微调(SFT)都有。而调优方式的选择,一般取决于所需数据集的大小(提示工程所需最小,SFT最大)和计算资源的可用性。LoRA调谐属于参数高效微调(PEFT)这个调谐家族。它是一种折中的技术,和提示工程相比,它需要更多训练数据与计算量,但准确性更高。其共性在于引入少量参数或层,同时让原始的大型语言模型(LLM)保持不变。事实表明,PEFT在数据量与计算资源需求更少的情况下,达到了与SFT相近的准确性。LoRA相较于其他调谐技术存在诸多优势,其能减少计算和内存成本,原因在于它仅添加少量新参数且不添加任何层。此外,它可实现多任务学习,凭借按需部署相关微调的LoRA变体,仅在必要时加载其低秩矩阵,就能让单个基础LLM用于不同任务。它避免了灾难性遗忘,这是大型语言模型(LLM)在学习新数据时会突然忘掉之前所学信息的一种自然倾向。从数量上看,如LoRA:大型语言模型的低阶适应所表明的,LoRA比提示调优等替代调优技术的模型表现更优。LoRA背后的数学基于低阶分解理念,即用两个低阶小矩阵的乘积来近似矩阵。矩阵的秩是其线性独立行或列的数量。低阶矩阵自由度小,相比全阶矩阵能以更紧凑的形式表示。LoRA把低阶矩阵插入到LLM的每一层,再添加到原始权重矩阵里。原始权重矩阵由预训练的LLM权重初始化,训练时不更新。低阶矩阵随机初始化,是训练中唯一更新的参数。此外,LoRA对原始矩阵与低阶矩阵之和进行层归一化,以此稳定训练。

服务器
有若干可用于自定义大型语言模型(LLM)的平台。像NVIDIA NeMo、Hugging Face PEFT这类工具就可供使用。若想了解如何运用NeMo针对PubMed数据集调整LoRA,可查看带有Llama 2的NeMo Framework PEFT示例。若要用TensorRT - LLM对经LoRA调谐的LLM进行优化,就必须了解其架构,明确与之最接近的通用基础架构。本教程以Llama 2 13B和Llama 2 7B为基本模型,同时采用Hugging Face提供的若干LoRA调谐变体。首先,利用此目录下的转换器与构建脚本编译全部模型,使其可硬件加速。接着,我会给出用命令行和Triton推理服务器部署的示例。请注意,TensorRT - LLM并不直接处理代币化器。不过,要能在已定义的令牌器系列里对它进行分类,这对在运行时以及在Triton里设置预处理和后处理步骤是很有必要的。首先要从克隆与构建NVIDIA/TensorRT - LLM库着手。使用附带的Dockerfile是构建TensorRT - LLM并获取其全部依赖项最为简便的方法。这些指令会拉取一个基础容器,在容器内部安装TensorRT - LLM所需的全部依赖项,随后在容器里构建并安装TensorRT - LLM。在Hugging Face下载基础模型与LoRA模型。编译引擎时,设置--use_lora_plugin和--hf_lora_dir。若LoRA有独立的语言模型头(lm_head)和嵌入(embedding),那么这些将替换基础模型的语言模型头和嵌入。若要在推理期间运行模型,需设置lora_dir命令行参数。注意,要使用LoRA标记器,毕竟LoRA调谐模型词汇量更大。能够进行消融测试,从而直观看到LoRA调谐模型的贡献。若要便捷地对比有LoRA和无LoRA时的结果,只要将UID设为 -1(使用--lora_task_uids -1)即可。如此一来,模型会忽略LoRA模块,结果仅依据基本模型得出。TensorRT - LLM能够同时运行单个基础模型与多个LoRA调谐模块。此处以两个LoRA检查点为例,这两个检查点的LoRA模块等级r为8,可将--max_lora_rank设为8,以此降低LoRA插件的内存需求。此例采用在中国数据集luotuo - lora - 7b - 0.1上微调过的LoRA检查点,以及在日本数据集Japanese - Alpaca - LoRA - 7b - v0上微调过的LoRA检查点。若要让TensorRT - LLM加载若干检查点,可通过--lora_dir luotuo - lora - 7b - 0.1/Japanese - Alpaca - LoRA - 7b - v0/进入包含所有LoRA检查点的目录。TensorRT - LLM会为这些检查点分配lora_task_uids。其中,lora_task_uids为 - 1是一个预定义的值,它对应着基本模型。例如,若设定lora_task_uids为0和1,那么将在第一句使用第一个LoRA检查点,在第二句使用第二个LoRA检查点。要检验正确性的话,将同样的中文输入美国的首都在哪里? 答案传递三次,还有同样的日语输入アメリカ合泄氖锥激悉嗓长扦工�? 回答也传递三次(这两个输入在英语里都表示美国的首都在哪里? 答案)。接着分别在基本模型luotuo - lora - 7b - 0.1和Japanese - Alpaca - LoRA - 7b - v0上运行。
请注意,luotuo - lora - 7b - 0.1在第一句和第五句(中文内容)给出了正确答案。Japanese - Alpaca - LoRA - 7b - v0在第六句(日语内容)给出了正确答案。重要提示:若某个LoRA模块包含微调嵌入表或者logit GEMM,那么用户务必确保模型的所有实例均能使用相同的微调嵌入表或者logit GEMM。这部分内容介绍了运用Triton Inference服务器的机内批处理来部署LoRA调谐模型的方法。关于设置并启动Triton推理服务器的详细说明,可以查看使用NVIDIA TensorRT - LLM和NVIDIA Triton部署AI编码助理这一内容。像以往那样,先编译一个启用LoRA的模型,此次的基本模型为Llama 2 7B。接下来,生成LoRA张量,此张量会随每个请求一同传递给Triton。接着创建一个Triton模型库,再按照之前的说法启动Triton服务器。从客户端发出多个并发请求来运行多LoRA示例,飞行批处理器会在同批中执行多LoRA混合批处理。
TensorRT - LLM能够支持诸多流行的LLM架构,方便对各类代码LLM进行部署、实验与优化。NVIDIA的TensorRT - LLM与NVIDIA Triton推理服务器共同构成了一个对LLM进行高效优化、部署和运行的必备工具包。由于支持LoRA调谐模型,TensorRT - LLM可高效部署定制化的LLM,从而大幅削减内存与计算成本。若要开始,需先下载并设置NVIDIA/TensorRT - LLM开源库,然后尝试不同的示例LLM。您能够借助NVIDIA NeMo来调整自己的LLM,查看带有Llama 2的NeMo Framework PEFT可获取相关示例。此外,也可以使用NeMo框架推理容器进行部署。
Copyright © 2025 IZhiDa.com All Rights Reserved.
知答 版权所有 粤ICP备2023042255号