跳转到内容
搜索文档

使用 LoRA adapter

最后更新 查看 MarkdownAgent 设置

Workers AI 支持使用 Low-Rank Adaptation ↗ 训练的 adapter 进行微调推理。此功能处于 open beta 阶段,在此期间免费。

限制

  • 我们仅支持多种模型的 LoRA(不得量化)
  • Adapter 必须使用 rank r <=8 训练,较大 rank 最高可达 32。可通过 adapter 的 config.json 文件检查预训练 LoRA adapter 的 rank
  • LoRA adapter 文件必须小于 300MB
  • LoRA adapter 文件必须精确命名为 adapter_config.json 和 adapter_model.safetensors
  • 每个账户最多可测试 100 个 LoRA adapter

选择兼容的 LoRA adapter

查找开源 LoRA adapter

我们创建了 Hugging Face Collection ↗,列出了与 Workers AI 兼容的若干 LoRA adapter。通常,符合上述限制的 LoRA adapter 都应可用。

训练自己的 LoRA adapter

要训练自己的 LoRA adapter,请按照教程操作。


上传 LoRA adapter

要在 Workers AI 上使用 LoRA 运行推理,需要在账户上创建新的 fine tune 并上传 adapter 文件。你应该有包含模型权重的 adapter_model.safetensors 文件和包含配置信息的 adapter_config.json。请注意,我们仅接受这两种类型的 adapter 文件。

目前,上传后无法编辑 fine tune 的资源文件。我们很快会支持此功能,但目前如需使用新 LoRA,需要创建新的 fine tune 并重新上传文件。

上传 LoRA adapter 之前,需要编辑 adapter_config.json 文件,像下面一样添加 model_type 为 mistral、gemma 或 llama 之一。

{
  "alpha_pattern": {},
  "auto_mapping": null,
  ...
  "target_modules": [
    "q_proj",
    "v_proj"
  ],
  "task_type": "CAUSAL_LM",
  "model_type": "mistral",
}

Wrangler

你可以通过 wrangler 使用以下命令创建 finetune 并上传 LoRA adapter:

wrangler CLIbash
npx wrangler ai finetune create <model_name> <finetune_name> <folder_path>
#🌀 Creating new finetune "test-lora" for model "@cf/mistral/mistral-7b-instruct-v0.2-lora"...
#🌀 Uploading file "/Users/abcd/Downloads/adapter_config.json" to "test-lora"...
#🌀 Uploading file "/Users/abcd/Downloads/adapter_model.safetensors" to "test-lora"...
#✅ Assets uploaded, finetune "test-lora" is ready to use.

npx wrangler ai finetune list
┌──────────────────────────────────────┬─────────────────┬─────────────┐
│ finetune_id                          │ name            │ description │
├──────────────────────────────────────┼─────────────────┼─────────────┤
│ 00000000-0000-0000-0000-000000000000 │ test-lora       │             │
└──────────────────────────────────────┴─────────────────┴─────────────┘

REST API

或者,你可以使用 REST API 创建 finetune 并上传 adapter 文件。你需要具有 Workers AI: Edit 权限的 Cloudflare API Token 来调用 REST API,可通过 Cloudflare 仪表板生成。

在账户上创建 fine-tune

Required API token permissions

At least one of the following token permissions is required:
  • Workers AI Write
Create a new Finetunebash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/ai/finetunes" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"model": "SUPPORTED_MODEL_NAME",
		"name": "FINETUNE_NAME",
		"description": "OPTIONAL_DESCRIPTION"
	}'

上传 adapter 权重和配置

每次上传新文件都需要调用 upload 端点,因此通常对 adapter_model.safetensors 和 adapter_config.json 各运行一次。确保在文件路径前包含 @。

可以使用创建 fine tune 时使用的 finetune name 或 id。

cURLbash
## 输入: finetune_id, adapter_model.safetensors, 然后是 adapter_config.json
## 输出: success true/false

curl -X POST https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/ai/finetunes/{FINETUNE_ID}/finetune-assets/ \
    -H 'Authorization: Bearer {API_TOKEN}' \
    -H 'Content-Type: multipart/form-data' \
    -F 'file_name=adapter_model.safetensors' \
    -F 'file=@{PATH/TO/adapter_model.safetensors}'

列出账户中的 fine-tune

可以调用此方法确认在账户中创建了哪些 fine-tune

Required API token permissions

At least one of the following token permissions is required:
  • Workers AI Write
  • Workers AI Read
List Finetunesbash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/ai/finetunes" \
	--request GET \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
{
	"success": true,
	"result": [
		[
			{
				"id": "00000000-0000-0000-0000-000000000",
				"model": "@cf/meta-llama/llama-2-7b-chat-hf-lora",
				"name": "llama2-finetune",
				"description": "test"
			},
			{
				"id": "00000000-0000-0000-0000-000000000",
				"model": "@cf/mistralai/mistral-7b-instruct-v0.2-lora",
				"name": "mistral-finetune",
				"description": "test"
			}
		]
	]
}

使用 LoRA 运行推理

要进行推理请求并应用 LoRA adapter,需要模型和 finetune 的 name 或 id。应使用 LoRA 训练时的 chat template,但也可以尝试使用 raw: true 和如下 messages template。

const response = await env.AI.run(
	"@cf/mistralai/mistral-7b-instruct-v0.2-lora", // 支持 LoRA 的模型
	{
		messages: [{ role: "user", content: "Hello world" }],
		raw: true, // 跳过应用默认的聊天模板
		lora: "00000000-0000-0000-0000-000000000", // 微调 ID 或名称
	},
);
curl https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/ai/run/@cf/mistral/mistral-7b-instruct-v0.2-lora \
  -H 'Authorization: Bearer {API_TOKEN}' \
  -d '{
    "messages": [{"role": "user", "content": "Hello world"}],
    "raw": "true",
    "lora": "00000000-0000-0000-0000-000000000"
  }'

这篇文档对您有帮助吗?