Perguntas frequentes sobre observabilidade e qualidade de agentes
P: Qual é a diferença entre o MLflow gerenciado na Databricks e o MLflow de código aberto?
O Managed MLflow no Databricks é o mesmo MLflow de código aberto — rastreamento, avaliação, juízes LLM, pontuadores, o registro de prompt e o feedback humano são todos APIs de código aberto, portanto, seus dados e código permanecem portáteis. O Databricks o executa e gerencia para você e adiciona recursos de plataforma sobre ele; ele não substitui nem cria um fork do projeto de código aberto.
Capacidade | MLflow de código aberto | MLflow gerenciado na Databricks |
|---|---|---|
Modelo de dados, APIs e SDK | Sim | Sim — idêntico, para que seus dados e código permaneçam portáteis |
Rastreamento, autolog e a IU de rastreamento | Sim | Sim |
Avaliação: | Sim | Sim |
Registro de prompt | Sim | Sim |
Feedback humano e rotulagem | Sim | Sim, mais o Review App hospedado — uma interface de chat e interface de rotulação para especialistas para revisores sem acesso ao workspace |
Hosting and storage | Self-hosted: you run the acompanhamento server and choose the backend | Totalmente gerenciado; os rastreamentos e experimentos residem em tabelas Delta do Unity Catalog — com governança, consultáveis via SQL, sem limite por experimento |
Governança, segurança e auditoria | Your own setup | Workspace and Unity Catalog permissions, on-behalf-of-user auth, and audit logs in system tables |
Assistente de IA e análise em linguagem natural | AI Assistant (beta) — bring your own model provider or coding agent (for example, Claude Code) | Genie Code gerenciado, painéis de AI/BI e Databricks SQL sobre seus rastreamentos — sem configuração de modelo |
Production monitoramento | Execute avaliadores de forma ad hoc por conta própria | Serviço gerenciado que pontua continuamente uma amostra de tráfego em tempo real |
CI/CD e MLOps | APIs principais e o registro de modelo | Declarative Automation Bundles, MLOps Stacks e jobs de implantação |
Seus dados são sempre seus: o modelo de dados e as APIs são totalmente de código aberto, para que você possa exportar e usar seus dados do MLflow em qualquer lugar. Para saber mais, consulte a página do produto Managed MLflow.
P: Qual é a sobrecarga de latência introduzida pelo Tracing?
Os rastreamentos são gravados de forma assíncrona para minimizar o impacto no desempenho. No entanto, o rastreamento ainda adiciona latência mínima, especialmente quando o tamanho do rastreamento é grande. MLflow recomenda testar seu aplicativo para entender os impactos da latência do rastreamento antes de implantá-lo na produção.
A tabela a seguir fornece estimativas aproximadas do impacto da latência por tamanho do traço:
Tamanho do traço por solicitação | Impacto na latência da velocidade de resposta (ms) |
|---|---|
~10 KB | ~ 1 ms |
~ 1 MB | 50 ~ 100 ms |
10 MB | 150 ms ~ |
P: Quais são os limites de taxa e as cotas para o MLflow Tracing no Databricks?
Ao usar MLflow Tracing em um workspace Databricks , aplicam-se cotas e limites de taxa para garantir a estabilidade do serviço e o uso justo. Consulte os limites de recursos.
P: Não consigo abrir meu rastreamento na interface do usuário do MLflow. O que devo fazer?
Há vários motivos possíveis para que um rastreamento não possa ser visualizado na UI do MLflow.
-
O rastreamento ainda não foi concluído : Se o rastreamento ainda estiver sendo coletado, o MLflow não poderá exibir os intervalos na interface do usuário. Certifique-se de que todos os períodos sejam encerrados corretamente com o status " OK " ou " ERROR ".
-
O cache do navegador está desatualizado : Quando o senhor atualiza o MLflow para uma nova versão, o cache do navegador pode conter dados desatualizados e impedir que a interface do usuário exiba os traços corretamente. Limpe o cache do navegador (Shift+F5) e acesse refresh a página.
P: Registrei métricas e vejo "rastreamentos: 0". O que há de errado?
mlflow.log_metric(), mlflow.log_param() e mlflow.start_run() criam Execuções do MLflow , um conceito diferente de Rastreamentos do MLflow . As execuções aparecem na tab Execuções de um experimento. Os rastreamentos aparecem na tab Rastreamentos . Elas são independentes. O registro de uma métrica não cria um rastreamento, e o rastreamento não requer um contexto de execução.
Para gerar um rastreamento, use o rastreamento automático (ex.: mlflow.openai.autolog(), mlflow.langchain.autolog()) ou rastreamento manual (ex.: @mlflow.trace, mlflow.start_span()). A tab Traces permanece vazia até que um deles seja chamado e o código instrumentado seja executado.
O que você chamou | Onde aparece |
|---|---|
| Tab Execuções |
| tab Rastreamentos |
| tab Rastreamentos |
| tab Rastreamentos |
P: Não consigo encontrar um rastreamento específico por ID na lista de rastreamentos. O que devo fazer?
Por default, a lista de rastreamento retorna os 1.000 rastreamentos mais recentes. Se um rastreamento mais antigo estiver fora desse período, ele não aparecerá nos resultados da pesquisa, mesmo que você encontre uma correspondência com o ID do rastreamento.
Para encontrar um registro mais antigo, reduza o filtro de intervalo de tempo para criar uma janela de resultados menor. Assim que o registro estiver entre as 1.000 entradas mais recentes para aquele período específico, a busca por ID o detectará. Se você souber o ID do experimento e o ID do rastreamento, você também pode navegar diretamente: <workspace-url>/ml/experiments/<experiment-id>/traces/<trace-id>.
Experimentos que não estão no Unity Catalog também são limitados a 100.000 rastreamentos no total. Para armazenamento escalável, governado e SQL-consultável sem limite de rastreamento, o Databricks recomenda armazenar rastreamentos no Unity Catalog. Para mover rastreamentos de experimentos existentes, migre para rastreamentos no Unity Catalog.
P: A execução do modelo fica paralisada e meu rastreamento é " em andamento " para sempre.
Às vezes, um modelo ou um agente fica preso em uma operação de longa duração ou em um loop infinito, fazendo com que o rastreamento fique preso no estado "in progress".
Para evitar isso, o senhor pode definir um tempo limite para o rastreamento usando a variável de ambiente MLFLOW_TRACE_TIMEOUT_SECONDS. Se o rastreamento exceder o tempo limite, o MLflow interromperá automaticamente o rastreamento com o status ERROR e o exportará para o backend, para que o senhor possa analisar os intervalos e identificar o problema. Em default, o tempo limite não é definido.
O tempo limite só se aplica ao rastreamento do MLflow. O programa principal, modelo ou agente continuará a ser executado mesmo que o rastreamento seja interrompido.
Por exemplo, o código a seguir define o tempo limite para 5 segundos e simula como o site MLflow lida com operações de longa duração:
import mlflow
import os
import time
# Set the timeout to 5 seconds for demonstration purposes
os.environ["MLFLOW_TRACE_TIMEOUT_SECONDS"] = "5"
# Simulate a long-running operation
@mlflow.trace
def long_running():
for _ in range(10):
child()
@mlflow.trace
def child():
time.sleep(1)
long_running()
O MLflow monitora o tempo de execução e a expiração do rastreamento em um thread em segundo plano. Pelo site default, essa verificação é realizada a cada segundo e o consumo de recurso é insignificante. Se quiser ajustar o intervalo, o senhor pode definir a variável de ambiente MLFLOW_TRACE_TIMEOUT_CHECK_INTERVAL_SECONDS.
P: Meu rastreamento é dividido em vários rastreamentos ao fazer multithreading. Como posso combiná-los em um único rastreamento?
Como MLflow Tracing depende do ContextVar Python , cada thread tem seu próprio contexto de rastreamento por default, mas é possível gerar um único rastreamento para aplicativos multithread com algumas etapas adicionais. Consulte a seção Multi-threading para obter mais informações.
P: Como faço para desativar temporariamente o rastreamento?
Para desativar o rastreamento, mlflow.tracing.disable API a coleta de dados de rastreamento será interrompida no site MLflow e nenhum dado será enviado ao serviço de rastreamento log
para o site MLflow.
Para habilitar o rastreamento (caso tenha sido temporariamente desativado), mlflow.tracing.enable a API reativará a funcionalidade de rastreamento para modelos instrumentados
que forem invocados.
P: Meus resultados de pesquisa de rastreamento são muito grandes para mlflow.search_traces(). Como faço para pesquisar rastros em grande escala?
A API MLflow fornece paginação através do método MlflowClient.search_traces() . No entanto, para casos de uso que não exigem paginação, mlflow.search_traces() é recomendado, pois oferece mais funcionalidades e um padrão conveniente.
Para análise de rastreamento em larga escala em produção, geralmente é melhor usar o monitoramento de produção para registrar rastreamentos em tabelas Delta no Unity Catalog. Consulte Visão geral do rastreamento para obter orientações sobre rastreamento de produção.
P: Posso ativar ou desativar o rastreamento sem modificar meu código?
Sim. Defina a variável de ambiente MLFLOW_TRACING_ENABLED:
# Disable tracing
export MLFLOW_TRACING_ENABLED=false
# Enable tracing (if previously disabled)
export MLFLOW_TRACING_ENABLED=true
Isso permite ativar ou desativar o rastreamento em Runtime sem alterações de código, o que é útil para testes ou para desativar seletivamente o rastreamento em determinados ambientes.
P: O MLflow Tracing funciona com código assíncrono e await?
Sim. O decorador @mlflow.trace funciona perfeitamente com funções assíncronas:
import mlflow
@mlflow.trace
async def my_async_function(query: str):
result = await some_async_operation(query)
return result
# Call it
await my_async_function("hello")
Q: Can I view traces directly in Jupyter notebooks?
Yes. In MLflow 2.20 and later, the trace UI automatically renders within Jupyter notebooks when:
- Seu código gera rastreios (por meio de log automático ou
@mlflow.trace). - Você chama
mlflow.search_traces()para exibir os rastreamentos como um DataFrame.
A interface do usuário do notebook mostra os mesmos detalhes de rastreamento e ferramentas de exploração que a interface do usuário do workspace do Databricks.
Q: Is MLflow Tracing compatible with other observability tools?
Sim. O MLflow Tracing é criado com base nos padrões do OpenTelemetry (OTel), portanto, é agnóstico em relação ao fornecedor. Você pode exportar rastreamentos para outros sistemas de observabilidade (por exemplo, Jaeger, Datadog, New Relic) por meio da exportação do OTLP (Protocolo OpenTelemetry). Consulte Exportação do OTel para obter detalhes de configuração.
Q: Qual é o tamanho máximo de um rastreamento?
Os rastreamentos podem ser grandes; o impacto na latência depende do tamanho. O MLflow recomenda testar sua aplicação para entender o impacto:
Tamanho do traço por solicitação | Impacto na latência |
|---|---|
~10 KB | ~1 ms |
~1 MB | 50–100 ms |
~10 MB | 150+ ms |
Para otimizar o tamanho dos rastreamentos em produção, use processadores de spans personalizados para filtrar ou mascarar dados confidenciais antes da exportação.
P: Por que meus rastreamentos são divididos em vários rastreamentos ao usar multithreading?
Na tab Traces , você verá o trabalho aparecer como vários rastreamentos separados em vez de apenas um, porque cada thread obtém seu próprio contexto de rastreamento. Para manter tudo em um único rastreamento, propague o contexto para suas worker threads:
import contextvars
from concurrent.futures import ThreadPoolExecutor
import mlflow
@mlflow.trace
def main_task():
ctx = contextvars.copy_context()
with ThreadPoolExecutor() as executor:
# Pass the copied context to worker threads
executor.submit(ctx.run, worker_task)
def worker_task():
# This runs in the copied context, preserving the trace
print("I'm in the same trace as the parent")
main_task()
Alternativamente, use mlflow.tracing.set_destination() com context_local=False para registrar todos os intervalos do seu aplicativo em um único experimento e rastreamento.