Implantar um fluxo no endpoint online para inferência em tempo real com a CLI

Aviso

O desenvolvimento de funcionalidades do Prompt Flow terminou em 20 de abril de 2026. O recurso será totalmente desativado em 20 de abril de 2027. Na data de desativação, o Fluxo de Prompt entra no modo somente leitura. Seus fluxos existentes continuarão a operar até essa data.

Ação recomendada: Migre suas cargas de trabalho de Fluxo de Prompt para Microsoft Agent Framework antes de 20 de abril de 2027.

Neste artigo, você aprenderá a implantar seu fluxo em um ponto de extremidade online gerenciado ou um ponto de extremidade online Kubernetes para uso em inferência em tempo real com Azure Machine Learning CLI v2.

Antes de começar, verifique se você testou seu fluxo corretamente e tenha certeza de que ele está pronto para ser implantado na produção. Para saber mais sobre como testar seu fluxo, confira testar seu fluxo. Depois de testar seu fluxo, você aprenderá a criar pontos de extremidade e implantações online gerenciados, além de como usar o ponto de extremidade para inferência em tempo real.

  • Este artigo aborda como usar a experiência da CLI.
  • O SDK do Python não é abordado neste artigo. Consulte o bloco de anotações de exemplo GitHub em vez disso. Para usar o SDK do Python, você deve ter o SDK do Python v2 para Azure Machine Learning. Para saber mais, consulte Instale o SDK do Python v2 para Azure Machine Learning.

Importante

Itens marcados (versão prévia) neste artigo estão atualmente em versão prévia pública. A 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 ter recursos restritos. Para obter mais informações, consulte Supplemental Terms of Use for Microsoft Azure Previews.

Pré-requisitos

  • O CLI do Azure e a extensão Azure Machine Learning para o CLI do Azure. Para obter mais informações, consulte Instalar, configurar e usar a CLI (v2).
  • Um espaço de trabalho do Azure Machine Learning. Se você não tiver um, use as etapas no artigo Início Rápido: Criar recursos do workspace para criar um.
  • Os controles de acesso baseado em função do Azure (Azure RBAC) são usados para conceder acesso a operações no Azure Machine Learning. Para executar as etapas neste artigo, sua conta de usuário deve receber a função de proprietário ou colaborador no workspace do Azure Machine Learning ou uma função personalizada que permita "Microsoft.MachineLearningServices/workspaces/onlineEndpoints/". Se você usar o Studio para criar/gerenciar pontos de extremidade/implantações online, precisará de outra permissão "Microsoft.Resources/implantações/gravação" do proprietário do grupo de recursos. Para obter mais informações, consulte Gerenciar o acesso a um workspace do Azure Machine Learning.

Nota

O endpoint online gerenciado oferece suporte exclusivamente para rede virtual gerenciada. Se o espaço de trabalho estiver em uma rede virtual personalizada, você poderá implantar em um ponto de extremidade online do Kubernetes; ou implantar em outras plataformas, como Docker.

Alocação de cota de máquina virtual para implantação

Para endpoints online gerenciados, o Azure Machine Learning reserva 20% de seus recursos computacionais para executar atualizações. Portanto, se você solicitar um determinado número de instâncias em uma implantação, deverá ter uma cota disponível para ceil(1.2 * number of instances requested for deployment) * number of cores for the VM SKU evitar receber um erro. Por exemplo, se você solicitar 10 instâncias de uma VM Standard_DS3_v2 (que vem com quatro núcleos) em uma implantação, deverá ter uma cota para 48 núcleos (12 instâncias quatro núcleos) disponíveis. Para visualizar seu uso e solicitar aumentos de cota, consulte Visualizar seu uso e quotas no portal do Azure.

Preparar o fluxo para implantação

Cada fluxo tem uma pasta que contém códigos/prompts, definição e outros artefatos do fluxo. Se você desenvolveu seu fluxo com a UI, poderá baixar a pasta do fluxo na página de detalhes. Se você desenvolveu seu fluxo com a CLI ou o SDK, você já deve ter a pasta de fluxo.

Este artigo usa o fluxo de exemplo "basic-chat" como um exemplo para implantar no ponto de extremidade online gerenciado do Azure Machine Learning.

Importante

Se você tiver usado additional_includes em seu fluxo, precisará usar pf flow build --source <path-to-flow> --output <output-path> --format docker primeiro para obter uma versão resolvida da pasta de fluxo.

Definir workspace padrão

Use os comandos a seguir para definir o workspace e o grupo de recursos padrão para a CLI.

az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>

Registrar o fluxo como um modelo (opcional)

Na implantação online, você pode consultar um modelo registrado ou especificar o caminho do modelo (de onde carregar os arquivos do modelo) diretamente. É recomendável registrar o modelo e especificar o nome do modelo e a versão na definição de implantação. Use o formulário model:<model_name>:<version>.

Veja a seguir um exemplo de definição de modelo para um fluxo de chat.

Nota

Se o fluxo não for um fluxo de chat, você não precisará adicionar este properties.

$schema: https://azuremlschemas.azureedge.net/latest/model.schema.json
name: basic-chat-model
path: ../../../../examples/flows/chat/basic-chat
description: register basic chat flow folder as a custom model
properties:
  # In AuzreML studio UI, endpoint detail UI Test tab needs this property to know it's from prompt flow
  azureml.promptflow.source_flow_id: basic-chat
  
  # Following are properties only for chat flow 
  # endpoint detail UI Test tab needs this property to know it's a chat flow
  azureml.promptflow.mode: chat
  # endpoint detail UI Test tab needs this property to know which is the input column for chat flow
  azureml.promptflow.chat_input: question
  # endpoint detail UI Test tab needs this property to know which is the output column for chat flow
  azureml.promptflow.chat_output: answer

Use az ml model create --file model.yaml para registrar o modelo no espaço de trabalho.

Definir o ponto de extremidade

Para definir um ponto de extremidade, você precisa especificar:

  • Nome do endpoint: o nome do endpoint. Ele deve ser exclusivo na região Azure. Para obter mais informações sobre as regras de nomenclatura, consulte os limites de ponto de extremidade.
  • Método de autenticação: o método de autenticação para o endpoint. Escolha entre a autenticação baseada em chave e Azure Machine Learning autenticação baseada em token. Uma chave não expira, mas um token expira. Para obter mais informações sobre autenticação, consulte Autenticar em um ponto de extremidade online. Opcionalmente, você pode adicionar uma descrição e tags ao endpoint.
  • Opcionalmente, você pode adicionar uma descrição e tags ao endpoint.
  • Se você quiser implantar em um cluster do Kubernetes (cluster habilitado para AKS ou Arc) que está sendo anexado ao seu workspace, você pode implantar o fluxo para ser um endpoint online do Kubernetes.

Veja a seguir um exemplo de definição de ponto de extremidade que, por padrão, usa a identidade atribuída pelo sistema.

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: basic-chat-endpoint
auth_mode: key
properties:
# this property only works for system-assigned identity.
# if the deploy user has access to connection secrets, 
# the endpoint system-assigned identity will be auto-assigned connection secrets reader role as well
  enforce_access_to_default_secret_stores: enabled
Chave Descrição
$schema (Opcional) O esquema YAML. Para ver todas as opções disponíveis no arquivo YAML, você pode exibir o esquema no snippet de código anterior em um navegador.
name O nome do ponto de extremidade.
auth_mode Use key para autenticação baseada em chave. Use aml_token para autenticação baseada em token do Azure Machine Learning. Para obter o token mais recente, use o az ml online-endpoint get-credentials comando.
property: enforce_access_to_default_secret_stores (versão prévia) - Por padrão, o ponto de extremidade usa a identidade atribuída pelo sistema. Essa propriedade funciona apenas para a identidade atribuída pelo sistema.
- Essa propriedade significa que, se você tiver a permissão de leitor de segredos de conexão, a identidade atribuída pelo sistema ao ponto de extremidade será automaticamente atribuído à função Leitor de Segredos de Conexão do Workspace do Azure Machine Learning, de modo que o ponto de extremidade possa acessar conexões corretamente ao realizar inferências.
- Por padrão, essa propriedade está 'desabilitada'.

Se você criar um ponto de extremidade online do Kubernetes, precisará especificar os seguintes atributos:

Chave Descrição
compute O destino de computação do Kubernetes para o qual implantar o ponto de extremidade.

Para obter mais configurações do ponto de extremidade, consulte o esquema de ponto de extremidade online gerenciado.

Importante

Se o fluxo usar conexões de autenticação baseadas no Microsoft Entra ID, independentemente de você usar a identidade atribuída pelo sistema ou a identidade atribuída pelo usuário, você sempre precisará conceder à identidade gerenciada as funções apropriadas dos recursos correspondentes para que ela possa fazer chamadas à API para esse recurso. Por exemplo, se a conexão Azure OpenAI usar autenticação baseada em Microsoft Entra ID, você precisará conceder identidade gerenciada atribuída ao ponto de extremidade Usuário dos Serviços Cognitivos OpenAI ou função Colaborador dos Serviços Cognitivos OpenAI dos recursos do OpenAI de Azure correspondentes.

Usar a identidade atribuída pelo usuário

Por padrão, quando você cria um ponto de extremidade online, uma identidade gerenciada atribuída pelo sistema é gerada automaticamente para você. Você também pode especificar uma identidade gerenciada já existente atribuída pelo usuário para o ponto de extremidade.

Se você quiser usar a identidade atribuída pelo usuário, poderá especificar os seguintes atributos no endpoint.yaml:

identity:
  type: user_assigned
  user_assigned_identities:
    - resource_id: user_identity_ARM_id_place_holder

Além disso, você também precisa especificar a Client ID da identidade atribuída pelo usuário sob environment_variables o deployment.yaml como segue. Você pode encontrar o Client ID no Overview da identidade gerenciada no portal Azure.

environment_variables:
  AZURE_CLIENT_ID: <client_id_of_your_user_assigned_identity>

Importante

Você precisa conceder as seguintes permissões à identidade atribuída pelo usuário antes de criar o endpoint para que possa acessar os recursos do Azure para executar a inferência. Saiba mais sobre como conceder permissões à sua identidade de endpoint.

Scope Papel Por que é necessário
Espaço de Trabalho do Azure Machine Learning Azure Machine Learning Leitor de Segredos de Conexão do Workspace função OU uma função personalizada com "Microsoft.MachineLearningServices/workspaces/connections/listsecrets/action" Obter conexões da área de trabalho
Registro de conteiner do ambiente de trabalho Pull do ACR Baixar a imagem do contêiner
Armazenamento padrão do workspace Leitor de Dados do Blob de Armazenamento Carregar modelo do armazenamento
(Opcional) Workspace do Azure Machine Learning Escritor de métricas do espaço de trabalho Depois de implantar o ponto de extremidade, se você quiser monitorar as métricas relacionadas ao ponto de extremidade, como utilização de CPU/GPU/Disco/Memória, será necessário conceder essa permissão à identidade.

Definir a implantação

Uma implantação é um conjunto de recursos necessários para hospedar o modelo que faz a inferência real.

Veja a seguir um exemplo de definição de implantação, no qual a model seção se refere ao modelo de fluxo registrado. Você também pode especificar o caminho do modelo de fluxo na linha.

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: blue
endpoint_name: basic-chat-endpoint
model: azureml:basic-chat-model:1
  # You can also specify model files path inline
  # path: examples/flows/chat/basic-chat
environment: 
  image: mcr.microsoft.com/azureml/promptflow/promptflow-runtime:latest
  # inference config is used to build a serving container for online deployments
  inference_config:
    liveness_route:
      path: /health
      port: 8080
    readiness_route:
      path: /health
      port: 8080
    scoring_route:
      path: /score
      port: 8080
instance_type: Standard_E16s_v3
instance_count: 1
environment_variables:
  # for pulling connections from workspace
  PRT_CONFIG_OVERRIDE: deployment.subscription_id=<subscription_id>,deployment.resource_group=<resource_group>,deployment.workspace_name=<workspace_name>,deployment.endpoint_name=<endpoint_name>,deployment.deployment_name=<deployment_name>

  # (Optional) When there are multiple fields in the response, using this env variable will filter the fields to expose in the response.
  # For example, if there are 2 flow outputs: "answer", "context", and I only want to have "answer" in the endpoint response, I can set this env variable to '["answer"]'.
  # If you don't set this environment, by default all flow outputs will be included in the endpoint response.
  # PROMPTFLOW_RESPONSE_INCLUDED_FIELDS: '["category", "evidence"]'
Atributo Descrição
Nome O nome da implantação.
Nome do ponto de extremidade O nome do ponto de extremidade no qual criar a implantação.
Modelo O modelo a ser usado para a implantação. Esse valor pode ser uma referência a um modelo versionado existente no workspace ou a uma especificação de modelo inline.
Ambiente O ambiente para hospedar o modelo e o código. Ele contém:
- image
- inference_config: é usado para criar um contêiner de serviço para implantações online, incluindo liveness route, readiness_routee scoring_route .
Tipo de instância O tamanho da VM a ser usado para a implantação. Para obter a lista de tamanhos com suporte, consulte a lista de SKUs de pontos finais online gerenciados.
Contagem de instâncias O número de instâncias a serem usadas para a implantação. Baseie o valor na carga de trabalho esperada. Para alta disponibilidade, recomendamos que você defina o valor como pelo menos 3. Reservamos mais 20% para executar atualizações. Para obter mais informações, consulte os limites para endpoints online.
Variáveis de ambiente As seguintes variáveis de ambiente devem ser definidas para pontos de extremidade implantados a partir de um fluxo:
- (obrigatório) PRT_CONFIG_OVERRIDE: para puxar conexões do workspace
- (opcional) PROMPTFLOW_RESPONSE_INCLUDED_FIELDS:: quando há vários campos na resposta, o uso dessa variável env filtra os campos a serem expostos na resposta.
Por exemplo, se houver duas saídas de fluxo: "resposta", "contexto" e se você quiser apenas ter "resposta" na resposta do endpoint, poderá definir essa variável de ambiente como '["resposta"]'.

Importante

Se a pasta de fluxo tiver um arquivo requirements.txt que contenha as dependências necessárias para executar o fluxo, você precisará seguir as etapas de implantação com um ambiente personalizado para construir o ambiente personalizado, incluindo as dependências.

Se você criar uma implantação online do Kubernetes, precisará especificar os seguintes atributos:

Atributo Descrição
Tipo O tipo da implantação. Defina o valor como kubernetes.
Tipo de instância O tipo de instância que você criou em seu cluster kubernetes a ser usado para a implantação, representa o recurso de computação de solicitação/limite da implantação. Para obter mais detalhes, consulte Criar e gerenciar o tipo de instância.

Implantar seu endpoint online no Azure

Para criar o ponto de extremidade na nuvem, execute o seguinte código:

az ml online-endpoint create --file endpoint.yml

Para criar a implantação com o nome blue no endpoint, execute o seguinte código:

az ml online-deployment create --file blue-deployment.yml --all-traffic

Nota

Essa implantação pode levar mais de 15 minutos.

Dica

Se preferir não bloquear o console da CLI, você poderá adicionar o sinalizador --no-wait ao comando. No entanto, isso interrompe a exibição interativa do status da implantação.

Importante

O --all-traffic sinalizador anterior az ml online-deployment create aloca 100% do tráfego do ponto de extremidade para a implantação azul recém-criada. Embora isso seja útil para fins de desenvolvimento e teste, para produção, talvez você queira abrir o tráfego para a nova implantação por meio de um comando explícito. Por exemplo, az ml online-endpoint update -n $ENDPOINT_NAME --traffic "blue=100".

Verificar o status do endpoint e da implantação

Para verificar o status do endpoint, execute o seguinte código:

az ml online-endpoint show -n basic-chat-endpoint

Para verificar o status da implantação, execute o seguinte código:

az ml online-deployment get-logs --name blue --endpoint basic-chat-endpoint

Invocar o endpoint para pontuar os dados usando seu modelo

Você pode criar um arquivo de sample-request.json como este:

{
  "question": "What is Azure Machine Learning?",
  "chat_history":  []
}
az ml online-endpoint invoke --name basic-chat-endpoint --request-file sample-request.json

Você também pode chamá-lo com um cliente HTTP, por exemplo, com curl:

ENDPOINT_KEY=<your-endpoint-key>
ENDPOINT_URI=<your-endpoint-uri>

curl --request POST "$ENDPOINT_URI" --header "Authorization: Bearer $ENDPOINT_KEY" --header 'Content-Type: application/json' --data '{"question": "What is Azure Machine Learning?", "chat_history":  []}'

Você pode obter sua chave de ponto de extremidade e o URI do ponto de extremidade no workspace do Azure Machine Learning em Endpoints>Consumo>Informações básicas de consumo.

Configurações avançadas

Implantar usando conexões diferentes das utilizadas no desenvolvimento do fluxo

Talvez você queira substituir as conexões do fluxo durante a implantação.

Por exemplo, se o arquivo flow.dag.yaml usar uma conexão nomeada my_connection, você poderá substituí-la adicionando variáveis de ambiente do yaml de implantação da seguinte maneira:

Opção 1: substituir o nome da conexão

environment_variables:
  my_connection: <override_connection_name>

Se você quiser substituir um campo específico da conexão, poderá fazê-lo adicionando variáveis de ambiente com o padrão de nomenclatura <connection_name>_<field_name>. Por exemplo, se o fluxo usar uma conexão nomeada my_connection com uma chave de configuração chamada chat_deployment_name, o back-end de atendimento tentará, por padrão, recuperar chat_deployment_name da variável de ambiente 'MY_CONNECTION_CHAT_DEPLOYMENT_NAME'. Se a variável de ambiente não estiver definida, ela usará o valor original da definição de fluxo.

Opção 2: substituir referindo-se ao ativo

environment_variables:
  my_connection: ${{azureml://connections/<override_connection_name>}}

Nota

Você só pode referenciar uma conexão na mesma área de trabalho.

Implantar com um ambiente personalizado

Esta seção mostra como usar um contexto de build do Docker para especificar o ambiente para sua implantação, supondo que você tenha conhecimento de ambientes Docker e Azure Machine Learning.

  1. Em seu ambiente local, crie uma pasta nomeada image_build_with_reqirements que contenha os seguintes arquivos:

    |--image_build_with_reqirements
    |  |--requirements.txt
    |  |--Dockerfile
    
    • O requirements.txt deve ser herdado da pasta de fluxo, que foi usada para acompanhar as dependências do fluxo.

    • O Dockerfile conteúdo é semelhante ao seguinte texto:

      FROM mcr.microsoft.com/azureml/promptflow/promptflow-runtime:latest
      COPY ./requirements.txt .
      RUN pip install -r requirements.txt
      
  2. substitua a seção de ambiente no arquivo yaml de definição de implantação pelo seguinte conteúdo:

    environment: 
      build:
        path: image_build_with_reqirements
        dockerfile_path: Dockerfile
      # deploy prompt flow is BYOC, so we need to specify the inference config
      inference_config:
        liveness_route:
          path: /health
          port: 8080
        readiness_route:
          path: /health
          port: 8080
        scoring_route:
          path: /score
          port: 8080
    

Usar o mecanismo de serviço FastAPI (versão prévia)

Por padrão, o serviço de fluxo de prompt usa o mecanismo de serviço FLASK. A partir do SDK de fluxo de prompt versão 1.10.0, há suporte ao motor de atendimento baseado no FastAPI. Você pode usar o fastapi motor de serviço especificando uma variável de ambiente PROMPTFLOW_SERVING_ENGINE.

environment_variables:
  PROMPTFLOW_SERVING_ENGINE=fastapi

Configurar simultaneidade para implantação

Quando você implanta seu fluxo no ambiente online, há duas variáveis de ambiente que você configura para simultaneidade: PROMPTFLOW_WORKER_NUM e PROMPTFLOW_WORKER_THREADS. Além disso, você também precisará definir o max_concurrent_requests_per_instance parâmetro.

Veja abaixo um exemplo de como configurar no deployment.yaml arquivo.

request_settings:
  max_concurrent_requests_per_instance: 10
environment_variables:
  PROMPTFLOW_WORKER_NUM: 4
  PROMPTFLOW_WORKER_THREADS: 1
  • PROMPTFLOW_WORKER_NUM: esse parâmetro determina o número de trabalhos (processos) que serão iniciados em um contêiner. O valor padrão é igual ao número de núcleos de CPU e o valor máximo é o dobro do número de núcleos de CPU.

  • PROMPTFLOW_WORKER_THREADS: esse parâmetro determina o número de threads que serão iniciados em um worker. O valor padrão é 1.

    Nota

    Ao definir PROMPTFLOW_WORKER_THREADS para um valor maior que 1, verifique se o código de fluxo é thread-safe.

  • max_concurrent_requests_per_instance: o número máximo de solicitações simultâneas por instância permitidas para a implantação. O valor padrão é 10.

    O valor max_concurrent_requests_per_instance sugerido depende do tempo de solicitação:

    • Se o tempo de solicitação for maior que 200 ms, defina max_concurrent_requests_per_instance como PROMPTFLOW_WORKER_NUM * PROMPTFLOW_WORKER_THREADS.
    • Se o tempo de solicitação for menor ou igual a 200 ms, defina max_concurrent_requests_per_instance como (1.5-2) * PROMPTFLOW_WORKER_NUM * PROMPTFLOW_WORKER_THREADS. Isso pode melhorar a taxa de transferência total permitindo que algumas solicitações sejam enfileiradas no lado do servidor.
    • Se você estiver enviando solicitações entre regiões, poderá alterar o limite de 200 ms para 1 s.

Ao ajustar os parâmetros acima, você precisa monitorar as seguintes métricas para garantir o desempenho e a estabilidade ideais:

  • Utilização de CPU/Memória da instância nesta implantação
  • Respostas HTTP diferentes de 200 (4xx, 5xx)
    • Se você receber uma resposta 429, isso normalmente indica que você precisa reajustar suas configurações de simultaneidade seguindo o guia acima ou dimensionar sua implantação.
  • Status de limitação do Azure OpenAI

Monitorar pontos de extremidade

Coletar métricas gerais

Você pode exibir métricas gerais de implantação online (números de solicitação, latência de solicitação, bytes de rede, utilização de CPU/GPU/Disco/Memória e muito mais).

Coletar dados de rastreamento e métricas do sistema durante o tempo de inferência

Você também pode coletar dados de rastreamento e métricas específicas de implantação de fluxo de prompt (consumo de token, latência de fluxo etc.) durante o tempo de inferência para o Application Insights vinculado ao workspace adicionando uma propriedade app_insights_enabled: true no arquivo yaml de implantação. Saiba mais sobre métricas e rastreamento na implantação de fluxo de comandos.

As métricas e o rastreamento específicos do fluxo de prompt podem ser especificados em outros Application Insights além do espaço de trabalho vinculado. Você pode especificar uma variável de ambiente no arquivo yaml de implantação como a seguir. Você pode encontrar a cadeia de conexão do Application Insights na página de Visão geral no portal do Azure.

environment_variables:
  APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string>

Nota

Se você definir apenas app_insights_enabled: true, mas seu workspace não tiver um Application Insights vinculado, sua implantação não falhará, porém nenhum dado será coletado. Se você especificar tanto app_insights_enabled: true quanto a variável de ambiente acima ao mesmo tempo, os dados de rastreamento e as métricas serão enviados para o Application Insights vinculado ao workspace. Portanto, se você quiser especificar um Application Insights diferente, só precisará manter a variável de ambiente.

Erros comuns

Problema de tempo limite da solicitação upstream no consumo do endpoint

Esse erro geralmente é causado por timeout. Por padrão, o request_timeout_ms valor é 5000. Você pode especificar no máximo 5 minutos, que é 300.000 ms. Veja a seguir um exemplo mostrando como especificar o tempo limite da solicitação no arquivo yaml de implantação. Saiba mais sobre o esquema de implantação aqui.

request_settings:
  request_timeout_ms: 300000

Importante

O tempo limite de 300.000 ms só funciona em implantações online gerenciadas do prompt flow. O máximo para um endpoint online gerenciado de fluxo não interativo é de 180 segundos.

Você precisa ter certeza de que adicionou propriedades ao seu modelo da seguinte maneira: especificação de modelo embutido no yaml de implantação ou especificação de modelo autônomo no yaml, para indicar que esta é uma implantação do fluxo de prompt.

properties:
  # indicate a deployment from prompt flow
  azureml.promptflow.source_flow_id: <value>

Próximas etapas