LoRAアダプタの使用
ベータWorkers AIは、Low-Rank Adaptation ↗でトレーニングされたアダプタによるファインチューニング推論をサポートしています。この機能はオープンベータ中であり、この期間中は無料です。
- 次のモデルに対してのみLoRAをサポートしています(量子化されてはいけません):
@cf/meta-llama/llama-2-7b-chat-hf-lora@cf/mistral/mistral-7b-instruct-v0.2-lora@cf/google/gemma-2b-it-lora@cf/google/gemma-7b-it-lora
- アダプタはランク
r <=8でトレーニングされる必要があります。事前トレーニングされたLoRAアダプタのランクは、アダプタのconfig.jsonファイルで確認できます。 - LoRAアダプタファイルは100MB未満でなければなりません。
- LoRAアダプタファイルは、正確に
adapter_config.jsonとadapter_model.safetensorsという名前でなければなりません。 - アカウントごとに最大30個のLoRAアダプタをテストできます。
Workers AIと互換性のあるいくつかのLoRAアダプタをリストしたHugging Face Collection ↗を開始しました。一般的に、上記の制限に適合するLoRAアダプタは動作するはずです。
自分のLoRAアダプタをトレーニングするには、チュートリアルに従ってください。
Workers AIでLoRAを使用して推論を実行するには、アカウントで新しいファインチューニングを作成し、アダプタファイルをアップロードする必要があります。モデルの重みを含む adapter_model.safetensors ファイルと、設定情報を含む adapter_config.json ファイルを用意してください。これらのタイプのアダプタファイルのみを受け付けることに注意してください。
現在、アップロード後にファインチューニングのアセットファイルを編集することはできません。これをすぐにサポートしますが、今のところ新しいLoRAを使用したい場合は、新しいファインチューニングを作成し、再度ファイルをアップロードする必要があります。
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を介してファインチューニングを作成し、LoRAアダプタをアップロードできます。
npx wrangler ai finetune create <model_name> <finetune_name> <folder_path>#🌀 モデル "@cf/mistral/mistral-7b-instruct-v0.2-lora" の新しいファインチューニング "test-lora" を作成中...#🌀 ファイル "/Users/abcd/Downloads/adapter_config.json" を "test-lora" にアップロード中...#🌀 ファイル "/Users/abcd/Downloads/adapter_model.safetensors" を "test-lora" にアップロード中...#✅ アセットがアップロードされ、ファインチューニング "test-lora" が使用可能です。
npx wrangler ai finetune list┌──────────────────────────────────────┬─────────────────┬─────────────┐│ finetune_id │ name │ description │├──────────────────────────────────────┼─────────────────┼─────────────┤│ 00000000-0000-0000-0000-000000000000 │ test-lora │ │└──────────────────────────────────────┴─────────────────┴─────────────┘また、REST APIを使用してファインチューニングを作成し、アダプタファイルをアップロードすることもできます。REST APIに呼び出しを行うには、Workers AI: Edit 権限を持つCloudflare APIトークンが必要です。これはCloudflareダッシュボードを介して生成できます。
## 入力: ユーザー定義のファインチューニング名## 出力: ユニークな finetune_id
curl -X POST https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/ai/finetunes/ \ -H "Authorization: Bearer {API_TOKEN}" \ -H 'Content-Type: application/json' \ -d '{ "model": "SUPPORTED_MODEL_NAME", "name": "FINETUNE_NAME", "description": "OPTIONAL_DESCRIPTION" }'新しいファイルをアップロードするたびにアップロードエンドポイントを呼び出す必要があるため、通常は adapter_model.safetensors と adapter_config.json のそれぞれに対してこれを一度ずつ実行します。ファイルへのパスの前に @ を含めることを確認してください。
ファインチューニングを作成したときに使用したファインチューニングの name または id を使用できます。
## 入力: finetune_id, adapter_model.safetensors, その後 adapter_config.json## 出力: 成功 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}'このメソッドを呼び出して、アカウント内で作成したファインチューニングを確認できます。
## 入力: なし## 出力: 成功 true/false
curl -X GET https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/ai/finetunes/ \ -H 'Authorization: Bearer {API_TOKEN}'# 例の出力JSON{ "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アダプタを適用するには、モデルとファインチューニングの name または id が必要です。LoRAがトレーニングされたチャットテンプレートを使用する必要がありますが、以下のように raw: true とメッセージテンプレートを使用して実行してみることもできます。
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またはname });curl https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/ai/run/@cf/mistralai/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" }'