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 模型通常很有用,每个模型都在不同的数据集上或针对不同的任务进行了微调。这允许您使用最适合特定任务或数据集的模型。

Text Generation Inference (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_ids 与 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 仓库上打开 issue 告知我们。此外,文档和改进的客户端库将很快发布。

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

< > 在 GitHub 上更新