Preparar modelos scikit-learn em escala com o Azure Machine Learning (SDK v1)

APLICA-SE A:SDK python azureml v1

Neste artigo, saiba como executar os seus scripts de formação scikit-learn com o Azure Machine Learning.

Os scripts de exemplo neste artigo são utilizados para classificar imagens de flores de íris para criar um modelo de machine learning com base no conjunto de dados da íris do scikit-learn.

Quer esteja a preparar um modelo de machine learning scikit-learn a partir do zero ou esteja a trazer um modelo existente para a cloud, pode utilizar o Azure Machine Learning para aumentar horizontalmente as tarefas de preparação open source com recursos de computação na cloud elástica. Pode criar, implementar, versão e monitorizar modelos de nível de produção com o Azure Machine Learning.

Pré-requisitos

Pode executar este código numa instância de computação do Azure Machine Learning ou na sua própria Jupyter Notebook:

  • Instância de computação do Azure Machine Learning

    • Conclua o Início Rápido: Introdução ao Azure Machine Learning para criar uma instância de computação. Cada instância de computação inclui um servidor de blocos de notas dedicado pré-carregado com o SDK e o repositório de exemplo de blocos de notas.
    • Selecione o separador do bloco de notas na estúdio do Azure Machine Learning. Na pasta de preparação de exemplos, localize um bloco de notas concluído e expandido ao navegar para este diretório: pasta how-to-use-azureml > ml-frameworks > scikit-learn > train-hyperparameter-tune-deploy-with-sklearn .
    • Pode utilizar o código pré-preenchido na pasta de preparação de exemplo para concluir este tutorial.
  • Crie um servidor Jupyter Notebook e execute o código nas secções seguintes.

Configurar a experimentação

Esta secção configura a experimentação de preparação ao carregar os pacotes Python necessários, inicializar uma área de trabalho, definir o ambiente de preparação e preparar o script de preparação.

Inicializar uma área de trabalho

A área de trabalho do Azure Machine Learning é o recurso de nível superior do serviço. Fornece-lhe um local centralizado para trabalhar com todos os artefactos que criar. No SDK python, pode aceder aos artefactos da área de trabalho ao criar um workspace objeto.

Crie um objeto de área de trabalho a config.json partir do ficheiro criado na secção de pré-requisitos.

from azureml.core import Workspace

ws = Workspace.from_config()

Preparar scripts

Neste tutorial, o script de preparação train_iris.py já foi fornecido para si. Na prática, deve conseguir utilizar qualquer script de preparação personalizado tal como está e executá-lo com o Azure Machine Learning sem ter de modificar o código.

Nota

  • O script de preparação fornecido mostra como registar algumas métricas na execução do Azure Machine Learning com o Run objeto no script.
  • O script de preparação fornecido utiliza dados de exemplo da iris = datasets.load_iris() função. Para utilizar e aceder aos seus próprios dados, veja como preparar com conjuntos de dados para disponibilizar dados durante a preparação.

Definir o seu ambiente

Para definir o Ambiente do Azure Machine Learning que encapsula as dependências do script de preparação, pode definir um ambiente personalizado ou utilizar e o ambiente organizado do Azure Machine Learning.

Utilizar um ambiente organizado

Opcionalmente, o Azure Machine Learning fornece ambientes pré-criados e organizados se não quiser definir o seu próprio ambiente.

Se quiser utilizar um ambiente organizado, pode executar o seguinte comando:

from azureml.core import Environment

sklearn_env = Environment.get(workspace=ws, name='AzureML-Tutorial')

Criar um ambiente personalizado

Também pode criar o seu próprio ambiente personalizado. Definir as suas dependências conda num ficheiro YAML; neste exemplo, o ficheiro tem o nome conda_dependencies.yml.

dependencies:
  - python=3.7
  - scikit-learn
  - numpy
  - pip:
    - azureml-defaults

Crie um ambiente do Azure Machine Learning a partir desta especificação de ambiente Conda. O ambiente será empacotado num contentor do Docker no runtime.

from azureml.core import Environment

sklearn_env = Environment.from_conda_specification(name='sklearn-env', file_path='conda_dependencies.yml')

Para obter mais informações sobre como criar e utilizar ambientes, veja Criar e utilizar ambientes de software no Azure Machine Learning.

Configurar e submeter a sua execução de preparação

Criar um ScriptRunConfig

Crie um objeto ScriptRunConfig para especificar os detalhes de configuração da tarefa de preparação, incluindo o script de preparação, o ambiente a utilizar e o destino de computação a executar. Todos os argumentos para o script de preparação serão transmitidos através da linha de comandos, se especificados no arguments parâmetro .

O código seguinte irá configurar um objeto ScriptRunConfig para submeter a tarefa para execução no seu computador local.

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory='.',
                      script='train_iris.py',
                      arguments=['--kernel', 'linear', '--penalty', 1.0],
                      environment=sklearn_env)

Se quiser, em vez disso, executar a tarefa num cluster remoto, pode especificar o destino de computação pretendido para o compute_target parâmetro de ScriptRunConfig.

from azureml.core import ScriptRunConfig

compute_target = ws.compute_targets['<my-cluster-name>']
src = ScriptRunConfig(source_directory='.',
                      script='train_iris.py',
                      arguments=['--kernel', 'linear', '--penalty', 1.0],
                      compute_target=compute_target,
                      environment=sklearn_env)

Submeter a sua execução

from azureml.core import Experiment

run = Experiment(ws,'Tutorial-TrainIRIS').submit(src)
run.wait_for_completion(show_output=True)

Aviso

O Azure Machine Learning executa scripts de preparação ao copiar todo o diretório de origem. Se tiver dados confidenciais que não pretende carregar, utilize um ficheiro .ignore ou não os inclua no diretório de origem. Em vez disso, aceda aos seus dados com um conjunto de dados do Azure Machine Learning.

O que acontece durante a execução

À medida que a execução é executada, passa pelas seguintes fases:

  • A preparar: é criada uma imagem do Docker de acordo com o ambiente definido. A imagem é carregada para o registo de contentor da área de trabalho e colocada em cache para execuções posteriores. Os registos também são transmitidos para o histórico de execuções e podem ser visualizados para monitorizar o progresso. Em vez disso, se for especificado um ambiente organizado, será utilizada a cópia de segurança da imagem em cache desse ambiente organizado.

  • Dimensionamento: o cluster tenta aumentar verticalmente se o cluster do Batch AI precisar de mais nós para executar a execução do que os atualmente disponíveis.

  • Em execução: todos os scripts na pasta script são carregados para o destino de computação, os arquivos de dados são montados ou copiados e são script executados. As saídas do stdout e da pasta ./logs são transmitidas em fluxo para o histórico de execuções e podem ser utilizadas para monitorizar a execução.

  • Pós-processamento: a pasta ./outputs da execução é copiada para o histórico de execuções.

Guardar e registar o modelo

Depois de preparar o modelo, pode guardá-lo e registá-lo na área de trabalho. O registo de modelos permite-lhe armazenar e criar uma versão dos seus modelos na área de trabalho para simplificar a gestão e implementação de modelos.

Adicione o seguinte código ao script de preparação, train_iris.py, para guardar o modelo.

import joblib

joblib.dump(svm_model_linear, 'model.joblib')

Registe o modelo na área de trabalho com o seguinte código. Ao especificar os parâmetros model_framework, model_framework_versione resource_configuration, a implementação do modelo sem código fica disponível. A implementação de modelos sem código permite-lhe implementar diretamente o modelo como um serviço Web a partir do modelo registado e o ResourceConfiguration objeto define o recurso de computação para o serviço Web.

from azureml.core import Model
from azureml.core.resource_configuration import ResourceConfiguration

model = run.register_model(model_name='sklearn-iris', 
                           model_path='outputs/model.joblib',
                           model_framework=Model.Framework.SCIKITLEARN,
                           model_framework_version='0.19.1',
                           resource_configuration=ResourceConfiguration(cpu=1, memory_in_gb=0.5))

Implementação

O modelo que acabou de registar pode ser implementado exatamente da mesma forma que qualquer outro modelo registado no Azure Machine Learning. O procedimento de implementação contém uma secção sobre o registo de modelos, mas pode avançar diretamente para [criar um destino de computaçãohow-to-deploy-and-where.md#choose-a-compute-target) para implementação, uma vez que já tem um modelo registado.

(Pré-visualização) Implementação de modelo sem código

Importante

Esta funcionalidade está atualmente em pré-visualização pública. Esta versão de pré-visualização é fornecida sem um contrato de nível de serviço e não a recomendamos para cargas de trabalho de produção. Algumas funcionalidades poderão não ser suportadas ou poderão ter capacidades limitadas.

Para obter mais informações, veja Termos Suplementares de Utilização para Pré-visualizações do Microsoft Azure.

Em vez da rota de implementação tradicional, também pode utilizar a funcionalidade de implementação sem código (pré-visualização) para scikit-learn. A implementação de modelos sem código é suportada para todos os tipos de modelos scikit-learn incorporados. Ao registar o modelo, conforme mostrado acima com os model_frameworkparâmetros , model_framework_versione resource_configuration , pode simplesmente utilizar a função estática para implementar o deploy() modelo.

web_service = Model.deploy(ws, "scikit-learn-service", [model])

Nota

Estas dependências estão incluídas no contentor de inferência scikit-learn pré-criado.

    - azureml-defaults
    - inference-schema[numpy-support]
    - scikit-learn
    - numpy

Os procedimentos completos abrangem a implementação no Azure Machine Learning em maior profundidade.

Passos seguintes

Neste artigo, preparou e registou um modelo scikit-learn e aprendeu sobre as opções de implementação. Veja estes outros artigos para saber mais sobre o Azure Machine Learning.