एमएलफ़्लो एक ओपन-सोर्स प्लेटफ़ॉर्म है जिसे संपूर्ण मशीन लर्निंग जीवनचक्र को प्रबंधित करने के लिए डिज़ाइन किया गया है। डेटाब्रिक्स ने इसे अपने स्वयं के मशीन लर्निंग विकास और परिनियोजन प्रक्रियाओं में आने वाली चुनौतियों का समाधान करने के लिए एक आंतरिक परियोजना के रूप में बनाया। एमएलफ़्लो को बाद में जून 2018 में एक ओपन-सोर्स प्रोजेक्ट के रूप में जारी किया गया था।
संपूर्ण जीवनचक्र के प्रबंधन के लिए एक उपकरण के रूप में, एमएलफ़्लो में निम्नलिखित घटक शामिल हैं।
इन सभी क्षमताओं को एक विकास मशीन पर स्थापित करना संभव है ताकि इंजीनियर उत्पादन स्थापना में गड़बड़ी के बारे में चिंता किए बिना अपने दिल की सामग्री के साथ प्रयोग कर सकें।
MLflow को स्थापित और सेटअप करने के लिए उपयोग की जाने वाली सभी फ़ाइलें हमारे Github रिपॉजिटरी में पाई जा सकती हैं।
MLFlow दस्तावेज़ में MLFlow स्थापित करने के लिए कम से कम 6 विकल्प सूचीबद्ध हैं। यह ज़रूरत से ज़्यादा लग सकता है, लेकिन ये विकल्प डेटाबेस के लिए अलग-अलग प्राथमिकताओं और नेटवर्क जटिलता के विभिन्न स्तरों को समायोजित करते हैं।
वह विकल्प जो ऐसे संगठन के लिए सबसे उपयुक्त है जिसमें बड़े डेटासेट और बिल्डिंग मॉडल का उपयोग करने वाली कई टीमें हैं जो स्वयं काफी बड़े हो सकते हैं, नीचे दिखाया गया है। इस विकल्प के लिए तीन सर्वरों के सेटअप की आवश्यकता है - एक ट्रैकिंग सर्वर, एक PostgreSQL डेटाबेस, और एक S3 ऑब्जेक्ट स्टोर - हमारा कार्यान्वयन MiniIO का उपयोग करेगा।
ट्रैकिंग सर्वर एमएलफ्लो कार्यक्षमता तक पहुंचने के लिए एक इंजीनियर की विकास मशीन से एकल प्रवेश बिंदु है। (इसके नाम से मूर्ख मत बनो - इसमें ऊपर सूचीबद्ध सभी घटक शामिल हैं - ट्रैकिंग, मॉडल, प्रोजेक्ट और रिपॉजिटरी।) ट्रैकिंग सर्वर संस्थाओं को संग्रहीत करने के लिए PostgreSQL का उपयोग करता है। इकाइयाँ रन, पैरामीटर, मेट्रिक्स, टैग, नोट्स और मेटाडेटा हैं। (बाद में इस पर अधिक जानकारी दी जाएगी।) हमारे कार्यान्वयन में ट्रैकिंग सर्वर कलाकृतियों को संग्रहीत करने के लिए मिनिओ तक पहुंचता है। कलाकृतियों के उदाहरण मॉडल, डेटासेट और कॉन्फ़िगरेशन फ़ाइलें हैं।
इन दिनों इंजीनियरों के लिए उपलब्ध आधुनिक टूलींग के बारे में अच्छी बात यह है कि आप कंटेनरों का उपयोग करके - टूलींग विकल्प और नेटवर्क कनेक्टिविटी सहित - उत्पादन वातावरण का अनुकरण कर सकते हैं। वही मैं इस पोस्ट में दिखाऊंगा. मैं दिखाऊंगा कि कंटेनर में चल रही सेवाओं के रूप में ऊपर वर्णित सर्वर को स्थापित करने के लिए डॉकर कंपोज़ का उपयोग कैसे करें। इसके अतिरिक्त, एमएलफ़्लो का कॉन्फ़िगरेशन इस तरह सेट किया गया है कि यदि आप चाहें तो आप मिनिओ के मौजूदा उदाहरण का उपयोग कर सकते हैं। इस पोस्ट में, मैं दिखाऊंगा कि मिनिओ का बिल्कुल नया उदाहरण कैसे तैनात किया जाए, लेकिन हमारे जीथब रिपॉजिटरी की फ़ाइलों में एक `डॉकर-कंपोज़` फ़ाइल है जो दिखाती है कि मिनिओ के मौजूदा उदाहरण से कैसे कनेक्ट किया जाए।
नीचे उन सभी चीज़ों की सूची दी गई है जिन्हें इंस्टॉल करने की आवश्यकता है। इस सूची में सर्वर शामिल हैं जो कंटेनरों में सेवाएं बन जाएंगे (मिनियो, पोस्टग्रेज और एमएलफ्लो), साथ ही एसडीके जिनकी आपको आवश्यकता होगी (मिनियो और एमएलफ्लो)।
डॉकर डेस्कटॉप
डॉकर कंपोज़ के माध्यम से एमएलफ्लो ट्रैकिंग सर्वर
डॉकर कंपोज़ के माध्यम से मिनियो सर्वर
डॉकर कंपोज़ के माध्यम से PostgresSQL
पाइप इंस्टाल के माध्यम से एमएलएफफ्लो एसडीके
पिप इंस्टाल के माध्यम से मिनियो एसडीके
आइए डॉकर डेस्कटॉप से शुरू करें, जो हमारी डॉकर कंपोज़ सेवाओं के लिए होस्ट के रूप में काम करेगा।
आप डॉकर की साइट पर अपने ऑपरेटिंग सिस्टम के लिए उपयुक्त इंस्टॉलेशन पा सकते हैं। यदि आप मैक पर डॉकर डेस्कटॉप स्थापित कर रहे हैं, तो आपको यह जानना होगा कि आपका मैक किस चिप का उपयोग कर रहा है - ऐप्पल या इंटेल। आप इसे अपने Mac के ऊपरी बाएँ कोने में Apple आइकन पर क्लिक करके और "इस Mac के बारे में" मेनू विकल्प पर क्लिक करके निर्धारित कर सकते हैं।
अब हम अपनी सेवाएँ स्थापित करने के लिए तैयार हैं।
MLFLow ट्रैकिंग सर्वर, PostgresSQL और MiniIO को नीचे दिखाए गए डॉकर कंपोज़ फ़ाइल का उपयोग करके सेवाओं के रूप में स्थापित किया जाएगा।
version: "3.3" services: db: restart: always image: postgres container_name: mlflow_db expose: - "${PG_PORT}" networks: - backend environment: - POSTGRES_USER=${PG_USER} - POSTGRES_PASSWORD=${PG_PASSWORD} - POSTGRES_DATABASE=${PG_DATABASE} volumes: - ./db_data:/var/lib/postgresql/data/ healthcheck: test: ["CMD", "pg_isready", "-p", "${PG_PORT}", "-U", "${PG_USER}"] interval: 5s timeout: 5s retries: 3 s3: restart: always image: minio/minio container_name: mlflow_minio volumes: - ./minio_data:/data ports: - "${MINIO_PORT}:9000" - "${MINIO_CONSOLE_PORT}:9001" networks: - frontend - backend environment: - MINIO_ROOT_USER=${MINIO_ROOT_USER} - MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD} - MINIO_ADDRESS=${MINIO_ADDRESS} - MINIO_PORT=${MINIO_PORT} - MINIO_STORAGE_USE_HTTPS=${MINIO_STORAGE_USE_HTTPS} - MINIO_CONSOLE_ADDRESS=${MINIO_CONSOLE_ADDRESS} command: server /data healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 20s retries: 3 tracking_server: restart: always build: ./mlflow image: mlflow_server container_name: mlflow_server depends_on: - db ports: - "${MLFLOW_PORT}:5000" networks: - frontend - backend environment: - AWS_ACCESS_KEY_ID=${MINIO_ACCESS_KEY} - AWS_SECRET_ACCESS_KEY=${MINIO_SECRET_ACCESS_KEY} - MLFLOW_S3_ENDPOINT_URL=http://s3:${MINIO_PORT} - MLFLOW_S3_IGNORE_TLS=true command: > mlflow server --backend-store-uri postgresql://${PG_USER}:${PG_PASSWORD}@db:${PG_PORT}/${PG_DATABASE} --host 0.0.0.0 --serve-artifacts --artifacts-destination s3://${MLFLOW_BUCKET_NAME} healthcheck: test: ["CMD", "curl", "-f", "http://localhost:${MLFLOW_PORT}/"] interval: 30s timeout: 10s retries: 3 volumes: db_data: minio_data: networks: frontend: driver: bridge backend: driver: bridge
ध्यान देने योग्य कुछ बातें हैं जो कुछ गलत होने पर समस्याओं का निवारण करने में आपकी सहायता करेंगी। सबसे पहले, MiniIO और PostgreSQL दोनों डेटा संग्रहीत करने के लिए स्थानीय फ़ाइल सिस्टम का उपयोग कर रहे हैं। PostgreSQL के लिए, यह `db_data` फ़ोल्डर है और MiniIO के लिए, यह `minio_data` फ़ोल्डर है। यदि आप कभी भी साफ़ इंस्टालेशन के साथ शुरुआत करना चाहते हैं, तो इन फ़ोल्डरों को हटा दें।
इसके बाद, यह डॉकर कंपोज़ फ़ाइल कॉन्फ़िगरेशन संचालित है। उदाहरण के लिए, PostgreSQL डेटाबेस नाम को `mlflow` में हार्ड कोडिंग करने के बजाय, नाम डॉकर कंपोज़ फ़ाइल में निम्नलिखित सिंटैक्स का उपयोग करके नीचे दिखाए गए `config.env` फ़ाइल से आता है - `${PG_DATABASE}`।
# Postgres configuration PG_USER=mlflow PG_PASSWORD=mlflow PG_DATABASE=mlflow PG_PORT=5432 # MLflow configuration MLFLOW_PORT=5000 MLFLOW_BUCKET_NAME=mlflow # MinIO access keys - these are needed by MLflow MINIO_ACCESS_KEY=XeAMQQjZY2pTcXWfxh4H MINIO_SECRET_ACCESS_KEY=wyJ30G38aC2UcyaFjVj2dmXs1bITYkJBcx0FtljZ # MinIO configuration MINIO_ROOT_USER: 'minio_user' MINIO_ROOT_PASSWORD: 'minio_pwd' MINIO_ADDRESS: ':9000' MINIO_STORAGE_USE_HTTPS: False MINIO_CONSOLE_ADDRESS: ':9001' MINIO_PORT=9000 MINIO_CONSOLE_PORT=9001
इन सेवाओं के लिए आवश्यक सभी पर्यावरण चर इस फ़ाइल में सेट किए गए हैं। इस कॉन्फ़िगरेशन फ़ाइल में इन सेवाओं के लिए एक-दूसरे से बात करने के लिए आवश्यक जानकारी भी शामिल है। ध्यान दें कि यह पर्यावरण चर का उपयोग है जो एमएलफ्लो ट्रैकिंग सर्वर को सूचित करता है कि मिनिओ तक कैसे पहुंचा जाए। दूसरे शब्दों में, यूआरएल (पोर्ट नंबर सहित), एक्सेस कुंजी, गुप्त एक्सेस कुंजी और बकेट। यह मुझे डॉकर कंपोज़ का उपयोग करने के बारे में मेरे अंतिम और सबसे महत्वपूर्ण बिंदु पर ले जाता है - पहली बार जब आप इन सेवाओं को लाते हैं, तो एमएलफ्लो ट्रैकिंग सेवाएं काम नहीं करेंगी क्योंकि आपको पहले मिनिओ यूआई में जाना होगा, अपनी चाबियाँ प्राप्त करनी होंगी और बकेट बनाना होगा जिसका उपयोग ट्रैकिंग सेवा कलाकृतियों को संग्रहीत करने के लिए करेगी।
चलो अब ये करते हैं. नीचे दिए गए आदेश का उपयोग करके पहली बार सेवाएँ प्रारंभ करें।
docker-compose --env-file config.env up -d --build
सुनिश्चित करें कि आप इस कमांड को उसी निर्देशिका में चलाएँ जहाँ आपकी डॉकर कंपोज़ फ़ाइल स्थित है।
अब हम अपनी चाबियाँ प्राप्त कर सकते हैं और मिनिओ यूआई का उपयोग करके अपनी बाल्टी बना सकते हैं।
अपने ब्राउज़र से, `localhost:9001` पर जाएं। यदि आपने `docker-compose` फ़ाइल में MiniIO कंसोल पते के लिए एक अलग पोर्ट निर्दिष्ट किया है, तो इसके बजाय उस पोर्ट का उपयोग करें। `config.env` फ़ाइल में निर्दिष्ट रूट उपयोगकर्ता और पासवर्ड का उपयोग करके साइन इन करें।
एक बार साइन इन करने के बाद, एक्सेस कुंजी टैब पर जाएं और एक्सेस कुंजी बनाएं बटन पर क्लिक करें।
यह आपको क्रिएट एक्सेस कुंजी पेज पर ले जाएगा।
आपकी एक्सेस कुंजी और गुप्त कुंजी तब तक सहेजी नहीं जाती जब तक आप क्रिएट बटन पर क्लिक नहीं करते। जब तक यह पूरा न हो जाए, इस पृष्ठ से दूर न जाएँ। इस स्क्रीन से कुंजियाँ कॉपी करने के बारे में चिंता न करें। एक बार जब आप क्रिएट बटन पर क्लिक करते हैं, तो आपको अपने फ़ाइल सिस्टम (JSON फ़ाइल में) में कुंजियाँ डाउनलोड करने का विकल्प दिया जाएगा। यदि आप कच्चे डेटा को प्रबंधित करने के लिए मिनियो एसडीके का उपयोग करना चाहते हैं तो इस पृष्ठ पर रहते हुए एक अन्य एक्सेस कुंजी और गुप्त कुंजी बनाएं।
इसके बाद, `mlflow` नामक एक बकेट बनाएं। यह सीधा है, बकेट टैब में जाएं और 'बकेट बनाएं' बटन पर क्लिक करें।
एक बार जब आपके पास अपनी चाबियाँ हों और आपने अपनी बकेट बना ली हो, तो आप कंटेनरों को रोककर, `config.env` को अपडेट करके और फिर कंटेनरों को पुनरारंभ करके सेवाओं की स्थापना पूरी कर सकते हैं। नीचे दिया गया आदेश आपके कंटेनरों को रोक देगा और हटा देगा।
docker-compose down
पुनः आरंभ करने के लिए:
docker-compose --env-file config.env up -d --build
आइए आगे एमएलफ्लो यूआई शुरू करें और सुनिश्चित करें कि सब कुछ काम कर रहा है।
`लोकलहोस्ट:5000` पर नेविगेट करें। आपको एमएलफ़्लो यूआई देखना चाहिए।
सभी टैब को एक्सप्लोर करने के लिए कुछ समय निकालें। यदि आप एमएलफ़्लो में नए हैं, तो रन और प्रयोग की अवधारणा से परिचित हों।
एमएलफ़्लो पायथन पैकेज एक सरल `पिप` इंस्टाल है। मैं इसे पायथन वर्चुअल वातावरण में स्थापित करने की अनुशंसा करता हूं।
pip install mlflow
एमएलफ्लो लाइब्रेरी को सूचीबद्ध करके इंस्टॉलेशन की दोबारा जांच करें।
pip list | grep mlflow
आपको नीचे लाइब्रेरी देखनी चाहिए.
mlflow 2.5.0
MLflow सुविधाओं का लाभ उठाने के लिए आपको सीधे MiniIO तक पहुंचने की आवश्यकता नहीं है - MLflow SDK हमारे द्वारा ऊपर सेट किए गए MiniIO के उदाहरण के साथ इंटरफ़ेस करेगा। हालाँकि, आप MLflow को दिए जाने से पहले डेटा को प्रबंधित करने के लिए सीधे MiniIO के इस उदाहरण के साथ इंटरफ़ेस करना चाह सकते हैं। मिनियो सभी प्रकार के असंरचित डेटा को संग्रहीत करने का एक शानदार तरीका है। मिनिओ अंतर्निहित हार्डवेयर का पूर्ण उपयोग करता है, ताकि आप पैमाने या प्रदर्शन के बारे में चिंता किए बिना अपने आवश्यक सभी कच्चे डेटा को सहेज सकें। मिनिआईओ में कई स्थानों पर डेटा को सिंक्रनाइज़ रखने के लिए बकेट प्रतिकृति सुविधाएँ शामिल हैं। इसके अलावा, किसी दिन एआई को विनियमित किया जाएगा; जब यह दिन आएगा, तो आपको अपने डेटा को सुरक्षित रखने के लिए और यह सुनिश्चित करने के लिए मिनियो की एंटरप्राइज़ सुविधाओं ( ऑब्जेक्ट लॉकिंग , वर्जनिंग , एन्क्रिप्शन और कानूनी लॉक ) की आवश्यकता होगी और यह सुनिश्चित करने के लिए कि आप नियामक एजेंसी द्वारा अनुरोध की गई किसी चीज़ को गलती से हटा न दें।
यदि आपने वर्चुअल वातावरण में MLflow Python पैकेज स्थापित किया है, तो उसी वातावरण में MiniIO स्थापित करें।
pip install minio
इंस्टॉलेशन की दोबारा जांच करें.
pip list | grep minio
यह पुष्टि करेगा कि मिनियो लाइब्रेरी स्थापित की गई थी और वह संस्करण प्रदर्शित करेगा जिसका आप उपयोग कर रहे हैं।
minio 7.1.15
इस पोस्ट में एक विकास मशीन पर एमएलफ्लो और मिनिओ स्थापित करने के लिए एक आसान-से-पालन करने योग्य नुस्खा प्रदान किया गया है। लक्ष्य एमएलफ़्लो सर्वर और डॉकर-कंपोज़ कॉन्फ़िगरेशन पर शोध करने में आपका समय और प्रयास बचाना था।
इस नुस्खे को सटीक रखने के लिए हर संभव प्रयास किया गया। यदि आपको कोई समस्या आती है, तो कृपया [email protected] पर एक लाइन लिखकर या हमारे सामान्य स्लैक चैनल पर चर्चा में शामिल होकर हमें बताएं।
आप MLflow और MiniIO के साथ कोडिंग और प्रशिक्षण मॉडल शुरू करने के लिए तैयार हैं।
यहाँ भी प्रकाशित किया गया है.