23 मई 2022 | 8 मिनट पढ़ें

एफएसीबीबुक प्रोफेट मशीन लर्निंग मॉडल का उपयोग करके एडब्ल्यूएस लैम्ब्डा (सर्वरलेस) पर स्वचालित ट्रेडिंग बॉट को कैसे तैनात करें

इस पोस्ट को मैंने दो हिस्सों में बांटा है: “मैंने ऐसा क्यों किया” और “तकनीकी कैसे करें”। यदि आप “क्यों” वाले हिस्से को छोड़ना चाहते हैं, तो आप सीधे “तकनीकी” भाग पर जा सकते हैं।

1. विश्वसनीयता: एल्गोरिथ्म अन्य सिस्टम, अपडेट, आदि से स्वतंत्र रूप से चलेगा।

2. दक्षता: मैं एक (छोटे) सिस्टम पर कई एल्गोरिदम चला सकता हूँ, जो एक-दूसरे से स्वतंत्र हैं।

3. लागत बचत: AWS प्रति माह 32 लाख गणना सेकंड तक की अनुमति देता है, जिससे मूलतः मुझे सभी एल्गोरिदम मुफ्त में चलाने की सुविधा मिलती है।

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

इसके अतिरिक्त, यह एक अच्छा विचार है कि कोई निवेश एल्गोरिथ्म ऑपरेटिंग सिस्टम के अपडेट, हार्डवेयर खराबी और बिजली कटौती आदि की चिंता किए बिना चल सके, जो सर्वरलेस तकनीकों का आम लाभ है।

अभी, मैं एल्गोरिथ्म के विभिन्न संस्करणों को परीक्षण करने के लिए चला सकता हूँ ताकि एल्गोरिथ्म में बदलावों का परीक्षण कर सकूँ और यह सुनिश्चित कर सकूँ कि यह चलेगा। एक और अच्छी बात? AWS लगभग 1 मिलियन मुफ्त Lambda कॉल प्रदान करता है जो मुझे पूरे आर्किटेक्चर को अपने मुफ्त स्तर पर चलाने की अनुमति देता है।

निवेश एल्गोरिथ्म

मैं अपने वेबसाइट www.datafortress.cloud पर एक और पोस्ट में एल्गोरिथ्म को और विस्तार से समझाऊँगा, लेकिन मेरी विशिष्ट निवेश एल्गोरिथ्म सेटअप में शामिल हैं:

  1. Backtrader का उपयोग करके एल्गोरिथ्म का परीक्षण करना, जो पायथन में लिखा गया एक ओपन-सोर्स बैकटेस्टिंग फ्रेमवर्क है।
  2. सफल एल्गोरिथ्म को एक एकल पायथन फ़ाइल में परिवर्तित करना जिसमें एक रन() विधि होती है जो बताती है कि कौन से निवेश किए गए हैं।
  3. पायथन फ़ाइल को AWS Lambda में स्थानांतरित करना, जहाँ मैं AWS Lambda के lambda_handler फ़ंक्शन के साथ रन() फ़ंक्शन को कॉल कर रहा हूँ।

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

इस सेटअप में मेरा स्टॉक यूनिवर्स SPY500 इंडेक्स में शीर्ष 20 शेयरों को चुनकर गणना की जाती है, जिन्होंने पिछले X टाइमस्टेप्स में सबसे अधिक रिटर्न प्राप्त किया है।

डेटा स्रोत Yahoo वित्त है, जो मुफ्त yfinance लाइब्रेरी का उपयोग कर रहा है, और मेरी एल्गोरिदमिक ब्रोकर पसंद के रूप में मैंने Alpaca.markets को चुना है।

मेरे सेटअप में, एल्गोरिथ्म दिन में 3 बजे या कारोबार के घंटों के दौरान हर 15 मिनट में एक बार निष्पादित होगा।

AWS Lambda में फ़ेसबुक पैगंबर को तैनात करने में समस्याएँ

AWS Lambda कुछ पायथन लाइब्रेरी पूर्व-स्थापित करता है, लेकिन जैसा कि आप में से कई जानते होंगे, यह डिफ़ॉल्ट रूप से काफी सीमित है (जो Lambda के वादे के लिए उचित है)। फिर भी, Lambda निजी पैकेज स्थापित करने की अनुमति देता है जो छोटे पैकेजों के लिए काफी आसान है (देखें आधिकारिक दस्तावेज़ ) लेकिन पैकेजों से निपटने पर थोड़ा अधिक जटिल हो जाता है जिनका आकार 250 Mb से अधिक होता है। दुर्भाग्य से, फ़ेसबुक का पैगंबर मॉडल इस सीमा से अधिक है, लेकिन सौभाग्य से एलेक्जेंडर मत्सेनोव ने पैकेज के आकार को कम करके इस समस्या को हल किया और मार्क मेट्ज़ ने AWS Lambda पर इसे चलाने के लिए संकलन समस्याओं को संभाला

गैर-डिफ़ॉल्ट लाइब्रेरी को लेयर्स का उपयोग करके AWS Lambda में जोड़ा जा सकता है, जिसमें आवश्यक सभी पैकेज होते हैं। यदि कोई परत आयात की जाती है, तो आप अपने पायथन फ़ंक्शन में पैकेजों को उसी तरह आयात कर सकते हैं जैसे आप अपने स्थानीय सेटअप में करते हैं।

कैसे करें (तकनीकी)

अंत में, मैं आपको यह समझाने देता हूँ कि आप इसे कैसे प्राप्त कर सकते हैं। अधीर लोगों के लिए यह TLDR देखें, या नीचे दिया गया अधिक विस्तृत संस्करण देखें।

TLDR;

  1. आपको एक Lambda लेयर की आवश्यकता होगी, मेरा (डाउनलोड करें ) पैगंबर, yfinance, आदि को S3 बाल्टी (निजी एक्सेस) में अपलोड करें।
  2. AWS Lambda चुनें, एक फ़ंक्शन बनाएँ, एक परत जोड़ें और अपनी S3 ऑब्जेक्ट URL पेस्ट करें।
  3. अपना lambda_function.py Lambda संपादक में पेस्ट करें (या मेरा उपयोग करें )।
  4. अपने पर्यावरण चर (वैकल्पिक) सेट करें।
  5. इसे मैन्युअल रूप से “टेस्ट” पर क्लिक करके चलाएँ या CloudWatch -> नियम -> नियम बनाएँ पर जाएँ और इसे निर्दिष्ट समय अंतराल पर चलाने के लिए “अनुसूचित निष्पादन” सेट करें।

विवरण:

1. AWS Lambda के लिए कस्टम परत बनाना

आप या तो मेरे Lambda लेयर का उपयोग कर सकते हैं जिसमें फ़ेसबुक पैगंबर, NumPy, pandas, alpaca-ट्रेडिंग-API , yfinance (GitHub ) शामिल हैं, या अपने स्वयं के संकलन का उपयोग करें मार्क द्वारा दिए गए स्पष्टीकरण का उपयोग करके।

मेरे Lambda लेयर का उपयोग करना

  1. मेरे GitHub रिपो से ज़िप फ़ाइल डाउनलोड करें जिसमें सभी पैकेज (लिंक ) शामिल हैं।
  2. चूँकि आप केवल 50 Mb के आकार तक Lambda में सीधे परतें अपलोड कर सकते हैं, हमें पहले फ़ाइल को AWS S3 में अपलोड करना होगा।
  3. एक बाल्टी बनाएँ और डाउनलोड की गई ज़िप फ़ाइल को इसमें रखें। पहुँच निजी बनी रह सकती है और सार्वजनिक होने की ज़रूरत नहीं है! अपनी फ़ाइल का URL कॉपी करें (जैसे https://BUCKETNAME.s3.REGION.amazonaws.com/python.zip ).
  4. AWS में लॉग इन करें और Lambda -> परतें (EU मध्य लिंक ) पर जाएँ।
  5. “परत बनाएँ” पर क्लिक करें, इसे एक संगत नाम दें और “Amazon S3 से एक फ़ाइल अपलोड करें” चुनें, और चरण 3 का कोड इसमें कॉपी करें। रनटाइम के रूप में पायथन 3.7 चुनें। बनाएँ पर क्लिक करें।

अपना स्वयं का Lambda लेयर संकलित करना

कृपया मार्क के निर्देशों का पालन करें

2. AWS Lambda फ़ंक्शन सेट करना

  1. Lambda फ़ंक्शन डैशबोर्ड खोलें (EU मध्य लिंक ) और “फ़ंक्शन बनाएँ” पर क्लिक करें।
  2. “खरोंच से लेखक” चेकबॉक्स को वैसा ही छोड़ दें और इसे एक उपयुक्त नाम दें।
  3. “रनटाइम” में, पायथन 3.7 चुनें, बाकी को वैसा ही छोड़ दें और “फ़ंक्शन बनाएँ” पर क्लिक करें।
  4. “डिजाइनर” टैब के अवलोकन में, आप अपने Lambda फ़ंक्शन का ग्राफ़िकल प्रतिनिधित्व देखेंगे। इसके नीचे “परतें” बॉक्स पर क्लिक करें और “परत जोड़ें” पर क्लिक करें। यदि आपने परत को सही ढंग से सेट किया है, तो आप निम्न संवाद में इसे चुन पाएँगे। अंत में, “स्थिर” पर क्लिक करें।
  5. “डिजाइनर” टैब में, अपना Lambda फ़ंक्शन चुनें। यदि आप नीचे स्क्रॉल करते हैं, तो आपको “lambda_function.py” नाम की फ़ाइल में डिफ़ॉल्ट पायथन कोड स्निपेट दिखाई देगा। यदि आपने मेरे कोड को लिंक जैसा ही संरचित किया है, तो आप रन() फ़ंक्शन के साथ अपने फ़ंक्शन को निष्पादित कर सकते हैं। यदि कोई Lambda फ़ंक्शन कॉल किया जाता है, तो यह lambda_handler(event, context) फ़ंक्शन को निष्पादित करेगा, जिससे आप कॉल कर सकते हैं जैसे रन() फ़ंक्शन। बेशक, आप सभी फ़ाइलों और फ़ंक्शनों का नाम बदल सकते हैं, लेकिन इस परियोजना की सादगी के लिए, मैंने इसे वैसा ही छोड़ा है।
  6. कृपया मेरा फ़ंक्शन पेस्ट करें और इसे टेस्ट करें।
  7. “टेस्ट” पर क्लिक करने से सफल निष्पादन होना चाहिए, अन्यथा यह संवाद में त्रुटियों को बताएगा।

3. AWS Lambda में पर्यावरण चर का उपयोग करना

आपको कभी भी अपने उपयोगकर्ता और पासवर्ड को अपने कोड में स्पष्ट रूप से नहीं छोड़ना चाहिए, यही कारण है कि आपको हमेशा पर्यावरण चर का उपयोग करना चाहिए! सौभाग्य से, Lambda इनका उपयोग करता है, और उन्हें पायथन os पैकेज के साथ आसानी से कॉल किया जा सकता है। उदाहरण के लिए, मेरे स्क्रिप्ट में मैं उपयोगकर्ता चर को os.environ[‘ALPACAUSER’] के साथ कॉल कर रहा हूँ। पर्यावरण चर आपके कोड संपादक के नीचे स्क्रॉल करते समय, मुख्य Lambda फ़ंक्शन स्क्रीन में सेट किए जा सकते हैं।

4. निर्दिष्ट समय अंतराल पर AWS Lambda फ़ंक्शन ट्रिगर करना

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

  1. CloudWatch (EU मध्य लिंक ) पर जाएँ।
  2. बाईं ओर के पैनल में, “ईवेंट” और “नियम” चुनें।
  3. “नियम बनाएँ” पर क्लिक करें और “घटना पैटर्न” के बजाय “अनुसूची” चुनें। यहाँ आप सरल “निश्चित-दर” संवाद का उपयोग कर सकते हैं, या क्रोन अभिव्यक्ति बना सकते हैं। मैं https://crontab.guru/ (मुफ्त) का उपयोग क्रोन अभिव्यक्ति बनाने के लिए कर रहा हूँ। उपरोक्त उपयोग के मामले के लिए मेरी क्रोन अभिव्यक्ति “0/15 13-21 ? * MON-FRI *” है।
  4. दाहिने पैनल में, “लक्ष्य जोड़ें” चुनें और अपना Lambda फ़ंक्शन चुनें। यह अपने आप Lambda में जुड़ जाएगा।
  5. अंत में “विवरण कॉन्फ़िगर करें” पर क्लिक करें, इसे एक नाम दें और “नियम बनाएँ” पर क्लिक करें।

5. (वैकल्पिक) लॉग विश्लेषण, त्रुटि खोज

यदि आप इस भाग तक पहुँच चुके हैं, तो आपको काम खत्म करना चाहिए! लेकिन अगर आप यह देखना चाहते हैं कि सब कुछ ठीक से काम किया है, तो आप Lambda फ़ंक्शन के आउटपुट को देखने के लिए CloudWatch का उपयोग कर सकते हैं। CloudWatch -> लॉग्स -> लॉग ग्रुप (EU मध्य लिंक ) पर जाएँ और अपना Lambda फ़ंक्शन चुनें। इस अवलोकन में, आपको अपने फ़ंक्शन के आउटपुट देखने में सक्षम होना चाहिए।

यदि आपको यह पोस्ट पसंद आई है तो कमेंट करें या मेरे ब्लॉग www.datafortress.cloud पर जाएं ताकि मुझे प्रेरित रखा जा सके 😊।

comments powered by Disqus