Creación de una aplicación de IA con un motor personalizado
Cuando utiliza un motor personalizado para crear una aplicación de IA, puede seleccionar la imagen almacenada en SWR como motor y especificar un directorio de archivos en OBS como paquete de modelos. De este modo, puede utilizar imágenes propias para satisfacer sus necesidades específicas.
Antes de desplegar una aplicación de IA como servicio, ModelArts descarga la imagen de SWR en el clúster e inicia la imagen como un contenedor como usuario cuyo UID es 1000 y GID es 100. Luego, ModelArts descarga el archivo de OBS en el directorio /home/mind/model del contenedor y ejecuta el comando de arranque preestablecido en la imagen de SWR. El servicio disponible para el puerto 8080 del contenedor se registra automáticamente con APIG. Puede acceder al servicio con el URL APIG.
Especificaciones para utilizar un motor personalizado para crear una aplicación de IA
Para utilizar un motor personalizado a crear una aplicación de IA, asegúrese de que la imagen de SWR, el paquete del modelo de OBS y el tamaño del archivo cumplan con los siguientes requisitos:
- Especificaciones de imagen de SWR
- Se debe incorporar un usuario común denominado ma-user en el grupo ma-group en la imagen de SWR. Adicionalmente, el UID y el GID del usuario deben ser 1000 y 100, respectivamente. El siguiente es el comando de dockerfile para el usuario integrado:
groupadd -g 100 ma-group && useradd -d /home/ma-user -m -u 1000 -g 100 -s /bin/bash ma-user
- Especifique un comando para iniciar la imagen. Especifique cmd en el dockerfile. A continuación se muestra un ejemplo:
CMD sh /home/mind/run.sh
Personalice el archivo de entrada de inicio run.sh. Lo siguiente es un ejemplo.
#!/bin/bash # User-defined script content ... # run.sh calls app.py to start the server. For details about app.py, see "HTTPS Example". python app.py
- El servicio debe estar habilitado para HTTPS y está disponible en el puerto 8080. Para obtener más detalles, consulte el ejemplo de HTTPS.
- (Opcional) En el puerto 8080, active la comprobación de estado con la URL/health. (La dirección URL de comprobación de estado debe ser /health)
- Se debe incorporar un usuario común denominado ma-user en el grupo ma-group en la imagen de SWR. Adicionalmente, el UID y el GID del usuario deben ser 1000 y 100, respectivamente. El siguiente es el comando de dockerfile para el usuario integrado:
- Especificaciones del paquete del modelo de OBS
El nombre del paquete de modelos debe ser model. Para obtener más detalles sobre las especificaciones de paquetes de modelo, consulte Introducción a especificaciones de paquetes de modelo.
- Especificaciones de tamaño de archivo
Cuando se utiliza un grupo de recursos públicos, el tamaño total de la imagen de SWR (no la imagen comprimida que se muestra en la página de SWR) y el paquete del modelo de OBS no puede exceder los 30 GB.
Ejemplo de HTTPS
Utilice Flask para iniciar HTTPS. A continuación se muestra un ejemplo del código del servidor web:
from flask import Flask, request import json app = Flask(__name__) @app.route('/greet', methods=['POST']) def say_hello_func(): print("----------- in hello func ----------") data = json.loads(request.get_data(as_text=True)) print(data) username = data['name'] rsp_msg = 'Hello, {}!'.format(username) return json.dumps({"response":rsp_msg}, indent=4) @app.route('/goodbye', methods=['GET']) def say_goodbye_func(): print("----------- in goodbye func ----------") return '\nGoodbye!\n' @app.route('/', methods=['POST']) def default_func(): print("----------- in default func ----------") data = json.loads(request.get_data(as_text=True)) return '\n called default func !\n {} \n'.format(str(data)) @app.route('/health', methods=['GET']) def healthy(): return "{\"status\": \"OK\"}" # host must be "0.0.0.0", port must be 8080 if __name__ == '__main__': app.run(host="0.0.0.0", port=8080, ssl_context='adhoc')
Depuración en un equipo local
Realice las siguientes operaciones en una computadora local con Docker instalado para verificar si un motor personalizado cumple con las especificaciones:
- Descargue la imagen personalizada, por ejemplo, custom_engine:v1 en la computadora local.
- Copie la carpeta del paquete de modelo model en el host local.
- Ejecute el siguiente comando en el mismo directorio que la carpeta del paquete modelo para iniciar el servicio:
docker run --user 1000:100 -p 8080:8080 -v model:/home/mind/model custom_engine:v1
Este comando solo se utiliza para simulaciones porque el directorio montado en -v tiene asignado el permiso de root. En el entorno de nube, después de descargar el archivo de modelo desde OBS a /home/mind/model, el propietario del archivo se cambia a ma-user.
- Inicie otro terminal en el equipo local y ejecute el siguiente comando para obtener el resultado de inferencia esperado:
curl https://127.0.0.1:8080/${Request path to the inference service}
Ejemplo de despliegue
En la siguiente sección se describe cómo utilizar un motor personalizado para crear una aplicación de IA.
- Cree una aplicación de IA y vea sus detalles.
Inicie sesión en la consola de ModelArts, seleccione AI Application Management > AI Applications y haga clic en Create. En la página que aparece, configure los siguientes parámetros:
- Meta Model Source: OBS
- Meta Model: un paquete de modelo seleccionado de OBS
- AI Engine: Custom
- Engine Package: una imagen de SWR
Mantenga la configuración predeterminada para otros parámetros.
Haga clic en Create Now. En la lista de aplicaciones de IA que aparece en pantalla, compruebe el estado de la aplicación de IA. Cuando su estado cambia a Normal, se crea la aplicación de IA.
Figura 1 Creación de una aplicación de IA
Haga clic en el nombre de la aplicación de IA. En la página que aparece, vea detalles sobre la aplicación de IA.
- Despliegue la aplicación de IA como servicio y consulte los detalles del servicio.
En la página de detalles de la aplicación de IA, seleccione Deploy > Real-Time Services en la esquina superior derecha. En la página Deploy, seleccione una especificación de nodo de cómputo adecuada (por ejemplo, CPU: 2 vCPUs 8 GB), mantenga la configuración por defecto de otros parámetros y haga clic en Next. Cuando el estado del servicio cambia a Running, se despliegue ese servicio.
Haga clic en el nombre del servicio. En la página que aparece, vea los detalles del servicio. Haga clic en la pestaña Logs para ver los logs de servicio.
Figura 2 Logs
- Utilice el servicio para predicciones.
En la página de detalles del servicio, haga clic en la ficha Prediction para utilizar el servicio de predicción.
Figura 3 Predicción