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}
- Ejemplo de solicitud
- (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
- URI
- 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