CATS बनाम DOGS + FLASK + DOCKER + KUBERNETES

कभी आपने सोचा है कि मशीन लर्निंग वेब ऐप का निर्माण कैसे किया जाए और इसे किस पैमाने पर लागू किया जाए और इसे क्लाउड में सभी के लिए प्रबंधित किया जाए? आप सही जगह पर आए है। इस पोस्ट में मैं अपने एमएल वेब ऐप को कंटेनर में रखने और केर्बनेट इंजन का उपयोग करके Google क्लाउड में इसे तैनात करने की मूल अवधारणाओं से गुजरूंगा।

आप यहाँ पूरा कोड पा सकते हैं। एक त्वरित डेमो के लिए http://130.211.229.36/.( केवल लोड करें jpg चित्र)

पूर्वापेक्षाएँ = डॉकरों की समझ

सबसे पहले kubernetes क्या है? डब कंटेनर के लिए कुबेरनेट्स एक खुला स्रोत ऑर्केस्ट्रेशन सिस्टम है, यह एक कंप्यूट क्लस्टर में नोड्स पर शेड्यूलिंग को संभालता है और सक्रिय रूप से कार्यभार का प्रबंधन करता है ताकि यह सुनिश्चित हो सके कि उनका राज्य उपयोगकर्ता के घोषित इरादों से मेल खाता है, लेबल की अवधारणा का उपयोग करते हुए और यह उन कंटेनरों को पॉड करता है जो एक बनाते हैं। आसान प्रबंधन और खोज के लिए तार्किक इकाइयों में आवेदन।

कुबेरनेट्स आर्किटेक्चर

मास्टर और कार्यकर्ता नोड्स के साथ कुबेरनेट्स क्लस्टर का अवलोकन। सभी अक्लस्टर गतिविधियों को मास्टर नोड से नियंत्रित किया जाता है जिसमें एक एपीआई चल रहा है। कुबर्केट कुबेरनेट्स समूहों के खिलाफ कमांड चलाने के लिए एक कमांड लाइन इंटरफ़ेस है।

प्रत्येक नोड को लेबल और टैग दिए गए हैं। आपका कंटेनरीकृत ऐप एक नोड में एक पॉड के अंदर चलता है और मास्टर नोड में तैनात किया गया है।

एक NODE

यह एक नोड है जिसमें उनके पॉड आईपी पते के साथ कई पॉड हैं।

पॉड्स- ये वास्तुकला की मूल इकाई हैं जिनमें आमतौर पर 2 कंटेनर होते हैं। कुबेरनेट्स में प्रत्येक पॉड को क्लस्टर के भीतर एक अद्वितीय पॉड आईपी पता सौंपा जाता है और कुबेरनेट्स एपीआई के माध्यम से मैन्युअल रूप से प्रबंधित किया जा सकता है, ए पॉड एक वॉल्यूम को परिभाषित कर सकता है, जैसे कि स्थानीय डिस्क निर्देशिका या नेटवर्क डिस्क, और कंटेनरों में इसे एक्सपोज करें। फली।

और अंत में एक सेवा का उपयोग करके अपने ऐप को एक्सपोज़ करना आता है। जब एक श्रमिक नोड मर जाता है, तो नोड पर चलने वाले पॉड्स भी खो जाते हैं। एक प्रतिकृति सेट तब गतिशील रूप से आपके एप्लिकेशन को चालू रखने के लिए नए पॉड्स के निर्माण के माध्यम से क्लस्टर को वांछित स्थिति में ला सकता है। यह service.yaml फ़ाइल के माध्यम से किया जाता है।

कुबेरनेट्स के बुनियादी ढांचे को बेहतर ढंग से समझने के लिए मैं एक वीडियो की सिफारिश करता हूं जो सभी अवधारणाओं को सरलीकृत तरीके से लिंक करता है।

आइए हमारा वेब ऐप शुरू करें।

मैंने अपने न्यूरल नेटवर्क मॉडल को प्रशिक्षित किया और इसे JSON में सहेजा और वजन को एक h5 फ़ाइल में भी सहेजा। मैंने JSON से प्रशिक्षित मॉडल को लोड करने और नई छवि की भविष्यवाणी करने के लिए एक use_model.py लिखा।

मैंने एक वेब ऐप बनाने के लिए FLASK का उपयोग किया। आवेदन सरल है यह छवि लेता है और use_model.py का उपयोग करके बिल्ली या कुत्ते की भविष्यवाणी करता है और कहता है कि "आप एक DOG हैं" या "आप एक CAT हैं"। App.py इस तरह जाता है (मैंने कंटेनर बनाते समय होस्ट = 0.0.0.0 बदल दिया है।)

फिर सबसे महत्वपूर्ण हिस्सा डॉकरफी लिखना है जो डॉकटर छवि बनाने में सक्षम है।

रन कमांड apt-get update && स्थापित python3…

अपनी वर्तमान निर्देशिका की प्रतिलिपि बनाएँ। पाइप आवश्यकताओं को स्थापित करें

EXPOSE पोर्ट (जहां आपका app.py सेवा कर रहा है)

फिर कमांड python3 app.py चलाएँ। CMD को एंट्रीपॉइंट से हमेशा जोड़ा जाएगा ताकि आप उसे चलाने के लिए अंतिम कमांड दे सकें।

आप स्थानीय रूप से कंटेनर का निर्माण कर सकते हैं और अपने कंटेनरीकृत फ्लास्क ऐप का परीक्षण कर सकते हैं (अपनी परियोजना निर्देशिका में इन कमांडों को चलाएं)

docker बिल्ड -t image_classifier: नवीनतम।
docker रन -p -p 5500: 3000 image_classifier

यह आपका app.py चलेगा और पोर्ट फॉरवर्डिंग के साथ आप अपने ब्राउज़र में http: // localhost: 5000 पर वेबएप का उपयोग कर सकते हैं।

अब सबसे प्रतीक्षित भाग आता है।

Cloud.google.com में एक खाता बनाएं, भुगतान को कुबेरनेट इंजन तक पहुंचने में सक्षम बनाता है। कुबेरनेट इंजन पर नेविगेट करें और कंसोल विंडो के शीर्ष पर क्लाउड शेल बटन को सक्रिय करें पर क्लिक करें। आपको नीचे की ओर एक कंसोल मिलेगा जिसे आप कमांड चला सकते हैं यह कंसोल gcloud, docker और kubectl के साथ पहले से इंस्टॉल आता है। एक बार सांत्वना में:

git क्लोन 
cd your_project

नीचे दिए गए आदेश को चलाकर gcloud पर पूर्व-कॉन्फ़िगर प्रोजेक्ट ID प्राप्त करके अपने शेल में PROJECT_ID पर्यावरण चर सेट करें:

निर्यात PROJECT_ID = "$ (gcloud config get-value project -q)"

PROJECT_ID का मान कंटेनर छवि को आपके निजी कंटेनर रजिस्ट्री में धकेलने के लिए टैग करने के लिए उपयोग किया जाएगा।

अब आप कंटेनर छवि बना सकते हैं:

docker build -t gcr.io/> पेअरलाइडरप्रोजेक्ट_डायरेक्ट्स / योगिमेज_नाम>:1.0.0
docker धक्का

इसके निर्माण में आपको कुछ समय लगेगा, निर्माण के बाद आप "डोकर छवियों" कमांड का उपयोग करके सत्यापित कर सकते हैं। अब आप अपना क्लस्टर बना सकते हैं:

कंटेनर छवि का निर्माण

कंटेनर क्लस्टर बनाना:

अब जब कंटेनर छवि एक रजिस्ट्री में संग्रहीत है, तो आपको कंटेनर छवि को चलाने के लिए एक कंटेनर क्लस्टर बनाने की आवश्यकता है। एक क्लस्टर में कुबेरनेट चलाने वाले कम्प्यूट इंजन वीएम इंस्टेंस का एक पूल होता है।

gcloud कंटेनर क्लस्टर  - zone = us-central1-f --num-nodes = 2 बनाते हैं

पूरा होने में आपको थोड़ा समय लगेगा, पूरा होने के बाद आप "gcloud कंप्यूट इंस्टेंस लिस्ट" कमांड से सत्यापित कर सकते हैं।

आपके आवेदन की तैनाती:

kubectl रन <कुछ नाम> --image = gcr.io / $ {PROJECT_ID} / : 1.0.0-port 3000

"Kubectl पॉड्स प्राप्त करें" परिनियोजन द्वारा बनाए गए पॉड को देखने के लिए आदेश।

अपने आवेदन को इंटरनेट पर उजागर करना:

kubectl परिनियोजन एक्सपोज़ <कुछ नाम> - टाइप = लोडबेलर --पोर्ट 80-target-port 3000

ऊपर दिए गए kubectl कमांड कमांड सर्विस संसाधन बनाता है, जो आपके एप्लिकेशन के पोड्स को नेटवर्किंग और आईपी सपोर्ट प्रदान करता है। कुबेकल रन कमांड द्वारा निर्मित पॉड पिछले चरण से है।

kubectl सेवा प्राप्त करें

आउटपुट आपको एक बाहरी आईपी देगा (नीचे की छवि के नीचे):

अपना बाहरी आईपी प्राप्त करें

अपने आवेदन के लिए बाहरी IP पता निर्धारित करने के बाद, IP पते की प्रतिलिपि बनाएँ। अपने ब्राउज़र को इस URL पर इंगित करें (जैसे कि http://130.211.229.36) यह जांचने के लिए कि क्या आपका एप्लिकेशन पहुँच योग्य है।

बाहरी आईपी पर जाने पर

नोट 1। जहाँ भी मैंने उपयोग किया है <> अपने इच्छित नामों को जोड़ने के लिए स्वतंत्र महसूस करें। 2. मैंने अपने github में yaml फाइलें भी लिखी हैं यदि आप Digitalocean या किसी orher क्लाउड प्लेटफ़ॉर्म का उपयोग कर रहे हैं।

यह ब्लॉग सहायक है। किसी भी संदेह और प्रश्न के लिए नीचे टिप्पणी करें।