जेफिरनेट लोगो

अमेज़ॅन सेजमेकर पाइपलाइन स्थानीय मोड के साथ लागत और विकास समय कम करें

दिनांक:

मजबूत और पुन: प्रयोज्य मशीन लर्निंग (एमएल) पाइपलाइन बनाना एक जटिल और समय लेने वाली प्रक्रिया हो सकती है। डेवलपर्स आमतौर पर स्थानीय रूप से अपने प्रसंस्करण और प्रशिक्षण स्क्रिप्ट का परीक्षण करते हैं, लेकिन पाइपलाइनों का परीक्षण आमतौर पर क्लाउड में किया जाता है। प्रयोग के दौरान एक पूर्ण पाइपलाइन बनाना और चलाना विकास जीवनचक्र में अवांछित ओवरहेड और लागत जोड़ता है। इस पोस्ट में, हम विस्तार से बताते हैं कि आप इसका उपयोग कैसे कर सकते हैं अमेज़ॅन सेजमेकर पाइपलाइन स्थानीय मोड लागत कम करते हुए पाइपलाइन विकास और रन टाइम दोनों को कम करने के लिए स्थानीय रूप से एमएल पाइपलाइन चलाने के लिए। स्थानीय स्तर पर पाइपलाइन का पूरी तरह से परीक्षण करने के बाद, आप इसे आसानी से फिर से चला सकते हैं अमेज़न SageMaker कोड परिवर्तन की कुछ ही पंक्तियों के साथ प्रबंधित संसाधन।

एमएल जीवनचक्र का अवलोकन

एमएल में नए नवाचारों और अनुप्रयोगों के लिए मुख्य ड्राइवरों में से एक सस्ता गणना विकल्पों के साथ डेटा की उपलब्धता और मात्रा है। कई क्षेत्रों में, एमएल ने शास्त्रीय बड़े डेटा और विश्लेषणात्मक तकनीकों के साथ पहले से अघुलनशील समस्याओं को हल करने में सक्षम साबित किया है, और डेटा विज्ञान और एमएल चिकित्सकों की मांग लगातार बढ़ रही है। बहुत उच्च स्तर से, एमएल जीवनचक्र में कई अलग-अलग भाग होते हैं, लेकिन एमएल मॉडल के निर्माण में आमतौर पर निम्नलिखित सामान्य चरण होते हैं:

  1. डेटा सफाई और तैयारी (फीचर इंजीनियरिंग)
  2. मॉडल प्रशिक्षण और ट्यूनिंग
  3. मॉडल मूल्यांकन
  4. मॉडल परिनियोजन (या बैच परिवर्तन)

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

विकास प्रक्रिया मॉडल प्रशिक्षण और मॉडल मूल्यांकन चरणों दोनों के लिए डेटा तैयार करने के चरण के समान है। डेटा वैज्ञानिक उपयोग करते हैं स्थानीय मोड सुविधा सेजमेकर प्रशिक्षण के एमएल-अनुकूलित उदाहरणों के सेजमेकर प्रबंधित क्लस्टर में सभी डेटा का उपयोग करने से पहले, स्थानीय रूप से छोटे डेटासेट के साथ जल्दी से पुनरावृति करने के लिए। यह विकास प्रक्रिया को गति देता है और प्रयोग करते समय सेजमेकर द्वारा प्रबंधित एमएल इंस्टेंस चलाने की लागत को समाप्त करता है।

जैसे-जैसे किसी संगठन की ML परिपक्वता बढ़ती है, आप इसका उपयोग कर सकते हैं अमेज़न SageMaker पाइपलाइन एमएल पाइपलाइन बनाने के लिए जो इन चरणों को एक साथ जोड़ते हैं, अधिक जटिल एमएल वर्कफ़्लो बनाते हैं जो एमएल मॉडल को संसाधित, प्रशिक्षित और मूल्यांकन करते हैं। सेजमेकर पाइपलाइन डेटा लोडिंग, डेटा परिवर्तन, मॉडल प्रशिक्षण और ट्यूनिंग और मॉडल परिनियोजन सहित एमएल वर्कफ़्लो के विभिन्न चरणों को स्वचालित करने के लिए पूरी तरह से प्रबंधित सेवा है। कुछ समय पहले तक, आप अपनी स्क्रिप्ट को स्थानीय रूप से विकसित और परीक्षण कर सकते थे लेकिन क्लाउड में अपनी एमएल पाइपलाइनों का परीक्षण करना पड़ता था। इसने एमएल पाइपलाइनों के प्रवाह और रूप पर पुनरावृति को एक धीमी और महंगी प्रक्रिया बना दिया। अब, सेजमेकर पाइपलाइनों की अतिरिक्त स्थानीय मोड सुविधा के साथ, आप अपनी एमएल पाइपलाइनों को उसी तरह पुनरावृत्त और परीक्षण कर सकते हैं जैसे आप अपनी प्रसंस्करण और प्रशिक्षण स्क्रिप्ट पर कैसे परीक्षण और पुनरावृति करते हैं। आप पाइपलाइन सिंटैक्स और कार्यात्मकताओं को मान्य करने के लिए डेटा के एक छोटे उपसमुच्चय का उपयोग करके अपनी स्थानीय मशीन पर अपनी पाइपलाइन चला सकते हैं और उसका परीक्षण कर सकते हैं।

SageMaker पाइपलाइन

सेजमेकर पाइपलाइन सरल या जटिल एमएल वर्कफ़्लो चलाने के लिए पूरी तरह से स्वचालित तरीका प्रदान करती है। सेजमेकर पाइपलाइनों के साथ, आप उपयोग में आसान पायथन एसडीके के साथ एमएल वर्कफ़्लो बना सकते हैं, और फिर अपने वर्कफ़्लो को विज़ुअलाइज़ और प्रबंधित कर सकते हैं अमेज़ॅन सैजमेकर स्टूडियो. सेजमेकर पाइपलाइनों में आपके द्वारा बनाए गए वर्कफ़्लो चरणों को संग्रहीत और पुन: उपयोग करके आपकी डेटा विज्ञान टीम अधिक कुशल और तेज़ हो सकती है। आप पूर्व-निर्मित टेम्प्लेट का भी उपयोग कर सकते हैं जो आपके एमएल वातावरण में मॉडल बनाने, परीक्षण करने, पंजीकरण करने और तैनात करने के लिए बुनियादी ढांचे और रिपॉजिटरी निर्माण को स्वचालित करते हैं। ये टेम्प्लेट आपके संगठन के लिए स्वचालित रूप से उपलब्ध हैं, और इनका उपयोग करके प्रावधान किया गया है AWS सेवा सूची उत्पादों.

सेजमेकर पाइपलाइन एमएल के लिए निरंतर एकीकरण और निरंतर परिनियोजन (सीआई/सीडी) प्रथाओं को लाता है, जैसे विकास और उत्पादन वातावरण, संस्करण नियंत्रण, ऑन-डिमांड परीक्षण और एंड-टू-एंड ऑटोमेशन के बीच समानता बनाए रखना, जो आपको अपने पूरे क्षेत्र में एमएल को स्केल करने में मदद करता है। संगठन। DevOps व्यवसायी जानते हैं कि CI/CD तकनीकों का उपयोग करने के कुछ मुख्य लाभों में पुन: प्रयोज्य घटकों के माध्यम से उत्पादकता में वृद्धि और स्वचालित परीक्षण के माध्यम से गुणवत्ता में वृद्धि शामिल है, जिससे आपके व्यावसायिक उद्देश्यों के लिए तेज़ ROI प्राप्त होता है। एमएल मॉडल के प्रशिक्षण, परीक्षण और तैनाती को स्वचालित करने के लिए सेजमेकर पाइपलाइनों का उपयोग करके एमएलओपीएस चिकित्सकों के लिए ये लाभ अब उपलब्ध हैं। स्थानीय मोड के साथ, अब आप पाइपलाइन में उपयोग के लिए स्क्रिप्ट विकसित करते समय अधिक तेज़ी से पुनरावृति कर सकते हैं। ध्यान दें कि स्थानीय पाइपलाइन इंस्टेंस को Studio IDE में देखा या चलाया नहीं जा सकता है; हालांकि, स्थानीय पाइपलाइनों के लिए अतिरिक्त देखने के विकल्प जल्द ही उपलब्ध होंगे।

सेजमेकर एसडीके एक सामान्य उद्देश्य प्रदान करता है स्थानीय मोड विन्यास जो डेवलपर्स को उनके स्थानीय वातावरण में समर्थित प्रोसेसर और अनुमानकों को चलाने और परीक्षण करने की अनुमति देता है। आप कई AWS- समर्थित फ्रेमवर्क इमेज (TensorFlow, MXNet, Chainer, PyTorch, और Scikit-Learn) के साथ-साथ आपके द्वारा आपूर्ति की जाने वाली छवियों के साथ स्थानीय मोड प्रशिक्षण का उपयोग कर सकते हैं।

सेजमेकर पाइपलाइन, जो ऑर्केस्ट्रेटेड वर्कफ़्लो चरणों का एक डायरेक्टेड एसाइक्लिक ग्राफ़ (डीएजी) बनाता है, कई गतिविधियों का समर्थन करता है जो एमएल जीवनचक्र का हिस्सा हैं। स्थानीय मोड में, निम्नलिखित चरण समर्थित हैं:

  • प्रसंस्करण कार्य चरण - डेटा प्रोसेसिंग वर्कलोड चलाने के लिए सेजमेकर पर एक सरल, प्रबंधित अनुभव, जैसे फीचर इंजीनियरिंग, डेटा सत्यापन, मॉडल मूल्यांकन और मॉडल व्याख्या
  • प्रशिक्षण कार्य चरण - एक पुनरावृत्ति प्रक्रिया जो एक मॉडल को प्रशिक्षण डेटासेट से उदाहरण प्रस्तुत करके भविष्यवाणियां करना सिखाती है
  • हाइपरपैरामीटर ट्यूनिंग कार्य - सबसे सटीक मॉडल बनाने वाले हाइपरपैरामीटर का मूल्यांकन और चयन करने का एक स्वचालित तरीका
  • सशर्त रन चरण - एक चरण जो एक पाइपलाइन में शाखाओं का सशर्त रन प्रदान करता है
  • मॉडल चरण - CreateModel तर्कों का उपयोग करके, यह चरण ट्रांसफ़ॉर्म चरणों या बाद में परिनियोजन में समापन बिंदु के रूप में उपयोग के लिए एक मॉडल बना सकता है
  • नौकरी के कदम बदलें - एक बैच ट्रांसफॉर्म जॉब जो बड़े डेटासेट से भविष्यवाणियां उत्पन्न करता है, और एक निरंतर समापन बिंदु की आवश्यकता नहीं होने पर अनुमान चलाता है
  • असफल कदम - एक कदम जो पाइपलाइन के चलने को रोकता है और रन को विफल के रूप में चिह्नित करता है

समाधान अवलोकन

हमारा समाधान स्थानीय मोड में सेजमेकर पाइपलाइन बनाने और चलाने के लिए आवश्यक चरणों को प्रदर्शित करता है, जिसका अर्थ है कि वर्कफ़्लो चरणों को लोड करने और चलाने के लिए स्थानीय सीपीयू, रैम और डिस्क संसाधनों का उपयोग करना। आपका स्थानीय वातावरण लोकप्रिय IDEs जैसे VSCode या PyCharm का उपयोग करके लैपटॉप पर चल सकता है, या इसे क्लासिक नोटबुक इंस्टेंस का उपयोग करके SageMaker द्वारा होस्ट किया जा सकता है।

स्थानीय मोड डेटा वैज्ञानिकों को एक साथ चरणों को सिलाई करने की अनुमति देता है, जिसमें प्रसंस्करण, प्रशिक्षण और मूल्यांकन कार्य शामिल हो सकते हैं, और पूरे वर्कफ़्लो को स्थानीय रूप से चला सकते हैं। जब आप स्थानीय रूप से परीक्षण कर लेते हैं, तो आप सेजमेकर प्रबंधित वातावरण में पाइपलाइन को फिर से चला सकते हैं LocalPipelineSession के साथ वस्तु PipelineSession, जो ML जीवनचक्र में एकरूपता लाता है।

इस नोटबुक नमूने के लिए, हम एक मानक सार्वजनिक रूप से उपलब्ध डेटासेट का उपयोग करते हैं, यूसीआई मशीन लर्निंग अबालोन डेटासेट. लक्ष्य एक एमएल मॉडल को उसके भौतिक माप से एक अबालोन घोंघे की उम्र निर्धारित करने के लिए प्रशिक्षित करना है। मूल रूप से, यह एक प्रतिगमन समस्या है।

इस नोटबुक नमूने को चलाने के लिए आवश्यक सभी कोड GitHub पर उपलब्ध हैं अमेज़न-सेजमेकर-उदाहरण भंडार। इस नोटबुक नमूने में, प्रत्येक पाइपलाइन वर्कफ़्लो चरण स्वतंत्र रूप से बनाया जाता है और फिर पाइपलाइन बनाने के लिए एक साथ वायर्ड किया जाता है। हम निम्नलिखित चरण बनाते हैं:

  • प्रसंस्करण चरण (फीचर इंजीनियरिंग)
  • प्रशिक्षण चरण (मॉडल प्रशिक्षण)
  • प्रसंस्करण चरण (मॉडल मूल्यांकन)
  • शर्त कदम (मॉडल सटीकता)
  • मॉडल चरण बनाएं (मॉडल)
  • ट्रांसफ़ॉर्म स्टेप (बैच ट्रांसफ़ॉर्म)
  • मॉडल चरण पंजीकृत करें (मॉडल पैकेज)
  • विफल चरण (रन विफल)

निम्नलिखित आरेख हमारी पाइपलाइन को दर्शाता है।

.. पूर्वापेक्षाएँ

इस पोस्ट में साथ चलने के लिए, आपको निम्नलिखित की आवश्यकता है:

इन पूर्वापेक्षाओं के स्थान पर होने के बाद, आप निम्न अनुभागों में बताए अनुसार नमूना नोटबुक चला सकते हैं।

अपनी पाइपलाइन बनाएं

इस नोटबुक नमूने में, हम उपयोग करते हैं सेजमेकर स्क्रिप्ट मोड अधिकांश एमएल प्रक्रियाओं के लिए, जिसका अर्थ है कि हम गतिविधि करने के लिए वास्तविक पायथन कोड (स्क्रिप्ट) प्रदान करते हैं और इस कोड का संदर्भ देते हैं। स्क्रिप्ट मोड सेजमेकर प्रोसेसिंग के भीतर व्यवहार को नियंत्रित करने के लिए आपको अपने कोड को अनुकूलित करने की अनुमति देता है, जबकि अभी भी सेजमेकर पूर्व-निर्मित कंटेनरों जैसे XGBoost या Scikit-Learn का लाभ उठा रहा है। कस्टम कोड एक पायथन स्क्रिप्ट फ़ाइल में उन कक्षों का उपयोग करके लिखा जाता है जो मैजिक कमांड से शुरू होते हैं %%writefile, निम्नलिखित की तरह:

%%writefile code/evaluation.py

स्थानीय मोड का प्राथमिक प्रवर्तक है LocalPipelineSession ऑब्जेक्ट, जिसे पायथन एसडीके से तत्काल किया गया है। निम्नलिखित कोड खंड दिखाते हैं कि स्थानीय मोड में सेजमेकर पाइपलाइन कैसे बनाई जाती है। यद्यपि आप कई स्थानीय पाइपलाइन चरणों के लिए स्थानीय डेटा पथ को कॉन्फ़िगर कर सकते हैं, अमेज़ॅन S3 परिवर्तन द्वारा डेटा आउटपुट को संग्रहीत करने के लिए डिफ़ॉल्ट स्थान है। नई LocalPipelineSession इस पोस्ट में वर्णित कई सेजमेकर वर्कफ़्लो एपीआई कॉल में ऑब्जेक्ट को पायथन एसडीके को पास किया गया है। ध्यान दें कि आप उपयोग कर सकते हैं local_pipeline_session S3 डिफ़ॉल्ट बकेट और वर्तमान क्षेत्र नाम के संदर्भों को पुनः प्राप्त करने के लिए चर।

from sagemaker.workflow.pipeline_context import LocalPipelineSession

# Create a `LocalPipelineSession` object so that each 
# pipeline step will run locally
# To run this pipeline in the cloud, you must change 
# the `LocalPipelineSession()` to `PipelineSession()`
local_pipeline_session = LocalPipelineSession()
region = local_pipeline_session.boto_region_name

default_bucket = local_pipeline_session.default_bucket()
prefix = "sagemaker-pipelines-local-mode-example"

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

mse_threshold = ParameterFloat(name="MseThreshold", default_value=7.0)

डेटा प्रोसेसिंग चरण बनाने के लिए, जिसका उपयोग यहां फीचर इंजीनियरिंग करने के लिए किया जाता है, हम इसका उपयोग करते हैं SKLearnProcessor डेटासेट लोड करने और बदलने के लिए। हम पास करते हैं local_pipeline_session वेरिएबल टू क्लास कंस्ट्रक्टर, जो वर्कफ़्लो चरण को स्थानीय मोड में चलाने का निर्देश देता है:

from sagemaker.sklearn.processing import SKLearnProcessor

framework_version = "1.0-1"

sklearn_processor = SKLearnProcessor(
    framework_version=framework_version,
    instance_type=instance_type,
    instance_count=processing_instance_count,
    base_job_name="sklearn-abalone-process",
    role=role,
    sagemaker_session=local_pipeline_session,
)

अगला, हम अपना पहला वास्तविक पाइपलाइन चरण बनाते हैं, a ProcessingStep ऑब्जेक्ट, जैसा कि सेजमेकर एसडीके से आयात किया गया है। प्रोसेसर तर्कों को कॉल से वापस कर दिया जाता है SKLearnProcessor रन () विधि। पाइपलाइन के भीतर संचालन के क्रम को इंगित करने के लिए यह वर्कफ़्लो चरण नोटबुक के अंत की ओर अन्य चरणों के साथ संयुक्त है।

from sagemaker.processing import ProcessingInput, ProcessingOutput
from sagemaker.workflow.steps import ProcessingStep

processor_args = sklearn_processor.run(
    inputs=[
        ProcessingInput(source=input_data, destination="/opt/ml/processing/input"),
    ],
    outputs=[
        ProcessingOutput(output_name="train", source="/opt/ml/processing/train"),
        ProcessingOutput(output_name="validation", source="/opt/ml/processing/validation"),
        ProcessingOutput(output_name="test", source="/opt/ml/processing/test"),
    ],
    code="code/preprocessing.py",
)

step_process = ProcessingStep(name="AbaloneProcess", step_args=processor_args)

इसके बाद, हम पहले सेजमेकर एसडीके का उपयोग करके एक मानक अनुमानक को तत्काल करके एक प्रशिक्षण चरण स्थापित करने के लिए कोड प्रदान करते हैं। हम वही पास करते हैं local_pipeline_session अनुमानक के लिए चर, xgb_train नामित, जैसा कि sagemaker_session बहस। क्योंकि हम एक XGBoost मॉडल को प्रशिक्षित करना चाहते हैं, हमें फ्रेमवर्क और कई संस्करण मापदंडों सहित निम्नलिखित मापदंडों को निर्दिष्ट करके एक मान्य छवि URI उत्पन्न करनी होगी:

from sagemaker.estimator import Estimator
from sagemaker.inputs import TrainingInput

model_path = f"s3://{default_bucket}/{prefix}/model"
image_uri = sagemaker.image_uris.retrieve(
    framework="xgboost",
    region=region,
    version="1.5-1",
    py_version="py3",
    instance_type=instance_type,
)

xgb_train = Estimator(
    image_uri=image_uri,
    entry_point="code/abalone.py",
    instance_type=instance_type,
    instance_count=training_instance_count,
    output_path=model_path,
    role=role,
    sagemaker_session=local_pipeline_session,
)

हम वैकल्पिक रूप से अतिरिक्त अनुमानक विधियों को कॉल कर सकते हैं, उदाहरण के लिए set_hyperparameters(), प्रशिक्षण कार्य के लिए हाइपरपैरामीटर सेटिंग्स प्रदान करना। अब जब हमारे पास एक अनुमानक कॉन्फ़िगर किया गया है, तो हम वास्तविक प्रशिक्षण चरण बनाने के लिए तैयार हैं। एक बार फिर, हम आयात करते हैं TrainingStep सेजमेकर एसडीके लाइब्रेरी से क्लास:

from sagemaker.workflow.steps import TrainingStep

step_train = TrainingStep(name="AbaloneTrain", step_args=train_args)

अगला, हम मॉडल मूल्यांकन करने के लिए एक और प्रसंस्करण चरण बनाते हैं। यह a . बनाकर किया जाता है ScriptProcessor उदाहरण और गुजर रहा है local_pipeline_session एक पैरामीटर के रूप में वस्तु:

from sagemaker.processing import ScriptProcessor

script_eval = ScriptProcessor(
    image_uri=image_uri,
    command=["python3"],
    instance_type=instance_type,
    instance_count=processing_instance_count,
    base_job_name="script-abalone-eval",
    role=role,
    sagemaker_session=local_pipeline_session,
)

प्रशिक्षित मॉडल की तैनाती को सक्षम करने के लिए, या तो a सेजमेकर रीयल-टाइम एंडपॉइंट या बैच रूपांतरण के लिए, हमें a . बनाने की आवश्यकता है Model मॉडल कलाकृतियों, उचित छवि यूआरआई, और वैकल्पिक रूप से हमारे कस्टम अनुमान कोड को पारित करके ऑब्जेक्ट। फिर हम इसे पास करते हैं Model पर आपत्ति ModelStep, जिसे स्थानीय पाइपलाइन में जोड़ा जाता है। निम्नलिखित कोड देखें:

from sagemaker.model import Model

model = Model(
    image_uri=image_uri,
    model_data=step_train.properties.ModelArtifacts.S3ModelArtifacts,
    source_dir="code",
    entry_point="inference.py",
    role=role,
    sagemaker_session=local_pipeline_session,
)

from sagemaker.workflow.model_step import ModelStep

step_create_model = ModelStep(name="AbaloneCreateModel", 
    step_args=model.create(instance_type=instance_type)
)

इसके बाद, हम एक बैच ट्रांसफ़ॉर्म स्टेप बनाते हैं जहाँ हम फ़ीचर वैक्टर का एक सेट सबमिट करते हैं और इंट्रेंस करते हैं। हमें सबसे पहले a . बनाना होगा Transformer ऑब्जेक्ट करें और पास करें local_pipeline_session इसके लिए पैरामीटर। फिर हम a . बनाते हैं TransformStep, आवश्यक तर्कों को पारित करना, और इसे पाइपलाइन परिभाषा में जोड़ें:

from sagemaker.transformer import Transformer

transformer = Transformer(
    model_name=step_create_model.properties.ModelName,
    instance_type=instance_type,
    instance_count=transform_instance_count,
    output_path=f"s3://{default_bucket}/{prefix}/transform",
    sagemaker_session=local_pipeline_session,
)

from sagemaker.workflow.steps import TransformStep

transform_args = transformer.transform(transform_data, content_type="text/csv")

step_transform = TransformStep(name="AbaloneTransform", step_args=transform_args)

अंत में, हम वर्कफ़्लो में एक शाखा की स्थिति जोड़ना चाहते हैं ताकि हम केवल बैच ट्रांसफ़ॉर्म चलाएँ यदि मॉडल मूल्यांकन के परिणाम हमारे मानदंडों को पूरा करते हैं। हम इस सशर्त को a . जोड़कर इंगित कर सकते हैं ConditionStep एक विशेष शर्त प्रकार के साथ, जैसे ConditionLessThanOrEqualTo. फिर हम दो शाखाओं के लिए चरणों की गणना करते हैं, अनिवार्य रूप से पाइपलाइन की if/else या true/false शाखाओं को परिभाषित करते हैं। if_steps में प्रदान किया गया ConditionStep (चरण_बनाएँ_मॉडल, चरण_परिवर्तन) तब चलाए जाते हैं जब भी स्थिति का मूल्यांकन करता है True.

from sagemaker.workflow.conditions import ConditionLessThanOrEqualTo
from sagemaker.workflow.condition_step import ConditionStep
from sagemaker.workflow.functions import JsonGet

cond_lte = ConditionLessThanOrEqualTo(
    left=JsonGet(
        step_name=step_eval.name,
        property_file=evaluation_report,
        json_path="regression_metrics.mse.value",),
    right=mse_threshold,
)

step_cond = ConditionStep(
    name="AbaloneMSECond",
    conditions=[cond_lte],
    if_steps=[step_create_model, step_transform],
    else_steps=[step_fail],
)

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

अब जब हमारे पास हमारे सभी चरण परिभाषित हैं, और अंतर्निहित वर्ग उदाहरण बनाए गए हैं, तो हम उन्हें एक पाइपलाइन में जोड़ सकते हैं। हम कुछ पैरामीटर प्रदान करते हैं, और वांछित क्रम में चरणों को सूचीबद्ध करके महत्वपूर्ण रूप से संचालन के क्रम को परिभाषित करते हैं। ध्यान दें कि TransformStep यहां नहीं दिखाया गया है क्योंकि यह सशर्त चरण का लक्ष्य है, और इसे चरण तर्क के रूप में प्रदान किया गया था ConditionalStep इससे पहले।

from sagemaker.workflow.pipeline import Pipeline

pipeline_name = f"LocalModelPipeline"
pipeline = Pipeline(
    name=pipeline_name,
    parameters=[
        input_data,
        mse_threshold,
    ],
    steps=[step_process, step_train, step_eval, step_cond],
    sagemaker_session=local_pipeline_session,
)

पाइपलाइन चलाने के लिए, आपको दो विधियों को कॉल करना होगा: pipeline.upsert(), जो पाइपलाइन को अंतर्निहित सेवा में अपलोड करता है, और pipeline.start(), जो पाइपलाइन चलाना शुरू कर देता है। आप रन की स्थिति के बारे में पूछताछ करने, पाइपलाइन चरणों को सूचीबद्ध करने, और बहुत कुछ करने के लिए कई अन्य विधियों का उपयोग कर सकते हैं। चूंकि हमने स्थानीय मोड पाइपलाइन सत्र का उपयोग किया है, ये सभी चरण आपके प्रोसेसर पर स्थानीय रूप से चलाए जाते हैं। प्रारंभ विधि के नीचे सेल आउटपुट पाइपलाइन से आउटपुट दिखाता है:

pipeline.upsert(role_arn=role)
execution = pipeline.start()

आपको निम्न के जैसा सेल आउटपुट के नीचे एक संदेश देखना चाहिए:

Pipeline execution d8c3e172-089e-4e7a-ad6d-6d76caf987b7 SUCCEEDED

प्रबंधित संसाधनों पर वापस जाएं

यह पुष्टि करने के बाद कि पाइपलाइन बिना किसी त्रुटि के चलती है और हम पाइपलाइन के प्रवाह और रूप से संतुष्ट हैं, हम पाइपलाइन को फिर से बना सकते हैं लेकिन सेजमेकर प्रबंधित संसाधनों के साथ और इसे फिर से चला सकते हैं। केवल आवश्यक परिवर्तन का उपयोग करना है PipelineSession वस्तु के बजाय LocalPipelineSession:

से sagemaker.workflow.pipeline_context आयात LocalPipelineSession
from sagemaker.workflow.pipeline_context import PipelineSession

local_pipeline_session = LocalPipelineSession ()
pipeline_session = PipelineSession()

यह सेवा को सेजमेकर प्रबंधित संसाधनों पर इस सत्र ऑब्जेक्ट को संदर्भित करते हुए प्रत्येक चरण को चलाने के लिए सूचित करता है। छोटे परिवर्तन को देखते हुए, हम निम्नलिखित कोड सेल में केवल आवश्यक कोड परिवर्तनों का वर्णन करते हैं, लेकिन उसी परिवर्तन को प्रत्येक सेल पर लागू करने की आवश्यकता होगी local_pipeline_session वस्तु। हालाँकि, परिवर्तन सभी कक्षों में समान हैं क्योंकि हम केवल उन्हें प्रतिस्थापित कर रहे हैं local_pipeline_session के साथ वस्तु pipeline_session वस्तु।

from sagemaker.sklearn.processing import SKLearnProcessor

framework_version = "1.0-1"

sklearn_processor = SKLearnProcessor(
    framework_version=framework_version,
    instance_type=instance_type,
    instance_count=processing_instance_count,
    base_job_name="sklearn-abalone-process",
    role=role,
    sagemaker_session=pipeline_session,  # non-local session
)

स्थानीय सत्र ऑब्जेक्ट को हर जगह बदल दिए जाने के बाद, हम पाइपलाइन को फिर से बनाते हैं और इसे सेजमेकर प्रबंधित संसाधनों के साथ चलाते हैं:

from sagemaker.workflow.pipeline import Pipeline

pipeline_name = f"LocalModelPipeline"
pipeline = Pipeline(
    name=pipeline_name,
    parameters=[
        input_data,
        mse_threshold,
    ],
    steps=[step_process, step_train, step_eval, step_cond],
    sagemaker_session=pipeline_session, # non-local session
)

pipeline.upsert(role_arn=role)
execution = pipeline.start()

क्लीन अप

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

# delete models 
sm_client = boto3.client("sagemaker")
model_prefix="AbaloneCreateModel"
delete_models(sm_client, model_prefix)

# delete managed pipeline
pipeline_to_delete = 'SM-Managed-Pipeline'
delete_sagemaker_pipeline(sm_client, pipeline_to_delete)

निष्कर्ष

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

अधिक, जानने के यात्रा अमेज़न SageMaker पाइपलाइन or अपने काम को स्थानीय रूप से चलाने के लिए सेजमेकर पाइपलाइनों का उपयोग करें.


लेखक के बारे में

पॉल हरगिस AWS, Amazon, और Hortonworks सहित कई कंपनियों में मशीन लर्निंग पर अपने प्रयासों पर ध्यान केंद्रित किया है। उन्हें प्रौद्योगिकी समाधान बनाने और लोगों को इसका अधिकतम लाभ उठाने का तरीका सिखाने में आनंद आता है। AWS में अपनी भूमिका से पहले, वह Amazon Exports और Expansions के लिए लीड आर्किटेक्ट थे, जिससे amazon.com को अंतरराष्ट्रीय खरीदारों के अनुभव को बेहतर बनाने में मदद मिली। पॉल वास्तविक दुनिया की समस्याओं को हल करने के लिए ग्राहकों को अपनी मशीन सीखने की पहल का विस्तार करने में मदद करना पसंद करता है।

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

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

स्पॉट_आईएमजी

नवीनतम खुफिया

स्पॉट_आईएमजी