Ejecuta tu código local como un trabajo SageMaker de formación - Amazon SageMaker

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Ejecuta tu código local como un trabajo SageMaker de formación

Puede ejecutar su código Python de aprendizaje automático (ML) local como un gran trabajo de SageMaker formación de Amazon de un solo nodo o como varios trabajos paralelos. Para ello, puede anotar el código con un decorador @remote, como se muestra en el siguiente ejemplo de código. Las funciones remotas no admiten el entrenamiento distribuido (en varias instancias).

@remote(**settings) def divide(x, y): return x / y

El SDK de SageMaker Python traducirá automáticamente tu entorno de espacio de trabajo existente y cualquier código de procesamiento de datos y conjuntos de datos asociados a un trabajo de SageMaker formación que se ejecuta en la plataforma de SageMaker formación. También puede activar una característica de caché persistente, que reducirá aún más la latencia de inicio de tareas al almacenar en caché los paquetes de dependencias descargados anteriormente. Esta reducción de la latencia de las tareas es mayor que la reducción de la latencia derivada del uso exclusivo de piscinas de agua caliente SageMaker gestionadas. Para obtener más información, consulte Uso de caché persistente.

nota

Las funciones remotas no admiten trabajos de entrenamiento distribuidos.

En las siguientes secciones, se muestra cómo anotar el código de ML local con un decorador @remote y cómo adaptar la experiencia a cada caso de uso. Esto incluye la personalización del entorno y la integración con SageMaker los experimentos.

Configurar el entorno

Elija una de las siguientes tres opciones para configurar el entorno.

Puede anotar y ejecutar su código ML local desde SageMaker Studio Classic creando un SageMaker bloc de notas y adjuntando cualquier imagen disponible en SageMaker Studio Classic. Las siguientes instrucciones le ayudarán a crear un SageMaker bloc de notas, instalar el SDK de SageMaker Python y anotar el código con el decorador.

  1. Cree un SageMaker bloc de notas y adjunte una imagen en SageMaker Studio Classic de la siguiente manera:

    1. Siga las instrucciones de Launch Amazon SageMaker Studio Classic en la Guía para SageMaker desarrolladores de Amazon.

    2. Seleccione Studio en el panel de navegación izquierdo. Se abre una nueva ventana.

    3. En el cuadro de diálogo Get Started (Comenzar), seleccione un perfil de usuario en la flecha hacia abajo. Se abre una nueva ventana.

    4. Selecciona Open Studio Classic.

    5. Seleccione Open Launcher (Abrir lanzador) en el área de trabajo principal. Se abre una nueva página.

    6. Seleccione Create notebook (Crear cuaderno) en el área de trabajo principal.

    7. Seleccione Base Python 3.0 en la flecha hacia abajo situada junto a Image (Imagen) en el cuadro de diálogo Change environment (Cambiar entorno).

      El decorador @remote detecta automáticamente la imagen adjunta al cuaderno SageMaker Studio Classic y la utiliza para ejecutar el trabajo de SageMaker formación. Si se especifica image_uri como argumento en el decorador o en el archivo de configuración, se utilizará el valor especificado en image_uri en lugar de la imagen detectada.

      Para obtener más información sobre cómo crear una libreta en SageMaker Studio Classic, consulte la sección Crear una libreta desde el menú Archivo en Crear o abrir una libreta de Amazon SageMaker Studio Classic.

      Para obtener una lista de las imágenes disponibles, consulte Imágenes de Docker compatibles.

  2. Instala el SDK de SageMaker Python.

    Para anotar el código con la función @remote en un cuaderno clásico de SageMaker Studio, debe tener instalado el SDK de SageMaker Python. Instale el SDK de SageMaker Python, como se muestra en el siguiente ejemplo de código.

    !pip install sagemaker
  3. Utilice el decorador @remote para ejecutar funciones en un trabajo de SageMaker formación.

    Para ejecutar tu código ML local, primero crea un archivo de dependencias para indicar SageMaker dónde ubicar tu código local. Para ello, siga estos pasos:

    1. En el área de trabajo principal de SageMaker Studio Classic Launcher, en Utilidades y archivos, elija Archivo de texto. Se abrirá una nueva pestaña con un archivo de texto llamado untitled.txt.

      Para obtener más información sobre la interfaz de usuario (UI) de SageMaker Studio Classic, consulte Descripción general de la interfaz de usuario de Amazon SageMaker Studio Classic.

    2. Cambie el nombre de untitled.txt a requirements.txt.

    3. Añada todas las dependencias necesarias para el código junto con la SageMaker biblioteca arequirements.txt.

      En la siguiente sección, se proporciona un ejemplo de requirements.txt para la función divide, de la siguiente manera.

      sagemaker
    4. Ejecute el código con el decorador remoto pasando el archivo de dependencias, de la siguiente manera.

      from sagemaker.remote_function import remote @remote(instance_type="ml.m5.xlarge", dependencies='./requirements.txt') def divide(x, y): return x / y divide(2, 3.0)

      Para ver ejemplos de código adicionales, consulte el cuaderno de ejemplo quick_start.ipynb.

      Si ya utilizas un bloc de notas SageMaker Studio Classic e instalas el SDK de Python tal y como se indica en el punto 2. Instale el SDK de SageMaker Python, debe reiniciar el núcleo. Para obtener más información, consulte Uso de la barra de herramientas SageMaker Studio Classic Notebook en la Guía para SageMaker desarrolladores de Amazon.

Puedes anotar tu código ML local desde una instancia de SageMaker bloc de notas. Las siguientes instrucciones muestran cómo crear una instancia de notebook con un núcleo personalizado, instalar el SDK de SageMaker Python y anotar el código con el decorador.

  1. Cree una instancia de cuaderno con un kernel conda personalizado.

    Puedes anotar tu código ML local con un decorador @remote para usarlo en un trabajo de formación. SageMaker En primer lugar, debe crear y personalizar una instancia de SageMaker bloc de notas para usar un núcleo con Python versión 3.7 o superior, hasta la 3.10.x. Para ello, siga estos pasos:

    1. Abre la SageMaker consola en https://console.aws.amazon.com/sagemaker/.

    2. En el panel de navegación izquierdo, elija Notebook (Cuaderno) para ampliar sus opciones.

    3. Seleccione Notebook Instances (Instancias de cuaderno) entre las opciones ampliadas.

    4. Elija el botón Create Notebook Instance (Crear instancia de cuaderno). Se abre una nueva página.

    5. Para Notebook instance name (Nombre de la instancia de cuaderno), introduzva un nombre con un máximo de 63 caracteres y sin espacios. Caracteres válidos: A-Z, a-z, 0-9 y .:+=@ _%- (guion).

    6. En el cuadro de diálogo de Notebook instance settings (Configuración de instancias de cuaderno), expanda la flecha derecha situada junto a Additional Configuration (Configuración adicional).

    7. En Lifecycle configuration - optional (Configuración del ciclo de vida (opcional)), expanda la flecha hacia abajo y seleccione Create a new lifecycle configuration (Crear una nueva configuración del ciclo de vida). Se abrirá un nuevo cuadro de diálogo.

    8. En Name (Nombre), escriba un nombre para la configuración.

    9. En el cuadro de diálogo Scripts, en la pestaña Start notebook (Iniciar cuaderno), sustituya el contenido existente del cuadro de texto por el siguiente script.

      #!/bin/bash set -e sudo -u ec2-user -i <<'EOF' unset SUDO_UID WORKING_DIR=/home/ec2-user/SageMaker/custom-miniconda/ source "$WORKING_DIR/miniconda/bin/activate" for env in $WORKING_DIR/miniconda/envs/*; do BASENAME=$(basename "$env") source activate "$BASENAME" python -m ipykernel install --user --name "$BASENAME" --display-name "Custom ($BASENAME)" done EOF echo "Restarting the Jupyter server.." # restart command is dependent on current running Amazon Linux and JupyterLab CURR_VERSION_AL=$(cat /etc/system-release) CURR_VERSION_JS=$(jupyter --version) if [[ $CURR_VERSION_JS == *$"jupyter_core : 4.9.1"* ]] && [[ $CURR_VERSION_AL == *$" release 2018"* ]]; then sudo initctl restart jupyter-server --no-wait else sudo systemctl --no-block restart jupyter-server.service fi
    10. En el cuadro de diálogo Scripts, en la pestaña Create notebook (Crear cuaderno), sustituya el contenido existente del cuadro de texto por el siguiente script.

      #!/bin/bash set -e sudo -u ec2-user -i <<'EOF' unset SUDO_UID # Install a separate conda installation via Miniconda WORKING_DIR=/home/ec2-user/SageMaker/custom-miniconda mkdir -p "$WORKING_DIR" wget https://repo.anaconda.com/miniconda/Miniconda3-4.6.14-Linux-x86_64.sh -O "$WORKING_DIR/miniconda.sh" bash "$WORKING_DIR/miniconda.sh" -b -u -p "$WORKING_DIR/miniconda" rm -rf "$WORKING_DIR/miniconda.sh" # Create a custom conda environment source "$WORKING_DIR/miniconda/bin/activate" KERNEL_NAME="custom_python310" PYTHON="3.10" conda create --yes --name "$KERNEL_NAME" python="$PYTHON" pip conda activate "$KERNEL_NAME" pip install --quiet ipykernel # Customize these lines as necessary to install the required packages EOF
    11. Pulse el botón Create configuration (Crear configuración) en la parte inferior derecha de la ventana.

    12. Pulse el botón Create notebook instance (Crear instancia de cuaderno) en la parte inferior derecha de la ventana.

    13. Espere a que el estado de la instancia del bloc de notas cambie de Pendiente a InService.

  2. Cree un cuaderno de Jupyter en la instancia del cuaderno.

    Las siguientes instrucciones muestran cómo crear un cuaderno de Jupyter con Python 3.10 en la instancia recién creada. SageMaker

    1. Una vez obtenido el estado de la instancia del bloc de notas del paso anterior InService, haga lo siguiente:

      1. Seleccione Open Jupyter (Abrir Jupyter) en Actions (Acciones) en la fila que contiene el nombre de la instancia de cuaderno recién creada. Esto abre un nuevo servidor de Jupyter.

    2. En el servidor Jupyter, seleccione New (Nuevo) en el menú superior derecho.

    3. En la flecha hacia abajo, seleccione conda_custom_python310. Esto crea un nuevo cuaderno de Jupyter que usa un kernel de Python 3.10. Este nuevo cuaderno de Jupyter ahora se puede utilizar de forma similar a un cuaderno de Jupyter local.

  3. Instala el SDK de SageMaker Python.

    Una vez que se ejecute el entorno virtual, instale el SDK de SageMaker Python mediante el siguiente ejemplo de código.

    !pip install sagemaker
  4. Utilice un decorador @remote para ejecutar funciones en un trabajo de SageMaker formación.

    Si anotas tu código ML local con un decorador @remote dentro del SageMaker cuaderno, el equipo de SageMaker formación interpretará automáticamente la función del código y lo ejecutará como un SageMaker trabajo de formación. Para configurar el cuaderno, haga lo siguiente:

    1. Seleccione el nombre del núcleo en el menú del bloc de notas de la instancia de SageMaker bloc de notas que creó en el paso 1, Crear una instancia de SageMaker Notebook con un núcleo personalizado.

      Para obtener más información, consulte Cambiar una imagen o un kernel.

    2. En la flecha hacia abajo, elija un kernel conda personalizado que utilice una versión de Python 3.7 o superior.

      Por ejemplo, al seleccionar conda_custom_python310 se elige el kernel de Python 3.10.

    3. Elija Seleccionar.

    4. Espere a que el estado del kernel se muestre como inactivo, lo que indica que el kernel se ha iniciado.

    5. En el servidor Jupyter, seleccione New (Nuevo) en el menú superior derecho.

    6. Junto a la flecha hacia abajo, selecciona Text file (Archivo de texto). Esto crea un nuevo archivo de texto llamado untitled.txt.

    7. Cambie el nombre de untitled.txt a requirements.txt y añada todas las dependencias necesarias para el código junto con sagemaker.

    8. Ejecute el código con el decorador remoto pasando el archivo de dependencias, como se indica a continuación.

      from sagemaker.remote_function import remote @remote(instance_type="ml.m5.xlarge", dependencies='./requirements.txt') def divide(x, y): return x / y divide(2, 3.0)

      Para ver ejemplos de código adicionales, consulte el cuaderno de ejemplo quick_start.ipynb.

Puede anotar su código de ML local con un decorador @remote dentro del IDE local que prefiera. Los siguientes pasos muestran los requisitos previos necesarios, cómo instalar el SDK de Python y cómo anotar el código con el decorador @remote.

  1. Instale los requisitos previos configurando el AWS Command Line Interface (AWS CLI) y creando un rol, de la siguiente manera:

  2. Cree un entorno virtual utilizando PyCharm o conda utilizando Python versión 3.7 o superior, hasta la 3.10.x.

    • Configure un entorno virtual de la PyCharm siguiente manera:

      1. Seleccione File (Archivo) en el menú principal.

      2. Elija New Project (Nuevo proyecto).

      3. Elija Conda en la flecha hacia abajo en New environment using (Nuevo entorno utilizando).

      4. En el campo correspondiente de Python version (Versión de Python), utilice la flecha hacia abajo para seleccionar una versión de Python que sea 3.7 o superior. Puede ir a la versión 3.10.x de la lista.

        El nuevo entorno de Python se seleccionó como Conda, con la versión de Python seleccionada en 3.10.
    • Si tiene Anaconda instalado, puede configurar un entorno virtual utilizando conda de la siguiente manera:

      • Abra una interfaz de terminal rápida de Anaconda.

      • Cree y active un nuevo entorno conda con una versión de Python 3.7 o superior, hasta 3.10x. En el ejemplo de código siguiente se muestra cómo crear un entorno conda utilizando Python versión 3.10.

        conda create -n sagemaker_jobs_quick_start python=3.10 pip conda activate sagemaker_jobs_quick_start
  3. Instala el SDK de SageMaker Python.

    Para empaquetar el código desde su IDE preferido, debe tener un entorno virtual configurado con Python 3.7 o superior, hasta 3.10x. También necesita una imagen de contenedor compatible. Instala el SDK de SageMaker Python mediante el siguiente ejemplo de código.

    pip install sagemaker
  4. Encapsule el código dentro del decorador @remote. El SDK de SageMaker Python interpretará automáticamente la función de tu código y lo ejecutará como un trabajo de SageMaker entrenamiento. Los siguientes ejemplos de código muestran cómo importar las bibliotecas necesarias, configurar una SageMaker sesión y anotar una función con el decorador @remote.

    Puede ejecutar el código proporcionando directamente las dependencias necesarias o utilizando las dependencias del entorno conda activo.

    • Para proporcionar las dependencias directamente, haga lo siguiente:

      • Cree un archivo requirements.txt en el directorio de trabajo en el que reside el código.

      • Agrega todas las dependencias necesarias para el código junto con la biblioteca. SageMaker En la siguiente sección se proporciona un ejemplo de código mínimo para requirements.txt para la función divide de ejemplo.

        sagemaker
      • Ejecute el código con el decorador @remote pasando el archivo de dependencias. En el siguiente ejemplo de código, The IAM role name sustitúyalo por un ARN de rol AWS Identity and Access Management (IAM) que te SageMaker gustaría usar para ejecutar tu trabajo.

        import boto3 import sagemaker from sagemaker.remote_function import remote sm_session = sagemaker.Session(boto_session=boto3.session.Session(region_name="us-west-2")) settings = dict( sagemaker_session=sm_session, role=<The IAM role name>, instance_type="ml.m5.xlarge", dependencies='./requirements.txt' ) @remote(**settings) def divide(x, y): return x / y if __name__ == "__main__": print(divide(2, 3.0))
    • Para usar las dependencias del entorno conda activo, utilice el valor auto_capture del parámetro dependencies, tal y como se muestra a continuación.

      import boto3 import sagemaker from sagemaker.remote_function import remote sm_session = sagemaker.Session(boto_session=boto3.session.Session(region_name="us-west-2")) settings = dict( sagemaker_session=sm_session, role=<The IAM role name>, instance_type="ml.m5.xlarge", dependencies="auto_capture" ) @remote(**settings) def divide(x, y): return x / y if __name__ == "__main__": print(divide(2, 3.0))
      nota

      También puedes implementar el código anterior en un bloc de notas de Jupyter. PyCharm Professional Edition es compatible con Jupyter de forma nativa. Para obtener más información, consulte el soporte para Jupyter Notebook en la documentación. PyCharm