Compartilhar via


Tutorial 1: desenvolver e registrar um conjunto de recursos com repositório de recursos gerenciados

Essa série de tutoriais mostra como os recursos integram perfeitamente todas as fases do ciclo de vida de aprendizado de máquina: prototipagem, treinamento e operacionalização.

Você pode usar o repositório de recursos gerenciados do Azure Machine Learning para descobrir, criar e operacionalizar recursos. O ciclo de vida do aprendizado de máquina inclui uma fase de prototipagem, na qual você experimenta vários recursos. Ele também envolve uma fase de operacionalização, na qual os modelos são implantados e as etapas de inferência analisam dados de características. Os atributos servem como o tecido conectivo no ciclo de vida do aprendizado de máquina. Para saber mais sobre os conceitos básicos do repositório de recursos gerenciados, visite os recursos O que é o repositório de recursos gerenciados? e Noções básicas sobre entidades de nível superior no repositório de recursos gerenciados.

Este tutorial descreve como criar uma especificação de conjunto de recursos com transformações personalizadas. Em seguida, ele usa esse conjunto de recursos para gerar dados de treinamento, habilitar a materialização e executar um preenchimento retrospectivo. A materialização calcula os valores de recursos para uma janela de recursos e, em seguida, armazena esses valores em um repositório de materialização. Todas as consultas de recursos podem então usar esses valores do armazenamento de materialização.

Sem materialização, uma consulta de conjunto de recursos aplica as transformações à fonte em tempo real, para calcular os recursos antes de retornar os valores. Este processo funciona bem para a fase de prototipagem. No entanto, para operações de treinamento e inferência em um ambiente de produção, recomendamos que você materialize os recursos para ter maior confiabilidade e disponibilidade.

Este tutorial é a primeira parte da série de tutoriais do repositório de recursos gerenciados. Aqui, você aprenderá a:

  • Crie um novo recurso de armazenamento de recursos mínimo.
  • Desenvolver e testar localmente um conjunto de recursos com a capacidade de transformação de recursos.
  • Registre uma entidade de armazenamento de recursos com o armazenamento de recursos.
  • Registre o conjunto de recursos que você desenvolveu com a feature store.
  • Gerar um DataFrame de treinamento de exemplo usando os recursos que você criou.
  • Habilite a materialização offline nos conjuntos de feições e preencha os dados dos feições.

Essa série de tutoriais tem duas faixas:

  • A faixa somente SDK usa apenas SDKs Python. Escolha esta trilha para desenvolvimento e implantação puramente baseados em Python.
  • O SDK e o CLI usam o Python SDK apenas para desenvolvimento e teste de conjuntos de recursos e usam o CLI para operações CRUD (criar, ler, atualizar e excluir). Essa faixa é útil em cenários de integração contínua e entrega contínua (CI/CD) ou GitOps, em que a CLI/YAML é preferida.

Pré-requisitos

Antes de prosseguir com este tutorial, certifique-se de cumprir estes pré-requisitos:

  • Um espaço de trabalho do Azure Machine Learning. Para obter mais informações sobre a criação de workspaces, visite Início Rápido: Criar recursos de workspace.

  • Na sua conta de usuário, você precisa da função Proprietário para o grupo de recursos onde o repositório de recursos é criado.

    Se você escolher usar um novo grupo de recursos para esse tutorial, poderá excluir facilmente todos os recursos ao excluir o grupo de recursos.

Preparar o ambiente do notebook

Esse tutorial usa o notebook Spark do Azure Machine Learning para desenvolvimento.

  1. No ambiente Estúdio do Azure Machine Learning, selecione Notebooks no painel esquerdo e, em seguida, selecione a guia Exemplos.

  2. Navegue até o diretório featurestore_sample (selecione Exemplos>SDK v2>sdk>python>featurestore_sample) e selecione Clonar.

    Captura de tela que mostra a seleção do diretório de exemplo no Estúdio do Azure Machine Learning.

  3. O painel Selecionar diretório de destino será aberto. Selecione o diretório Usuários, selecione seu nome de usuário e, por fim, selecione Clonar.

    Captura de tela mostrando a seleção do local do diretório de destino no Estúdio do Azure Machine Learning para o recurso de exemplo.

  4. Para configurar o ambiente do notebook, você deve carregar o arquivo conda.yml:

    1. Selecione Notebooks no painel esquerdo e, em seguida, selecione a guia Arquivos.
    2. Navegue até o diretório env (selecione Usuários>your_user_name>featurestore_sample>project>env) e selecione o arquivo conda.yml.
    3. Selecione Baixar.

    Captura de tela que mostra a seleção do arquivo Conda YAML no Estúdio do Azure Machine Learning.

    1. Selecione Sem servidor Spark Compute no menu suspenso Computação da navegação superior. Essa operação poderá demorar um ou dois minutos. Aguarde até que uma barra de status na parte superior exiba o texto Configurar sessão.
    2. Selecione Configurar sessão na barra de status superior.
    3. Selecione Pacotes do Python.
    4. Selecione Carregar arquivos do Conda.
    5. Selecione o arquivo conda.yml que você baixou no dispositivo local.
    6. (Opcional) Aumente o tempo limite da sessão (tempo ocioso em minutos) para reduzir o tempo de inicialização do cluster do Spark Sem Servidor.
  5. No ambiente do Azure Machine Learning, abra o notebook e selecione Configurar sessão.

    Captura de tela que mostra seleções para configurar a sessão para um notebook.

  6. No painel Configurar Sessão, selecionePacotes do Python.

  7. Carregar o arquivo Conda:

    1. Na guia Pacotes do Python, selecione Carregar arquivo Conda.
    2. Navegue até o diretório com o arquivo Conda.
    3. Selecione conda.yml e, em seguida, selecione Abrir.

    Captura de tela que mostra o diretório que hospeda o arquivo Conda.

  8. Escolha Aplicar.

    Captura de tela que mostra o upload do arquivo Conda.

Iniciar a sessão do 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")

Configurar o diretório raiz para os exemplos

import os

# Please update <your_user_alias> below (or any custom directory you uploaded the samples to).
# You can find the name from the directory structure in the left navigation panel.
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")

Configurar a CLI

Não aplicável.

Observação

Você usa um repositório de recursos para reutilizar recursos entre projetos. Use um espaço de trabalho de projeto (um espaço de trabalho do Azure Machine Learning) para treinar modelos de inferência, aproveitando os recursos dos repositórios de recursos. Vários workspaces do projeto podem compartilhar e reutilizar o mesmo repositório de recursos.

Esse tutorial usará dois SDKs:

  • SDK CRUD da loja de recursos

    Use o mesmo SDK MLClient (nome do pacote azure-ai-ml) que você usa com o espaço de trabalho do Azure Machine Learning. Um repositório de recursos é implementado como um tipo de espaço de trabalho. Como resultado, esse SDK é usado para operações CRUD para os repositórios de recursos, os conjuntos de recursos e as entidades do repositório de recursos.

  • SDK principal da loja de recursos

    Esse SDK (azureml-featurestore) é para desenvolvimento e consumo de conjuntos de recursos. Etapas posteriores nesse tutorial descrevem estas operações:

    • Desenvolver a especificação do conjunto de recursos.
    • Recuperar dados de feições.
    • Listar ou obter um conjunto de recursos registrados.
    • Gerar e resolver especificações de recuperação de recursos.
    • Gere dados de treinamento e inferência usando junções de ponto no tempo.

Esse tutorial não requer a instalação explícita desses SDKs, pois as instruções do conda.yml anteriores abrangem essa etapa.

Criar um repositório de recursos mínimo

  1. Defina parâmetros de armazenamento de recursos, incluindo nome, local e outros valores.

    # We use the subscription, resource group, region of this active project workspace.
    # You can optionally replace them to create the resources in a different subsciprtion/resource group, or use existing resources.
    import os
    
    featurestore_name = "<FEATURESTORE_NAME>"
    featurestore_location = "eastus"
    featurestore_subscription_id = os.environ["AZUREML_ARM_SUBSCRIPTION"]
    featurestore_resource_group_name = os.environ["AZUREML_ARM_RESOURCEGROUP"]
  2. Crie o repositório de recursos.

    from azure.ai.ml import MLClient
    from azure.ai.ml.entities import (
        FeatureStore,
        FeatureStoreEntity,
        FeatureSet,
    )
    from azure.ai.ml.identity import AzureMLOnBehalfOfCredential
    
    ml_client = MLClient(
        AzureMLOnBehalfOfCredential(),
        subscription_id=featurestore_subscription_id,
        resource_group_name=featurestore_resource_group_name,
    )
    
    
    fs = FeatureStore(name=featurestore_name, location=featurestore_location)
    # wait for feature store creation
    fs_poller = ml_client.feature_stores.begin_create(fs)
    print(fs_poller.result())
  3. Inicializar o cliente SDK principal do repositório de recursos do Azure Machine Learning.

    Conforme explicado anteriormente nesse tutorial, o cliente principal do SDK do repositório de recursos é usado para desenvolver e consumir recursos.

    # 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,
    )
  4. Conceda a função "Cientista de Dados do Azure Machine Learning" no repositório de recursos à sua identidade de usuário. Obtenha o valor da ID de objeto do Microsoft Entra no portal do Azure, conforme descrito em Localizar a ID de objeto do usuário.

    Atribua a função Cientista de Dados do AzureML à sua identidade de usuário, para que ele possa criar recursos no workspace do repositório de recursos. As permissões podem precisar de algum tempo para serem propagadas.

    Para obter mais informações sobre o controle de acesso, visite o recurso Gerenciar controle de acesso para o repositório de recursos gerenciados.

    your_aad_objectid = "<USER_AAD_OBJECTID>"
    
    !az role assignment create --role "AzureML Data Scientist" --assignee-object-id $your_aad_objectid --assignee-principal-type User --scope $feature_store_arm_id

Prototipar e desenvolver um conjunto de recursos

Nessas etapas, você cria um conjunto de recursos chamado transactions que tem recursos baseados em agregação de janela contínua:

  1. Explore os transactions dados de origem.

    Esse notebook usa dados de exemplo hospedados em um contêiner de blob acessível publicamente. Ele pode ser lido no Spark somente através de um driver wasbs. Ao criar conjuntos de recursos usando seus próprios dados de origem, hospede-os em uma conta do Azure Data Lake Storage Gen2 e use um driver abfss no caminho de dados.

    # remove the "." in the roor directory path as we need to generate absolute path to read from spark
    transactions_source_data_path = "wasbs://data@azuremlexampledata.blob.core.windows.net/feature-store-prp/datasources/transactions-source/*.parquet"
    transactions_src_df = spark.read.parquet(transactions_source_data_path)
    
    display(transactions_src_df.head(5))
    # Note: display(training_df.head(5)) displays the timestamp column in a different format. You can can call transactions_src_df.show() to see correctly formatted value
  2. Desenvolver o conjunto de funcionalidades localmente.

    Uma especificação do conjunto de recursos é uma definição de conjunto de recursos independente que você pode desenvolver e testar localmente. Aqui, você cria esses recursos de agregação de janela rolante:

    • transactions three-day count
    • transactions amount three-day avg
    • transactions amount three-day sum
    • transactions seven-day count
    • transactions amount seven-day avg
    • transactions amount seven-day sum

    Revise o arquivo de código de transformação de características: featurestore/featuresets/transactions/transformation_code/transaction_transform.py. Observe a agregação contínua definida para os recursos. Esse é um transformador do Spark.

    Para saber mais sobre o conjunto de recursos e transformações, visite o recurso O que é o repositório de recursos gerenciados?.

    from azureml.featurestore import create_feature_set_spec
    from azureml.featurestore.contracts import (
        DateTimeOffset,
        TransformationCode,
        Column,
        ColumnType,
        SourceType,
        TimestampColumn,
    )
    from azureml.featurestore.feature_source import ParquetFeatureSource
    
    transactions_featureset_code_path = (
        root_dir + "/featurestore/featuresets/transactions/transformation_code"
    )
    
    transactions_featureset_spec = create_feature_set_spec(
        source=ParquetFeatureSource(
            path="wasbs://data@azuremlexampledata.blob.core.windows.net/feature-store-prp/datasources/transactions-source/*.parquet",
            timestamp_column=TimestampColumn(name="timestamp"),
            source_delay=DateTimeOffset(days=0, hours=0, minutes=20),
        ),
        feature_transformation=TransformationCode(
            path=transactions_featureset_code_path,
            transformer_class="transaction_transform.TransactionFeatureTransformer",
        ),
        index_columns=[Column(name="accountID", type=ColumnType.string)],
        source_lookback=DateTimeOffset(days=7, hours=0, minutes=0),
        temporal_join_lookback=DateTimeOffset(days=1, hours=0, minutes=0),
        infer_schema=True,
    )
  3. Exportar como uma especificação de conjunto de recursos.

    Para registrar a especificação do conjunto de recursos no repositório de recursos, você deve salvá-la em um formato específico.

    Revise a especificação do conjunto de recursos gerado transactions. Abra esse arquivo na árvore de arquivos para ver a especificação featurestore/featuresets/accounts/spec/FeaturesetSpec.yaml.

    A especificação contém estes elementos:

    • source: uma referência a um recurso de armazenamento. Nesse caso, é um arquivo parquet em um recurso de armazenamento de blobs.
    • features: uma lista de funcionalidades e seus tipos de dados. Se você fornecer o código de transformação, o código deve retornar um DataFrame que mapeia os recursos e tipos de dados.
    • index_columns: as chaves de junção necessárias para acessar os valores do conjunto de recursos.

    Para obter mais informações sobre a especificação, visite os recursos Noções básicas sobre entidades de nível superior no repositório de recursos gerenciados e Esquema YAML do conjunto de recursos da CLI (v2).

    Persistir na especificação do conjunto de recursos oferece outro benefício: a especificação do conjunto de recursos oferece suporte ao controle do código-fonte.

    import os
    
    # Create a new folder to dump the feature set specification.
    transactions_featureset_spec_folder = (
        root_dir + "/featurestore/featuresets/transactions/spec"
    )
    
    # Check if the folder exists, create one if it does not exist.
    if not os.path.exists(transactions_featureset_spec_folder):
        os.makedirs(transactions_featureset_spec_folder)
    
    transactions_featureset_spec.dump(transactions_featureset_spec_folder, overwrite=True)

Registrar uma entidade de armazenamento de recursos

Como melhor prática, as entidades ajudam a impor o uso da mesma definição de chave de união em conjuntos de recursos que usam as mesmas entidades lógicas. Exemplos de entidades incluem contas e clientes. As entidades normalmente são criadas uma vez e reutilizadas em conjuntos de recursos. Para saber mais, visite Noções básicas sobre entidades de nível superior no repositório de recursos gerenciados.

  1. Inicialize o cliente CRUD do repositório de recursos.

    Conforme explicado anteriormente neste tutorial, MLClient é usado para criar, ler, atualizar e excluir um ativo do repositório de recursos. O exemplo de célula de código de notebook mostrado aqui pesquisa o repositório de recursos que criamos em uma etapa anterior. Aqui, não é possível reutilizar o mesmo valor ml_client usado anteriormente neste tutorial, porque esse valor tem como escopo o nível do grupo de recursos. O escopo adequado é um pré-requisito para a criação do repositório de recursos.

    Nesse exemplo de código, o cliente está no escopo do nível de armazenamento de recursos.

    # MLClient for feature store.
    fs_client = MLClient(
        AzureMLOnBehalfOfCredential(),
        featurestore_subscription_id,
        featurestore_resource_group_name,
        featurestore_name,
    )
  2. Registre a entidade account com o repositório de recursos.

    Crie uma entidade de account que tenha a chave de junção accountID, do tipo string.

    from azure.ai.ml.entities import DataColumn, DataColumnType
    
    account_entity_config = FeatureStoreEntity(
        name="account",
        version="1",
        index_columns=[DataColumn(name="accountID", type=DataColumnType.STRING)],
        stage="Development",
        description="This entity represents user account index key accountID.",
        tags={"data_typ": "nonPII"},
    )
    
    poller = fs_client.feature_store_entities.begin_create_or_update(account_entity_config)
    print(poller.result())

Registre o conjunto de recursos de transação com o repositório de recursos

Use esse código para registrar um ativo de conjunto de recursos no repositório de recursos. Em seguida, você pode reutilizar esse ativo e compartilhá-lo facilmente. O registro de um ativo de conjunto de recursos oferece recursos gerenciados, incluindo controle de versão e materialização. As etapas posteriores nesta série de tutoriais abrangem recursos gerenciados.

from azure.ai.ml.entities import FeatureSetSpecification

transaction_fset_config = FeatureSet(
    name="transactions",
    version="1",
    description="7-day and 3-day rolling aggregation of transactions featureset",
    entities=[f"azureml:account:1"],
    stage="Development",
    specification=FeatureSetSpecification(path=transactions_featureset_spec_folder),
    tags={"data_type": "nonPII"},
)

poller = fs_client.feature_sets.begin_create_or_update(transaction_fset_config)
print(poller.result())

Explore a interface do usuário da loja de recursos

A criação e as atualizações de ativos do repositório de recursos só podem ocorrer por meio do SDK e da CLI. Você pode usar a interface do usuário para pesquisar ou procurar no repositório de recursos:

  1. Abra a página de destino global do Azure Machine Learning.
  2. Selecione Repositórios de recursos no painel esquerdo.
  3. Nesta lista de repositórios de recursos acessíveis, selecione o repositório de recursos criado anteriormente nesse tutorial.

Conceda à função Storage Blob Data Reader acesso à sua conta de usuário no armazenamento offline

A função Leitor de Dados de Blobs de Armazenamento deve ser atribuída à sua conta de usuário no armazenamento offline. Isso garante que a conta do usuário possa ler dados de recursos materializados do armazenamento de materialização offline.

  1. Obtenha o valor da ID de objeto do Microsoft Entra no portal do Azure, conforme descrito em Localizar a ID de objeto do usuário.

  2. Obtenha informações sobre o repositório de materialização offline na página Visão geral do repositório de recursos na interface do usuário do repositório de recursos. Você pode encontrar os valores para o ID de assinatura da conta de armazenamento, o nome do grupo de recursos da conta de armazenamento e o nome da conta de armazenamento para o armazenamento de materialização offline no cartão Armazenamento de materialização offline.

    Captura de tela que mostra informações da conta da loja offline na página Visão geral da loja de recursos.

    Para obter mais informações sobre controle de acesso, visite o recurso Gerenciar controle de acesso para repositório de recursos gerenciados.

    Execute esta célula de código para atribuição de função. As permissões podem precisar de algum tempo para serem propagadas.

    # This utility function is created for ease of use in the docs tutorials. It uses standard azure API's.
    # You can optionally inspect it `featurestore/setup/setup_storage_uai.py`.
    import sys
    
    sys.path.insert(0, root_dir + "/featurestore/setup")
    from setup_storage_uai import grant_user_aad_storage_data_reader_role
    
    your_aad_objectid = "<USER_AAD_OBJECTID>"
    storage_subscription_id = "<SUBSCRIPTION_ID>"
    storage_resource_group_name = "<RESOURCE_GROUP>"
    storage_account_name = "<STORAGE_ACCOUNT_NAME>"
    
    grant_user_aad_storage_data_reader_role(
        AzureMLOnBehalfOfCredential(),
        your_aad_objectid,
        storage_subscription_id,
        storage_resource_group_name,
        storage_account_name,
    )

Gerar um DataFrame de dados de treinamento usando o conjunto de recursos registrado

  1. Carregar dados de observação.

    Geralmente, os dados de observação envolvem os dados principais usados para treinamento e inferência. Esses dados se unem aos dados de recursos para criar o recurso de dados de treinamento completo.

    Os dados de observação são dados capturados durante o evento em si. Aqui, há os principais dados da transação, incluindo a ID da transação, a ID da conta e os valores da transação. Como você o usa para treinamento, ele também tem uma variável de destino anexada (is_fraud).

    observation_data_path = "wasbs://data@azuremlexampledata.blob.core.windows.net/feature-store-prp/observation_data/train/*.parquet"
    observation_data_df = spark.read.parquet(observation_data_path)
    obs_data_timestamp_column = "timestamp"
    
    display(observation_data_df)
    # Note: the timestamp column is displayed in a different format. Optionally, you can can call training_df.show() to see correctly formatted value
  2. Obtenha o conjunto de recursos registrados e liste seus recursos.

    # Look up the featureset by providing a name and a version.
    transactions_featureset = featurestore.feature_sets.get("transactions", "1")
    # List its features.
    transactions_featureset.features
    # Print sample values.
    display(transactions_featureset.to_spark_dataframe().head(5))
  3. Selecione os recursos que se tornam parte dos dados de treinamento. Em seguida, use o SDK do repositório de recursos para gerar os próprios dados de treinamento.

    from azureml.featurestore import get_offline_features
    
    # You can select features in pythonic way.
    features = [
        transactions_featureset.get_feature("transaction_amount_7d_sum"),
        transactions_featureset.get_feature("transaction_amount_7d_avg"),
    ]
    
    # You can also specify features in string form: featureset:version:feature.
    more_features = [
        f"transactions:1:transaction_3d_count",
        f"transactions:1:transaction_amount_3d_avg",
    ]
    
    more_features = featurestore.resolve_feature_uri(more_features)
    features.extend(more_features)
    
    # Generate training dataframe by using feature data and observation data.
    training_df = get_offline_features(
        features=features,
        observation_data=observation_data_df,
        timestamp_column=obs_data_timestamp_column,
    )
    
    # Ignore the message that says feature set is not materialized (materialization is optional). We will enable materialization in the subsequent part of the tutorial.
    display(training_df)
    # Note: the timestamp column is displayed in a different format. Optionally, you can can call training_df.show() to see correctly formatted value

    Uma junção de ponto no tempo acrescenta os recursos aos dados de treinamento.

Habilite a materialização offline no conjunto de recursos transactions

Depois que a materialização do conjunto de recursos estiver habilitada, você poderá executar um preenchimento. Você também pode agendar trabalhos de materialização recorrentes. Para obter mais informações, visite o terceiro tutorial no recurso da série .

Definir spark.sql.shuffle.partitions no arquivo yaml de acordo com o tamanho dos dados do recurso

A configuração do Spark spark.sql.shuffle.partitions é um parâmetro OPTIONAL que pode afetar o número de arquivos parquet gerados (por dia) quando o conjunto de recursos é materializado no armazenamento offline. O valor padrão desse parâmetro é 200. Como prática recomendada, evite a geração de muitos arquivos pequenos de parquet. Se a recuperação de recursos offline ficar lenta após a materialização do conjunto de recursos, vá para a pasta correspondente no armazenamento offline para verificar se o problema envolve muitos arquivos parquet pequenos (por dia) e ajuste o valor desse parâmetro adequadamente.

Observação

Os dados de exemplo usados neste notebook são pequenos. Portanto, esse parâmetro é definido como 1 no arquivo featureset_asset_offline_enabled.yaml.

from azure.ai.ml.entities import (
    MaterializationSettings,
    MaterializationComputeResource,
)

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

transactions_fset_config.materialization_settings = MaterializationSettings(
    offline_enabled=True,
    resource=MaterializationComputeResource(instance_type="standard_e8s_v3"),
    spark_configuration={
        "spark.driver.cores": 4,
        "spark.driver.memory": "36g",
        "spark.executor.cores": 4,
        "spark.executor.memory": "36g",
        "spark.executor.instances": 2,
        "spark.sql.shuffle.partitions": 1,
    },
    schedule=None,
)

fs_poller = fs_client.feature_sets.begin_create_or_update(transactions_fset_config)
print(fs_poller.result())

Você também pode salvar o ativo do conjunto de recursos como um recurso YAML.

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

Dados de preenchimento para o conjunto de recursos transactions

Conforme explicado anteriormente, a materialização calcula os valores de recursos para uma janela de recursos e armazena esses valores calculados em um repositório de materialização. A materialização de recursos aumenta a confiabilidade e a disponibilidade dos valores computados. Todas as consultas de recursos agora usam os valores do armazenamento de materialização. Essa etapa executa um preenchimento único para uma janela de recurso de 18 meses.

Observação

Talvez seja necessário determinar um valor de janela de dados de preenchimento. A janela deve corresponder à janela dos seus dados de treinamento. Por exemplo, para usar 18 meses de dados para treinamento, você deve recuperar as características durante 18 meses. Isso significa que você deve preencher um período de 18 meses.

Essa célula de código materializa os dados com o status atual Nenhum ou Incompleto para a janela de recursos definida.

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

st = datetime(2022, 1, 1, 0, 0, 0, 0)
et = datetime(2023, 6, 30, 0, 0, 0, 0)

poller = fs_client.feature_sets.begin_backfill(
    name="transactions",
    version="1",
    feature_window_start_time=st,
    feature_window_end_time=et,
    data_status=[DataAvailabilityStatus.NONE],
)
print(poller.result().job_ids)
# Get the job URL, and stream the job logs.
fs_client.jobs.stream(poller.result().job_ids[0])

Dica

  • A coluna timestamp deve seguir o formato yyyy-MM-ddTHH:mm:ss.fffZ.
  • A granularidade feature_window_start_time e feature_window_end_time é limitada a segundos. Todos os milissegundos fornecidos no objeto datetime serão ignorados.
  • Um trabalho de materialização só será enviado se os dados na janela de recursos corresponderem ao data_status definido durante o envio do trabalho de preenchimento.

Imprima dados de amostra do conjunto de recursos. As informações de saída mostram que os dados foram recuperados do armazenamento de materialização. O método get_offline_features() recuperou os dados de treinamento e inferência. Ele também usa o armazenamento de materialização por padrão.

# Look up the feature set by providing a name and a version and display few records.
transactions_featureset = featurestore.feature_sets.get("transactions", "1")
display(transactions_featureset.to_spark_dataframe().head(5))

Explore mais a fundo a materialização de recursos offline

Você pode explorar o status de materialização de recursos para um conjunto de recursos na interface do usuário Trabalhos de materialização.

  1. Abra a página de destino global do Azure Machine Learning.

  2. Selecione Repositórios de recursos no painel esquerdo.

  3. Na lista de repositórios de recursos acessíveis, selecione o repositório de recursos para o qual você executou o provisionamento.

  4. Selecione a aba Trabalhos de materialização.

    Captura de tela que mostra o conjunto de recursos da interface do usuário dos trabalhos de materialização.

  • O status de materialização dos dados pode ser

    • Completo (verde)
    • Incompleto (vermelho)
    • Pendente (azul)
    • Nenhum (cinza)
  • O intervalo de dados representa uma parte contígua de dados com o mesmo status de materialização de dados. Por exemplo, o instantâneo anterior tem 16 intervalos de dados no armazenamento de materialização offline.

  • Os dados podem ter um máximo de 2.000 intervalos de dados. Se os dados contiverem mais de 2.000 intervalos de dados, crie uma nova versão do conjunto de recursos.

  • Você pode fornecer uma lista de mais de um status de dados (por exemplo, ["None", "Incomplete"]) em um único trabalho de preenchimento.

  • Durante o preenchimento, um novo trabalho de materialização é enviado para cada intervalo de dados que se enquadra na janela de recursos definida.

  • Se um trabalho de materialização estiver pendente ou se esse trabalho estiver em execução para um intervalo de dados que ainda não foi preenchido novamente, um novo trabalho não será enviado para esse intervalo de dados.

  • Você pode tentar novamente uma tarefa de materialização com falha.

    Observação

    Para obter a ID do trabalho de um trabalho de materialização com falha:

    • Navegue até o conjunto de recursos da interface do usuário dos Trabalhos de materialização.
    • Selecione o nome de exibição de um trabalho específico com status de falha.
    • Localize a ID do trabalho na propriedade Name encontrada na página Visão geral do trabalho. Começa com Featurestore-Materialization- .

poller = fs_client.feature_sets.begin_backfill(
    name="transactions",
    version=version,
    job_id="<JOB_ID_OF_FAILED_MATERIALIZATION_JOB>",
)
print(poller.result().job_ids)

Atualizando o armazenamento de materialização offline

  • Se um repositório de materialização offline precisar ser atualizado no nível do repositório de recursos, todos os conjuntos de recursos no repositório de recursos deverão ter a materialização offline desabilitada.
  • Se a materialização offline estiver desabilitada em um conjunto de recursos, o status de materialização dos dados já materializados no repositório de materialização offline será redefinido. A redefinição torna os dados já materializados inutilizáveis. Você deve reenviar os trabalhos de materialização depois de habilitar a materialização offline.

Esse tutorial criou os dados de treinamento com recursos do repositório de recursos, habilitou a materialização no repositório de recursos offline e executou um preenchimento. Em seguida, você executará o treinamento de modelo usando esses recursos.

Limpar

O quinto tutorial da série descreve como excluir os recursos.

Próximas etapas