介绍
微调
在机器学习领域,大型模型已成为解决各种问题的首选解决方案。从自然语言处理到计算机视觉,这些计算能力的庞然大物都表现出了无与伦比的性能。然而,这种性能实际上是有代价的。微调这些大型模型以适应特定任务或领域是一个资源密集型过程。它需要大量的计算能力、内存和时间,这使其成为许多组织和个人开发人员的瓶颈。
想象一下,您是一位数据科学家,正在处理多个需要专门机器学习模型的项目。为每个项目微调大型模型不仅计算量大,而且耗时。您必须更新预训练模型的所有参数,本质上是为每个项目创建一个新的、同样大的模型。这既不实际也不高效,尤其是当您在预算限制或紧迫的期限内运营时。
LoRA
这就是低秩适应(LoRA)发挥作用的地方。LoRA 提供了传统微调过程的突破性替代方案。它允许您使大型模型适应特定任务,而无需计算和内存开销,使其成为机器学习领域的游戏规则改变者。
本文的目的是倡导采用 LoRA 作为微调的更高效、更有效的替代方案。无论您是经验丰富的数据科学家、机器学习爱好者,还是对未来技术感兴趣的人,LoRA 都能为您提供帮助。读完本文后,您将了解为什么 LoRA 应该引起您的关注,以及它如何彻底改变我们处理各个领域的机器学习任务的方式。
微调的瓶颈
计算代价
微调大型机器学习模型类似于定制高性能跑车 - 您需要专业知识、大量时间和大量投资。在机器学习的背景下,这种投资主要是计算性的。微调涉及调整预训练模型中所有参数的权重,使其更适合特定任务。此过程可能需要数百甚至数千小时的计算时间,具体取决于模型的复杂性和大小。
对于无法访问高性能计算集群的组织或个人来说,这种计算成本可能令人望而却步。即使基于云的解决方案虽然更易于访问,但在用于广泛的微调时也会产生大量成本。
内存开销
但令人担忧的不仅仅是计算能力,还有计算能力。内存使用是另一个重要的瓶颈。大型模型可能有数十亿甚至数万亿个参数,需要大量内存来存储和处理。这通常需要高端 GPU 或 TPU 等专用硬件,而这些硬件也有其自身的成本和限制。
部署挑战
微调完成后,瓶颈并不会结束。创建专用模型后,您会发现将其部署到现实环境中是另一个障碍。每个微调模型都与原始模型一样大,这意味着您需要同样强大的基础设施来运行它。对于需要跨不同领域部署多个专用模型的组织来说,这变得尤其成问题。资源需求很快就会变得难以管理,从而导致运营复杂性和成本增加。
创新的障碍
所有这些挑战使得微调成为创新的重大障碍。小公司和个人开发人员可能会发现很难与拥有微调和部署大型模型资源的大型组织竞争。这就造成了一种“计算鸿沟”,只有那些拥有大量资源的人才能充分利用大型机器学习模型的力量。
当然!以下是您文章的“低阶适应简介 (LoRA)”部分的扩展版本:
引入低秩适应 (LoRA)
什么是LoRA?
低秩适应(Low-Rank Adaptation,简称 LoRA)是一项突破性技术,旨在使大型机器学习模型适应特定任务,而无需进行大量微调。LoRA 的核心是对传统模型适应过程的巧妙改造。LoRA 不是调整预训练模型的所有参数,而是专注于参数的子集,从而大大减少了计算和内存需求。它通过将所谓的“等级分解矩阵”引入模型架构的每一层来实现这一点。这些矩阵是可训练的,这意味着它们可以进行调整以适应手头的特定任务。
LoRA解决方案
那么,LoRA 是如何解决与微调相关的问题的呢?让我们来分解一下:
1.计算效率:通过关注参数子集,LoRA 显着降低了模型自适应所需的计算能力。这使得更广泛的开发人员和组织可以使用它,从而在通常由拥有丰富资源的人主导的环境中创造公平的竞争环境。
2.节省内存: LoRA 的方法还可以节省大量内存。由于您没有调整所有参数,因此不需要太多内存来存储和处理模型。对于那些无法使用高端 GPU 或 TPU 的人来说,这是一个福音。
3.部署简便: LoRA 最引人注目的优势之一是它对模型部署的影响。由于 LoRA 模型的资源效率更高,因此在现实场景中部署它们更容易、更便宜。这对于需要管理跨不同领域的多个专用模型的组织特别有利。
4.多功能性: LoRA不限于任何特定类型的机器学习模型或任务。其原理可以广泛应用,使其成为机器学习工具包中的多功能工具。
通过解决这些关键挑战,LoRA 为机器学习应用开辟了新的可能性。它使高性能模型的访问变得民主化,使任何人都可以更轻松地利用机器学习的力量,无论其计算资源如何。
LoRA 图像分类入门
第 1 步:安装依赖项
首先使用 pip 安装必要的 Python 包:
pip install transformers accelerate evaluate datasets peft -q
第 2 步:进行身份验证以共享您的模型
要与社区分享您的微调模型,请使用您的 Hugging Face 令牌进行身份验证:
from huggingface_hub import notebook_login
notebook_login()
第 3 步:加载数据集
加载数据集进行训练。例如,您可以使用 Food-101 数据集中的前 5000 个实例:
from datasets import load_dataset
dataset = load_dataset("food101", split="train[:5000]")
第 4 步:准备数据集
创建用于培训和label2id
评估id2label
的字典:
labels = dataset.features["label"].names
label2id, id2label = {}, {}
for i, label in enumerate(labels):
label2id[label] = i
id2label[i] = label
第 5 步:加载并准备模型
加载预训练模型并准备进行微调:
from transformers import AutoModelForImageClassification
model = AutoModelForImageClassification.from_pretrained(
"google/vit-base-patch16-224-in21k",
label2id=label2id,
id2label=id2label
)
第 6 步:用 LoRA 包装模型
通过用 LoRA(低阶近似)包装来提高基本模型的参数效率:
from peft import LoraConfig, get_peft_model
config = LoraConfig(r=16, lora_alpha=16, target_modules=["query", "value"])
lora_model = get_peft_model(model, config)
第 7 步:微调模型
使用 Hugging Face 微调模型Trainer
:
from transformers import TrainingArguments, Trainer
args = TrainingArguments(
"vit-base-patch16-224-in21k-finetuned-lora-food101",
per_device_train_batch_size=128,
num_train_epochs=5
)
trainer = Trainer(lora_model, args, train_dataset=dataset)
trainer.train()
有关包含代码和说明的完整工作示例,请参阅使用 LoRA 进行图像分类的 Hugging Face 指南。
就是这样!您现在已准备好开始使用 LoRA 进行图像分类。
结论
随着机器学习模型的规模和复杂性不断增长,与训练和微调相关的成本变得越来越高。在这种情况下,低秩适应(LoRA)等工具代表了未来。它们提供了一种利用大型模型的强大功能而无需相关计算和内存开销的方法。跟上此类创新不仅是可取的,而且对于任何希望在快速发展的机器学习领域保持竞争力的人来说都是至关重要的。