Gerenciar registros de modelos no Azure Machine Learning com MLflow
O Azure Machine Learning dá suporte ao MLflow para gerenciamento de modelos quando conectado a um espaço de trabalho. Essa abordagem representa uma maneira conveniente de suportar todo o ciclo de vida do modelo para usuários familiarizados com o cliente MLFlow. O artigo a seguir descreve os diferentes recursos e como ele se compara com outras opções.
Pré-requisitos
Instale o pacote
mlflow
MLflow SDK e o plug-in do Azure Machine Learning para MLflowazureml-mlflow
.pip install mlflow azureml-mlflow
Gorjeta
Você pode usar o
mlflow-skinny
pacote, que é um pacote MLflow leve sem dependências de armazenamento SQL, servidor, interface do usuário ou ciência de dados.mlflow-skinny
é recomendado para usuários que precisam principalmente dos recursos de rastreamento e registro em log do MLflow sem importar o conjunto completo de recursos, incluindo implantações.Uma área de trabalho do Azure Machine Learning. Você pode criar um seguindo o tutorial Criar recursos de aprendizado de máquina.
Se você estiver executando o rastreamento remoto (ou seja, rastreando experimentos que estão sendo executados fora do Aprendizado de Máquina do Azure), configure o MLflow para apontar para o URI de rastreamento do seu espaço de trabalho do Azure Machine Learning. Para obter mais informações sobre como conectar o MLflow ao seu espaço de trabalho, consulte Configurar o MLflow para o Azure Machine Learning.
Observe que os registros organizacionais não são suportados para gerenciamento de modelo com MLflow.
Algumas operações podem ser executadas diretamente usando a API fluente MLflow (
mlflow.<method>
). No entanto, outros podem exigir a criação de um cliente MLflow, que permite se comunicar com o Azure Machine Learning no protocolo MLflow. Você pode criar umMlflowClient
objeto da seguinte maneira. Este tutorial usa o objetoclient
para se referir a esse cliente MLflow.import mlflow client = mlflow.tracking.MlflowClient()
Registar novos modelos no registo
O registro de modelos oferece uma maneira conveniente e centralizada de gerenciar modelos em um espaço de trabalho. Cada espaço de trabalho tem seu próprio registro de modelos independentes. A seção a seguir explica várias maneiras de registrar modelos no Registro usando o SDK MLflow.
Criando modelos a partir de uma execução existente
Se você tiver um modelo MLflow registrado dentro de uma execução e quiser registrá-lo em um registro, use a ID de execução e o caminho onde o modelo foi registrado. Consulte Gerenciar experimentos e execuções com o MLflow para saber como consultar essas informações se você não as tiver.
mlflow.register_model(f"runs:/{run_id}/{artifact_path}", model_name)
Nota
Os modelos só podem ser registrados no registro no mesmo espaço de trabalho onde a execução foi rastreada. As operações entre espaços de trabalho não são suportadas no momento no Azure Machine Learning.
Gorjeta
Recomendamos registrar modelos de execuções ou usar o método mlflow.<flavor>.log_model
de dentro da execução, pois ele mantém a linhagem do trabalho que gerou o ativo.
Criação de modelos a partir de ativos
Se você tiver uma pasta com um modelo MLModel MLflow, poderá registrá-la diretamente. Não há necessidade de o modelo estar sempre no contexto de uma corrida. Para fazer isso, você pode usar o esquema file://path/to/model
URI para registrar modelos MLflow armazenados no sistema de arquivos local. Vamos criar um modelo simples usando Scikit-Learn
e salvá-lo no formato MLflow no armazenamento local:
from sklearn import linear_model
reg = linear_model.LinearRegression()
reg.fit([[0, 0], [1, 1], [2, 2]], [0, 1, 2])
mlflow.sklearn.save_model(reg, "./regressor")
Gorjeta
O método save_model()
funciona da mesma forma que log_model()
o . Enquanto log_model()
salva o modelo dentro em uma execução ativa, save_model()
usa o sistema de arquivos local para salvar o modelo.
Agora você pode registrar o modelo a partir do caminho local:
import os
model_local_path = os.path.abspath("./regressor")
mlflow.register_model(f"file://{model_local_path}", "local-model-test")
Consultando registros de modelo
Você pode usar o SDK MLflow para consultar e pesquisar modelos registrados no Registro. A seção a seguir explica várias maneiras de alcançá-lo.
Consultando todos os modelos no registro
Você pode consultar todos os modelos registrados no registro usando o cliente MLflow. O exemplo a seguir imprime todos os nomes do modelo:
for model in client.search_registered_models():
print(f"{model.name}")
Use order_by
para encomendar por uma propriedade específica como name
, , , version
creation_timestamp
e last_updated_timestamp
:
client.search_registered_models(order_by=["name ASC"])
Nota
MLflow 2.0 advisory: Em versões mais antigas do Mlflow (<2.0), use o método MlflowClient.list_registered_models()
em vez disso.
Obter versões específicas do modelo
O search_registered_models()
comando recupera o objeto de modelo, que contém todas as versões do modelo. No entanto, se pretender obter a última versão de modelo registada de um determinado modelo, pode utilizar get_registered_model
:
client.get_registered_model(model_name)
Se necessitar de uma versão específica do modelo, pode indicá-lo:
client.get_model_version(model_name, version=2)
Carregando modelos do registro
Você pode carregar modelos diretamente do Registro para restaurar os objetos de modelos que foram registrados. Use as funções mlflow.<flavor>.load_model()
ou mlflow.pyfunc.load_model()
indique o URI do modelo que você deseja carregar usando a seguinte sintaxe:
models:/<model-name>/latest
, para carregar a última versão do modelo.models:/<model-name>/<version-number>
, para carregar uma versão específica do modelo.models:/<model-name>/<stage-name>
, para carregar uma versão específica em um determinado estágio para um modelo. Veja os estágios do modelo para obter detalhes.
Gorjeta
Para saber mais sobre a diferença entre mlflow.<flavor>.load_model()
e mlflow.pyfunc.load_model()
, exiba Fluxos de trabalho para carregar modelos MLflow.
Etapas do modelo
O MLflow suporta os estágios do modelo para gerenciar o ciclo de vida do modelo. A versão do modelo pode transitar de um estágio para outro. Os estágios são atribuídos à versão de um modelo (em vez de modelos), o que significa que um determinado modelo pode ter várias versões em diferentes estágios.
Importante
Os estágios só podem ser acessados usando o SDK do MLflow. Eles não aparecem no portal do Azure ML Studio e não podem ser recuperados usando nem o SDK do Azure ML, a CLI do Azure ML ou a API REST do Azure ML. A criação de implantação a partir do estágio de um determinado modelo não é suportada no momento.
Consultando estágios do modelo
Você pode usar o cliente MLflow para verificar todos os estágios possíveis que um modelo pode ser:
client.get_model_version_stages(model_name, version="latest")
Você pode ver qual é a versão do modelo em cada estágio obtendo o modelo do registro. O exemplo a seguir obtém a versão do modelo atualmente no estágio Staging
.
client.get_latest_versions(model_name, stages=["Staging"])
Nota
Várias versões podem estar no mesmo estágio ao mesmo tempo no Mlflow, no entanto, esse método retorna a versão mais recente (versão maior) entre todas elas.
Aviso
Os nomes dos palcos diferenciam maiúsculas de minúsculas.
Modelos em transição
A transição da versão de um modelo para um estágio específico pode ser feita usando o cliente MLflow.
client.transition_model_version_stage(model_name, version=3, stage="Staging")
Por padrão, se houver uma versão de modelo existente nesse estágio específico, ela permanecerá lá. Assim, ele não é substituído, pois várias versões do modelo podem estar no mesmo estágio ao mesmo tempo. Como alternativa, você pode indicar archive_existing_versions=True
para dizer ao MLflow para mover a versão do modelo existente para o palco Archived
.
client.transition_model_version_stage(
model_name, version=3, stage="Staging", archive_existing_versions=True
)
Carregando modelos a partir de estágios
ou pode carregar um modelo em um estágio específico diretamente do Python usando a load_model
função e o seguinte formato URI. Observe que, para que esse método seja bem-sucedido, você precisa ter todas as bibliotecas e dependências já instaladas no ambiente em que está trabalhando.
model = mlflow.pyfunc.load_model(f"models:/{model_name}/Staging")
Editar e eliminar modelos
A edição de modelos registrados é suportada no Mlflow e no Azure ML. No entanto, existem algumas diferenças que devem ser notadas:
Aviso
Não há suporte para renomear modelos no Aprendizado de Máquina do Azure, pois os objetos de modelo são immutáveis.
Edição de modelos
Você pode editar a descrição e as tags do modelo a partir de um modelo usando o Mlflow:
client.update_model_version(model_name, version=1, description="My classifier description")
Para editar tags, você tem que usar o método set_model_version_tag
e remove_model_version_tag
:
client.set_model_version_tag(model_name, version="1", key="type", value="classification")
Remover uma etiqueta:
client.delete_model_version_tag(model_name, version="1", key="type")
Eliminar a versão de um modelo
Você pode excluir qualquer versão do modelo no Registro usando o cliente MLflow, conforme demonstrado no exemplo a seguir:
client.delete_model_version(model_name, version="2")
Nota
O Azure Machine Learning não suporta a exclusão de todo o contêiner de modelo. Para conseguir a mesma coisa, você precisará excluir todas as versões do modelo de um determinado modelo.
Matriz de suporte para gerenciamento de modelos com MLflow
O cliente MLflow expõe vários métodos para recuperar e gerenciar modelos. A tabela a seguir mostra quais desses métodos são atualmente suportados no MLflow quando conectados ao Azure ML. Ele também o compara com outros recursos de gerenciamento de modelos no Azure ML.
Caraterística | MLflow | Azure ML com MLflow | Azure ML CLIv2 | Azure ML Studio |
---|---|---|---|---|
Registrando modelos no formato MLflow | ✓ | ✓ | ✓ | ✓ |
Registrando modelos que não estão no formato MLflow | ✓ | ✓ | ||
Registrando modelos a partir de saídas/artefatos de execução | ✓ | ✓1 | ✓2 | ✓ |
Registrando modelos a partir de saídas/artefatos de execução em um servidor/espaço de trabalho de rastreamento diferente | ✓ | ✓5 | ✓5 | |
Pesquisar/listar modelos registados | ✓ | ✓ | ✓ | ✓ |
Recuperando detalhes das versões do modelo registrado | ✓ | ✓ | ✓ | ✓ |
Editando a descrição das versões do modelo registrado | ✓ | ✓ | ✓ | ✓ |
Editando tags de versões de modelos registrados | ✓ | ✓ | ✓ | ✓ |
Renomeando modelos registrados | ✓ | 3 | 3 | 3 |
Excluindo um modelo registrado (contêiner) | ✓ | 3 | 3 | 3 |
Eliminar a versão de um modelo registado | ✓ | ✓ | ✓ | ✓ |
Gerenciar estágios do modelo MLflow | ✓ | ✓ | ||
Pesquisar modelos registados por nome | ✓ | ✓ | ✓ | ✓4 |
Pesquisar modelos registrados usando comparadores LIKE de cadeia de caracteres e ILIKE |
✓ | ✓4 | ||
Pesquisar modelos registados por etiqueta | ✓4 | |||
Apoio a registos organizacionais | ✓ | ✓ |
Nota
- 1 Use URIs com formato
runs:/<ruin-id>/<path>
. - 2 Use URIs com formato
azureml://jobs/<job-id>/outputs/artifacts/<path>
. - 3 Os modelos registados são objetos imutáveis no Azure ML.
- 4 Use a caixa de pesquisa no Azure ML Studio. Correspondência parcial suportada.
- 5 Use registros para mover modelos em diferentes espaços de trabalho, mantendo a linhagem.