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
我们创建了 Hugging Face Collection ↗,列出了与 Workers AI 兼容的若干 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 使用以下命令创建 finetune 并上传 LoRA adapter:
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 创建 finetune 并上传 adapter 文件。你需要具有 Workers AI: Edit 权限的 Cloudflare API Token 来调用 REST API,可通过 Cloudflare 仪表板生成。
Required API token permissions
At least one of the following token permissions is required:Workers AI Write
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"
}'每次上传新文件都需要调用 upload 端点,因此通常对 adapter_model.safetensors 和 adapter_config.json 各运行一次。确保在文件路径前包含 @。
可以使用创建 fine tune 时使用的 finetune name 或 id。
## 输入: 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
Required API token permissions
At least one of the following token permissions is required:Workers AI WriteWorkers AI Read
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 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"
}'