Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Actualización más reciente 2024-09-14 GMT+08:00

Especificaciones de imágenes personalizadas para crear aplicaciones de IA

Al crear una imagen personalizada utilizando un modelo desarrollado localmente, asegúrese de que la imagen cumple con las especificaciones de ModelArts.

  • No se permite ningún código malicioso.
  • Una imagen personalizada no puede superar los 50 GB.
  • API externas

    Establezca la API de servicio externa para una imagen personalizada. La API de inferencia debe ser la misma que el URL definida por apis en config.json. A continuación, se puede acceder directamente a la API de servicio externa cuando se inicia la imagen. A continuación se muestra un ejemplo de acceso a una imagen MNIST. La imagen contiene un modelo entrenado usando un conjunto de datos de MNIST y puede identificar los dígitos escritos a mano. listen_ip indica la dirección IP del contenedor. Puede iniciar una imagen personalizada para obtener la dirección IP del contenedor.

    • Ejemplo de solicitud
      curl -X POST \ http://{Listening IP address}:8080/ \ -F images=@seven.jpg
      Figura 1 Ejemplo de obtención de listen_ip
    • Ejemplo de respuesta
      {"mnist_result": 7}
  • (Opcional) API de comprobación de estado
    Si los servicios no se deben interrumpir durante una actualización sucesiva, la API de comprobación de estado debe configurarse en config.json para ModelArts. La API de la prueba de estado devuelve la situación de estado de un servicio cuando se está ejecutando correctamente, o un error cuando se vuelve defectuoso.

    La API de comprobación de estado debe configurarse para una actualización continua sin problemas.

    A continuación se muestra un ejemplo de API de comprobación de estado:

    • URI
      GET /health
    • Ejemplo de solicitud: curl -X GET \ http://{Listening IP address}:8080/health
    • Ejemplo de respuesta
      {"health": "true"}
    • Código de estado
      Tabla 1 Código de estado

      Código de estado

      Mensaje

      Descripción

      200

      OK

      Solicitud enviada

  • Salida del archivo de log

    Configure la salida estándar para que los logs se puedan mostrar correctamente.

  • Archivo de arranque de imagen

    Para desplegar un servicio por lotes, establezca el archivo de inicio de una imagen en /home/run.sh y use CMD para establecer la ruta de inicio predeterminada. El siguiente es un ejemplo de Dockerfile:

    CMD ["sh", "/home/run.sh"]

  • Dependencias de imagen

    Para desplegar un servicio por lotes, instale los paquetes de dependencias como Python, JRE/JDK y ZIP en la imagen.

  • (Opcional) Actualización continua sin hit

    Para asegurarse de que los servicios no se interrumpen durante una actualización sucesiva, establezca HTTP keep-alive en 200. Por ejemplo, Gunicorn no es compatible con keep-alive de forma predeterminada. Para garantizar una actualización continua sin problemas, instale Gevent y configure --keep-alive 200 -k gevent en la imagen. La configuración de los parámetros varía en función del marco de servicio. Configure los parámetros según sea necesario.

  • (Opcional) Salida con gracia de un contenedor

    Para garantizar que los servicios no se interrumpan durante una mejora continua, el sistema debe capturar las señales SIGTERM en el contenedor y esperar 60 segundos antes de salir del contenedor con gracia. Si la duración es inferior a 60 segundos antes de la salida elegante, los servicios pueden interrumpirse durante la actualización continua. Para garantizar un funcionamiento no interrumpido del servicio, el sistema sale del contenedor después de que recibe las señales SIGTERM y procesa todas las solicitudes recibidas. La duración total no es superior a los 90 segundos. A continuación se muestra el ejemplo run.sh:

    #!/bin/bash
    gunicorn_pid=""
    
    handle_sigterm() {
      echo "Received SIGTERM, send SIGTERM to $gunicorn_pid"
      if [ $gunicorn_pid != "" ]; then
          sleep 60
          kill -15 $gunicorn_pid  # Transfer SIGTERM signals to the Gunicorn process.
          wait $gunicorn_pid           # Wait until the Gunicorn process stops.
      fi
    }
    
    trap handle_sigterm TERM