क्लाउड पर एमएलफ्लो

May 09 2023
इस लेख में, मैं इस बारे में बात करने जा रहा हूं कि क्लाउड (एडब्ल्यूएस और जीसीपी) पर एमएलफ्लो को कैसे होस्ट किया जाए, मशीन लर्निंग प्रयोग, लॉग पैरामीटर, मेट्रिक्स चलाएं और मॉडल को मॉडल रजिस्ट्री में स्टोर करें एमएलफ्लो क्या है? mlflow एक ओपन सोर्स प्लेटफॉर्म है जो एंड-टू-एंड मशीन लर्निंग लाइफसाइकिल को मैनेज करता है। इसकी मुख्य कार्यात्मकताएं हैं: हम स्थानीय मशीनों में एमएलफ्लो चला सकते हैं, लेकिन इसे क्लाउड पर होस्ट करने के अपने फायदे हैं हमारे पास एमएलफ्लो में निम्नलिखित 3 मुख्य घटक हैं: उपरोक्त आर्किटेक्चर आरेख से पता चलता है कि हमारे लिए आवश्यक सभी एडब्ल्यूएस सेवाएं क्या हैं और वे कैसे बातचीत करते हैं एडब्ल्यूएस पर एमएलफ्लो होस्ट करने का आदेश।

इस लेख में, मैं इस बारे में बात करने जा रहा हूं कि क्लाउड (AWS और GCP) पर mlflow को कैसे होस्ट किया जाए, मशीन लर्निंग प्रयोग, लॉग पैरामीटर, मेट्रिक्स चलाएं और मॉडल को मॉडल रजिस्ट्री में स्टोर करें।

एमएलफ्लो क्या है?

mlflow एक ओपन सोर्स प्लेटफॉर्म है जो एंड-टू-एंड मशीन लर्निंग लाइफसाइकिल को मैनेज करता है। इसकी मुख्य कार्यात्मकताएं हैं:

  1. प्रयोग ट्रैकिंग: सभी मशीन लर्निंग प्रयोगों और उन्हें क्वेरी करने की क्षमता को बनाए रखता है
  2. Reproducibility: यह मशीन लर्निंग कोड को पैकेज करता है और किसी भी प्लेटफॉर्म पर उन परिणामों को पुन: उत्पन्न करने में सक्षम होता है
  3. तैनाती: एमएल मॉडल को विभिन्न प्रकार के वातावरण में तैनात करने की क्षमता (उदा: एडब्ल्यूएस सैजमेकर, जीसीपी क्लाउड रन, .. आदि)
  4. मॉडल रजिस्ट्री: केंद्रीकृत रिपॉजिटरी में मॉडल के कई संस्करणों को बनाए रखना

हम स्थानीय मशीनों में एमएलफ्लो चला सकते हैं, लेकिन इसे क्लाउड पर होस्ट करने के अपने फायदे हैं

  1. हम क्लाउड स्टोरेज, कंप्यूटिंग शक्ति, सुरक्षा आदि का लाभ उठा सकते हैं
  2. टीम के प्रत्येक सदस्य के सभी प्रयोगों का केंद्रीकृत दृश्य

एमएलफ्लो में हमारे पास निम्नलिखित 3 मुख्य घटक हैं:

  1. डैशबोर्ड: यह एक यूआई है जहां हम प्रत्येक प्रयोग के लिए प्रयोगों की सूची, मॉडल पैरामीटर, मेट्रिक्स .. आदि देख सकते हैं
  2. मेटा स्टोर: यह सभी प्रयोगों, मापदंडों, मेट्रिक्स आदि को संग्रहीत करने के लिए एक बैकएंड डेटाबेस (MySql) का उपयोग करता है।
  3. आर्टिफैक्टरी स्टोर: यह बड़ी फ़ाइलों के लिए इसका उपयोग करता है, जैसे क्रमबद्ध मॉडल। आम तौर पर हम Amazon S3 या GCP क्लाउड स्टोरेज जैसे वितरित फ़ाइल सिस्टम का उपयोग करते हैं।
  1. डाक में काम करनेवाला मज़दूर
  2. MySql डेटाबेस
  3. वितरित फ़ाइल सिस्टम
एमएलफ्लो-एडब्ल्यूएस आर्किटेक्चर

उपरोक्त आर्किटेक्चर आरेख से पता चलता है कि हमें आवश्यक सभी AWS सेवाएँ क्या हैं और AWS पर mlflow होस्ट करने के लिए वे कैसे इंटरैक्ट करते हैं। हम AWS Fargate का उपयोग करके mlflow लॉन्च करने जा रहे हैं जो सर्वर रहित है।

सबसे पहले, हमें एक डॉकर फ़ाइल बनाने की ज़रूरत है, जो एमएलफ्लो और इसकी निर्भरताओं को पैकेज करती है। हम निम्नलिखित निर्भरताओं को आवश्यकताएँ.txt में परिभाषित करते हैं

एमएलफ्लो स्थापना और सर्वर चलाने के लिए डॉकर फ़ाइल

डॉकर फ़ाइल में चर के रूप में बकेट और अन्य डेटाबेस कनेक्शन विवरण हैं, इन मानों को फ़ारगेट कार्य परिभाषा में पर्यावरण चर के रूप में कॉन्फ़िगर किया जाएगा

एक बार हमारे पास dockerfile हो जाने के बाद, docker छवि बनाने के लिए नीचे दी गई कमांड चलाएँ

docker build -t mlflowtracker .

एडब्ल्यूएस ईसीआर रिपॉजिटरी बनाएं

अब, हमें एडब्ल्यूएस में कंटेनर रजिस्ट्री पर स्थानीय रूप से बनाई गई डॉकर छवि को धक्का देना होगा।

# Login 
aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com

# Tag local docker image
docker tag <image_name> aws_account_id.dkr.ecr.region.amazonaws.com/repository_name:tag

# Push image
docker push aws_account_id.dkr.ecr.region.amazonaws.com/repository_name:tag

आगे हमें मेटा जानकारी संग्रहीत करने के लिए एमएलफ्लो के लिए MySql की आवश्यकता है, जिसके लिए हम AWS RDS MySql उदाहरण बनाने जा रहे हैं

AWS RDS में MySql बनाने के चरणों के लिए, यहाँ क्लिक करें

मॉडल कलाकृतियों को स्टोर करने के लिए हमें एमएलफ्लो के लिए एस 3 बाल्टी बनाने की जरूरत है। Aws कंसोल पर जाएं, s3 खोजें, बकेट नाम प्रदान करें और सुनिश्चित करें कि आपने सभी सार्वजनिक एक्सेस को ब्लॉक कर दिया है और 'बकेट बनाएं' पर क्लिक करें

S3 बाल्टी बनाएँ

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

ईसीएस क्लस्टर बनाएं

ईसीएस में, एक कार्य दानेदार स्तर की इकाई है जो डॉकर छवि को चलाता है, यह कुबेरनेट्स में एक फली के समान है। इसलिए, हमें कार्य परिभाषा बनाने की आवश्यकता है जो उस डॉकर छवि का उपयोग करने जा रही है जिसे हमने ईसीआर पर अपलोड किया है। यहां हम पर्यावरण चर मूल्यों को परिभाषित करते हैं। टास्क डेफिनिशन बनाने के लिए, अमेज़ॅन इलास्टिक कंटेनर सर्विस > टास्क डेफिनिशन > क्रिएट न्यू टास्क डेफिनिशन पर जाएं और टास्क का नाम, इमेज यूरी प्रदान करें जिसे हमने ईसीआर, कंटेनर पोर्ट और पर्यावरण चर पर अपलोड किया है।

ईसीएस कार्य परिभाषा

कार्य परिभाषा के निर्माण के दौरान ecsTaskExecution भूमिका का चयन करें जो AWS द्वारा स्वचालित रूप से बनाई गई है, सुनिश्चित करें कि आप s3 एक्सेस पॉलिसी जोड़ते हैं ताकि यह s3 बकेट को पढ़ और लिख सके

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

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

टास्क ऑर्केस्ट्रेशन के लिए ईसीएस सेवा
ईसीएस सर्विस लोड बैलेंसर

एक बार जब हम सेवा बना लेते हैं, तो यह आवश्यक संख्या में कार्य करता है, हम एमएलफ्लो डैशबोर्ड को लॉन्च करने के लिए लोड बैलेंसर यूआरएल का उपयोग कर सकते हैं।

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

अब जब हमने AWS पर mlflow की मेजबानी की है, तो क्लाउड पर mlflow की ओर इशारा करके अपने स्थानीय से मशीन लर्निंग प्रयोग चलाते हैं

प्रयोग चलाने के बाद, हम प्रयोग के दौरान लॉग किए गए एमएलफ्लो में सभी पैरामीटर, मेट्रिक्स और मॉडल देख सकते हैं

एमएलफ्लो प्रयोगात्मक परिणामों के साथ - एडब्ल्यूएस

जीसीपी पर एमएलफ्लो

एमएलफ्लो-जीसीपी आर्किटेक्चर

उपरोक्त आर्किटेक्चर आरेख GCP सेवाओं को दिखाता है जिनकी हमें आवश्यकता होती है और GCP पर mlflow को होस्ट करने के लिए वे कैसे इंटरैक्ट करते हैं। हम GCP Cloudrun का उपयोग करके mlflow लॉन्च करने जा रहे हैं जो सर्वर रहित है।

हम एक ही Dockerfile और आवश्यकताएँ.txt का उपयोग कर सकते हैं (कृपया AWS अनुभाग पर MLflow देखें) सिवाय इसके कि हमें boto3 को google-cloud-storage में बदलने की आवश्यकता है

डिफ़ॉल्ट आर्टिफैक्टरी के लिए डॉकरफाइल के अंदर चर, डेटाबेस कनेक्शन विवरण को Google क्लाउडरुन में पर्यावरण चर के रूप में कॉन्फ़िगर किया जाएगा

डॉकर इमेज को बनाने, टैग करने और Google कंटेनर रजिस्ट्री (GCR) में भेजने के लिए निम्नलिखित कमांड चलाएँ

# Build docker image
docker build -t mlflowtracker-gcp .

# Install docker credential helper using gcloud
gcloud components install docker-credential-gcr docker-credential-gcr configure-docker

# Tag docker image
docker tag <local_image_name> gcr.io/gcp_project_id/mlflowtracker-gcp:latest

# Push docker image
docker push gcr.io/gcp_project_id/mlflowtracker-gcp:latest

एमएलफ्लो मेटा स्टोर के लिए जीसीपी माईएसक्यूएल इंस्टेंस क्रिएशन

हमने DB उदाहरण बनाया है, अब एक डेटाबेस और एक उपयोगकर्ता बनाने की आवश्यकता है ताकि mlflow डेटाबेस से जुड़ने के लिए इन विवरणों का उपयोग कर सके। SQL पेज में, डेटाबेस पर क्लिक करें और डेटाबेस नाम प्रदान करने के लिए डेटाबेस बनाएँ पर क्लिक करें। इसी प्रकार उपयोगकर्ता लिंक पर क्लिक करें और उपयोगकर्ता नाम और पासवर्ड प्रदान करें

GCP MySQL डाटाबेस निर्माण
GCP MySQL डेटाबेस उपयोगकर्ता निर्माण

मॉडल कलाकृतियों को स्टोर करने के लिए हमें एमएलफ्लो के लिए क्लाउड स्टोरेज बकेट बनाने की जरूरत है। क्लाउड स्टोरेज बकेट बनाने के लिए, GCP कंसोल में क्लाउड स्टोरेज खोजें, 'क्रिएट' बटन पर क्लिक करें, बकेट का नाम, क्षेत्र प्रदान करें और क्रिएट पर क्लिक करें

एमएलफ्लो मॉडल आर्टिफैक्टरी के लिए जीसीपी बाल्टी

हम जीसीपी में क्लाउडरून सेवा बनाने जा रहे हैं जो कंटेनर रजिस्ट्री पर अपलोड की गई डॉकर छवि का उपयोग करने जा रही है। क्लाउड रन इंस्टेंस बनाने के लिए, क्लाउड रन पेज पर जाएं, क्रिएट सर्विस पर क्लिक करें, जीसीआर पर अपलोड की गई कंटेनर इमेज का चयन करें, कंटेनर पोर्ट, सीपीयू और मेमोरी वैल्यू प्रदान करें, ऑटोस्केलिंग और पर्यावरण चर के लिए न्यूनतम और अधिकतम इंस्टेंस।

जीसीपी क्लाउड्रन
जीसीपी क्लाउडरून कॉन्फ़िगरेशन

ध्यान दें: सुनिश्चित करें कि आपके द्वारा क्लाउडरुन में चुने गए सेवा खाते की क्लाउड स्टोरेज तक पहुंच है, अन्यथा मॉडल विरूपण साक्ष्य अपलोड करना विफल हो जाएगा

अब जबकि हमने GCP पर mlflow को होस्ट किया है, चलिए क्लाउड पर mlflow की ओर इशारा करके अपने स्थानीय से मशीन लर्निंग प्रयोग चलाते हैं

प्रयोग चलाने के बाद, हम प्रयोग के दौरान लॉग किए गए एमएलफ्लो में सभी पैरामीटर, मेट्रिक्स और मॉडल देख सकते हैं

mlflow प्रयोगात्मक परिणामों के साथ - GCP

नोट: हमने सभी क्लाउड संसाधनों को मैन्युअल रूप से कंसोल का उपयोग करके बनाया है, इंफ्रास्ट्रक्चर को कोड (टेराफॉर्म या क्लाउडफॉर्मेशन) के रूप में उपयोग करना अच्छा अभ्यास है

मुझे आशा है कि आपको यह अच्छी तरह समझ आ गया होगा कि हम AWS और GCP क्लाउड प्लेटफ़ॉर्म पर mlflow को कैसे होस्ट कर सकते हैं और क्लाउड पर मशीन लर्निंग प्रयोग कैसे चला सकते हैं

हैप्पी लर्निंग !!