Puntuación en tiempo real de los modelos de Machine Learning para R en AzureReal-time scoring of R machine learning models on Azure

Esta arquitectura de referencia muestra cómo implementar un servicio de predicción en tiempo real (sincrónico) en R mediante Microsoft Machine Learning Server que se ejecuta en Azure Kubernetes Service (AKS).This reference architecture shows how to implement a real-time (synchronous) prediction service in R using Microsoft Machine Learning Server running in Azure Kubernetes Service (AKS). Esta arquitectura está pensada para ser genérica y adecuada para cualquier modelo predictivo creado en R que desee implementar como un servicio en tiempo real.This architecture is intended to be generic and suited for any predictive model built in R that you want to deploy as a real-time service. Implemente esta solución .Deploy this solution.

Azure Machine Learning alternativa: Esta arquitectura proporciona una experiencia de R pura.Azure Machine Learning alternative: This architecture provides a pure R experience. No utiliza los servicios de Azure machine learning orientados a Python (SDK de AzureML), que es un servicio en la nube maduro para el desarrollo de soluciones de inteligencia artificial a escala.It doesn't use the Python oriented Azure Machine Learning Services (AzureML SDK), which is a mature cloud service for developing AI solutions at scale. El SDK de AzureML proporciona una ruta de acceso sencilla para el desarrollo y la implementación de scripts de puntuación en contenedores.AzureML SDK provides an easy path for development and deployment of containerized scoring scripts. Proporcionamos una solución alternativa que muestra cómo usar Conda para instalar paquetes de r y r con el fin de aprovechar el SDK de AzureML a través del paquete rpy2 de Python.We provide an alternative solution that shows how to use Conda to install R and R packages to leverage AzureML SDK via the rpy2 Python package. El valor que se usa en esta alternativa para poner en marcha los modelos de R es que no es necesario conocer el frasco y se puede reutilizar la experiencia del SDK de AzureML, que puede ser útil para los equipos que se sienten cómodos con los lenguajes R y Python para sus proyectos de ciencia de datos.The value in using this alternative to operationalize R models is that you don't need to know Flask, and you can reuse AzureML SDK expertise, which can be useful for teams that are comfortable using both R and Python languages for their data science projects. La implementación de esta arquitectura alternativa está disponible en github.The implementation of this alternative architecture is available on GitHub.

ArquitecturaArchitecture

Puntuación en tiempo real de los modelos de Machine Learning para R en Azure

Esta arquitectura de referencia adopta un enfoque basado en contenedores.This reference architecture takes a container-based approach. Se construye una imagen de Docker que contiene R, así como los diversos artefactos necesarios para obtener nuevos datos.A Docker image is built containing R, as well as the various artifacts needed to score new data. Estos incluyen el objeto modelo en sí y un script de puntuación.These include the model object itself and a scoring script. Esta imagen se envía a un registro de Docker hospedado en Azure, y después se implementa en un clúster de Kubernetes, también en Azure.This image is pushed to a Docker registry hosted in Azure, and then deployed to a Kubernetes cluster, also in Azure.

La arquitectura de este flujo de trabajo incluye los siguientes componentes.The architecture of this workflow includes the following components.

  • Azure Container Registry se usa para almacenar las imágenes de este flujo de trabajo.Azure Container Registry is used to store the images for this workflow. Los registros creados con Container Registry se pueden administrar a través de la API y el cliente estándar de Docker Registry V2 .Registries created with Container Registry can be managed via the standard Docker Registry V2 API and client.

  • Azure Kubernetes Service se usa para hospedar la implementación y el servicio.Azure Kubernetes Service is used to host the deployment and service. Los clústeres creados con AKS se pueden administrar mediante el cliente y la API de Kubernetes estándar (kubectl).Clusters created with AKS can be managed using the standard Kubernetes API and client (kubectl).

  • Microsoft machine learning Server se usa para definir la API de REST para el servicio e incluye la operacionalización del modelo.Microsoft Machine Learning Server is used to define the REST API for the service and includes Model Operationalization. Este proceso de servidor web orientado al servicio escucha las solicitudes, que después se transfieren a otros procesos en segundo plano que ejecutan el código R real para generar los resultados.This service-oriented web server process listens for requests, which are then handed off to other background processes that run the actual R code to generate the results. Todos estos procesos se ejecutan en un único nodo de esta configuración, que se encapsula en un contenedor.All these processes run on a single node in this configuration, which is wrapped in a container. Para más información sobre el uso de este servicio fuera de un entorno de desarrollo o de prueba, póngase en contacto con su representante de Microsoft.For details about using this service outside a dev or test environment, contact your Microsoft representative.

Consideraciones sobre rendimientoPerformance considerations

Las cargas de trabajo de aprendizaje automático tienden a ser muy intensivas, tanto cuando se trata del entrenamiento como cuando se obtienen nuevos datos.Machine learning workloads tend to be compute-intensive, both when training and when scoring new data. Como regla general, trate de no ejecutar más de un proceso de puntuación por núcleo.As a rule of thumb, try not to run more than one scoring process per core. Machine Learning Server le permite definir el número de procesos de R que se ejecutan en cada contenedor.Machine Learning Server lets you define the number of R processes running in each container. El valor predeterminado es de cinco procesos.The default is five processes. Cuando se crea un modelo relativamente simple, como una regresión lineal con un pequeño número de variables, o un pequeño árbol de decisión, se puede aumentar el número de procesos.When creating a relatively simple model, such as a linear regression with a small number of variables, or a small decision tree, you can increase the number of processes. Supervise la carga de la CPU en los nodos del clúster para determinar el límite apropiado en el número de contenedores.Monitor the CPU load on your cluster nodes to determine the appropriate limit on the number of containers.

Un clúster compatible con la GPU puede acelerar algunos tipos de cargas de trabajo y, en particular, los modelos de aprendizaje profundo.A GPU-enabled cluster can speed up some types of workloads, and deep learning models in particular. No todas las cargas de trabajo pueden aprovechar las GPU —, solo aquellas que hacen un uso intensivo del álgebra de matrices.Not all workloads can take advantage of GPUs — only those that make heavy use of matrix algebra. Por ejemplo, los modelos basados en árboles, incluidos los bosques aleatorios y los modelos de boosting, no suelen obtener ninguna ventaja de las GPU.For example, tree-based models, including random forests and boosting models, generally derive no advantage from GPUs.

Algunos tipos de modelos como los bosques aleatorios se pueden paralelizar de forma masiva en las CPU.Some model types such as random forests are massively parallelizable on CPUs. En estos casos, acelere la puntuación de una única solicitud al distribuir la carga de trabajo entre varios núcleos.In these cases, speed up the scoring of a single request by distributing the workload across multiple cores. Sin embargo, hacerlo reduce su capacidad para tratar varias solicitudes de puntuación dado un tamaño de clúster fijo.However, doing so reduces your capacity to handle multiple scoring requests given a fixed cluster size.

En general, los modelos de R de código abierto almacenan todos los datos en la memoria, de modo que asegúrese de que los nodos tengan suficiente memoria para acomodar los procesos que planea ejecutar simultáneamente.In general, open-source R models store all their data in memory, so ensure that your nodes have enough memory to accommodate the processes you plan to run concurrently. Si utiliza Machine Learning Server para adaptarlo a sus modelos, utilice las bibliotecas que pueden procesar datos en disco, en lugar de leerlos todos en memoria.If you are using Machine Learning Server to fit your models, use the libraries that can process data on disk, rather than reading it all into memory. Esto puede ayudar a reducir significativamente los requisitos de memoria.This can help reduce memory requirements significantly. Con independencia de si utiliza Machine Learning Server o R de código abierto, supervise los nodos para asegurarse de que los procesos de puntuación no se queden sin memoria.Regardless of whether you use Machine Learning Server or open-source R, monitor your nodes to ensure that your scoring processes are not memory-starved.

Consideraciones sobre la seguridadSecurity considerations

Cifrado de redNetwork encryption

En esta arquitectura de referencia, HTTPS está habilitado para la comunicación con el clúster, y se utiliza un certificado de almacenamiento provisional de Let’s Encrypt.In this reference architecture, HTTPS is enabled for communication with the cluster, and a staging certificate from Let’s Encrypt is used. Para fines de producción, sustituya su propio certificado por el de una autoridad de firma apropiada.For production purposes, substitute your own certificate from an appropriate signing authority.

Autenticación y autorizaciónAuthentication and authorization

Machine Learning Server la operacionalización del modelo requiere la autenticación de las solicitudes de puntuación.Machine Learning Server Model Operationalization requires scoring requests to be authenticated. En esta implementación, se utilizan un nombre de usuario y una contraseña.In this deployment, a username and password are used. En una configuración empresarial, puede habilitar la autenticación con Azure Active Directory o crear un front-end independiente con Azure API Management.In an enterprise setting, you can enable authentication using Azure Active Directory or create a separate front end using Azure API Management.

Para que la operacionalización del modelo funcione correctamente con Machine Learning Server en contenedores, debe instalar un certificado JSON Web Token (JWT).For Model Operationalization to work correctly with Machine Learning Server on containers, you must install a JSON Web Token (JWT) certificate. Esta implementación utiliza un certificado proporcionado por Microsoft.This deployment uses a certificate supplied by Microsoft. En un entorno de producción, proporcione los suyos propios.In a production setting, supply your own.

Para el tráfico entre Container Registry y AKS, considere la posibilidad de habilitar el control de acceso basado en rol (RBAC) para limitar los privilegios de acceso únicamente a los necesarios.For traffic between Container Registry and AKS, consider enabling role-based access control (RBAC) to limit access privileges to only those needed.

Almacenamiento independienteSeparate storage

Esta arquitectura de referencia agrupa la aplicación (R) y los datos (objeto de modelo y script de puntuación) en una sola imagen.This reference architecture bundles the application (R) and the data (model object and scoring script) into a single image. En algunos casos, puede resultar útil separarlos.In some cases, it may be beneficial to separate these. Puede colocar los datos del modelo y el código en el almacenamientode archivos o BLOB de Azure y recuperarlos en la inicialización del contenedor.You can place the model data and code into Azure blob or file storage, and retrieve them at container initialization. En este caso, asegúrese de que la cuenta de almacenamiento esté configurada para permitir únicamente el acceso autenticado y que requiera HTTPS.In this case, ensure that the storage account is set to allow authenticated access only and require HTTPS.

Consideraciones acerca de la supervisión y el registroMonitoring and logging considerations

Use el Panel de Kubernetes para supervisar el estado general del clúster de AKS.Use the Kubernetes dashboard to monitor the overall status of your AKS cluster. Consulte la hoja de información general del clúster en Azure Portal para obtener más detalles.See the cluster’s overview blade in Azure portal for more details. Los recursos de GitHub también muestran cómo abrir el panel desde R.The GitHub resources also show how to bring up the dashboard from R.

Aunque el panel le ofrece una visión del estado general del clúster, también es importante hacer un seguimiento del estado de los contenedores individuales.Although the dashboard gives you a view of the overall health of your cluster, it’s also important to track the status of individual containers. Para ello, habilite Azure monitor Insights en la hoja de información general del clúster en Azure portal, o considere la posibilidad de Azure monitor para contenedores (en versión preliminar).To do this, enable Azure Monitor Insights from the cluster overview blade in Azure portal, or consider Azure Monitor for containers (in preview).

Consideraciones sobre el costoCost considerations

Machine Learning Server tiene licencia por núcleo, y todos los núcleos del clúster que van a ejecutar Machine Learning Server cuentan para ello.Machine Learning Server is licensed on a per-core basis, and all the cores in the cluster that will run Machine Learning Server count towards this. Si es un cliente empresarial de Machine Learning Server o Microsoft SQL Server, póngase en contacto con su representante de Microsoft para obtener información sobre precios.If you are an enterprise Machine Learning Server or Microsoft SQL Server customer, contact your Microsoft representative for pricing details.

Una alternativa de código abierto a Machine Learning Server es el fontanero, un paquete de R que convierte el código en una API de REST.An open-source alternative to Machine Learning Server is Plumber, an R package that turns your code into a REST API. Plumber tiene menos funciones que Machine Learning Server.Plumber is less fully featured than Machine Learning Server. Por ejemplo, de forma predeterminada no incluye ninguna característica que proporcione autenticación de solicitudes.For example, by default it doesn't include any features that provide request authentication. Si usa el sondeador, se recomienda que habilite Azure API Management para administrar los detalles de autenticación.If you use Plumber, it’s recommended that you enable Azure API Management to handle authentication details.

Además de la concesión de licencias, la principal consideración de costos son los recursos de proceso del clúster de Kubernetes.Besides licensing, the main cost consideration is the Kubernetes cluster's compute resources. El clúster debe ser lo suficientemente grande como para controlar el volumen de solicitudes previsto en las horas punta, pero este enfoque deja los recursos inactivos en otros momentos.The cluster must be large enough to handle the expected request volume at peak times, but this approach leaves resources idle at other times. Para limitar el impacto de los recursos inactivos, habilite el escalado automático horizontal para el clúster mediante la herramienta kubectl.To limit the impact of idle resources, enable the horizontal autoscaler for the cluster using the kubectl tool. O bien, use el escalador automático del clústerde AKS.Or use the AKS cluster autoscaler.

Implementación de la soluciónDeploy the solution

La implementación de referencia de esta arquitectura está disponible en GitHub.The reference implementation of this architecture is available on GitHub. Siga los pasos descritos para implementar un modelo predictivo simple como servicio.Follow the steps described there to deploy a simple predictive model as a service.