Workers AI は、Low-Rank Adaptation ↗ で学習したアダプターによるファインチューニング推論に対応しています。この機能はオープンベータで、期間中は無料です。
- 対応しているのは、各種モデル 向けの LoRA だけです(量子化モデルは対象外です)
- アダプターはランク
r <=8で学習したものに加え、最大 32 までの大きなランクにも対応します。事前学習済み LoRA アダプターのランクは、アダプターのconfig.jsonで確認できます - LoRA アダプターファイルは 300MB 未満である必要があります
- LoRA アダプターファイルの名前は、
adapter_config.jsonとadapter_model.safetensorsである必要があります - アカウントあたり、最大 100 個の LoRA アダプターを試せます
Workers AI と互換性のある LoRA アダプターをいくつかまとめた Hugging Face Collection ↗ を公開しています。一般に、上記の制限を満たす LoRA アダプターは動作します。
自分で LoRA アダプターを学習するには、チュートリアル に従ってください。
Workers AI で LoRA を使った推論を実行するには、アカウント上に新しい fine tune を作成し、アダプターファイルをアップロードする必要があります。モデルの重みを含む adapter_model.safetensors と、設定情報を含む adapter_config.json を用意します。受け付けるアダプターファイルはこの種類だけです。
現時点では、アップロード後に fine tune のアセットファイルを編集できません。まもなく対応予定ですが、新しい LoRA を使う場合は、新しい fine tune を作成してファイルを再アップロードしてください。
LoRA アダプターをアップロードする前に、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 アダプターをアップロードできます。
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 を作成し、アダプターファイルをアップロードできます。REST API を呼び出すには、Workers AI: Edit 権限を持つ Cloudflare 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"
}'新しいファイルをアップロードするたびに、このアップロードエンドポイントを呼び出す必要があります。通常は adapter_model.safetensors と adapter_config.json で 1 回ずつ実行します。ファイルパスの前に @ を付けてください。
fine tune を作成したときに使った name または id のいずれかを指定できます。
## Input: finetune_id, adapter_model.safetensors, then adapter_config.json
## Output: 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 アダプターを適用するには、モデルと finetune の name または id が必要です。LoRA の学習に使ったチャットテンプレートを使うのがよいですが、次のように raw: true と messages テンプレートで試すこともできます。
const response = await env.AI.run(
"@cf/mistralai/mistral-7b-instruct-v0.2-lora", //the model supporting LoRAs
{
messages: [{ role: "user", content: "Hello world" }],
raw: true, //skip applying the default chat template
lora: "00000000-0000-0000-0000-000000000", //the finetune id OR name
},
);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"
}'