Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Esta série de tutoriais mostra como os recursos integram perfeitamente todas as fases do ciclo de vida do aprendizado de máquina: prototipagem, treinamento e operacionalização.
Importante
Cache do Azure para Redis anunciou o seu cronograma de descontinuação para todos os SKUs. Recomendamos que mude as suas instâncias existentes do Cache do Azure para Redis para o Azure Managed Redis assim que possível.
Orientação sobre migração:
- Migre os níveis Básico, Standard e Premium para Azure Managed Redis
Migrar o nível Enterprise para o Azure Redis Gerido
Para mais detalhes sobre a aposentadoria:
O Tutorial 1 mostrou como criar uma especificação de conjunto de funcionalidades com transformações personalizadas e depois usar esse conjunto para gerar dados de treino, permitir a materialização e realizar um backfill. O Tutorial 2 mostrou como experimentar funcionalidades para melhorar o desempenho do modelo, e depois treinar e registar um modelo que utilize características.
Este tutorial explica como:
- Habilite a materialização recorrente para o
transactionsconjunto de recursos. - Execute um pipeline de inferência em lote no modelo registrado.
Pré-requisitos
Antes de avançar com este tutorial, complete os Tutoriais 1 e 2 desta série.
Configurar
Configure o bloco de notas do Azure Machine Learning Spark.
Para executar este tutorial, você pode criar um novo bloco de anotações e executar as instruções, passo a passo. Você também pode abrir e executar o notebook existente chamado 3. Ative a materialização recorrente e execute a inferência em lote. Pode encontrar esse bloco de notas, assim como todos os blocos de notas desta série, no diretório featurestore_sample/notebooks. Você pode escolher sdk_only ou sdk_and_cli. Mantenha este tutorial aberto e consulte-o para obter links de documentação e mais explicações.
Na lista suspensa Compute na barra de navegação superior, selecione Serverless Spark Compute em Azure Machine Learning Serverless Spark.
Configure a sessão:
- Selecione Configurar sessão na barra de status superior.
- Selecione a aba pacotes Python.
- Selecione Upload conda file.
- Selecione o
azureml-examples/sdk/python/featurestore-sample/project/env/online.ymlficheiro da sua máquina local. - Opcionalmente, aumente o tempo limite da sessão (tempo ocioso) para evitar repetições frequentes de pré-requisitos.
Inicie 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")Configure o diretório raiz para os exemplos.
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")Configure a CLI.
- Python SDK
- CLI do Azure
Não aplicável.
Inicialize o cliente CRUD (criar, ler, atualizar e excluir) do espaço de trabalho do projeto.
O bloco de anotações do tutorial é executado a partir deste espaço de trabalho atual.
### 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 )Inicialize as variáveis do repositório de recursos.
Para refletir o que criaste no Tutorial 1, atualiza o
featurestore_namevalor.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, )Inicialize o cliente SDK do repositório de 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, )
Habilitar a materialização recorrente no conjunto de recursos de transações
No Tutorial 1, ativavas a materialização e fazias backfill no transactions conjunto de funcionalidades. O preenchimento é uma operação única sob demanda que calcula e coloca valores de características no repositório de materialização.
Para lidar com a inferência do modelo em produção, é aconselhável configurar trabalhos recorrentes de materialização para manter o repositório de materialização atualizado. Esses trabalhos são executados em agendas definidas pelo usuário. O cronograma de trabalho recorrente funciona desta forma:
Os valores de intervalo e frequência definem uma janela. Por exemplo, os seguintes valores definem uma janela de três horas:
interval=3frequency=Hour
A primeira janela começa com o
start_timevalor definido emRecurrenceTrigger, e assim por diante.O primeiro trabalho recorrente é enviado no início da próxima janela após o tempo de atualização.
Trabalhos recorrentes posteriores são enviados em todas as janelas após o primeiro trabalho.
Como explicado em tutoriais anteriores, depois que os dados são materializados (backfill ou materialização recorrente), a recuperação de características usa dados materializados por padrão.
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())(Opcional) Salve o arquivo YAML para o ativo do conjunto de recursos
Use as configurações atualizadas para salvar o arquivo YAML.
- Python SDK
- CLI do Azure
## uncomment and run
# transactions_fset_config.dump(root_dir + "/featurestore/featuresets/transactions/featureset_asset_offline_enabled_with_schedule.yaml")Executar o fluxo de trabalho de inferência em lote
A inferência em lote tem estas etapas:
Usas o mesmo componente de recuperação de funcionalidades incorporado para recuperação de funcionalidades que usaste no pipeline de treino (abordado no Tutorial 2). Para o treino de pipeline, fornece uma especificação de recuperação de funcionalidades como entrada de componente. Para inferência em lote, você passa o modelo registrado como entrada. O componente procura a especificação de recuperação de características no artefato do modelo.
Além disso, durante o treinamento, os dados de observação contavam com a variável alvo. No entanto, os dados de observação de inferência em lote não têm a variável alvo. A etapa de recuperação de características une os dados de observação com as características e gera os dados para inferência em lote.
O pipeline usa os dados de entrada de inferência em lote da etapa anterior, executa a inferência no modelo e acrescenta o valor previsto como saída.
Nota
Utiliza-se um trabalho para inferência em lote neste exemplo. Também podes usar endpoints batch no Azure Machine Learning.
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)
Inspecione os dados de saída para inferência em lote
Na visualização do pipeline:
Selecione
inference_stepno cartãooutputs.Copie o valor do
Datacampo. Parece algo comoazureml_995abbc2-3171-461e-8214-c3c5d17ede83_output_data_data_with_prediction:1.Cole o valor do
Datacampo na célula a seguir, com valores de nome e versão separados. O último caractere é a versão, precedida por dois pontos (:).Observe a coluna
predict_is_fraudque o pipeline de previsão em lote gerou.Nas saídas do pipeline de inferência em lote (/project/fraud_mode/pipelines/batch_inference_pipeline.yaml), o sistema criou um ativo de dados não rastreado com um GUID como o valor do nome e
1como o valor da versão. Isso aconteceu porque você não forneceunameouversionvalores paraoutputsdeinference_step. Nesta célula, calcula-se e apresenta-se o caminho de dados do ativo.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))
Limpeza
Tutorial 5: Desenvolver um conjunto de funcionalidades com uma fonte personalizada descreve como eliminar os recursos.
Próximos passos
- Saiba mais sobre os conceitos de repositório de recursos e entidades de nível superior no repositório de recursos gerenciados.
- Saiba mais sobre identidade e controle de acesso para armazenamento de recursos gerenciados.
- Veja o guia de solução de problemas do repositório de recursos gerenciados.
- Veja a referência YAML.