Поделиться через


Руководство 3. Включение повторяющейся материализации и выполнение пакетного вывода

В этом руководстве показано, как функции легко интегрируют все этапы жизненного цикла машинного обучения: прототип, обучение и эксплуатацию.

В первом руководстве показано, как создать спецификацию набора компонентов с пользовательскими преобразованиями. Затем он показал, как использовать этот набор функций для создания обучающих данных, включения материализации и выполнения обратной заполнения. Во втором руководстве показано, как включить материализацию и выполнить обратную заполнение. Он также показал, как экспериментировать с функциями, как способ повышения производительности модели.

В этом учебнике объясняется, как выполнить такие задачи:

  • Включите повторяющуюся материализацию для transactions набора компонентов.
  • Запустите конвейер пакетного вывода в зарегистрированной модели.

Необходимые компоненты

Прежде чем продолжить работу с этим руководством, обязательно выполните первые и второй учебники в серии.

Настройка

  1. Настройте записную книжку Машинное обучение Azure Spark.

    Чтобы запустить это руководство, можно создать новую записную книжку и выполнить инструкции, пошаговые инструкции. Вы также можете открыть и запустить существующую записную книжку с именем 3. Включение повторяющейся материализации и выполнение пакетного вывода. Эту записную книжку и все записные книжки в этой серии можно найти в каталоге featurestore_sample/notebooks . Вы можете выбрать sdk_only или sdk_and_cli. Оставьте это руководство открытым и ознакомьтесь с ним по ссылкам документации и дополнительным пояснениям.

    1. В раскрывающемся списке вычислений в верхней навигации выберите бессерверные вычисления Spark в разделе Машинное обучение Azure Бессерверный Spark.

    2. Настройка сеанса:

      1. Выберите " Настройка сеанса " в верхней строке состояния.
      2. Перейдите на вкладку "Пакеты Python".
      3. Выберите "Отправить файл conda".
      4. azureml-examples/sdk/python/featurestore-sample/project/env/online.yml Выберите файл на локальном компьютере.
      5. При необходимости увеличьте время ожидания сеанса (время простоя), чтобы избежать частого повторного выполнения предварительных требований.
  2. Запустите сеанс Spark.

    # run this cell to start the spark session (any code block will start the session ). This can take around 10 mins.
    print("start spark session")
  3. Настройте корневой каталог для примеров.

    import os
    
    # please update the dir to ./Users/<your_user_alias> (or any custom directory you uploaded the samples to).
    # You can find the name from the directory structure in the left nav
    root_dir = "./Users/<your_user_alias>/featurestore_sample"
    
    if os.path.isdir(root_dir):
        print("The folder exists.")
    else:
        print("The folder does not exist. Please create or fix the path")
  4. Настройте интерфейс командной строки.

    Неприменимо.


  1. Инициализировать клиент CRUD рабочей области проекта (создание, чтение, обновление и удаление).

    Записная книжка учебника выполняется из этой текущей рабочей области.

    ### Initialize the MLClient of this project workspace
    import os
    from azure.ai.ml import MLClient
    from azure.ai.ml.identity import AzureMLOnBehalfOfCredential
    
    project_ws_sub_id = os.environ["AZUREML_ARM_SUBSCRIPTION"]
    project_ws_rg = os.environ["AZUREML_ARM_RESOURCEGROUP"]
    project_ws_name = os.environ["AZUREML_ARM_WORKSPACE_NAME"]
    
    # connect to the project workspace
    ws_client = MLClient(
        AzureMLOnBehalfOfCredential(), project_ws_sub_id, project_ws_rg, project_ws_name
    )
  2. Инициализация переменных хранилища компонентов.

    Чтобы отразить то, что вы создали в первом руководстве, обязательно обновите featurestore_name значение.

    from azure.ai.ml import MLClient
    from azure.ai.ml.identity import AzureMLOnBehalfOfCredential
    
    # feature store
    featurestore_name = (
        "<FEATURESTORE_NAME>"  # use the same name from part #1 of the tutorial
    )
    featurestore_subscription_id = os.environ["AZUREML_ARM_SUBSCRIPTION"]
    featurestore_resource_group_name = os.environ["AZUREML_ARM_RESOURCEGROUP"]
    
    # feature store ml client
    fs_client = MLClient(
        AzureMLOnBehalfOfCredential(),
        featurestore_subscription_id,
        featurestore_resource_group_name,
        featurestore_name,
    )
  3. Инициализировать клиент пакета SDK для хранилища компонентов.

    # feature store client
    from azureml.featurestore import FeatureStoreClient
    from azure.ai.ml.identity import AzureMLOnBehalfOfCredential
    
    featurestore = FeatureStoreClient(
        credential=AzureMLOnBehalfOfCredential(),
        subscription_id=featurestore_subscription_id,
        resource_group_name=featurestore_resource_group_name,
        name=featurestore_name,
    )

Включение повторяющейся материализации в наборе функций транзакций

Во втором руководстве вы включили материализацию и выполнили обратную заполнение в наборе transactions компонентов. Обратная заполнение — это однократная операция, которая вычисляет и помещает значения признаков в хранилище материализации.

Чтобы справиться с выводом модели в рабочей среде, может потребоваться настроить повторяющиеся задания материализации, чтобы сохранить хранилище материализации в актуальном состоянии. Эти задания выполняются в пользовательских расписаниях. Расписание повторяющихся заданий работает таким образом:

  • Значения интервала и частоты определяют окно. Например, следующие значения определяют трехчасовое окно:

    • interval = 3
    • frequency = Hour
  • Первое окно начинается со значения, определенного start_time в RecurrenceTrigger, и т. д.

  • Первое повторяющееся задание отправляется в начале следующего окна после времени обновления.

  • Позже повторяющиеся задания отправляются в каждом окне после первого задания.

Как описано в предыдущих руководствах, после материализации данных (обратная заполнение или повторяющаяся материализация) функция использует материализованные данные по умолчанию.

from datetime import datetime
from azure.ai.ml.entities import RecurrenceTrigger

transactions_fset_config = fs_client.feature_sets.get(name="transactions", version="1")

# create a schedule that runs the materialization job every 3 hours
transactions_fset_config.materialization_settings.schedule = RecurrenceTrigger(
    interval=3, frequency="Hour", start_time=datetime(2023, 4, 15, 0, 4, 10, 0)
)

fs_poller = fs_client.feature_sets.begin_create_or_update(transactions_fset_config)

print(fs_poller.result())

(Необязательно) Сохранение ФАЙЛА YAML для ресурса набора компонентов

Для сохранения YAML-файла используются обновленные параметры.

## uncomment and run
# transactions_fset_config.dump(root_dir + "/featurestore/featuresets/transactions/featureset_asset_offline_enabled_with_schedule.yaml")

Запуск конвейера вывода пакетной службы

Вывод пакета состоит из следующих действий:

  1. Вы используете тот же встроенный компонент извлечения компонентов для получения компонентов, используемых в конвейере обучения (в третьем руководстве). Для обучения конвейера вы предоставили спецификацию извлечения компонентов в качестве входных данных компонента. Для вывода пакетной службы вы передаете зарегистрированную модель в качестве входных данных. Компонент ищет спецификацию извлечения признаков в артефакте модели.

    Кроме того, для обучения данные наблюдения имели целевую переменную. Однако данные наблюдения за выводом пакетной службы не имеют целевой переменной. Шаг извлечения признаков объединяет данные наблюдения с функциями и выводит данные для пакетного вывода.

  2. Конвейер использует входные данные пакетного вывода из предыдущего шага, выполняет вывод модели и добавляет прогнозируемое значение в качестве выходных данных.

    Примечание.

    В этом примере используется задание для вывода пакетной службы. Вы также можете использовать пакетные конечные точки в Машинное обучение Azure.

    from azure.ai.ml import load_job  # will be used later
    
    # set the batch inference  pipeline path
    batch_inference_pipeline_path = (
        root_dir + "/project/fraud_model/pipelines/batch_inference_pipeline.yaml"
    )
    batch_inference_pipeline_definition = load_job(source=batch_inference_pipeline_path)
    
    # run the training pipeline
    batch_inference_pipeline_job = ws_client.jobs.create_or_update(
        batch_inference_pipeline_definition
    )
    
    # stream the run logs
    ws_client.jobs.stream(batch_inference_pipeline_job.name)

Проверка выходных данных для пакетного вывода

В представлении конвейера:

  1. Выберите inference_step карточку outputs .

  2. Data Скопируйте значение поля. Оно будет выглядеть примерно так — azureml_995abbc2-3171-461e-8214-c3c5d17ede83_output_data_data_with_prediction:1.

  3. Вставьте значение поля в следующую Data ячейку с отдельными значениями имени и версии. Последний символ — это версия, предшествуемая двоеточием (:).

  4. Обратите внимание на predict_is_fraud столбец, созданный конвейером вывода пакета.

    В выходных данных конвейера вывода пакетной службы (/project/fraud_mode/pipelines/batch_inference_pipeline.yaml) система создала неуправляемый ресурс данных с GUID в качестве значения имени и 1 в качестве значения версии. Это произошло, так как вы не предоставили name или version значения для inference_stepoutputs . В этой ячейке вы наследуете и отобразите путь к данным из ресурса.

    inf_data_output = ws_client.data.get(
        name="azureml_1c106662-aa5e-4354-b5f9-57c1b0fdb3a7_output_data_data_with_prediction",
        version="1",
    )
    inf_output_df = spark.read.parquet(inf_data_output.path + "data/*.parquet")
    display(inf_output_df.head(5))

Очистка

В пятом руководстве серии описывается удаление ресурсов.

Следующие шаги