Compartir vía


Inicio, supervisión y seguimiento del historial de ejecución

SE APLICA A: SDK de Python azureml v1

SE APLICA A: Extensión de ML de la CLI de Azure v1

El SDK de Azure Machine Learning para Python v1 y la CLI de Machine Learning proporcionan varios métodos para supervisar, organizar y hacer el seguimiento de las ejecuciones de entrenamiento y experimentación. El historial de ejecución de ML es una parte importante de un proceso de desarrollo de ML que se pueda explicar y repetir.

Sugerencia

Para información sobre el uso de Studio, consulte Seguimiento, supervisión y análisis de ejecuciones con Studio.

Si usa el SDK v2 de Azure Machine Learning, consulte los siguientes artículos:

En este artículo se muestra cómo realizar las tareas siguientes:

  • Supervisión del rendimiento de la ejecución.
  • Etiquetado y búsqueda de ejecuciones.
  • Ejecución de búsquedas en el historial de ejecución.
  • Cancelación o ejecuciones erróneas.
  • Creación de ejecuciones secundarias.
  • Supervisión del estado de la ejecución mediante notificaciones por correo electrónico.

Sugerencia

Si busca información sobre cómo supervisar Azure Machine Learning Service y los servicios de Azure asociados, consulte Supervisión de Azure Machine Learning. Si busca información sobre la supervisión de los modelos implementados como servicios web, consulte Recopilación de datos de modelos y Supervisión con Application Insights.

Prerrequisitos

Necesitará los siguientes elementos:

Supervisión del rendimiento de la ejecución

  • Inicio de una ejecución y su proceso de registro

    SE APLICA A: Azure ML del SDK de Python v1

    1. Para configurar el experimento, importe las clases Workspace, Experiment, Run y ScriptRunConfig del paquete azureml.core.

      import azureml.core
      from azureml.core import Workspace, Experiment, Run
      from azureml.core import ScriptRunConfig
      
      ws = Workspace.from_config()
      exp = Experiment(workspace=ws, name="explore-runs")
      
    2. Inicie una ejecución y su proceso de registro con el método start_logging().

      notebook_run = exp.start_logging()
      notebook_run.log(name="message", value="Hello from run!")
      
  • Supervisión del estado de una ejecución

    SE APLICA A: Azure ML del SDK de Python v1

    • Obtenga el estado de una ejecución con el método get_status().

      print(notebook_run.get_status())
      
    • Para obtener el identificador de ejecución, la hora de ejecución y otros detalles sobre esta, use el método get_details().

      print(notebook_run.get_details())
      
    • Cuando la ejecución finalice correctamente, use el método complete() para marcarla como completada.

      notebook_run.complete()
      print(notebook_run.get_status())
      
    • Si usa el modelo de diseño with...as de Python, la ejecución se marcará automáticamente como completada cuando esta quede fuera del ámbito. No tiene que marcar la ejecución como completada de forma manual.

      with exp.start_logging() as notebook_run:
          notebook_run.log(name="message", value="Hello from run!")
          print(notebook_run.get_status())
      
      print(notebook_run.get_status())
      

Etiquetado y búsqueda de ejecuciones

En Azure Machine Learning, puede usar etiquetas y propiedades para ayudar a organizar y consultar las ejecuciones a fin de obtener información importante.

  • Adición de etiquetas y propiedades

    SE APLICA A: Azure ML del SDK de Python v1

    Para agregar metadatos de búsqueda a las ejecuciones, use el método add_properties(). Por ejemplo, el código siguiente agrega la propiedad "author" a la ejecución:

    local_run.add_properties({"author":"azureml-user"})
    print(local_run.get_properties())
    

    Las propiedades son inmutables, por lo que crean un registro permanente con fines de auditoría. El siguiente ejemplo de código da como resultado un error porque ya hemos agregado "azureml-user" como el valor de propiedad "author" en el código anterior:

    try:
        local_run.add_properties({"author":"different-user"})
    except Exception as e:
        print(e)
    

    A diferencia de las propiedades, las etiquetas son mutables. Para agregar información que permite realizar búsquedas y que es significativa para los consumidores del experimento, use el método tag().

    local_run.tag("quality", "great run")
    print(local_run.get_tags())
    
    local_run.tag("quality", "fantastic run")
    print(local_run.get_tags())
    

    También puede agregar etiquetas de cadena simples. Cuando estas etiquetas aparecen en el diccionario de etiquetas como claves, tienen un valor de None.

    local_run.tag("worth another look")
    print(local_run.get_tags())
    
  • Consulta de etiquetas y propiedades

    Puede consultar las ejecuciones de un experimento para devolver una lista de ejecuciones que coinciden con etiquetas y propiedades específicas.

    SE APLICA A: SDK de Python azureml v1

    list(exp.get_runs(properties={"author":"azureml-user"},tags={"quality":"fantastic run"}))
    list(exp.get_runs(properties={"author":"azureml-user"},tags="worth another look"))
    

Cancelación o ejecuciones erróneas

Si detecta un error o si la ejecución tarda demasiado en finalizar, puede cancelarla.

SE APLICA A: Azure ML del SDK de Python v1

Para cancelar una ejecución mediante el SDK, use el método cancel():

src = ScriptRunConfig(source_directory='.', script='hello_with_delay.py')
local_run = exp.submit(src)
print(local_run.get_status())

local_run.cancel()
print(local_run.get_status())

Si la ejecución finaliza, pero contiene un error (por ejemplo, se ha usado el script de entrenamiento incorrecto), puede usar el método fail() para marcarla como errónea.

local_run = exp.submit(src)
local_run.fail()
print(local_run.get_status())

Creación de ejecuciones secundarias

SE APLICA A: Azure ML del SDK de Python v1

Cree ejecuciones secundarias para agrupar ejecuciones relacionadas (por ejemplo, para diferentes iteraciones de ajuste de hiperparámetros).

Nota

Las ejecuciones secundarias solo se pueden crear mediante el SDK.

En este ejemplo de código se usa el script hello_with_children.py para crear un lote de cinco ejecuciones secundarias desde una ejecución enviada mediante el método child_run():

!more hello_with_children.py
src = ScriptRunConfig(source_directory='.', script='hello_with_children.py')

local_run = exp.submit(src)
local_run.wait_for_completion(show_output=True)
print(local_run.get_status())

with exp.start_logging() as parent_run:
    for c,count in enumerate(range(5)):
        with parent_run.child_run() as child:
            child.log(name="Hello from child run", value=c)

Nota

A medida que quedan fuera del ámbito, las ejecuciones secundarias se marcan automáticamente como completadas.

Para crear muchas ejecuciones secundarias de forma eficaz, use el método create_children(). Dado que cada creación da lugar a una llamada de red, la creación de un lote de ejecuciones es más eficaz que hacerlo una a una.

Envío de ejecuciones secundarias

Las ejecuciones secundarias también se pueden enviar desde una ejecución principal. Esto le permite crear jerarquías de ejecuciones primarias y secundarias. No se puede crear una ejecución secundaria sin primaria: aunque la ejecución primaria no haga más que iniciar ejecuciones secundarias, sigue siendo necesaria para crear la jerarquía. Los estados de todas las ejecuciones son independientes: una ejecución primaria puede tener el estado "Completed" correcto aunque una o varias ejecuciones secundarias se hayan cancelado o hayan dado error.

Es posible que desee que las ejecuciones secundarias utilicen una configuración de ejecución diferente de la ejecución primaria. Por ejemplo, puede utilizar una configuración menos potente basada en CPU para el elemento primario, mientras usa configuraciones basadas en GPU para los elementos secundarios. Otro deseo habitual es pasar a cada ejecución secundaria argumentos y datos distintos. Para personalizar una ejecución secundaria, cree un objeto de ScriptRunConfig para la ejecución secundaria.

Importante

Para enviar una ejecución secundaria desde una ejecución primaria en un proceso remoto, primero debe iniciar sesión en el área de trabajo, en el código de ejecución principal. De forma predeterminada, el objeto de contexto de una ejecución remota no tiene credenciales para enviar ejecuciones secundarias. Use credenciales de identidad administrada o una entidad de servicio para iniciar sesión. Para obtener más información sobre la autenticación, consulte el documento sobre la configuración de la autenticación.

El código siguiente:

  • Recupera un recurso de proceso denominado "gpu-cluster" del área de trabajo ws
  • Recorre en iteración los diferentes valores de los argumentos que se van a pasar a los objetos ScriptRunConfig secundarios
  • Crea y envía una nueva ejecución secundaria mediante el recurso de proceso personalizado y el argumento
  • Se bloquea hasta que se completan todas las ejecuciones secundarias
# parent.py
# This script controls the launching of child scripts
from azureml.core import Run, ScriptRunConfig

compute_target = ws.compute_targets["gpu-cluster"]

run = Run.get_context()

child_args = ['Apple', 'Banana', 'Orange']
for arg in child_args: 
    run.log('Status', f'Launching {arg}')
    child_config = ScriptRunConfig(source_directory=".", script='child.py', arguments=['--fruit', arg], compute_target=compute_target)
    # Starts the run asynchronously
    run.submit_child(child_config)

# Experiment will "complete" successfully at this point. 
# Instead of returning immediately, block until child runs complete

for child in run.get_children():
    child.wait_for_completion()

Para crear muchas ejecuciones secundarias con configuraciones, argumentos y entradas idénticas de forma eficaz, use el método create_children(). Dado que cada creación da lugar a una llamada de red, la creación de un lote de ejecuciones es más eficaz que hacerlo una a una.

Desde la ejecución secundaria, puede ver el identificador de la ejecución principal:

## In child run script
child_run = Run.get_context()
child_run.parent.id

Consulta de ejecuciones secundarias

Para consultar las ejecuciones secundarias de un elemento primario específico, use el método get_children(). El argumento recursive = True permite consultar un árbol anidado de elementos secundarios y descendientes.

print(parent_run.get_children())

Registro en la ejecución primaria o raíz

Puede usar el campo Run.parent para acceder a la ejecución que inició la ejecución secundaria actual. Un caso de uso habitual de Run.parent es combinar resultados de registro en una única ubicación. Las ejecuciones secundarias se ejecutan de forma asincrónica y no hay ninguna garantía de ordenación o sincronización más allá de la capacidad del elemento primario de esperar a que se completen sus ejecuciones secundarias.

# in child (or even grandchild) run

def root_run(self : Run) -> Run :
    if self.parent is None : 
        return self
    return root_run(self.parent)

current_child_run = Run.get_context()
root_run(current_child_run).log("MyMetric", f"Data from child run {current_child_run.id}")

Supervisión del estado de la ejecución mediante notificaciones por correo electrónico

  1. En la barra de navegación de la izquierda de Azure Portal, seleccione la pestaña Supervisar.

  2. Seleccione Configuración de diagnóstico y, luego, seleccione + Agregar configuración de diagnóstico.

    Captura de pantalla de la configuración de diagnóstico para la notificación por correo electrónico.

  3. En la Configuración de diagnóstico,

    1. en Detalles de categoría, seleccione AmlRunStatusChangedEvent.
    2. En Detalles de categoría, seleccione Enviar a área de trabajo de Log Analytics y especifique la suscripción y el área de trabajo de Log Analytics.

    Nota

    El área de trabajo de Azure Log Analytics es un tipo de recurso de Azure distinto del área de trabajo de Azure Machine Learning Service. Si no hay opciones en esa lista, puede crear un área de trabajo de Log Analytics.

    Captura de pantalla de la configuración de la notificación por correo electrónico.

  4. En la pestaña Registros, agregue una Nueva regla de alertas.

    Captura de pantalla de la regla de alerta nueva.

  5. Consulte cómo crear y administrar las alertas de registro mediante Azure Monitor.

Cuadernos de ejemplo

Los siguientes cuadernos muestran los conceptos de este artículo:

Pasos siguientes