text-generation-inference 文档

LoRA(低秩自适应)

Hugging Face's logo
加入 Hugging Face 社区

并获得增强型文档体验

开始使用

LoRA(低秩自适应)

什么是 LoRA?

LoRA 是一种技术,允许在仅更新模型权重的一小部分的情况下高效地微调模型。当您拥有一个在大型数据集上预先训练过的庞大模型,但想要在较小的数据集上或针对特定任务进行微调时,这非常有用。

LoRA 通过向模型添加少量额外的权重来工作,这些权重用于将模型适应新数据集或任务。这些额外的权重在微调过程中学习,而模型的其余权重保持固定。

它如何使用?

LoRA 可以以多种方式使用,并且社区一直在寻找新的使用方法。以下是一些您可以使用 LoRA 的示例

从技术上讲,LoRA 可以用于在小型数据集上微调大型语言模型。但是,这些用例可以涵盖广泛的应用程序,例如

  • 在小型数据集上微调语言模型
  • 在特定领域的数据集上微调语言模型
  • 在标签有限的数据集上微调语言模型

使用 LoRA 优化推断

在推断期间,可以通过在每个指定层将适配器权重与模型权重相乘来使用 LoRA。此过程在计算上可能很昂贵,但是由于 punica-ailorax 团队的出色工作,已经开发出优化的内核/框架来使此过程更有效率。TGI 利用这些优化来提供快速高效的推断,并支持多个 LoRA 模型。

使用 TGI 提供多个 LoRA 适配器

训练好 LoRA 模型后,就可以像使用常规语言模型一样使用它来生成文本或执行其他任务。但是,由于模型已针对特定数据集进行了微调,因此它在该数据集上的表现可能优于未经微调的模型。

在实践中,拥有多个 LoRA 模型通常很有用,每个模型针对不同的数据集或不同的任务进行微调。这使您可以使用最适合特定任务或数据集的模型。

文本生成推断 (TGI) 现在支持在启动时加载多个 LoRA 模型,这些模型可以在生成请求中使用。此功能从版本 ~2.0.6 开始提供,与使用 peft 库训练的 LoRA 模型兼容。

指定 LoRA 模型

要在 TGI 中使用 LoRA,在启动服务器时,可以使用 LORA_ADAPTERS 环境变量指定要加载的 LoRA 模型列表。例如

LORA_ADAPTERS=predibase/customer_support,predibase/dbpedia

要指定模型修订版,请使用 adapter_id@revision,如下所示

LORA_ADAPTERS=predibase/customer_support@main,predibase/dbpedia@rev2

要使用本地存储的 lora 适配器,请使用 adapter-name=/path/to/adapter,如下所示。当您要使用此适配器时,请设置 "parameters": {"adapter_id": "adapter-name"}"

LORA_ADAPTERS=myadapter=/some/path/to/adapter,myadapter2=/another/path/to/adapter

请注意,可以混合使用 adapter_id 和 adapter_id=adapter_path,例如

LORA_ADAPTERS=predibase/dbpedia,myadapter=/path/to/dir/

在服务器日志中,您将看到以下消息

Loading adapter weights into model: predibase/customer_support
Loading adapter weights into model: predibase/dbpedia

生成文本

然后,您可以在生成请求中使用这些模型,方法是在请求有效负载中指定 lora_model 参数。例如

curl 127.0.0.1:3000/generate \
    -X POST \
    -H 'Content-Type: application/json' \
    -d '{
  "inputs": "Hello who are you?",
  "parameters": {
    "max_new_tokens": 40,
    "adapter_id": "predibase/customer_support"
  }
}'

如果您使用的是以以下方式设置的本地存储的 lora 适配器:LORA_ADAPTERS=myadapter=/some/path/to/adapter,以下是一个示例有效负载

curl 127.0.0.1:3000/generate \
    -X POST \
    -H 'Content-Type: application/json' \
    -d '{
  "inputs": "Hello who are you?",
  "parameters": {
    "max_new_tokens": 40,
    "adapter_id": "myadapter"
  }
}'

注意:LoRA 功能是新的,仍在改进中。如果您遇到任何问题或有任何反馈,请通过在 GitHub 存储库 上创建问题来告知我们。此外,文档和改进的客户端库将很快发布。

包含详细示例的更新教程将很快发布。敬请关注!

< > 在 GitHub 上更新