Профилирование модели для определения использования ресурсов
ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение Машинного обучения для Azure CLI версии 1пакет SDK для Python azureml версии 1
В этой статье объясняется, как профилировать службу машинного обучения при создании модели таким образом, чтобы определить, сколько ресурсов ЦП и памяти необходимо выделить модели при ее развертывании в качестве веб-службы.
Внимание
В этой статье даны инструкции для CLI версии 1 и пакета SDK версии 1. Описанный здесь метод профилирования не подходит для CLI версии 2 или пакета SDK версии 2.
Внимание
Для использования некоторых команд Azure CLI, приведенных в этой статье, используйте расширение azure-cli-ml
(версия 1) для Машинного обучения Azure. Поддержка расширения версии 1 будет прекращена 30 сентября 2025 г. Вы можете установить и использовать расширение версии 1 до этой даты.
Рекомендуется перейти на расширение ml
(версия 2) до 30 сентября 2025 г. Дополнительные сведения о расширении версии 2 см. на странице расширения CLI для Azure ML и пакета SDK для Python версии 2.
Необходимые компоненты
В этой статье предполагается, что модель обучена и зарегистрирована с помощью службы Машинного обучения Azure. Пример обучения и регистрации модели scikit-learn с помощью Машинного обучения Azure см. в этом руководстве.
Ограничения
- Профилирование не работает, если Реестр контейнеров Azure (ACR) для вашей рабочей области находится за виртуальной сетью.
Запуск профилировщика
После регистрации модели и подготовки других компонентов, необходимых для ее развертывания, можно определить, какие ресурсы ЦП и памяти потребуется развернутой службе. Профилирование проверяет службу, которая выполняет модель, и возвращает такие сведения, как загрузка ЦП, использование памяти и задержка ответа. Оно также предоставляет рекомендации по ЦП и памяти на основе использования ресурсов.
Для профилирования модели потребуется:
- Зарегистрированная модель.
- Конфигурация вывода, основанная на начальном сценарии и определении среды вывода.
- Табличный набор данных с одним столбцом, в котором каждая строка содержит строку, представляющую образец данных запроса.
Внимание
На этом этапе поддерживается только профилирование служб, в которых данные запроса должны быть строками (например, сериализованный объект JSON, текст, сериализованное в строку изображение и т. п.) Содержимое каждой строки набора данных (строка) помещается в тело HTTP-запроса и отправляется службе, которая инкапсулирует модель для оценки.
Внимание
В регионах ChinaEast2 и USGovArizona мы поддерживаем профилирование только до 2 процессоров.
Ниже приведен пример того, как создать входной набор данных для профилирования службы, где предполагается, что входящие данные запроса должны содержать сериализованный объект JSON. В этом случае мы создали набор данных на основе 100 экземпляров одного и того же содержимого запроса данных. В реальных сценариях мы рекомендуем использовать большие наборы данных, содержащие различные входные значения, особенно если использование ресурсов модели зависит от входных данных.
ОБЛАСТЬ ПРИМЕНЕНИЯ: Пакет SDK для Python версии 1
import json
from azureml.core import Datastore
from azureml.core.dataset import Dataset
from azureml.data import dataset_type_definitions
input_json = {'data': [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]]}
# create a string that can be utf-8 encoded and
# put in the body of the request
serialized_input_json = json.dumps(input_json)
dataset_content = []
for i in range(100):
dataset_content.append(serialized_input_json)
dataset_content = '\n'.join(dataset_content)
file_name = 'sample_request_data.txt'
f = open(file_name, 'w')
f.write(dataset_content)
f.close()
# upload the txt file created above to the Datastore and create a dataset from it
data_store = Datastore.get_default(ws)
data_store.upload_files(['./' + file_name], target_path='sample_request_data')
datastore_path = [(data_store, 'sample_request_data' +'/' + file_name)]
sample_request_data = Dataset.Tabular.from_delimited_files(
datastore_path, separator='\n',
infer_column_types=True,
header=dataset_type_definitions.PromoteHeadersBehavior.NO_HEADERS)
sample_request_data = sample_request_data.register(workspace=ws,
name='sample_request_data',
create_new_version=True)
Подготовив набор с образцом данных запроса, создайте конфигурацию вывода. Конфигурация вывода основана на скрипте score.py и определении среды. В примере ниже показано, как создать конфигурацию вывода и выполнить профилирование.
from azureml.core.model import InferenceConfig, Model
from azureml.core.dataset import Dataset
model = Model(ws, id=model_id)
inference_config = InferenceConfig(entry_script='path-to-score.py',
environment=myenv)
input_dataset = Dataset.get_by_name(workspace=ws, name='sample_request_data')
profile = Model.profile(ws,
'unique_name',
[model],
inference_config,
input_dataset=input_dataset)
profile.wait_for_completion(True)
# see the result
details = profile.get_details()
ОБЛАСТЬ ПРИМЕНЕНИЯ: расширение машинного обучения Azure CLI версии 1
Следующая команда показывает, как выполнить профилирование модели с помощью интерфейса командной строки:
az ml model profile -g <resource-group-name> -w <workspace-name> --inference-config-file <path-to-inf-config.json> -m <model-id> --idi <input-dataset-id> -n <unique-name>
Совет
Чтобы сохранить данные, возвращаемые при профилировании, используйте теги или свойства модели. Использование тегов или свойств позволяет сохраняет данные модели в реестре моделей. В следующих примерах демонстрируется добавление нового тега, содержащего информацию requestedCpu
и requestedMemoryInGb
.
model.add_tags({'requestedCpu': details['requestedCpu'],
'requestedMemoryInGb': details['requestedMemoryInGb']})
az ml model profile -g <resource-group-name> -w <workspace-name> --i <model-id> --add-tag requestedCpu=1 --add-tag requestedMemoryInGb=0.5
Следующие шаги
- Устранение неполадок при развертывании
- развертывание в Службе Azure Kubernetes.
- Создание клиентских приложений для использования веб-служб
- Обновление веб-службы
- Развертывание модели с помощью пользовательского образа Docker
- Использование TLS для защиты веб-службы с помощью Машинного обучения Azure.
- Мониторинг моделей машинного обучения в Azure с помощью Application Insights
- Сбор данных для моделей в рабочей среде
- Создание предупреждений и триггеров событий для развертываний моделей