Armazene os rastreamentos MLflow no Unity Catalog
Beta
Este recurso está em versão Beta. Os administradores do espaço de trabalho podem controlar o acesso a este recurso na página de Pré-visualizações . Veja as prévias do Gerenciador Databricks.
O Databricks oferece suporte ao armazenamento de rastreamentos do MLflow em tabelas do Unity Catalog usando um formato compatível com OpenTelemetry (OTEL). Por default, MLflow armazena rastreamentos organizados por experimentos no serviço do plano de controle MLflow . No entanto, armazenar rastros no Unity Catalog usando o formato OTEL oferece os seguintes benefícios:
-
O controle de acesso é gerenciado por meio do esquema Unity Catalog e das permissões de tabela, em vez de ACLs em nível de experimento. Usuários com acesso às tabelas Unity Catalog podem view todos os rastreamentos armazenados nessas tabelas, independentemente do experimento ao qual os rastreamentos pertencem.
-
Os IDs de rastreamento usam o formato URI em vez do formato
tr-<UUID>, melhorando a compatibilidade com sistemas externos. -
Armazene um número ilimitado de rastreamentos em tabelas Delta, permitindo a retenção e análise de dados de rastreamento a longo prazo. Consulte Considerações sobre desempenho.
-
Consulte dados de rastreamento diretamente usando SQL por meio de um data warehouse Databricks SQL , possibilitando análises avançadas e relatórios personalizados.
-
O formato OTEL garante compatibilidade com outros clientes e ferramentas OpenTelemetry.
Pré-requisitos
-
Um workspace compatível com o Catálogo Unity.
-
Permissões para criar catálogos e esquemas no Unity Catalog.
-
Certifique-se de que a pré-visualização "OpenTelemetry on Databricks" esteja ativada. Veja as prévias do Gerenciador Databricks.
-
Um data warehouseDatabricks SQL. Guarde o ID do armazém para referência futura.
-
Embora este recurso esteja em versão Beta, seu workspace deve estar em uma das seguintes regiões:
us-east-1us-west-2
-
A biblioteca MLflow para Python, versão 3.8.0 ou posterior, deve estar instalada em seu ambiente:
Bashpip install mlflow[databricks]>=3.8.0 --upgrade --force-reinstall
Configuração: Crie tabelas UC e vincule um experimento.
Crie as tabelas Unity Catalog para armazenar os rastreamentos. Em seguida, vincule o esquema Unity Catalog que contém as tabelas a um experimento MLflow para gravar seus rastreamentos nas tabelas por default:
# Example values for the placeholders below:
# MLFLOW_TRACING_SQL_WAREHOUSE_ID: "abc123def456" (found in SQL Warehouse URL)
# experiment_name: "/Users/user@company.com/traces"
# catalog_name: "main" or "my_catalog"
# schema_name: "mlflow_traces" or "production_traces"
import os
import mlflow
from mlflow.exceptions import MlflowException
from mlflow.entities import UCSchemaLocation
from mlflow.tracing.enablement import set_experiment_trace_location
mlflow.set_tracking_uri("databricks")
# Specify the ID of a SQL warehouse you have access to.
os.environ["MLFLOW_TRACING_SQL_WAREHOUSE_ID"] = "<SQL_WAREHOUSE_ID>"
# Specify the name of the MLflow Experiment to use for viewing traces in the UI.
experiment_name = "<MLFLOW_EXPERIMENT_NAME>"
# Specify the name of the Catalog to use for storing traces.
catalog_name = "<UC_CATALOG_NAME>"
# Specify the name of the Schema to use for storing traces.
schema_name = "<UC_SCHEMA_NAME>"
if experiment := mlflow.get_experiment_by_name(experiment_name):
experiment_id = experiment.experiment_id
else:
experiment_id = mlflow.create_experiment(name=experiment_name)
print(f"Experiment ID: {experiment_id}")
# To link an experiment to a trace location
result = set_experiment_trace_location(
location=UCSchemaLocation(catalog_name=catalog_name, schema_name=schema_name),
experiment_id=experiment_id,
)
print(result.full_otel_spans_table_name)
Verificar tabelas
Após executar o código de configuração, três novas tabelas do Unity Catalog ficarão visíveis no esquema da interface do Catalog Explorer:
mlflow_experiment_trace_otel_logsmlflow_experiment_trace_otel_metricsmlflow_experiment_trace_otel_spans
Conceder permissões
As seguintes permissões são necessárias para que um usuário ou entidade de serviço Databricks possa ler ou gravar rastreamentos MLflow nas tabelas Unity Catalog :
- Permissões USE_CATALOG no catálogo.
- Permissões USE_SCHEMA no esquema.
- Permissões MODIFY e SELECT em cada uma das tabelas
mlflow_experiment_trace_<type>.
ALL_PRIVILEGES Não é suficiente para acessar as tabelas de rastreamento Unity Catalog . Você deve conceder explicitamente as permissões MODIFY e SELECT .
rastreia logs nas tabelas Unity Catalog
Após criar as tabelas, você pode gravar rastreamentos nelas a partir de várias fontes, especificando o destino do rastreamento. A forma de fazer isso depende da origem dos rastros.
- MLflow SDK
- Databricks App
- Model Serving endpoint
- 3rd party OTEL client
O catálogo e o esquema podem ser especificados usando a API Python mlflow.tracing.set_destination ou definindo a variável de ambiente MLFLOW_TRACING_DESTINATION .
import mlflow
mlflow.set_tracking_uri("databricks")
# Specify the name of the catalog and schema to use for storing Traces
catalog_name = "<UC_CATALOG_NAME>"
schema_name = "<UC_SCHEMA_NAME>"
# Option 1: Use the `set_destination` API to configure the catalog and schema for
# storing MLflow Traces
from mlflow.entities import UCSchemaLocation
mlflow.tracing.set_destination(
destination=UCSchemaLocation(
catalog_name=catalog_name,
schema_name=schema_name,
)
)
# Option 2: Use the `MLFLOW_TRACING_DESTINATION` environment variable to configure the
# catalog and schema for storing MLflow Traces
import os
os.environ["MLFLOW_TRACING_DESTINATION"] = f"{catalog_name}.{schema_name}"
# Create and ingest an example trace using the `@mlflow.trace` decorator
@mlflow.trace
def test(x):
return x + 1
test(100)
Um aplicativo Databricks em execução mlflow >= 3.5.0 pode gravar rastreamentos no Unity Catalog, desde que a entidade de serviço do aplicativo Databricks tenha acesso às tabelas Unity Catalog .
Para conceder à entidade de serviço do seu aplicativo Databricks acesso às tabelas Unity Catalog para ingestão de rastreamento:
-
Encontre o nome da entidade de serviço do seu aplicativo na tab Autorização do aplicativo.
-
Conceda à entidade de serviço
MODIFYeSELECTacesso às tabelaslogsespans. -
Atualize o código do seu aplicativo Databricks para definir o catálogo e o esquema para ingestão de rastreamento:
Pythonimport mlflow
mlflow.set_tracking_uri("databricks")
# Specify the name of the catalog and schema to use for storing Traces
catalog_name = "<UC_CATALOG_NAME>"
schema_name = "<UC_SCHEMA_NAME>"
# Option 1: Use the `set_destination` API to configure the catalog and schema for
# storing MLflow Traces
from mlflow.entities import UCSchemaLocation
mlflow.tracing.set_destination(
destination=UCSchemaLocation(
catalog_name=catalog_name,
schema_name=schema_name,
)
)
# Option 2: Use the `MLFLOW_TRACING_DESTINATION` environment variable to configure the
# catalog and schema for storing MLflow Traces
import os
os.environ["MLFLOW_TRACING_DESTINATION"] = f"{catalog_name}.{schema_name}"
# Create and ingest an example trace using the `@mlflow.trace` decorator
@mlflow.trace
def test(x):
return x + 1
test(100) -
implantou o aplicativo Databricks .
Para gravar rastreamentos de um endpoint Databricks servindo modelo em tabelas Unity Catalog , você deve configurar um token de acesso pessoal (PAT).
- Conceda a um usuário ou entidade de serviço
MODIFYeSELECTacesso às tabelaslogsespans. - Gere um PAT para o usuário ou entidade de serviço.
- Adicione o PAT à variável de configuração do ambiente doDatabricks modelo endpoint, especificando
DATABRICKS_TOKENcomo o nome da variável de ambiente. - Adicione o local de rastreamento para gravar como uma string
"{catalog}.{schema}"na variável de configuração de ambiente doDatabricks instalado modelo endpoint comMLFLOW_TRACING_DESTINATIONcomo o nome da variável de ambiente:
import mlflow
import os
mlflow.set_tracking_uri("databricks")
# Specify the name of the catalog and schema to use for storing Traces
catalog_name = "<UC_CATALOG_NAME>"
schema_name = "<UC_SCHEMA_NAME>"
# Option 1: Use the `set_destination` API to configure the catalog and schema for
# storing MLflow Traces
from mlflow.entities import UCSchemaLocation
mlflow.tracing.set_destination(
destination=UCSchemaLocation(
catalog_name=catalog_name,
schema_name=schema_name,
)
)
# Option 2: Use the `MLFLOW_TRACING_DESTINATION` environment variable to configure the
# catalog and schema for storing MLflow Traces
os.environ["MLFLOW_TRACING_DESTINATION"] = f"{catalog_name}.{schema_name}"
# Create and ingest an example trace using the `@mlflow.trace` decorator
@mlflow.trace
def test(x):
return x + 1
test(100)
Uma das vantagens de armazenar rastreamentos no formato OTEL é a possibilidade de gravar nas tabelas Unity Catalog usando clientes de terceiros que suportam OTEL. Os rastreamentos escritos dessa forma aparecerão em um experimento do MLflow vinculado à tabela, desde que possuam um intervalo raiz. O exemplo a seguir mostra os exportadores OTLP do OpenTelemetry.
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
# Span exporter configuration
otlp_trace_exporter = OTLPSpanExporter(
# Databricks hosted OTLP traces collector endpoint
endpoint="https://myworkspace.databricks.com/api/2.0/otel/v1/traces",
headers={
"content-type": "application/x-protobuf",
"X-Databricks-UC-Table-Name": "cat.sch.mlflow_experiment_trace_otel_spans",
"Authorization: Bearer MY_API_TOKEN"
},
)
visualizar rastros na interface do usuário
Visualize os rastros armazenados no formato OTEL da mesma forma que view outros rastros:
-
Na sua área de trabalho, acesse Experimentos .
-
Encontre o experimento em que seus registros são logaritmos. Por exemplo, o experimento definido por
mlflow.set_experiment("/Shared/my-genai-app-traces"). -
Clique tab "Rastreamentos " para ver uma lista de todos os registros de rastreamento desse experimento.

-
Se você armazenou seus rastreamentos em uma tabela Unity Catalog, Databricks recupera os rastreamentos usando um SQL warehouse. Selecione um SQL warehouse no menu suspenso.
-
Você também pode selecionar um esquema diferente. Ao selecionar um esquema alternativo, certifique-se de que ele já contenha tabelas OpenTelemetry. O menu suspenso não cria as tabelas.

Para obter mais informações sobre como usar a interface do usuário para pesquisar rastreamentos, consulte Visualizar rastreamentos na interface do usuário Databricks MLflow.
Desvincular um esquema Unity Catalog
Para desvincular um esquema Unity Catalog de um experimento MLflow , clique no dropdown "Storage UC Schema" na interface do usuário do experimento MLflow e selecione "Unlink schema" .
Os registros ainda estarão presentes no esquema Unity Catalog , e o esquema poderá ser vinculado novamente ao experimento MLflow a qualquer momento.

Limitações
-
A ingestão de rastreamentos é limitada a 100 rastreamentos por segundo por workspace e 100 MB por segundo por tabela.
-
O desempenho da interface do usuário pode ser afetado quando mais de 2 TB de dados de rastreamento são armazenados na tabela. Consulte Considerações sobre desempenho.
-
A exclusão de rastreamentos individuais não é compatível com rastreamentos armazenados no Unity Catalog. Para remover os vestígios, você deve excluir linhas diretamente das tabelas subjacentes do Unity Catalog usando SQL. Isso difere dos rastros de experimentos, que podem ser excluídos usando a interface do usuário ou a API do MLflow.
-
Ao conectar um experimento do MLflow a um esquema do Unity Catalog, somente os rastreamentos armazenados no esquema do Unity Catalog vinculado ao experimento ficam acessíveis. Os rastros preexistentes no experimento se tornarão inacessíveis para buscas a partir de clientes MLflow com Python >= 3.5.0. e a partir da interface do usuário do MLflow. Esses registros permanecem armazenados no experimento, mas não podem ser visualizados ou pesquisados enquanto o experimento estiver vinculado ao Unity Catalog.
Desvincular o esquema do experimento MLflow restaura o acesso aos rastreamentos preexistentes.
-
Limite de taxa de transferência de ingestão de 200 consultas por segundo (QPS)