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

APLICA-SE A:azureml do SDK do Python v1

Neste artigo, saiba como executar seus scripts de treinamento do scikit-learn com o Azure Machine Learning.

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

Se você está treinando em um modelo scikit-learn de machine learning do zero ou está usando um modelo existente na nuvem, você pode usar o Azure Machine Learning para escalar horizontalmente execuções de treinamento de open-source usando recursos de computação em nuvem elásticos. Você pode criar, implantar, versionar e monitorar modelos de nível de produção com o Azure Machine Learning.

Pré-requisitos

Você pode executar esse código em uma instância de computação do Azure Machine Learning ou em seu próprio 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 notebook dedicado pré-carregado com o SDK e o repositório de amostra de notebooks.
    • Selecione a guia Notebook no Estúdio do Azure Machine Learning. Na pasta de exemplos de treinamento, encontre um documento concluído e expandido navegando até este diretório: pasta how-to-use-azureml > ml-frameworks > scikit-learn > train-hyperparameter-tune-deploy-with-sklearn.
    • Você pode usar o código pré-preenchido na pasta de treinamento de amostra para concluir este tutorial.
  • Crie um servidor Jupyter Notebook e execute o código nas seções a seguir.

Configurar o experimento

Esta seção configura o teste de treinamento carregando os pacotes do Python necessários, inicializando um workspace, definindo o ambiente de treinamento e preparando o script de treinamento.

Inicializar um workspace

O workspace do Azure Machine Learning é o recurso de nível superior para o serviço. Ele fornece um local centralizado para trabalhar com todos os artefatos que você criar. No SDK do Python você pode acessar os artefatos do workspace criando um objeto workspace.

Crie um objeto de espaço de trabalho a partir do config.jsonarquivo criado na config.json.

from azureml.core import Workspace

ws = Workspace.from_config()

Preparar scripts

Neste tutorial, o script de treinamento train_iris.py já foi fornecido para você. Na prática, você deve conseguir usar qualquer script de treinamento personalizado no estado em que se encontra e executá-lo com o Azure Machine Learning sem precisar modificar o código.

Observação

  • O script de treinamento fornecido mostra como registrar algumas métricas em log na operação do Azure Machine Learning usando o objeto Run no script.
  • O script de treinamento fornecido usa dados de exemplo da função iris = datasets.load_iris(). Para usar e acessar seus próprios dados, confira como treinar com conjuntos de dados para disponibilizar dados durante o treinamento.

Definir seu ambiente

Para definir o Ambiente do Azure Machine Learning que encapsula as dependências do script de treinamento, você pode definir um ambiente personalizado ou usar um ambiente coletado do Azure Machine Learning.

Usar o ambiente coletado

Opcionalmente, o Azure Machine Learning fornece ambientes coletados predefinidos caso você não deseje definir seu ambiente.

Se quiser usar um ambiente coletado, você pode executar o seguinte comando:

from azureml.core import Environment

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

Criar um ambiente personalizado

Você também pode criar seu próprio ambiente personalizado. Defina suas dependências do conda em um arquivo YAML. Neste exemplo, o arquivo é nomeado conda_dependencies.yml.

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

Crie um ambiente do Azure Machine Learning com base nesta especificação de ambiente do Conda. O ambiente será empacotado em um contêiner do Docker em tempo de execução.

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 usar ambientes, consulte Criar e usar ambientes de software no Azure Machine Learning.

Configurar e enviar execuções de treinamento

Criar um ScriptRunConfig

Crie um objeto ScriptRunConfig para especificar os detalhes da configuração de seu trabalho de treinamento, incluindo o script de treinamento, o ambiente a ser usado e o destino de computação para a execução. Todos os argumentos para seu script de treinamento serão passados por meio da linha de comando, se for especificado no parâmetro arguments.

O código a seguir configurará um objeto ScriptRunConfig para enviar seu trabalho para execução no 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 você quiser executar seu trabalho em um cluster remoto, poderá especificar o destino de computação desejado para o parâmetro compute_target do 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)

Enviar a 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 treinamento copiando o diretório de origem inteiro. Se você tiver dados confidenciais que não deseja carregar, use um arquivo .ignore ou não o inclua no diretório de origem. Em vez disso, acesse seus dados usando um conjunto de dados do Azure Machine Learning.

O que acontece durante a execução

A execução dos trabalhos passam pelos seguintes estágios:

  • Preparação: uma imagem Docker é criada de acordo com o ambiente definido. A imagem é carregada no registro de contêiner do workspace e armazenada em cache para execuções posteriores. Os logs também são transmitidos para o histórico de execuções e podem ser visualizados para monitorar o andamento. Mas se um ambiente coletado for especificado, a imagem armazenada em cache desse ambiente coletado é usada.

  • Dimensionamento: o cluster tenta escalar verticalmente se o cluster de IA do Lote exigir mais nós para a execução, além do que está disponível no momento.

  • Execução: todos os scripts na pasta de scripts são carregados para o destino de computação, os armazenamentos de dados são montados ou copiados e o é executado. As saídas de stdout e a pasta ./logs são transmitidas para o histórico de execuções e podem ser usadas para o monitoramento.

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

Salvar e registrar o modelo

Depois de treinar o modelo, você poderá salvá-lo e registrá-lo em seu workspace. O registro de modelo permite que você armazene e versione os modelos no workspace para simplificar o gerenciamento e a implantação de modelos.

Adicione o código a seguir ao script de treinamento, train_iris.py, para salvar o modelo.

import joblib

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

Registre o modelo em seu workspace com o código a seguir. Especificando os parâmetros model_framework, model_framework_version e resource_configuration, a implantação do modelo sem código fica disponível. A implantação de modelo sem código permite que você implante diretamente seu modelo como um serviço Web do modelo registrado, e o objeto ResourceConfiguration 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))

Implantação

O modelo que você acabou de registrar pode ser implantado exatamente da mesma forma que qualquer outro modelo registrado no Azure Machine Learning. A implantação "Como" contém uma seção sobre como registrar modelos, mas você pode pular diretamente para [criando uma computação de targethow-to-deploy-and-where.md#choose-a-compute-target) a implantação, uma vez você já tem um modelo registrado.

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

Importante

Esse recurso está atualmente em visualização pública. Essa versão prévia é fornecida sem um contrato de nível de serviço e não é recomendada para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou podem ter restrição de recursos.

Para obter mais informações, consulte Termos de Uso Complementares de Versões Prévias do Microsoft Azure.

Em vez da rota de implantação tradicional, você também pode usar o recurso de implantação sem código (pré-visualização) para scikit-learn. A implantação de modelo sem código tem suporte para todos os tipos de modelo scikit-learn internos. Ao registrar seu modelo, conforme mostrado acima com os parâmetros model_frameworkmodel_framework_version e resource_configuration, você pode simplesmente usar a função estática deploy() para implantar seu modelo.

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

Observação

Essas dependências estão incluídas no contêiner de inferência do scikit-learn predefinido.

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

As instruções completas abrange a implantação do Azure Machine Learning mais detalhadamente.

Próximas etapas

Neste artigo, você treinou e registrou um modelo scikit-learn e aprendeu sobre as opções de implantação. Confira estes outros artigos para saber mais sobre o Azure Machine Learning.