Splash: Ejecución de scripts Python preexistentes dentro de Azure Machine Learning
En ocasiones sí es adecuado subir los propios modelos creados con Python o R a Azure Machine Learning (AML). Esto es completamente soportado y es una práctica que llevan a cabo muchos usuarios.
Las ventajas de incluir el modelo en AML es que podemos usar todas las funcionalidades que vienen predefinidas allí como la posibilidad de especificar visualmente cuáles van a hacer los orígenes de datos, ejecutar tareas de selección y limpieza de datos, aplicar el modelo subido de Python, hacer llamados a componentes R, SQLite, etc, hacer evaluación del modelo, publicar una vez ya estemos contentos con el modelo y luego acceder a éste a través de servicios web, todo sin programar nada. En el editor de AML existe un componente llamado “Execute Python Script” que permite ejecutar un modelo previo que tengamos creado en Python.
Existen sin embargo, condiciones para que decidamos correctamente montar nuestro modelo pre existente en AML; por ejemplo, el bloque de “Execute Python Script” permite hasta tres inputs. Dos de éstos inputs deben ser del tipo Pandas Frames y el otro recibe en texto plano el código Python a ejecutarse cuando sea sencillo, o la referencia al Zip con todo el código Python a ejecutar (aquí se incluirían las librerías de apoyo que no son tan comunes como para estar en la distribución Anaconda estándar; otras como scikit-learn o scipy ya están disponibles en AML). Y se pueden generar hasta dos salidas; una, como un dataframe empaquetado dentro de una secuencia Python como una tupla, una lista o un arreglo NumPy y la otra salida puede ser usada para visualización usando MatplotLib en cuyo caso se genera un png que se puede descargar o visualizar fácilmente.
Por otro lado, el modelo pre existente debe correr sin problemas sobre la distribución de Python Anaconda, ya que ésta es en la que está basada AML para ejecutar modelos Python. Aquí precisamente recomiendo que primero se prepare el script y se vea que ejecuta sin problemas localmente, antes de subirlo a AML, porque allí no hay optimización para una experiencia de debugging.
Si luego de leer éste Splash tienes más interés en los detalles específicos de esta implementación, visita este artículo.
De lo contrario, tal vez quieras contemplar la posibilidad de poner el modelo a correr tu script sobre Azure Functions donde a través de http podrías enviar datos y a través del mismo mecanismo recibir resultados. En este caso habría que subir toda librería extra usada y cargarla en cada ejecución. Esto cuando usamos Pandas puede ser un problema, porque siempre tiene un tiempo alto carga dada la cantidad de imports que hace. En ese caso, tal vez quieras poner la Azure Function mejor en un App Service en lugar de un Consumption Plan.
Me preguntaban si se podría poner el código en un worker role, pero habría que crear algo así como un servicio WCF para pasar los datos. Habría menos complejidad en este caso, usando una Web App y exponiendo todo a través de HTTP.