जनरेटिव डेटा इंटेलिजेंस

Amazon SageMaker | का उपयोग करके कस्टम पहनावे को कुशलतापूर्वक प्रशिक्षित करें, ट्यून करें और तैनात करें अमेज़न वेब सेवाएँ

दिनांक:

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

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

  • बढ़ाने - कई कमजोर शिक्षार्थियों को क्रमिक रूप से प्रशिक्षण देना, जहां अनुक्रम में पिछले शिक्षार्थियों की प्रत्येक गलत भविष्यवाणी को अगले शिक्षार्थी को अधिक महत्व और इनपुट दिया जाता है, जिससे एक मजबूत शिक्षार्थी का निर्माण होता है। उदाहरणों में AdaBoost, Gradient Boosting और XGBoost शामिल हैं।
  • ऊलजलूल का कपड़ा - एकल मॉडल के विचरण को कम करने के लिए एकाधिक मॉडल का उपयोग करता है। उदाहरणों में यादृच्छिक वन और अतिरिक्त पेड़ शामिल हैं।
  • स्टैकिंग (सम्मिश्रण) - अक्सर विषम मॉडल का उपयोग किया जाता है, जहां प्रत्येक व्यक्तिगत अनुमानक की भविष्यवाणियों को एक साथ रखा जाता है और अंतिम अनुमानक के इनपुट के रूप में उपयोग किया जाता है जो भविष्यवाणी को संभालता है। इस अंतिम अनुमानक की प्रशिक्षण प्रक्रिया अक्सर क्रॉस-सत्यापन का उपयोग करती है।

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

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

BYOE: अपना खुद का पहनावा लेकर आओ

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

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

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

इन चिंताओं को दूर करने के लिए, हम एकल प्रशिक्षण कार्य का उपयोग करते हुए, मॉडल के हाइपरपैरामीटर को अनुकूलित करने और एकल कंटेनर का उपयोग करके सर्वर रहित एंडपॉइंट पर तैनात करने के लिए सामूहिक प्रशिक्षण का एक उदाहरण देखते हैं। हम अपने एन्सेम्बल स्टैक के लिए दो मॉडलों का उपयोग करते हैं: कैटबूस्ट और एक्सजीबूस्ट (ये दोनों एन्सेम्बल को बढ़ावा दे रहे हैं)। अपने डेटा के लिए, हम इसका उपयोग करते हैं मधुमेह डेटासेट [2] स्किकिट-लर्न लाइब्रेरी से: इसमें 10 विशेषताएं (उम्र, लिंग, शरीर का द्रव्यमान, रक्तचाप और छह रक्त सीरम माप) शामिल हैं, और हमारा मॉडल आधारभूत विशेषताओं को एकत्र करने के 1 साल बाद रोग की प्रगति की भविष्यवाणी करता है (एक प्रतिगमन) नमूना)।

पूर्ण कोड रिपॉजिटरी यहां पाई जा सकती है GitHub.

एक ही सेजमेकर कार्य में अनेक मॉडलों को प्रशिक्षित करें

अपने मॉडलों को प्रशिक्षित करने के लिए, हम स्क्रिप्ट मोड में सेजमेकर प्रशिक्षण नौकरियों का उपयोग करते हैं। स्क्रिप्ट मोड के साथ, आप सेजमेकर फ्रेमवर्क कंटेनरों का उपयोग करते हुए कस्टम प्रशिक्षण (और बाद में अनुमान कोड) लिख सकते हैं। फ़्रेमवर्क कंटेनर आपको AWS द्वारा प्रबंधित तैयार वातावरण का उपयोग करने में सक्षम बनाते हैं जिसमें सभी आवश्यक कॉन्फ़िगरेशन और मॉड्यूल शामिल होते हैं। यह प्रदर्शित करने के लिए कि आप एक फ्रेमवर्क कंटेनर को कैसे अनुकूलित कर सकते हैं, उदाहरण के तौर पर, हम पूर्व-निर्मित SKLearn कंटेनर का उपयोग करते हैं, जिसमें XGBoost और CatBoost पैकेज शामिल नहीं हैं। इन पैकेजों को जोड़ने के लिए दो विकल्प हैं: या तो अंतर्निर्मित कंटेनर का विस्तार करें कैटबूस्ट और XGBoost स्थापित करने के लिए (और फिर एक कस्टम कंटेनर के रूप में तैनात करें), या सेजमेकर प्रशिक्षण जॉब स्क्रिप्ट मोड सुविधा का उपयोग करें, जो आपको requirements.txt प्रशिक्षण अनुमानक बनाते समय फ़ाइल करें। सेजमेकर प्रशिक्षण कार्य सूचीबद्ध पुस्तकालयों को स्थापित करता है requirements.txt रन टाइम के दौरान फ़ाइल। इस तरह, आपको अपनी स्वयं की डॉकर छवि रिपॉजिटरी को प्रबंधित करने की आवश्यकता नहीं है और यह उन प्रशिक्षण स्क्रिप्ट को चलाने के लिए अधिक लचीलापन प्रदान करता है जिनके लिए अतिरिक्त पायथन पैकेज की आवश्यकता होती है।

निम्नलिखित कोड ब्लॉक उस कोड को दिखाता है जिसका उपयोग हम प्रशिक्षण शुरू करने के लिए करते हैं। entry_point पैरामीटर हमारी प्रशिक्षण स्क्रिप्ट की ओर इंगित करता है। हम सेजमेकर एसडीके एपीआई की दो आकर्षक विशेषताओं का भी उपयोग करते हैं:

  • सबसे पहले, हम अपनी स्रोत निर्देशिका और निर्भरता के लिए स्थानीय पथ निर्दिष्ट करते हैं source_dir और dependencies पैरामीटर, क्रमशः। एसडीके उन निर्देशिकाओं को संपीड़ित और अपलोड करेगा अमेज़न सरल भंडारण सेवा (अमेज़ॅन एस3) और सेजमेकर उन्हें कार्यशील निर्देशिका के तहत प्रशिक्षण उदाहरण पर उपलब्ध कराएंगे /opt/ml/code.
  • दूसरा, हम एसडीके का उपयोग करते हैं SKLearn हमारे पसंदीदा पायथन और फ्रेमवर्क संस्करण के साथ अनुमानक ऑब्जेक्ट, ताकि सेजमेकर संबंधित कंटेनर को खींच सके। हमने एक कस्टम प्रशिक्षण मीट्रिक भी परिभाषित किया है'validation:rmse', जिसे प्रशिक्षण लॉग में उत्सर्जित किया जाएगा और सेजमेकर द्वारा कैप्चर किया जाएगा। बाद में, हम इस मीट्रिक का उपयोग ट्यूनिंग कार्य में उद्देश्य मीट्रिक के रूप में करते हैं।
hyperparameters = {"num_round": 6, "max_depth": 5}
estimator_parameters = {
    "entry_point": "multi_model_hpo.py",
    "source_dir": "code",
    "dependencies": ["my_custom_library"],
    "instance_type": training_instance_type,
    "instance_count": 1,
    "hyperparameters": hyperparameters,
    "role": role,
    "base_job_name": "xgboost-model",
    "framework_version": "1.0-1",
    "keep_alive_period_in_seconds": 60,
    "metric_definitions":[
       {'Name': 'validation:rmse', 'Regex': 'validation-rmse:(.*?);'}
    ]
}
estimator = SKLearn(**estimator_parameters)

इसके बाद, हम अपनी प्रशिक्षण स्क्रिप्ट लिखते हैं (मल्टी_मॉडल_hpo.py). हमारी स्क्रिप्ट एक सरल प्रवाह का अनुसरण करती है: हाइपरपैरामीटर कैप्चर करें जिसके साथ कार्य कॉन्फ़िगर किया गया था और कैटबूस्ट मॉडल को प्रशिक्षित करें और XGBoost मॉडल. हम भी लागू करते हैं के-फोल्ड क्रॉस सत्यापन समारोह. निम्नलिखित कोड देखें:

if __name__ == "__main__":
    parser = argparse.ArgumentParser()     # Sagemaker specific arguments. Defaults are set in the environment variables.
    parser.add_argument("--output-data-dir", type=str, default=os.environ["SM_OUTPUT_DATA_DIR"])
    parser.add_argument("--model-dir", type=str, default=os.environ["SM_MODEL_DIR"])
    parser.add_argument("--train", type=str, default=os.environ["SM_CHANNEL_TRAIN"])
    parser.add_argument("--validation", type=str, default=os.environ["SM_CHANNEL_VALIDATION"])
    .
    .
    .
    
    """
    Train catboost
    """
    
    K = args.k_fold    
    catboost_hyperparameters = {
        "max_depth": args.max_depth,
        "eta": args.eta,
    }
    rmse_list, model_catboost = cross_validation_catboost(train_df, K, catboost_hyperparameters)
    .
    .
    .
    
    """
    Train the XGBoost model
    """     hyperparameters = {
        "max_depth": args.max_depth,
        "eta": args.eta,
        "objective": args.objective,
        "num_round": args.num_round,
    }     rmse_list, model_xgb = cross_validation(train_df, K, hyperparameters)

मॉडलों को प्रशिक्षित करने के बाद, हम कैटबूस्ट और एक्सजीबूस्ट दोनों भविष्यवाणियों के माध्य की गणना करते हैं। परिणाम, pred_mean, हमारे समूह की अंतिम भविष्यवाणी है। फिर, हम निर्धारित करते हैं mean_squared_error सत्यापन सेट के विरुद्ध। val_rmse प्रशिक्षण के दौरान संपूर्ण समूह के मूल्यांकन के लिए उपयोग किया जाता है। ध्यान दें कि हम RMSE मान को उस पैटर्न में भी प्रिंट करते हैं जो हमारे द्वारा उपयोग किए गए रेगेक्स में फिट बैठता है metric_definitions. बाद में, सेजमेकर स्वचालित मॉडल ट्यूनिंग उद्देश्य मीट्रिक को कैप्चर करने के लिए इसका उपयोग करेगा। निम्नलिखित कोड देखें:

pred_mean = np.mean(np.array([pred_catboost, pred_xgb]), axis=0)
val_rmse = mean_squared_error(y_validation, pred_mean, squared=False)
print(f"Final evaluation result: validation-rmse:{val_rmse}")

अंत में, हमारी स्क्रिप्ट दोनों मॉडल कलाकृतियों को स्थित आउटपुट फ़ोल्डर में सहेजती है /opt/ml/model.

जब प्रशिक्षण कार्य पूरा हो जाता है, तो सेजमेकर उसकी सामग्री को पैकेज और कॉपी कर लेता है /opt/ml/model आपके द्वारा कार्य कॉन्फ़िगरेशन में निर्दिष्ट S3 स्थान पर संपीड़ित TAR प्रारूप में एकल ऑब्जेक्ट के रूप में निर्देशिका। हमारे मामले में, सेजमेकर दो मॉडलों को एक TAR फ़ाइल में बंडल करता है और प्रशिक्षण कार्य के अंत में इसे Amazon S3 पर अपलोड करता है। निम्नलिखित कोड देखें:

model_file_name = 'catboost-regressor-model.dump'
   
    # Save CatBoost model
    path = os.path.join(args.model_dir, model_file_name)
    print('saving model file to {}'.format(path))
    model.save_model(path)
   .
   .
   .
   # Save XGBoost model
   model_location = args.model_dir + "/xgboost-model"
   pickle.dump(model, open(model_location, "wb"))
   logging.info("Stored trained model at {}".format(model_location))

संक्षेप में, आपको ध्यान देना चाहिए कि इस प्रक्रिया में हमने एक बार डेटा डाउनलोड किया और एक ही प्रशिक्षण कार्य का उपयोग करके दो मॉडलों को प्रशिक्षित किया।

स्वचालित पहनावा मॉडल ट्यूनिंग

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

हम अनुकूलन प्रक्रिया के दो भागों को परिभाषित करके शुरू करते हैं: उद्देश्य मीट्रिक और हाइपरपैरामीटर जिन्हें हम ट्यून करना चाहते हैं। हमारे उदाहरण में, हम सत्यापन आरएमएसई को लक्ष्य मीट्रिक के रूप में उपयोग करते हैं और हम ट्यून करते हैं eta और max_depth (अन्य हाइपरपैरामीटर के लिए, देखें XGBoost हाइपरपैरामीटर और कैटबूस्ट हाइपरपैरामीटर):

from sagemaker.tuner import (
    IntegerParameter,
    ContinuousParameter,
    HyperparameterTuner,
) hyperparameter_ranges = {
    "eta": ContinuousParameter(0.2, 0.3),
    "max_depth": IntegerParameter(3, 4)
}
metric_definitions = [{"Name": "validation:rmse", "Regex": "validation-rmse:([0-9.]+)"}]
objective_metric_name = "validation:rmse"

हमें यह भी सुनिश्चित करना होगा प्रशिक्षण स्क्रिप्ट हमारे हाइपरपैरामीटर हार्डकोडेड नहीं हैं और सेजमेकर रनटाइम तर्कों से खींचे गए हैं:

catboost_hyperparameters = {
    "max_depth": args.max_depth,
    "eta": args.eta,
}

सेजमेकर JSON फ़ाइल में हाइपरपैरामीटर भी लिखता है और इसे पढ़ा जा सकता है /opt/ml/input/config/hyperparameters.json प्रशिक्षण उदाहरण पर.

कैटबूस्ट की तरह, हम XGBoost मॉडल के लिए हाइपरपैरामीटर भी कैप्चर करते हैं (ध्यान दें objective और num_round ट्यून नहीं किए गए हैं):

catboost_hyperparameters = {
    "max_depth": args.max_depth,
    "eta": args.eta,
}

अंत में, हम इन कॉन्फ़िगरेशन का उपयोग करके हाइपरपैरामीटर ट्यूनिंग कार्य लॉन्च करते हैं:

tuner = HyperparameterTuner(
    estimator, 
    objective_metric_name,
    hyperparameter_ranges, 
    max_jobs=4, 
    max_parallel_jobs=2, 
    objective_type='Minimize'
)
tuner.fit({"train": train_location, "validation": validation_location}, include_cls_metadata=False)

जब कार्य पूरा हो जाता है, तो आप सर्वोत्तम प्रशिक्षण कार्य के लिए मान पुनः प्राप्त कर सकते हैं (न्यूनतम आरएमएसई के साथ):

job_name=tuner.latest_tuning_job.name
attached_tuner = HyperparameterTuner.attach(job_name)
attached_tuner.describe()["BestTrainingJob"]

एएमटी पर अधिक जानकारी के लिए देखें सेजमेकर के साथ स्वचालित मॉडल ट्यूनिंग करें.

तैनाती

अपने कस्टम समूह को तैनात करने के लिए, हमें अनुमान अनुरोध को संभालने और सेजमेकर होस्टिंग को कॉन्फ़िगर करने के लिए एक स्क्रिप्ट प्रदान करने की आवश्यकता है। इस उदाहरण में, हमने एक एकल फ़ाइल का उपयोग किया जिसमें प्रशिक्षण और अनुमान कोड दोनों शामिल हैं (मल्टी_मॉडल_hpo.py). सेजमेकर if के अंतर्गत कोड का उपयोग करता है _ name _ == "_ main _" प्रशिक्षण और कार्यों के लिए model_fn, input_fn, तथा predict_fn मॉडल की तैनाती और सेवा करते समय।

अनुमान लिपि

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

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

def model_fn(model_dir):
    catboost_model = CatBoostRegressor()
    catboost_model.load_model(os.path.join(model_dir, model_file_name))
    
    model_file = "xgboost-model"
    model = pickle.load(open(os.path.join(model_dir, model_file), "rb"))
    
    all_model = [catboost_model, model]
    return all_model

दूसरा, input_fn विधि हमारे अनुमान हैंडलर को भेजे जाने वाले अनुरोध इनपुट डेटा को डिसेरिएलाइज़ करती है। इनपुट हैंडलर के बारे में अधिक जानकारी के लिए देखें अपने खुद के अनुमान कंटेनर को अपनाना.

def input_fn(input_data, content_type):
    dtype=None
    payload = StringIO(input_data)
    return np.genfromtxt(payload, dtype=dtype, delimiter=",")

तीसरा, predict_fn मॉडलों से पूर्वानुमान प्राप्त करने के लिए विधि जिम्मेदार है। विधि मॉडल और उससे लौटाए गए डेटा को लेती है input_fn पैरामीटर के रूप में और अंतिम भविष्यवाणी लौटाता है। हमारे उदाहरण में, हमें मॉडल सूची के पहले सदस्य से कैटबूस्ट परिणाम मिलता है (model[0]) और दूसरे सदस्य से XGBoost (model[1]), और हम एक सम्मिश्रण फ़ंक्शन का उपयोग करते हैं जो दोनों भविष्यवाणियों का माध्य लौटाता है:

def predict_fn(input_data, model):
    predictions_catb = model[0].predict(input_data)
    
    dtest = xgb.DMatrix(input_data)
    predictions_xgb = model[1].predict(dtest,
                                          ntree_limit=getattr(model, "best_ntree_limit", 0),
                                          validate_features=False)
    
    return np.mean(np.array([predictions_catb, predictions_xgb]), axis=0)

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

सेजमेकर सर्वर रहित अनुमान

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

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

from sagemaker.serverless.serverless_inference_config import ServerlessInferenceConfig
serverless_config = ServerlessInferenceConfig(
    memory_size_in_mb=6144,
    max_concurrency=1,
) 

अब जब हमने समापन बिंदु को कॉन्फ़िगर कर लिया है, तो हम अंततः उस मॉडल को तैनात कर सकते हैं जिसे हमारे हाइपरपैरामीटर अनुकूलन कार्य में चुना गया था:

estimator=attached_tuner.best_estimator()
predictor = estimator.deploy(serverless_inference_config=serverless_config)

क्लीन अप

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

predictor.delete_endpoint(predictor.endpoint)

निष्कर्ष

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

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

हालाँकि इस पोस्ट में केवल दो मॉडलों के लाभ दिखाए गए हैं, आप और भी अधिक प्रभाव देखने के लिए इस पद्धति का उपयोग कई मॉडलों को प्रशिक्षित करने, ट्यून करने और तैनात करने के लिए कर सकते हैं।

संदर्भ

[1] राज कुमार, पी. अरुण; सेल्वाकुमार, एस. (2011)। "न्यूरल क्लासिफायर के एक समूह का उपयोग करके सेवा हमले का पता लगाने का वितरित इनकार"। कंप्यूटर संचार. 34 (11): 1328-1341। doi:10.1016/j.comcom.2011.01.012.

[2] ब्रैडली एफ्रॉन, ट्रेवर हेस्टी, इयान जॉनस्टोन और रॉबर्ट टिबशिरानी (2004) "लीस्ट एंगल रिग्रेशन," एनल्स ऑफ स्टैटिस्टिक्स (चर्चा के साथ), 407-499। (https://web.stanford.edu/~hastie/Papers/LARS/LeastAngle_2002.pdf)


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

मेलानी ली, पीएचडी, सिडनी, ऑस्ट्रेलिया स्थित AWS में एक वरिष्ठ AI/ML विशेषज्ञ TAM हैं। वह उद्यम ग्राहकों को एडब्ल्यूएस पर अत्याधुनिक एआई/एमएल टूल्स का लाभ उठाने के लिए समाधान बनाने में मदद करती है और सर्वोत्तम प्रथाओं के साथ मशीन लर्निंग समाधानों को तैयार करने और लागू करने पर मार्गदर्शन प्रदान करती है। अपने खाली समय में, वह बाहर प्रकृति की खोज करना और परिवार और दोस्तों के साथ समय बिताना पसंद करती हैं।

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

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

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

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