Logotipo de Zephyrnet

Una implementación completa de extremo a extremo de un algoritmo de aprendizaje automático en un entorno de producción en vivo

Fecha:

By graham harrison, director de grupo de TI, gestión de la información y proyectos para Lincoln College Group



Foto por Fotis Fotopoulos on Unsplash

Introducción

 
 
En octubre de 2021, escribí un artículo sobre "Implementación de proyectos de aprendizaje automático y ciencia de datos como aplicaciones web públicas" (ver https://towardsdatascience.com/deploying-machine-learning-and-data-science-projects-as-public-web-applications-3abc91088c11).

En este artículo, exploré cómo implementar Jupyter Notebooks como aplicaciones web disponibles públicamente usando Voila, GitHub y mybinder.

Después de que se publicó el artículo, recibí comentarios de lectores que estaban interesados ​​en cómo impulsar aún más la implementación de producción para explorar cómo un algoritmo de aprendizaje automático podría implementarse completamente en un entorno de producción en vivo para que pudiera "consumirse" de una manera independiente de la plataforma. y eso llevó a la idea de este artículo...

Paso 1: desarrollar un algoritmo de aprendizaje automático

 
 
El primer paso es desarrollar el algoritmo de aprendizaje automático que queremos implementar. En el mundo real, esto podría implicar muchas semanas o meses de tiempo de desarrollo y mucha iteración a lo largo de los pasos de la canalización de la ciencia de datos, pero para este ejemplo desarrollaré un algoritmo de ML básico, ya que el objetivo principal de este artículo es encontrar una manera de implementar un algoritmo para uso de los "consumidores".

Seleccioné un conjunto de datos de kaggle (https://www.kaggle.com/prathamtripathi/drug-classification) que ha sido creado por el autor con una licencia “CC0: Public Domain”, lo que significa que no tiene derechos de autor y que puede usarse en otros trabajos sin restricciones (ver https://creativecommons.org/publicdomain/zero/1.0/ para más detalles).

El código de Python para desarrollar un algoritmo de aprendizaje automático predictivo para clasificar las recetas de medicamentos dada una variedad de criterios de pacientes es el siguiente:

0.99 0.012247448713915901

En este punto, podemos ver que tenemos un algoritmo de aprendizaje automático entrenado para predecir las recetas de medicamentos y que se ha utilizado la validación cruzada (es decir, plegar los datos) para evaluar la precisión del modelo en un 99 %.

Hasta aquí todo bien …

Vamos a implementar este modelo en un entorno de producción y, aunque es un ejemplo simple, no nos gustaría tener que volver a entrenar nuestro modelo en el entorno en vivo cada vez que un usuario quiera predecir una receta de medicamentos, por lo tanto, nuestro próximo paso es preservar el estado de nuestro modelo entrenado usando pickle ...

Ahora, cada vez que queramos usar el modelo entrenado, simplemente necesitamos recargar su estado desde el model.pkl archivo en lugar de volver a ejecutar el paso de entrenamiento.

Paso 2: Realice una predicción individual a partir del modelo entrenado

 
 
Voy a hacer un par de suposiciones en el paso 2:

  1. Los consumidores del algoritmo de aprendizaje automático tienen requisitos para hacer predicciones para pacientes individuales en lugar de un lote de pacientes.
  2. Esos consumidores desean comunicarse con el algoritmo utilizando valores similares a texto para los parámetros (por ejemplo, presión arterial = "NORMAL" o "ALTA" en lugar de sus equivalentes codificados en etiquetas como 0 y 1.

Por lo tanto, comenzaremos revisando cuáles son los valores para todas las características categóricas codificadas por etiquetas utilizadas como entrada para el algoritmo...

Sex ['F', 'M'] [0, 1] BP ['HIGH', 'LOW', 'NORMAL'] [0, 1, 2] Cholesterol ['HIGH', 'NORMAL'] [0, 1] Drug ['DrugY', 'drugC', 'drugX', 'drugA', 'drugB'] [0, 3, 4, 1, 2]

Y ahí lo tenemos, una lista de cada característica categórica con los valores únicos que aparecen en los datos y los valores numéricos correspondientes transformados por el LabelEncoder().

Armados con este conocimiento, podemos proporcionar un conjunto de diccionarios que mapean los valores de texto (por ejemplo, "ALTO", "BAJO", etc.) en sus equivalentes codificados y luego desarrollar una función simple para hacer predicciones individuales de la siguiente manera...

Luego, esta implementación se puede verificar invocando la función para hacer algunas predicciones basadas en los valores de los datos originales para que sepamos cuáles deberían ser los resultados...

Tenga en cuenta que nuestro predict_drug La función no necesita entrenar el modelo, sino que "rehidrata" el modelo que previamente tenía su estado guardado por pickle en el model.pkl y podemos ver en el resultado que las predicciones para la recomendación de medicamentos son correctas.

Paso 3: desarrollar un contenedor de servicios web

 
 
Todo se ve bien hasta ahora, pero aquí está el problema principal: los clientes o consumidores de nuestro algoritmo de aprendizaje automático deben estar escritos en el lenguaje de programación Python y no solo eso, debemos tener la capacidad de cambiar y modificar la aplicación.

¿Qué pasa si una aplicación de terceros quiere usar y consumir nuestro algoritmo y si esta aplicación de terceros no está escrita en Python? Tal vez esté escrito en Java, C#, JavaScript o algún otro lenguaje que no sea Python.

Aquí es donde entran los servicios web. Un servicio web es un "envoltorio" que recibe solicitudes de clientes y consumidores utilizando los comandos http GET y http PUT, invoca el código Python y devuelve el resultado como una respuesta HTML.

Esto significa que los clientes y las personas que llaman solo necesitan poder formular solicitudes HTTP y casi todos los lenguajes y entornos de programación tendrán una forma de hacerlo.

En el mundo de Python hay varios enfoques diferentes disponibles, pero el que he seleccionado es usar flask para construir nuestro contenedor de servicios web.

El código no es muy complicado, pero puede ser un desafío configurar VS Code para permitir a los desarrolladores depurar una aplicación de matraz. Si necesita un tutorial para este paso, consulte mi artículo titulado "Cómo depurar aplicaciones Flask en VS Code", que se puede encontrar aquí: https://towardsdatascience.com/how-to-debug-flask-applications-in-vs-code-c65c9bdbef21.

Aquí está el código contenedor para el servicio web...

Inicie el IDE de VS Code desde la página Anaconda Navigator (o iniciando el símbolo del sistema de Anaconda y escribiendo code). Esto iniciará VS Code con el entorno base de conda que se requiere para ejecutar y depurar la aplicación del matraz.

El servicio web se puede iniciar desde VS Code haciendo clic en "Ejecutar y depurar" y luego seleccionando "Flask Iniciar y depurar una aplicación web Flask" -



Imagen del autor

 

Si todo ha ido según lo planeado, el último mensaje en la ventana TERMINAL debe ser Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) lo que indica que su aplicación web de matraz está en funcionamiento.

Ahora debe probar su servicio web utilizando uno de estos métodos:

  1. Abra un navegador web e ingrese: http://127.0.0.1:5000/drug?Age=60&Sex=F&BP=LOW&Cholesterol=HIGH&Na_to_K=20
  2. Abra un símbolo del sistema de anaconda e ingrese: curl -X GET "http://127.0.0.1:5000/drug?Age=60&Sex=F&BP=LOW&Cholesterol=HIGH&Na_to_K=20"



Imagen del autor

 

Si desea obtener más información sobre el desarrollo flask aplicaciones y servicios web, estos artículos son un excelente lugar para comenzar:

Paso 4: implementar el servicio web en Microsoft Azure

 
 
Ahora tenemos un algoritmo predictivo de aprendizaje automático que puede predecir recetas de medicamentos con un 99 % de precisión, tenemos una función auxiliar que puede hacer predicciones individuales y tenemos un contenedor de servicios web que permite llamar a estos componentes desde un navegador o una línea de comandos.

Sin embargo, todo esto solo se puede llamar desde el entorno de desarrollo. La siguiente etapa es implementar todo en la nube para que los clientes puedan “consumir” el servicio web a través de la Internet pública.

Hay muchos servicios públicos diferentes disponibles para la implementación de aplicaciones web, incluidos:

Elegí Azure porque es gratis (para una cuenta de nivel de entrada), fácil de usar, rápido y totalmente integrado con VS Code, que es mi entorno de desarrollo favorito.

Paso 4.1: agregar la extensión de Azure App Service a VS Code

 
 
Cambie las tareas a VS Code, vaya a "Extensiones" (Ctrl+Shft_X) y agregue la extensión "Azure App Service". Una vez que se agrega la extensión, verá un nuevo icono de Azure en la barra de actividad:



Imagen del autor

Paso 4.1: Crear una cuenta de Azure

 
 
Debe tener una cuenta para comenzar las implementaciones en la nube de Azure y debe proporcionar los detalles de la tarjeta de crédito durante el proceso de registro. Sin embargo, no se le cobrará a menos que opte específicamente por dejar la licencia gratuita.

Puede seguir las instrucciones de esta página: https://azure.microsoft.com/en-gb/free/ para crear su cuenta gratuita de Azure a través de un navegador, pero la forma más sencilla es hacer clic en el nuevo icono de Azure en la barra de actividad y elegir "Crear una cuenta gratuita de Azure" (o "Iniciar sesión en Azure" si ya tiene una) –



Imagen del autor

Paso 4.3: Cree una aplicación web de Azure

 
 
El siguiente paso es crear una aplicación web de Azure para alojar su aplicación haciendo clic en el signo "+" en la ventana "SERVICIO DE LA APLICACIÓN". Se le pedirá un nombre para la aplicación. El nombre se utilizará en la URL final y debe ser único, pero aparte de eso, el nombre no es particularmente importante.

Cuando se le solicite un tipo de licencia, elija "Prueba gratuita": ahora se creará su aplicación web y estará listo para implementar.



Imagen del autor

Paso 4.4 Cree un archivo de implementación "requirements.txt"

 
 
Antes de poder implementar la aplicación en Azure, debe crear un archivo "requirements.txt" en la misma carpeta que su aplicación web Flask que contiene una lista de todas las dependencias y bibliotecas que Azure debe instalar para ejecutar su aplicación. Este paso es vital ya que si las bibliotecas no están en el entorno implementado, la aplicación fallará.

Los contenidos de requirements.txt para nuestra aplicación son los siguientes:



Imagen del autor

 

Algunos puntos a tener en cuenta –

  1. Los nombres de las bibliotecas deben coincidir exactamente con lo que escribiría si estuviera instalando usando pip, por ejemplo pip install Flask.
  2. Tenga en cuenta que Flask tiene una "F" mayúscula. Esto se debe a que Flask es inusual en mayúsculas de esta manera, por lo general, las bibliotecas están en minúsculas.
  3. sklearn se requiere para ejecutar la rehidratación model.pkl. Aunque sklearn y DecisionTreeClassifier no se mencionan explícitamente en el código, son necesarios para model.fit Así que si sklearn se omite, la aplicación se bloqueará.
  4. Una referencia a pickle no es necesario porque esta biblioteca forma parte de la instalación principal de Python. Si incluyes pickle la implementación se bloqueará porque no se puede ejecutar pip install pickle.

Si se apega a estas reglas, su implementación funcionará y cualquier mensaje de error suele ser lo suficientemente informativo como para permitir que los problemas se resuelvan con un poco de investigación en Internet.

Paso 4.5 Implemente su aplicación en Azure

 
 
Si ha estado siguiendo los pasos hasta ahora, ahora tiene una aplicación Flask dentro de VS Code. Su archivo de código de aplicación se llamará app.py y el nombre de la aplicación es app. La aplicación Flask se probó en un servidor web de desarrollo local.

Ha instalado la extensión de la aplicación VS Code Azure y la ha utilizado para crear una cuenta gratuita de Microsoft Azure y también para crear una aplicación web de Azure.

Debería tener su aplicación Flask abierta en VS Code y tener todo listo para implementar su aplicación en la nube.

Esto se logra simplemente haciendo clic en el nombre de la aplicación web junto al icono del círculo azul y luego haciendo clic en el icono de la nube junto al signo "+".

Cuando se le solicite, elija lo siguiente:

  • Seleccione la carpeta predeterminada para implementar
  • Seleccione la suscripción "Prueba gratuita"
  • Seleccione el nombre de la aplicación web que ha creado
  • Si se le solicita sobrescribir, seleccione "Implementar"
  • Cuando se le solicite "Implementar siempre...", seleccione "Omitir por ahora"
  • Cuando comience la implementación, haga clic en "ventana de salida"

Ahora siéntese y prepárese un café mientras se implementa la aplicación:



Imagen del autor

 

Cuando se complete la implementación, haga clic en "Examinar sitio web" y se lo dirigirá a la URL correcta que se ejecutará app.route("/") función.

¡Simplemente agregue los mismos parámetros de URL que usamos para probar la implementación local y verá el resultado de una aplicación web completamente implementada! –

https://graham-harrison68-web03.azurewebsites.net/drug?Age=60&Sex=F&BP=LOW&Cholesterol=HIGH&Na_to_K=20



Imagen del autor

 

Un punto a tener en cuenta: después de un tiempo, la aplicación Azure se suspende y la primera llamada después de esto lleva mucho tiempo.

Si elige actualizar a una suscripción de pago de Azure, hay una opción para mantener la aplicación actualizada y "activa", pero en la suscripción gratuita no se puede evitar el retraso relacionado con el sueño, ya que esta suscripción está destinada a fines de prueba y, como tal, tiene algunas limitaciones.

Paso 5: creación de una aplicación cliente para consumir el servicio web implementado en Azure

 
 
En este punto, cualquier lenguaje de programación o entorno que pueda invocar solicitudes web puede llamar al servicio web implementado con solo unas pocas líneas de código.

Comenzamos diciendo que se pueden usar entornos que no son de Python como C#, JavaScript, etc., pero terminaré este ejemplo escribiendo un código para llamar a la aplicación implementada desde un cliente de Python usando ipywidgets –



Imagen del autor

 

Si hace clic en "Prescribir" con los valores predeterminados, la recomendación debería ser para "drugC".

Cambie la Edad a 60 y Na a K a 20 y se debe prescribir “DrugY”. Regrese la edad a 47, Na a K nuevamente a 14 y cambie BP a "HIGH" y se debe recetar el medicamento A.

Estas sencillas pruebas demuestran que el servicio web alojado en Azure que utiliza un algoritmo de aprendizaje automático predictivo basado en un árbol de decisión está completamente implementado en la nube pública, puede ser llamado por cualquier entorno de desarrollo capaz de ejecutar un http GET comando y funciona completamente de extremo a extremo.

Conclusión

 
 
Hay bastantes pasos involucrados, pero utilizando bibliotecas fácilmente disponibles y herramientas gratuitas que incluyen scikit-learn, pickle, matraz, Microsoft Azure e ipywidgets, hemos construido una implementación en la nube completamente funcional y disponible públicamente de un algoritmo de aprendizaje automático y un cliente en pleno funcionamiento. para llamar y consumir el servicio web y mostrar los resultados.

¡Gracias por leer!

 
 
Si disfrutó leyendo este artículo, ¿por qué no echa un vistazo a mis otros artículos en https://grahamharrison-86487.medium.com/?

Además, me encantaría saber de usted para conocer su opinión sobre este artículo, cualquiera de mis otros artículos o cualquier otra cosa relacionada con la ciencia de datos y el análisis de datos.

Si desea ponerse en contacto para discutir cualquiera de estos temas, búsqueme en LinkedIn: https://www.linkedin.com/in/grahamharrison1 o siéntase libre de enviarme un correo electrónico a GME@dhr-rgv.com.

Si desea apoyar al autor y a miles de personas que contribuyen a la redacción de artículos en todo el mundo suscribiéndose, utilice este enlace: https://grahamharrison-86487.medium.com/membership. Nota: el autor recibirá una proporción de las tarifas si se registra utilizando este enlace.

 
Bio: graham harrison es director de grupo de TI, gestión de la información y proyectos para Lincoln College Group, donde es responsable de todas las capacidades de datos y tecnología en el Reino Unido, Arabia Saudita y China. Graham también es MD y fundador de una consultora de ciencia de datos llamada The Knowledge Ladder, miembro del comité del Lincolnshire Cyber ​​Security Forum y embajador digital de Greater Lincolnshire and Rutland Branch del Institute of Directors. Graham completó recientemente una investigación académica sobre la democratización de la ciencia de datos y le apasiona brindar ciencia de datos accesible, asequible y ágil a todas las organizaciones, independientemente de su tamaño, sector o experiencia previa. Visitar https://www.theknowledgeladder.co.uk/ y https://www.youtube.com/watch?v=cFt03rny07Y para obtener más detalles.

Original. Publicado de nuevo con permiso.

Relacionado:

Fuente: https://www.kdnuggets.com/2021/12/deployment-machine-learning-algorithm-live-production-environment.html

punto_img

Información más reciente

punto_img