← Cloudflare Workers AI / workers-ai / features / fine-tunes
Использование адаптеров LoRA
Workers AI поддерживает инференс с дообученными адаптерами, обученными с помощью Low-Rank Adaptation ↗. Эта функция находится в открытой бета-версии и бесплатна в течение этого периода.
Ограничения
- Мы поддерживаем LoRA только для разнообразие моделей (не должна быть квантована)
- Адаптер должен быть обучен с рангом
r <=8а также ранги большего размера, вплоть до 32. Проверить ранг предварительно обученного адаптера LoRA можно черезconfig.jsonфайл - Файл адаптера LoRA должен быть < 300 МБ
- Файлы адаптера LoRA должны называться
adapter_config.jsonиadapter_model.safetensorsточно - В одной учётной записи можно протестировать до 100 LoRA adapters
Выбор совместимых адаптеров LoRA
Поиск адаптеров LoRA с открытым исходным кодом
Мы начали Коллекция Hugging Face ↗ со списком нескольких адаптеров LoRA, совместимых с Workers AI. В целом должен подойти любой адаптер LoRA, который соответствует указанным выше ограничениям.
Обучение собственных адаптеров LoRA
Чтобы обучить собственный адаптер LoRA, следуйте руководство.
Загрузка адаптеров LoRA
Чтобы выполнять инференс с LoRA в Workers AI, потребуется создать новый 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 adapter через wrangler с помощью следующих команд:
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 и загрузить файлы адаптера. Для этого потребуется API-токен Cloudflare с разрешением Workers AI: Edit для вызова нашего REST API. Их можно создать в Cloudflare Dashboard.
Создание fine tune в вашем аккаунте
Необходимые разрешения API-токена
Хотя бы одно из следующих права доступа токена требуется: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. Обязательно укажите @ перед путём к файлам.
Вы можете либо использовать finetune 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}'Список finetunes в вашем аккаунте
С помощью этого метода можно проверить, какие fine-tunes уже созданы в вашей учётной записи
Необходимые разрешения API-токена
Хотя бы одно из следующих права доступа токена требуется: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
Чтобы выполнять инференс и применять адаптер LoRA, вам потребуются идентификаторы модели и файнтюна name или id. Следует использовать тот шаблон чата, на котором был обучен ваш LoRA, но можно попробовать запустить его с raw: true и шаблон сообщений, как показано ниже.
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"
}'