INTEGRITY Документация

Использование адаптеров LoRA

Workers AI поддерживает инференс с дообученными адаптерами, обученными с помощью Low-Rank Adaptation. Эта функция находится в открытой бета-версии и бесплатна в течение этого периода.

Ограничения


Выбор совместимых адаптеров 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 с помощью следующих команд:

wrangler CLI
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-токена

Хотя бы одно из следующих права доступа токена требуется:
Создайте новый Finetune
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 который вы использовали при создании дообученной модели.

cURL
## 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-токена

Хотя бы одно из следующих права доступа токена требуется:
Список Finetunes
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"
  }'