Azure'da Python Scikit-öğrenme ve derin öğrenme gerçek zamanlı Puanlama modelleriReal-time scoring of Python Scikit-Learn and deep learning models on Azure

Bu başvuru mimarisi, gerçek zamanlı Öngörüler yapmak için web Hizmetleri olarak Python modelleri dağıtma işlemi gösterilmektedir.This reference architecture shows how to deploy Python models as web services to make real-time predictions. İki senaryo ele alınmıştır: normal Python modeller ve ayrıntılı öğrenme modelleri dağıtma belirli gereksinimlerine dağıtma.Two scenarios are covered: deploying regular Python models, and the specific requirements of deploying deep learning models. Her iki senaryo mimarisini kullanın.Both scenarios use the architecture shown.

Bu mimari için iki başvuru uygulamaları için GitHub üzerindeki kullanılabilir [normal Python modelleri] github-python , diğeri [derin öğrenme modellerini] github-dl.Two reference implementations for this architecture are available on GitHub, one for regular Python models and one for deep learning models.

Azure'da Python modellerin gerçek zamanlı Puanlama için Mimari diyagramı

SenaryolarScenarios

Bu mimari kullanarak iki senaryo başvuru uygulamaları gösterir.The reference implementations demonstrate two scenarios using this architecture.

Senaryo 1: SSS eşleşen.Scenario 1: FAQ matching. Bu senaryoda, kullanıcı sorular için Öngörüler sağlamak için bir web hizmeti olarak modeli eşleşen sık sorulan sorular (SSS) dağıtma işlemi gösterilmektedir.This scenario shows how to deploy a frequently asked questions (FAQ) matching model as a web service to provide predictions for user questions. Bu senaryo için sık sorulan sorular listesi ile eşleşecek şekilde kullanıcı sorular içeren metin dizeleri mimarisi diyagramı "giriş verileri" ifade eder.For this scenario, "Input Data" in the architecture diagram refers to text strings containing user questions to match with a list of FAQs. Bu senaryo için tasarlanmış [scikit-bilgi] scikit makine öğrenimi kitaplığını kullanarak Python için ancak gerçek zamanlı Öngörüler sağlamak için Python modelleri kullanan herhangi bir senaryo için genelleştirilmiş olmalıdır.This scenario is designed for the scikit-learn machine learning library for Python, but can be generalized to any scenario that uses Python models to make real-time predictions.

Bu senaryo, JavaScript, yinelenen kullanıcıların sorularını ve yanıtlarını etiketlenmiş özgün sorular içeren Stack Overflow soru verilerin bir alt kümesini kullanır.This scenario uses a subset of Stack Overflow question data that includes original questions tagged as JavaScript, their duplicate questions, and their answers. Bir scikit eğitir-yinelenen soru özgün sorusunun her birine ile eşleşen olasılığını tahmin için işlem hattı öğrenin.It trains a scikit-learn pipeline to predict the match probability of a duplicate question with each of the original questions. Bu tahminler, REST API uç noktası kullanarak gerçek zamanlı olarak yapılır.These predictions are made in real time using a REST API endpoint.

Bu mimari için uygulama akışı aşağıdaki gibidir:The application flow for this architecture is as follows:

  1. İstemci kodlanmış soru verileri olan bir HTTP POST isteği gönderir.The client sends an HTTP POST request with the encoded question data.

  2. Flask uygulaması soru istekten ayıklar.The Flask app extracts the question from the request.

  3. Soru için scikit gönderilen-özellik kazandırma sayesinde ve puanlama için işlem hattı modelini öğrenin.The question is sent to the scikit-learn pipeline model for featurization and scoring.

  4. Eşleşen SSS soruları puanlarını ile JSON nesnesine yöneltilen ve istemciye döndürülen.The matching FAQ questions with their scores are piped into a JSON object and returned to the client.

Sonuçları kullanır örnek uygulamanın bir ekran görüntüsü aşağıda verilmiştir:Here is a screenshot of the example app that consumes the results:

Örnek uygulamasının ekran görüntüsü

Senaryo 2: Görüntü sınıflandırma.Scenario 2: Image classification. Bu senaryo, Evrişimsel sinir ağı (CNN) model görüntüleri üzerinde Öngörüler sağlamak için bir web hizmeti olarak dağıtma işlemi gösterilmektedir.This scenario shows how to deploy a Convolutional Neural Network (CNN) model as a web service to provide predictions on images. Bu senaryo için "Giriş verileri" mimarisi diyagramı görüntü dosyalarına ifade eder.For this scenario, "Input Data" in the architecture diagram refers to image files. CNNs görüntü sınıflandırması ve nesne algılama gibi görevler için görüntü işleme oldukça etkilidir.CNNs are very effective in computer vision for tasks such as image classification and object detection. Bu senaryo, TensorFlow, Keras (ile TensorFlow arka uç) ve PyTorch çerçeveleri için tasarlanmıştır.This scenario is designed for the frameworks TensorFlow, Keras (with the TensorFlow back end), and PyTorch. Ancak, bu gerçek zamanlı Öngörüler sağlamak için ayrıntılı öğrenme modelleri kullanan herhangi bir senaryo için genelleştirilerek kapsayabilir.However, it can be generalized to any scenario that uses deep learning models to make real-time predictions.

Bu senaryo Imagenet - 1 K (1.000 sınıflar) veri kümesinde kategorisini tahmin etmek için geliştirilen önceden eğitilmiş bir ResNet-152 modeli kullanır (bkz. aşağıdaki şekilde) ait bir görüntü.This scenario uses a pre-trained ResNet-152 model trained on ImageNet-1K (1,000 classes) dataset to predict which category (see figure below) an image belongs to. Bu tahminler, REST API uç noktası kullanarak gerçek zamanlı olarak yapılır.These predictions are made in real time using a REST API endpoint.

Öngörüler örneği

Derin öğrenme modeli için uygulama akışı aşağıdaki gibidir:The application flow for the deep learning model is as follows:

  1. İstemci kodlanmış resim verileri olan bir HTTP POST isteği gönderir.The client sends an HTTP POST request with the encoded image data.

  2. Flask uygulaması görüntü istekten ayıklar.The Flask app extracts the image from the request.

  3. Görüntü önceden işlenmiş ve modeli Puanlama için gönderildi.The image is preprocessed and sent to the model for scoring.

  4. Puanlama sonuç bir JSON nesnesi yöneltilen ve istemciye döndürülen.The scoring result is piped into a JSON object and returned to the client.

MimariArchitecture

Bu mimari aşağıdaki bileşenlerden oluşur.This architecture consists of the following components.

[Sanal makine] vm (VM).Virtual machine (VM). VM, bir cihazın örnek olarak gösterilen — yerel veya Bulut — bir HTTP isteği gönderebilir.The VM is shown as an example of a device — local or in the cloud — that can send an HTTP request.

[Azure Kubernetes hizmeti] aks (AKS), bir Kubernetes kümesinde uygulama dağıtmak için kullanılır.Azure Kubernetes Service (AKS) is used to deploy the application on a Kubernetes cluster. AKS dağıtımı ve Kubernetes işlemlerini basitleştirir.AKS simplifies the deployment and operations of Kubernetes. Küme, normal Python modelleri veya ayrıntılı öğrenme modelleri için GPU özellikli VM'ler için yalnızca CPU Vm'leri kullanarak yapılandırılabilir.The cluster can be configured using CPU-only VMs for regular Python models or GPU-enabled VMs for deep learning models.

Yük Dengeleyici.Load balancer. AKS tarafından sağlanan bir Yük Dengeleyici Hizmeti harici olarak göstermek için kullanılır.A load balancer, provisioned by AKS, is used to expose the service externally. Yük dengeleyiciden trafik için arka uç pod'ların yönlendirilir.Traffic from the load balancer is directed to the back-end pods.

[Docker Hub] docker Kubernetes kümesinde dağıtılan bir Docker görüntüsü depolamak için kullanılır.Docker Hub is used to store the Docker image that is deployed on Kubernetes cluster. Kullanımı kolaydır ve Docker kullanıcılar için varsayılan görüntü deposu olduğundan bu mimari için docker Hub seçildi.Docker Hub was chosen for this architecture because it's easy to use and is the default image repository for Docker users. [Azure Container Registry] acr bu mimari için de kullanılabilir.Azure Container Registry can also be used for this architecture.

Performansla ilgili önemli noktalarPerformance considerations

Gerçek zamanlı Puanlama mimarileri için aktarım hızı performansı baskın göz önünde bulundurarak haline gelir.For real-time scoring architectures, throughput performance becomes a dominant consideration. Normal Python modelleri için CPU iş yükünü işlemek yeterli olduğunu genellikle bağımlıdır.For regular Python models, it's generally accepted that CPUs are sufficient to handle the workload.

Hızlı bir performans sorunu olduğunda ancak derin öğrenme iş yükleri için GPU'ları genellikle daha iyi sağlama [performans] gpus-vs-cpus CPU'lara göre.However for deep learning workloads, when speed is a bottleneck, GPUs generally provide better performance compared to CPUs. CPU kullanarak GPU performansını eşleştirmek için çok sayıda CPU ile küme genellikle gereklidir.To match GPU performance using CPUs, a cluster with large number of CPUs is usually needed.

İki senaryoda bu mimaride, CPU kullanabilirsiniz, ancak Gpu'lar ayrıntılı öğrenme modelleri için sağlar, önemli ölçüde daha yüksek bir CPU kümesine benzer maliyetinin karşılaştırılan aktarım hızı değerleri.You can use CPUs for this architecture in either scenario, but for deep learning models, GPUs provide significantly higher throughput values compared to a CPU cluster of similar cost. AKS, bu mimari için AKS kullanmanın avantajlarından biri, GPU kullanımı destekler.AKS supports the use of GPUs, which is one advantage of using AKS for this architecture. Ayrıca, ayrıntılı öğrenme dağıtımları genellikle yüksek sayıda parametre ile modelleri kullanır.Also, deep learning deployments typically use models with a high number of parameters. GPU'ları kullanarak model ve bir sorun yalnızca CPU dağıtımlarında web hizmeti arasında kaynakları için Çekişme engeller.Using GPUs prevents contention for resources between the model and the web service, which is an issue in CPU-only deployments.

Ölçeklenebilirlik konusunda dikkat edilmesi gerekenlerScalability considerations

AKS kümesi yalnızca CPU Vm'lerle burada sağlanan normal Python modeller için ilgileniriz olduğunda pod'ların sayısını ölçeklendirme.For regular Python models, where AKS cluster is provisioned with CPU-only VMs, take care when scaling out the number of pods. Kümenin tam olarak yararlanmak için hedeftir.The goal is to fully utilize the cluster. Ölçeklendirme sınırları için pod'ların tanımlanmış ve CPU istekleri bağlıdır.Scaling depends on the CPU requests and limits defined for the pods. Ayrıca Kubernetes destekler [otomatik ölçeklendirme] autoscale-pods ayarlamak için pod'ları CPU kullanımı bir dağıtımdaki pod'ların sayısını veya diğer ölçümleri seçin.Kubernetes also supports autoscaling of the pods to adjust the number of pods in a deployment depending on CPU utilization or other select metrics. [Ölçeklendiriciyi küme] autoscaler (Önizleme) aracı düğümleri pod'ların göre ölçeklendirebilirsiniz.The cluster autoscaler (in preview) can scale agent nodes based on pending pods.

Tek bir GPU bir pod için atanan gibi senaryoları öğrenme, GPU özellikli VM'ler kullanarak derin kaynak barındırabileceğiniz pod'ların demektir.For deep learning scenarios, using GPU-enabled VMs, resource limits on pods are such that one GPU is assigned to one pod. Kullanılan sanal makine türüne bağlı olarak, şunları yapmalısınız [küme düğümlerini ölçeklendirme] scale-cluster hizmet talebi karşılamak üzere.Depending on the type of VM used, you must scale the nodes of the cluster to meet the demand for the service. Kubectl ve Azure CLI kullanarak kolayca bunu yapabilirsiniz.You can do this easily using the Azure CLI and kubectl.

İzleme ve günlüğe kaydetme konularıMonitoring and logging considerations

AKS izlemeAKS monitoring

AKS performans görünürlük için kullanmak [kapsayıcılar için Azure İzleyici] monitor-containers özelliği.For visibility into AKS performance, use the Azure Monitor for containers feature. Denetleyicileri, düğümleri ve Kubernetes ölçümler API aracılığıyla kullanılabilir olan kapsayıcıları bellek ve işlemci ölçümleri toplar.It collects memory and processor metrics from controllers, nodes, and containers that are available in Kubernetes through the Metrics API.

Uygulamanızı dağıtırken, beklendiği gibi çalıştığından, tüm düğümlerde çalışır durumda ve tüm pod'lar çalışır emin olmak için AKS kümesini izleme.While deploying your application, monitor the AKS cluster to make sure it's working as expected, all the nodes are operational, and all pods are running. Hizmetini kullanıyor olsanız da kubectl kubectl ayrıca Kubernetes pod durumunu almak için komut satırı aracı, yönetim ve küme durumunu temel izleme için bir web Pano içerir.Although you can use the kubectl command-line tool to retrieve pod status, Kubernetes also includes a web dashboard for basic monitoring of the cluster status and management.

Kubernetes panosunun ekran görüntüsü

Küme düğümleri ve genel durumu görmek için Git düğümleri Kubernetes Panosu bölümü.To see the overall state of the cluster and nodes, go to the Nodes section of the Kubernetes dashboard. Bir düğüm etkin değil ya da başarısız oldu, bu sayfanın hata günlükleri görüntüleyebilirsiniz.If a node is inactive or has failed, you can display the error logs from that page. Benzer şekilde, Git pod'ların ve dağıtımları pod'ların sayısını ve dağıtımınızın durumunu hakkında bilgi için bölümler.Similarly, go to the Pods and Deployments sections for information about the number of pods and status of your deployment.

AKS günlükleriAKS logs

AKS tüm stdout/stderr günlüklerini kümedeki pod'ları otomatik olarak kaydeder.AKS automatically logs all stdout/stderr to the logs of the pods in the cluster. Bunları görmek için kubectl kullanma ve ayrıca nodu düzeyinde olayları ve günlükleri.Use kubectl to see these and also node-level events and logs. Ayrıntılar için dağıtım adımlarına bakın.For details, see the deployment steps.

Kullanım [kapsayıcılar için Azure İzleyici] monitor-containers ölçümlerini ve günlüklerini Log Analytics çalışma alanınızda depolanmış Linux için Log Analytics aracısını kapsayıcı bir sürümü aracılığıyla toplanacak.Use Azure Monitor for containers to collect metrics and logs through a containerized version of the Log Analytics agent for Linux, which is stored in your Log Analytics workspace.

Güvenlikle ilgili dikkat edilmesi gerekenlerSecurity considerations

Azure Güvenlik Merkezi’ni kullanarak Azure kaynaklarınızın güvenlik durumuna ilişkin genel bir görünüm elde edin.Use Azure Security Center to get a central view of the security state of your Azure resources. Güvenlik Merkezi olası güvenlik sorunlarını izler ve AKS aracı düğümleri izlemek değildir ancak kapsamlı bir resim, dağıtımınızın güvenlik durumunun sağlar.Security Center monitors potential security issues and provides a comprehensive picture of the security health of your deployment, although it doesn't monitor AKS agent nodes. Güvenlik Merkezi, Azure aboneliğine göre yapılandırılır.Security Center is configured per Azure subscription. Açıklanan şekilde güvenlik verileri toplanmasını etkinleştirin Azure aboneliğinizi Güvenlik Merkezi standart katmanına ekleme.Enable security data collection as described in Onboard your Azure subscription to Security Center Standard. Veri toplama etkinleştirilirse Güvenlik Merkezi, söz konusu abonelik altında oluşturulmuş tüm VM’leri otomatik olarak tarar.When data collection is enabled, Security Center automatically scans any VMs created under that subscription.

İşlemleri.Operations. Azure Active Directory (Azure AD) kimlik doğrulama belirtecinizi kullanarak bir AKS kümesi oturum açmak için AKS için Azure AD'yi kullanacak şekilde yapılandırma kullanıcı kimlik doğrulaması.To sign in to an AKS cluster using your Azure Active Directory (Azure AD) authentication token, configure AKS to use Azure AD for user authentication. Küme yöneticileri, ayrıca Kubernetes rol tabanlı erişim denetimi (RBAC) bir kullanıcının kimlik veya dizin grubu üyeliğine göre yapılandırabilirsiniz.Cluster administrators can also configure Kubernetes role-based access control (RBAC) based on a user's identity or directory group membership.

Kullanım RBAC rbac dağıttığınız Azure kaynaklarına erişimi denetlemek.Use RBAC to control access to the Azure resources that you deploy. RBAC, DevOps takımınızın üyelerine yetkilendirme rolleri atamanıza imkan tanır.RBAC lets you assign authorization roles to members of your DevOps team. Bir kullanıcı için birden çok rol atanabilir ve hatta daha fazla bilgi için özel roller oluşturabilirsiniz ayrıntılı izinleri.A user can be assigned to multiple roles, and you can create custom roles for even more fine-grained permissions.

HTTPS.HTTPS. En iyi güvenlik uygulaması olarak uygulama HTTPS'yi zorunlu kılma ve yeniden yönlendirme HTTP istekleri.As a security best practice, the application should enforce HTTPS and redirect HTTP requests. Kullanım bir [giriş denetleyicisine] ingress-controller SSL sonlandırır ve HTTP isteklerini yönlendiren bir ters proxy dağıtma.Use an ingress controller to deploy a reverse proxy that terminates SSL and redirects HTTP requests. Daha fazla bilgi için Azure Kubernetes Service (AKS) bir HTTPS giriş denetleyicisine oluşturma.For more information, see Create an HTTPS ingress controller on Azure Kubernetes Service (AKS).

Kimlik Doğrulaması.Authentication. Bu çözüm, uç noktalara erişimi kısıtlamaz.This solution doesn't restrict access to the endpoints. Bir kuruluş ortamında mimariyi dağıtmak için uç noktaları API anahtarları güvenli ve kullanıcı kimlik doğrulaması türüne istemci uygulamaya ekleyin.To deploy the architecture in an enterprise setting, secure the endpoints through API keys and add some form of user authentication to the client application.

Kapsayıcı kayıt defteri.Container registry. Bu çözüm, Docker görüntüsü depolamak için genel bir kayıt defteri kullanır.This solution uses a public registry to store the Docker image. Uygulamanın bağlı olduğu kod ve model bu görüntü içinde yer alır.The code that the application depends on, and the model, are contained within this image. Kurumsal uygulamaları, kötü amaçlı kod çalışan karşı korunmanıza yardımcı olur ve kapsayıcı içindeki bilgileri tehlikeye girmesini tutmaya yardımcı olmak için özel bir kayıt defteri kullanmanız gerekir.Enterprise applications should use a private registry to help guard against running malicious code and to help keep the information inside the container from being compromised.

DDoS koruması.DDoS protection. Etkinleştirmeyi düşünün DDoS koruması standart.Consider enabling DDoS Protection Standard. Standart DDoS koruması, temel DDoS koruması, Azure platformunun bir parçası olarak etkin olsa da, özellikle Azure sanal ağ kaynakları için ayarlanmış azaltma özellikleri sağlar.Although basic DDoS protection is enabled as part of the Azure platform, DDoS Protection Standard provides mitigation capabilities that are tuned specifically to Azure virtual network resources.

Günlüğe kaydetme.Logging. Kullanıcı parolaları ve güvenliği dolandırıcılığı yapmak için kullanılabilecek diğer bilgileri çıkarma gibi günlük verileri depolamadan önce en iyi yöntemleri kullanın.Use best practices before storing log data, such as scrubbing user passwords and other information that could be used to commit security fraud.

DağıtımDeployment

Bu başvuru mimarisini dağıtmak için GitHub depoları içinde açıklanan adımları izleyin:To deploy this reference architecture, follow the steps described in the GitHub repos: