Gerenciar o ciclo de vida do modelo no Catálogo do Unity

Importante

Este artigo descreve como usar Modelos no Catálogo do Unity como parte do seu fluxo de trabalho de aprendizado de máquina para gerenciar o ciclo de vida completo dos modelos de ML. O Databricks fornece uma versão hospedada do Registro de Modelo do MLflow no Catálogo do Unity. Os modelos no Catálogo do Unity estendem os benefícios do Catálogo do Unity aos modelos de ML, incluindo o controle de acesso centralizado, a auditoria, a linhagem e a descoberta de modelos entre os espaços de trabalho. Os Modelos no Catálogo do Unity são compatíveis com o cliente Python do MLflow de código aberto.

Os principais recursos dos modelos no Catálogo do Unity incluem:

  • Espaçamento de nomes e governança para modelos, para que você possa agrupar e controlar modelos no nível do ambiente, do projeto ou da equipe ("Conceder aos cientistas de dados acesso somente leitura aos modelos de produção").
  • A linhagem do modelo cronológico (que o MLflow experimentou e executou produziu o modelo em um determinado momento).
  • Serviço de Modelo.
  • Controle de versão de modelo.
  • Implantação de modelos através de aliases. Por exemplo, marque a versão "Champion" de um modelo dentro do seu catálogo prod.

Se o catálogo padrão do workspace estiver configurado para um catálogo no Catálogo do Unity, os modelos registrados usando APIs do MLflow, como mlflow.<model-type>.log_model(..., registered_model_name) ou mlflow.register_model(model_uri, name), serão registrados no Catálogo do Unity por padrão.

Este artigo inclui instruções para ambos os Modelos na interface do usuário e na API do Catálogo do Unity.

Para obter uma visão geral dos conceitos do Registro de Modelo, consulte Gerenciamento do ciclo de vida de ML usando o MLflow.

Requisitos

  1. O Catálogo do Unity deve estar habilitado no seu espaço de trabalho. Consulte Comece a usar o Catálogo do Unity para criar um Metastore do Catálogo do Unity, habilitá-lo em um espaço de trabalho e criar um catálogo. Se o Catálogo do Unity não estiver habilitado, você ainda poderá usar o registro do modelo de espaço de trabalho.

  2. Seu espaço de trabalho deve ser anexado a um metastore do Catálogo do Unity com suporte para a herança de privilégios. Isso se aplica a todos os metastores criados após 25 de agosto de 2022. Se estiver executando em um metastore mais antigo, siga os documentos para fazer a atualização.

  3. Você deve ter acesso para executar comandos em um cluster com acesso ao Catálogo do Unity.

  4. Para criar novos modelos registrados, você precisa do privilégio CREATE_MODEL em um esquema, além dos privilégios USE SCHEMA e USE CATALOG no esquema e em seu catálogo incluído. CREATE_MODEL é um novo privilégio de nível do esquema que você pode conceder usando a interface do usuário do Explorador do Catálogo ou o comando SQL GRANT, conforme mostrado abaixo.

    GRANT CREATE_MODEL ON SCHEMA <schema-name> TO <principal>
    

Atualizar as cargas de trabalho de treinamento no Catálogo do Unity

Esta seção inclui instruções para atualizar as cargas de trabalho de treinamento existentes para o Catálogo do Unity.

Instalar o cliente Python do MLflow

Você também pode usar os modelos no Catálogo do Unity no Databricks Runtime 11.3 LTS e superior instalando a versão mais recente do cliente Python do MLflow no seu notebook, usando o código abaixo.

%pip install --upgrade "mlflow-skinny[databricks]"
dbutils.library.restartPython()

Configurar o cliente do MLflow para acessar modelos no Catálogo do Unity

Por padrão, o cliente Python do MLflow cria modelos no registro de modelos do espaço de trabalho do Databricks. Para atualizar para modelos no Catálogo do Unity, configure o cliente do MLflow:

import mlflow
mlflow.set_registry_uri("databricks-uc")

Observação

Se o catálogo padrão do seu workspace estiver no Catálogo do Unity (em vez de hive_metastore) e você estiver executando um cluster usando o Databricks Runtime 13.3 LTS ou superior (Databricks Runtime 15.0 ou superior nas regiões do Azure China), os modelos serão automaticamente criados e carregados no catálogo padrão, sem necessidade de configuração. Para outras versões do Databricks Runtime, não há alteração no comportamento. Um pequeno número de espaços de trabalho em que o catálogo padrão foi configurado para um catálogo no Catálogo do Unity antes de janeiro de 2024 e o registro do modelo do espaço de trabalho foi usado antes de janeiro de 2024 estão isentos desse comportamento.

Treinar e registrar modelos compatíveis com o Catálogo do Unity

Permissões necessárias: Para criar um novo modelo registrado, você precisa dos privilégios CREATE_MODEL e USE SCHEMA no esquema anexo e do privilégio USE CATALOG no catálogo anexo. Para criar novas versões do modelo em um modelo registrado, você deve ser o proprietário do modelo registrado e ter os privilégios USE SCHEMA e USE CATALOG no esquema e no catálogo que contêm o modelo.

As versões do modelo ML no UC devem ter um modelo de assinatura. Se ainda não estiver registrando os modelos do MLflow com assinaturas em suas cargas de trabalho de treinamento de modelos, você poderá:

  • Use o Databricks Autologging, que registra automaticamente os modelos com assinaturas para muitas estruturas populares de ML. Confira as estruturas com suporte na documentação do MLflow.
  • Com o MLflow 2.5.0 e superior, você pode especificar um exemplo de entrada na sua mlflow.<flavor>.log_model chamada e a assinatura do modelo é inferida automaticamente. Para obter mais informações, consulte a documentação do MLflow.

Em seguida, passe o nome de três níveis do modelo para as APIs do MLflow, no formato <catalog>.<schema>.<model>.

Os exemplos nesta seção criam e acessam modelos no ml_team esquema do prod catálogo.

Os exemplos de treinamento de modelo nesta seção criam uma nova versão de modelo e a registram no prod catálogo. Usar o prod catálogo não significa necessariamente que a versão do modelo atenda ao tráfego de produção. O catálogo, o esquema e o modelo registrado da versão do modelo refletem seu ambiente (prod) e as regras de governança associadas (por exemplo, privilégios podem ser configurados para que apenas os administradores possam excluir do prod catálogo), mas não o status da sua implantação. Para gerenciar o status da implantação, use aliases de modelo.

Registrar um modelo no Catálogo do Unity usando o log automático

from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier

# Train a sklearn model on the iris dataset
X, y = datasets.load_iris(return_X_y=True, as_frame=True)
clf = RandomForestClassifier(max_depth=7)
clf.fit(X, y)

# Note that the UC model name follows the pattern
# <catalog_name>.<schema_name>.<model_name>, corresponding to
# the catalog, schema, and registered model name
# in Unity Catalog under which to create the version
# The registered model will be created if it doesn't already exist
autolog_run = mlflow.last_active_run()
model_uri = "runs:/{}/model".format(autolog_run.info.run_id)
mlflow.register_model(model_uri, "prod.ml_team.iris_model")

Registrar um modelo no Catálogo do Unity com uma assinatura especificada manualmente

O suporte para assinaturas inferidas automaticamente está disponível no MLflow versão 2.5.0 e superior e tem suporte no Databricks Runtime 11.3 LTS ML e superior. Para usar as assinaturas inferidas automaticamente, use o seguinte código para instalar o cliente mais recente do Python do MLflow no seu notebook:

%pip install --upgrade "mlflow-skinny[databricks]"
dbutils.library.restartPython()

O código a seguir mostra um exemplo de uma assinatura inferida automaticamente.

from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier

with mlflow.start_run():
    # Train a sklearn model on the iris dataset
    X, y = datasets.load_iris(return_X_y=True, as_frame=True)
    clf = RandomForestClassifier(max_depth=7)
    clf.fit(X, y)
    # Take the first row of the training dataset as the model input example.
    input_example = X.iloc[[0]]
    # Log the model and register it as a new version in UC.
    mlflow.sklearn.log_model(
        sk_model=clf,
        artifact_path="model",
        # The signature is automatically inferred from the input example and its predicted output.
        input_example=input_example,
        registered_model_name="prod.ml_team.iris_model",
    )

Acompanhar a linhagem de dados de um modelo no Catálogo do Unity

Observação

O suporte para linhagem de tabela para modelo no Catálogo do Unity está disponível no MLflow 2.11.0 e superior.

Ao treinar um modelo em uma tabela no Catálogo do Unity, você pode acompanhar a linhagem do modelo até os conjuntos de dados upstream em que ele foi treinado e avaliado. Para fazer isso, use mlflow.log_input. Isso salva as informações da tabela de entrada com a execução do MLflow que gerou o modelo. A linhagem de dados também é capturada automaticamente para modelos registrados usando APIs do repositório de recursos. Confira Exibir linhagem do repositório de recursos.

Ao registrar o modelo no Catálogo do Unity, as informações de linhagem são salvas automaticamente e ficam visíveis na guia Linhagem da interface do usuário da versão do modelo no Explorador do Catálogo.

O código a seguir mostra um exemplo.

import mlflow
import pandas as pd
import pyspark.pandas as ps
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestRegressor

# Write a table to Unity Catalog
iris = load_iris()
iris_df = pd.DataFrame(iris.data, columns=iris.feature_names)
iris_df.rename(
  columns = {
    'sepal length (cm)':'sepal_length',
    'sepal width (cm)':'sepal_width',
    'petal length (cm)':'petal_length',
    'petal width (cm)':'petal_width'},
  inplace = True
)
iris_df['species'] = iris.target
ps.from_pandas(iris_df).to_table("prod.ml_team.iris", mode="overwrite")

# Load a Unity Catalog table, train a model, and log the input table
dataset = mlflow.data.load_delta(table_name="prod.ml_team.iris", version="0")
pd_df = dataset.df.toPandas()
X = pd_df.drop("species", axis=1)
y = pd_df["species"]
with mlflow.start_run():
    clf = RandomForestRegressor(n_estimators=100)
    clf.fit(X, y)
    mlflow.log_input(dataset, "training")

Exibir modelos na interface do usuário

Permissões necessárias: para exibir um modelo registrado e suas versões de modelo na interface do usuário, é necessário ter o privilégio EXECUTE no modelo registrado, além dos privilégios USE SCHEMA e USE CATALOG no esquema e no catálogo que contêm o modelo

Você pode exibir e gerenciar os modelos registrados e as versões de modelos no Catálogo do Unity usando o Gerenciador de Catálogos.

Controlar o acesso aos modelos

Para obter informações sobre como controlar o acesso aos modelos registrados no Catálogo do Unity, consulte Privilégios e objetos protegíveis do Catálogo do Unity. Para obter as práticas recomendadas sobre como organizar modelos nos catálogos e esquemas, consulte Organizar seus dados.

Você pode configurar as permissões de modelo programaticamente usando a API REST de Concessões. Ao configurar as permissões de modelo, defina securable_type como "FUNCTION" nas solicitações da API REST. Por exemplo, use PATCH /api/2.1/unity-catalog/permissions/function/{full_name} para atualizar as permissões de modelo registradas.

Implantar e organizar modelos com aliases e marcas

Os aliases e marcas do modelo o ajudam organizar e gerenciar os modelos no Catálogo do Unity.

Os aliases do modelo permitem que você atribua uma referência mutável e nomeada a uma versão específica em um modelo registrado. Você pode usar aliases para indicar o status de implantação de uma versão do modelo. Por exemplo, você pode alocar um alias "Champion" na versão do modelo atualmente em produção e direcionar esse alias nas cargas de trabalho que usam o modelo de produção. Em seguida, você pode atualizar o modelo de produção reatribuindo o alias "Champion" para uma versão de modelo diferente.

As Marcas são pares de chave-valor associados aos modelos registrados e versões de modelo, permitindo rotulá-los e categorizá-los por função ou status. Por exemplo, você pode aplicar uma marca com chave "task" e valor "question-answering" (exibida na interface do usuário como task:question-answering) aos modelos registrados destinados a tarefas de resposta a perguntas. No nível de versão do modelo, você pode marcar versões que passam por validação de pré-implantação com validation_status:pending e aquelas desmarcadas para implantação com validation_status:approved.

Consulte as seções a seguir para saber como usar aliases e marcas.

Definir e excluir aliases nos modelos

Permissões necessárias: Proprietário do modelo registrado, além dos privilégios USE SCHEMA e USE CATALOG no esquema e no catálogo que contêm o modelo.

Você pode definir, atualizar e remover aliases dos modelos no Catálogo do Unity usando o Explorador do Catálogo. Você pode gerenciar aliases em um modelo registrado na página de detalhes do modelo e configurar os aliases em uma versão de modelo específica na página de detalhes da versão do modelo.

Para definir, atualizar e excluir aliases usando a API de Cliente do MLflow, consulte os exemplos abaixo:

from mlflow import MlflowClient
client = MlflowClient()

# create "Champion" alias for version 1 of model "prod.ml_team.iris_model"
client.set_registered_model_alias("prod.ml_team.iris_model", "Champion", 1)

# reassign the "Champion" alias to version 2
client.set_registered_model_alias("prod.ml_team.iris_model", "Champion", 2)

# get a model version by alias
client.get_model_version_by_alias("prod.ml_team.iris_model", "Champion")

# delete the alias
client.delete_registered_model_alias("prod.ml_team.iris_model", "Champion")

Definir e excluir marcas nos modelos

Permissões necessárias: proprietário ou tem APPLY_TAG privilégio no modelo registrado, além de USE SCHEMA e USE CATALOG privilégios no esquema e catálogo que contém o modelo.

Confira Gerenciar marcas no Explorador do Catálogo sobre como definir e excluir marcas usando a interface do usuário.

Para definir e excluir aliases usando a API de Cliente do MLflow, consulte os exemplos abaixo:

from mlflow import MlflowClient
client = MlflowClient()

# Set registered model tag
client.set_registered_model_tag("prod.ml_team.iris_model", "task", "classification")

# Delete registered model tag
client.delete_registered_model_tag("prod.ml_team.iris_model", "task")

# Set model version tag
client.set_model_version_tag("prod.ml_team.iris_model", "1", "validation_status", "approved")

# Delete model version tag
client.delete_model_version_tag("prod.ml_team.iris_model", "1", "validation_status")

As marcas do modelo e de versão do modelo registrados devem atender às restrições na plataforma.

Para obter mais detalhes sobre APIs de cliente de alias e marca, consulte a documentação da API do MLflow.

Carregar modelos para inferência

Consumir versões do modelo por alias nas cargas de trabalho de inferência

Permissões necessárias: EXECUTE privilégios no modelo registrado, além dos privilégios USE SCHEMA e USE CATALOG privilégios no esquema e no catálogo que contêm o modelo.

Você pode escrever cargas de trabalho de inferência em lote que fazem referência a uma versão do modelo por alias. Por exemplo, o trecho abaixo carrega e aplica a versão do modelo “Champion” para inferência em lote. Se a versão “Champion” for atualizada para fazer referência a uma nova versão do modelo, a carga de trabalho de inferência em lote a pegará automaticamente em sua próxima execução. Isso permite desacoplar as implantações de modelos das cargas de trabalho de inferência em lote.

import mlflow.pyfunc
model_version_uri = "models:/prod.ml_team.iris_model@Champion"
champion_version = mlflow.pyfunc.load_model(model_version_uri)
champion_version.predict(test_x)

Você também pode escrever fluxos de trabalho de implantação para obter uma versão do modelo por alias e atualizar um ponto de extremidade de serviço de modelo para servir essa versão, usando a API REST de serviço de modelo:

import mlflow
import requests
client = mlflow.tracking.MlflowClient()
champion_version = client.get_model_version_by_alias("prod.ml_team.iris_model", "Champion")
# Invoke the model serving REST API to update endpoint to serve the current "Champion" version
model_name = champion_version.name
model_version = champion_version.version
requests.request(...)

Consumir versões de modelos por número de versão nas cargas de trabalho de inferência

Você também pode carregar versões de modelos por número de versão:

import mlflow.pyfunc
# Load version 1 of the model "prod.ml_team.iris_model"
model_version_uri = "models:/prod.ml_team.iris_model/1"
first_version = mlflow.pyfunc.load_model(model_version_uri)
first_version.predict(test_x)

Compartilhar modelos entre workspaces

Compartilhar modelos com usuários na mesma região

Desde que você tenha os privilégios apropriados, poderá acessar modelos no Catálogo do Unity de qualquer workspace anexado ao metastore que contém o modelo. Por exemplo, você pode acessar os modelos do catálogo prod em um espaço de trabalho de desenvolvimento, para facilitar a comparação de modelos recém-desenvolvidos com a linha de base de produção.

Para colaborar com outros usuários (compartilhar privilégios de gravação) em um modelo registrado que você criou, é necessário conceder a propriedade do modelo a um grupo que contenha você e os usuários com os quais gostaria de colaborar. Os colaboradores também devem ter os privilégios USE CATALOG e USE SCHEMA no catálogo e no esquema que contém o modelo. Confira Privilégios e objetos protegíveis do Catálogo do Unity para obter detalhes.

Compartilhar modelos com usuários em outra região ou conta

Para compartilhar modelos com usuários em outras regiões ou contas, use o fluxo de compartilhamento Databricks para Databricks do Delta Sharing. Consulte Adicionar modelos a um compartilhamento (para provedores) e Obter acesso no modelo Databricks para Databricks (para destinatários). Como destinatário, depois de criar um catálogo a partir de um compartilhamento, você acessa modelos nesse catálogo compartilhado da mesma forma que qualquer outro modelo no Catálogo do Unity.

Anotação de modelo ou versão do modelo

Permissões necessárias: Proprietário do modelo registrado, além dos privilégios USE SCHEMA e USE CATALOG no esquema e no catálogo que contêm o modelo.

Você poderá fornecer informações sobre um modelo ou uma versão do modelo anotando-a. Por exemplo, talvez você queira incluir uma visão geral do problema ou informações sobre a metodologia e o algoritmo usados.

Anotar um modelo ou uma versão do modelo usando a interface do usuário

Confira Documentar dados no Gerenciador de Catálogos usando comentários de markdown.

Anotar um modelo ou versão de modelo usando a API

Para atualizar uma descrição do modelo registrado, utilize o método da API do cliente do MLflow update_registered_model():

client = MlflowClient()
client.update_registered_model(
  name="<model-name>",
  description="<description>"
)

Para atualizar a descrição de uma versão do modelo, use o método update_model_version() da API do Cliente MLflow:

client = MlflowClient()
client.update_model_version(
  name="<model-name>",
  version=<model-version>,
  description="<description>"
)

Renomear um modelo (somente API)

Permissões necessárias: Proprietário do modelo registrado, privilégio CREATE_MODEL no esquema que contém o modelo registrado e privilégios USE SCHEMA e USE CATALOG no esquema e no catálogo que contêm o modelo.

Para renomear um modelo registrado, use o método rename_registered_model() da API do Cliente MLflow:

client=MlflowClient()
client.rename_registered_model("<model-name>", "<new-model-name>")

Excluir um modelo ou uma versão do modelo

Permissões necessárias: Proprietário do modelo registrado, além dos privilégios USE SCHEMA e USE CATALOG no esquema e no catálogo que contêm o modelo.

Você pode excluir um modelo registrado ou uma versão do modelo dentro de um modelo registrado usando a interface do usuário do Explorador do Catálogo ou a API.

Excluir um modelo ou uma versão do modelo usando a API

Aviso

Você não pode desfazer essa ação. Quando você exclui um modelo, todos os artefatos de modelo armazenados pelo Catálogo do Unity e todos os metadados associados ao modelo registrado são excluídos.

Excluir uma versão do modelo

Para excluir uma versão do modelo, use o método delete_model_version() da API do Cliente MLflow:

# Delete versions 1,2, and 3 of the model
client = MlflowClient()
versions=[1, 2, 3]
for version in versions:
  client.delete_model_version(name="<model-name>", version=version)

Excluir um modelo

Para excluir um modelo, use o método delete_registered_model() da API do Cliente MLflow:

client = MlflowClient()
client.delete_registered_model(name="<model-name>")

Listar e pesquisar modelos

Você pode listar os modelos registrados no Catálogo do Unity com a API do Python search_registered_models() do MLflow:

client=MlflowClient()
client.search_registered_models()

Você também pode pesquisar um nome de modelo específico e listar os detalhes da sua versão usando o método search_model_versions():

from pprint import pprint

client=MlflowClient()
[pprint(mv) for mv in client.search_model_versions("name='<model-name>'")]

Exemplo

Este exemplo ilustra como usar os Modelos no Catálogo Unity para criar um aplicativo de aprendizado de máquina.

Exemplo de modelos no Catálogo do Unity

Migrar modelos e fluxos de trabalho para o Catálogo do Unity

O Databricks recomenda usar os modelos no Catálogo do Unity para governança aprimorada, fácil compartilhamento entre os espaços de trabalho e ambientes e fluxos de trabalho MLOps mais flexíveis. A tabela compara os recursos do Registro de Modelo de Workspace e do Catálogo do Unity.

Recurso Registro do Modelo do Workspace (herdado) Modelos no Catálogo do Unity (recomendado)
Versões de modelo de referência por aliases nomeados Fases do Registro de Modelo: mover versões de modelo para uma das quatro fases fixas para referenciá-las por essa fase. Não é possível renomear ou adicionar fases. Aliases do Registro de Modelo: crie até 10 referências nomeadas personalizadas e reatribuíveis para versões de modelo para cada modelo registrado.
Criar ambientes controlados por acesso para modelos Estágios do Registro de Modelo: use fases em um modelo registrado para denotar o ambiente de suas versões de modelo, com controles de acesso para apenas dois dos quatro fases fixas (Staging e Production). Modelos registrados: crie um modelo registrado para cada ambiente em seu fluxo de trabalho do MLOps, utilizando namespaces de três níveis e permissões do Catálogo do Unity para expressar governança.
Promover modelos entre ambientes (modelo de implantação) Use a API do Cliente MLflow transition_model_version_stage() para mover uma versão do modelo para uma fase diferente, potencialmente interrompendo fluxos de trabalho que fazem referência à fase anterior. Use a API do cliente MLflow copy_model_version() para copiar uma versão de modelo de um modelo registrado para outro.
Acessar e compartilhar modelos entre workspaces Exporte e importe manualmente modelos entre workspaces ou configure conexões para registros de modelo remoto usando tokens de acesso pessoal e escopos secretos do workspace. Acesso pronto para uso a modelos em workspaces na mesma conta. Não é necessária nenhuma configuração.
Configurar permissões Defina permissões no nível do workspace. Defina permissões no nível da conta, que aplica governança consistente entre workspaces.
Acessar modelos no marketplace do Databricks Não disponível. Carregue modelos do marketplace do Databricks no metastore do Catálogo do Unity e acesse-os em workspaces.

Os artigos vinculados abaixo descrevem como migrar fluxos de trabalho (treinamento de modelo e trabalhos de inferência em lote) e modelos do Registro de Modelo de Workspace para o Catálogo do Unity.

Limitações no suporte do Catálogo do Unity

  • Não há suporte para estágios dos modelos no Catálogo do Unity. O Databricks recomenda usar o namespace de três níveis no Catálogo do Unity para expressar o ambiente em que um modelo está e usar os aliases para promover os modelos para implantação. Consulte o guia de atualização para obter detalhes.
  • Não há suporte para os estágios dos modelos no Catálogo do Unity. Consulte as alternativas sugeridas no guia de atualização.
  • Não há suporte para alguns campos e operadores de API de pesquisa dos modelos no Catálogo do Unity. Isso pode ser mitigado chamando as APIs de pesquisa usando filtros com suporte e verificando os resultados. Estes são alguns exemplos:
    • Não order_by há suporte para o parâmetro nas APIs de cliente search_model_versions ou search_registered_models.
    • Não há suporte para filtros baseados em marca (tags.mykey = 'myvalue') para search_model_versions ou search_registered_models.
    • Operadores diferentes da igualdade exata (por exemplo, LIKE, ILIKE, !=) não têm suporte para search_model_versions ou search_registered_models.
    • Não há suporte para a pesquisa de modelos registrados por nome (por exemplo, MlflowClient().search_registered_models(filter_string="name='main.default.mymodel'") não há suporte. Para buscar um modelo registrado específico por nome, use get_registered_model.
  • Notificações por email e tópicos de discussão de comentários dos modelos registrados e versões de modelos não são suportados no Catálogo do Unity.
  • Não há suporte para o log de atividades dos modelos no Catálogo do Unity. Entretanto, você pode acompanhar a atividade nos modelos no Catálogo do Unity usando logs de auditoria.
  • search_registered_models pode retornar resultados obsoletos para modelos compartilhados por meio do Compartilhamento Delta. Para garantir os resultados mais recentes, use a CLI ou o SDK do Databricks para listar os modelos em um esquema.