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

हब्रे पर तंत्रिका नेटवर्क (कौशल) के मॉडल के निर्माण और प्रशिक्षण के बारे में बहुत कुछ लिखा गया है, इसलिए हम आज इसके बारे में बात नहीं करेंगे। प्रशिक्षित एआई कौशल प्राप्त करने या प्राप्त करने के बाद, हम उन्हें अपने लक्ष्य सूचना प्रणालियों में उपयोग करने की उम्मीद करते हैं, और यहां एक समस्या उत्पन्न होती है। प्रयोगशाला स्टैंड में काम करने वाले को अपने मूल रूप में उत्पादन में स्थानांतरित नहीं किया जा सकता है, पूरे संबद्ध प्रौद्योगिकी स्टैक को लागू करना और यहां तक कि लक्ष्य प्लेटफ़ॉर्म के लिए महत्वपूर्ण संशोधन करना आवश्यक है (बेशक, CoreML के रूप में अपवाद हैं, लेकिन यह एक विशेष मामला है और केवल Apple उपकरणों के लिए है)। इसके अलावा, मॉडल के विकास और क्रमांकन के लिए बहुत सारे उपकरण हैं, क्या वास्तव में सभी के लिए एक अलग एकीकरण समाधान विकसित करना आवश्यक है? इसके अलावा, यहां तक कि प्रयोगशाला में, अक्सर मॉडल से एक त्वरित निष्कर्ष निकालना आवश्यक होता है, पूरे संबद्ध विकास स्टैक के लोड की प्रतीक्षा किए बिना।
इन समस्याओं को हल करने के लिए एक सुझाव के रूप में, मैं आपको अपेक्षाकृत नए ओपनसोर्स टूल के बारे में बताना चाहूंगा, जो, संभवतः, एआई से संबंधित परियोजनाओं को विकसित करते समय आपके लिए उपयोगी होगा।
0Mind (
ZeroMind पढ़ें) एक नि: शुल्क कौशल सर्वर है। समाधान एक मॉड्यूलर, सार्वभौमिक, आसानी से एक्स्टेंसिबल एप्लिकेशन सर्वर है जिसमें सेवारत (अत्यधिक सुलभ आउटपुट) विषम मशीन लर्निंग मॉडल के लिए एक ढांचे के तत्व हैं। सर्वर पायथन 3 में बदसूरत है और अतुल्यकालिक अनुरोध प्रसंस्करण के लिए टोरनेडो का उपयोग करता है। इसके बावजूद कि मशीन सीखने की रूपरेखा का उपयोग मॉडल को तैयार करने और उसे क्रमबद्ध करने के लिए किया गया था, 0Mind सार्वभौमिक REST API का उपयोग करके कौशल या कौशल के समूह का उपयोग करना आसान बनाता है। वास्तव में, समाधान REST API के साथ एक अतुल्यकालिक वेब सर्वर है, जो AI कौशल मॉडल के साथ काम करने के लिए एकीकृत है, और विभिन्न मशीन लर्निंग फ्रेमवर्क के लिए एडेप्टर का एक सेट है। आपने टेंसोफ़्लो सेवारत के साथ काम किया होगा - यह एक समान समाधान है, लेकिन 0Mind tf स्टैक्ड नहीं है और एक ही पोर्ट पर विभिन्न फ्रेमवर्क के कई मॉडलों की सेवा कर सकता है। इस प्रकार, लक्ष्य सूचना प्रणाली में एआई मॉडल प्राप्त करने के लिए संपूर्ण प्रौद्योगिकी स्टैक को लागू करने के बजाय, आप ब्याज के कौशल के लिए सरल और परिचित REST API का उपयोग कर सकते हैं, इसके अलावा, तैयार मॉडल सर्वर पर रहता है और सॉफ़्टवेयर वितरण में समाप्त नहीं होता है। जटिल शब्दों के साथ एक बार फिर से भ्रमित न करने के लिए, आइए उपयोग के उदाहरणों पर जाएं और कंसोल मंत्र डालना शुरू करें।
स्थापना
यहाँ सब कुछ सरल है:
git clone git@github.com:MisteryX/0Mind.git 0Mind
अब हमारे पास एक काम करने वाला सर्वर उदाहरण है। निर्भरता स्थापित करें:
cd 0Mind pip3 install -r requirements.txt
या यदि आप कॉनडा का उपयोग करते हैं:
conda install --yes --file requirements.txt
एक महत्वपूर्ण चेतावनी यह है कि
सर्वर कई मशीन लर्निंग
चौखटे का समर्थन करता है , और इसके आधार पर उन सभी को जोड़ने के लिए नहीं और इसके साथ स्थापित नहीं करने के लिए, आप खुद तय करते हैं कि आप किस फ्रेमवर्क फ्रेमवर्क को 0Mind उदाहरण के साथ लोड करेंगे, इन उपकरणों को स्वतंत्र रूप से स्थापित और कॉन्फ़िगर करें।
समायोजन
प्रविष्टि बिंदु या मुख्य सर्वर निष्पादन योग्य है
model_pool.py ।
संभव स्टार्टअप विकल्प
-c या
--config_file कॉन्फ़िगरेशन फ़ाइल के पथ के साथ हैं। डिफ़ॉल्ट रूप से, 0Mind कॉन्फ़िगरेशन फ़ाइल के रूप में
config / model_pool_config.json फ़ाइल का उपयोग करता है। पायथन लॉगिंग मॉड्यूल के मानक लॉगिंग को नियंत्रित करने के लिए सर्वर भी
config / logger.json फ़ाइल का उपयोग करता है।
क्षमताओं के प्रदर्शन के उद्देश्य से, हम डिफ़ॉल्ट कॉन्फ़िगरेशन फ़ाइल को बरकरार रख सकते हैं।
आधिकारिक प्रलेखन में कॉन्फ़िगरेशन के बारे में और पढ़ें।
मुख्य सर्वर सेटिंग्स हैं: आईडी, होस्ट, पोर्ट, कार्य।
आईडी - (संख्या) मॉडल पूल की अद्वितीय पहचानकर्ता (पूल के वितरित नेटवर्क में संतुलन और पते के लिए प्रयुक्त)
होस्ट - (स्ट्रिंग) नेटवर्क होस्ट या डोमेन होस्ट का नाम
port - (संख्या) किस पोर्ट पर आप 0Mind सेवा होस्ट करना चाहते हैं (इस होस्ट पर मुक्त होना चाहिए)
कार्य - (वस्तुओं की सूची) सेवा से भरे कार्यों की एक सूची (खाली हो सकती है)। डिफ़ॉल्ट कॉन्फ़िगरेशन में, केआरएस द्वारा तैयार CNN_MNIST डेमो मॉडल लोड किया गया है, और हम इसका उपयोग क्षमताओं को प्रदर्शित करने के लिए करेंगे।
अतिरिक्त (वैकल्पिक) कॉन्फ़िगरेशन पैरामीटर:
model_types - (स्ट्रिंग्स की सूची) आप इस सूची में निर्दिष्ट मॉडलों के प्रकारों को इस पूल में सीमित कर सकते हैं। यदि सूची खाली है, तो कोई प्रतिबंध नहीं हैं।
डिबग - (बूलियन प्रकार) टोरनेडो के डिबग मोड को सक्षम या अक्षम करने के लिए जिम्मेदार है। डिबग मोड में, त्रुटियों के मामले में, विस्तारित त्रुटि जानकारी को स्टडआउट में लौटाया जाता है, जो एक्सटेंशन विकसित करते समय उपयोगी होता है।
संभावनाएं
0Mind में मुख्य बात
समर्थित चौखटे और
REST API सुविधाओं की
सूची है ।
REST API के अनुरोधों को ब्राउज़र या http यूटिलिटीज का उपयोग करके किया जा सकता है। इस गाइड में, साथ ही सर्वर के लिए प्रलेखन में, हम खुले सिस्टम के लिए सबसे सरल और सस्ती टूल के रूप में cURL का उपयोग करेंगे।
वर्तमान में, 0Mind API के पास कुल 10 अनुरोध हैं:
1. http: // $ HOST: $ PORT / जानकारी - 0Mind उदाहरण के बारे में सामान्य जानकारी
2. http: // $ HOST: $ PORT / जानकारी / प्रणाली - मेजबान के बारे में सिस्टम जानकारी जिस पर 0Mind चल रहा है
3. http: // $ HOST: $ PORT / जानकारी / कार्य - निर्दिष्ट कार्य के बारे में जानकारी
4. http: // $ HOST: $ PORT / जानकारी / कार्य - उदाहरण की कार्य सूची 0Mind
5. http: // $ HOST: $ PORT / मॉडल / सूची - पूल में लोड किए गए मॉडल के पहचानकर्ताओं की एक सूची
6. http: // $ HOST: $ PORT / मॉडल / जानकारी - मॉडल के बारे में इंटरफ़ेस जानकारी प्रदर्शित करता है
7. http: // $ HOST: $ PORT / मॉडल / लोड - पूल में एक नया मॉडल अपलोड करता है
8. http: // $ HOST: $ PORT / मॉडल / ड्रॉप - पूल से पहले से लोड किए गए मॉडल को अनलोड करता है
9. http: // $ HOST: $ PORT / मॉडल / भविष्यवाणी - मॉडल से आउटपुट का अनुरोध करता है
10.http: // $ HOST: $ PORT / कमांड / स्टॉप - 0Mind सेवा को रोकता है और इसकी प्रक्रिया को समाप्त करता है
सूचना
आप उदाहरण के लिए, एक सर्वर उदाहरण शुरू कर सकते हैं:
python3 model_pool.py
उदाहरण के लिए, हमें चल रहे सर्वर उदाहरण के बारे में सामान्य जानकारी मिलेगी:
curl http://127.0.0.1:5885/info
{"service": "ModelPool", "id": 1, "options": {"debug": false}, "version": [1, 1, 4]}
ठीक है, अब हम पता लगाते हैं कि कौन से मॉडल पूल में लोड किए गए हैं:
curl http://127.0.0.1:5885/model/list
{"id": 1, "check_sum": "4d8a15e3cc35750f016ce15a43937620", "models": ["1"]}
अब आइए पहचानकर्ता "1" के साथ लोड किए गए मॉडल के इंटरफ़ेस को स्पष्ट करें:
curl http://127.0.0.1:5885/model/info?id=1
{"inputs": {"0": {"name": "conv2d_1_input:0", "type": "float32", "shape": [null, 28, 28, 1]}}, "outputs": {"0": {"name": "dense_2/Softmax:0", "type": "float32", "shape": [null, 10]}}, "tool": "keras"}
यह पता लगाने के लिए रहता है कि मॉडल किस फिल्टर के साथ लोड किया गया है। ऐसा करने के लिए, हम पहचानकर्ता "1" के साथ मॉडल को लोड करने के कार्य के विवरण को स्पष्ट करते हैं:
curl http://127.0.0.1:5885/info/task?id=1
{"id": "1", "model_file": "ML/models/mnist_cnn_model.keras", "model_type": "keras", "input_filters": {"conv2d_1_input:0": ["i_img_file_to_ns_arr.ImageFileToNormAndScaledNPArrayFilter"]}, "output_filters": {}}
जैसा कि आप देख सकते हैं, हमारे मॉडल में एक इनपुट फ़िल्टर है - i_img_file_to_ns_arr.mageFileToNormAndScaledNPArrayFilter और यह नाम के साथ इनपुट को फ़िल्टर करता है - convdd_1_input: 0। यह फ़िल्टर बस निर्दिष्ट छवि फ़ाइल को एक टेंसर में परिवर्तित करता है और इसे मॉडल इनपुट के अनुसार मापता है।
फिल्टर एक और महान 0Mind सामान्यीकृत उपकरण हैं। चूंकि मॉडल के लिए डेटा का प्रीप्रोसेसिंग और पोस्टप्रोसेसिंग एक समान है, आप बस मॉडल को लोड करने के लिए एक विशेषता के रूप में वांछित कार्य का संकेत देते हुए, अन्य मॉडलों के साथ आगे के काम में त्वरित उपयोग के लिए इन फिल्टर को जमा कर सकते हैं।
मॉडल से डेटा आउटपुट (अनुमान)
खैर, अब हमारे पास निष्कर्ष के लिए आवश्यक सभी जानकारी है, हम मॉडल से निष्कर्ष निकाल सकते हैं। इनपुट के रूप में, हम 0 मींड
सैंपल / इमेज 5.पिंग डिस्ट्रीब्यूशन में शामिल टेस्ट सूट से इमेज का उपयोग करते हैं:
curl -d '{"conv2d_1_input:0": [{"image_file": "samples/image5.png"}]}' -H "Content-Type:application/json" -X POST http://127.0.0.1:5885/model/predict?id=1
मॉडल के एकमात्र इनपुट "conv2d_1_input: 0" के साथ फ़िल्टर "i_img_file_to_ns_arr.ImageFileToNormAndScaledNPArrayFilter" - हम इस प्रारूप में डेटा भेजते हैं - [{"image_file": "नमूने / इमेज 5"। 0Mind के जवाब में, हमें मॉडल आउटपुट मिलता है:
{"result": {"dense_2/Softmax:0": [[2.190017217283827e-21, 1.6761866200587505e-11, 2.2447325167271673e-14, 0.00011080023978138342, 1.881280855367115e-17, 0.9998891353607178, 1.6690393796396863e-16, 9.67975005705668e-12, 1.1265206161566871e-13, 2.086113400079359e-13]]}, "model_time": 0.002135753631591797}
तो, मॉडल का एकमात्र आउटपुट "dense_2 / सॉफ्टमैक्स: 0" (ऊपर मॉडल के बारे में जानकारी देखें) ने हमें इस छवि के वर्गीकरण में मॉडल का आत्मविश्वास वेक्टर दिया। जैसा कि आप देख सकते हैं, 6 के सूचकांक के साथ एक वर्ग के लिए उच्चतम संभावना 0.99 है (कक्षाएं 0-9 नंबर हैं), जो संख्या
5 से मेल खाती है। इस प्रकार, मॉडल ने पांडुलिपि की मान्यता के साथ सफलतापूर्वक मुकाबला किया और उच्च आत्मविश्वास के साथ एक निष्कर्ष दिया। 0Mind होस्ट पर मॉडल का इंफेक्शन टाइम 0.002135753631591797 सेकंड था, क्योंकि आउटपुट एक नियमित x86 CPU पर था।
मॉडल के गतिशील लोडिंग और अनलोडिंग
अब हमारे मॉडल को पूल से उतारें:
curl http://127.0.0.1:5885/model/drop?id=1
{"result": true, "unload_time": 0.000152587890625, "memory_released": 0, "model_id": "1"}
फिर से, एक ही मॉडल को लोड करें, लेकिन अब एक अलग पहचानकर्ता ("नया") और io_argmax.ArgMaxFilter मॉडल के आउटपुट फ़िल्टर के साथ, जो मॉडल आत्मविश्वास वेक्टर से सूचकांक को प्राप्त करने की सबसे अधिक संभावना है। हमें मॉडल के इनपुट और आउटपुट के सूचकांकों को बदलना होगा - यह केरस की विशेषताओं के कारण है:
curl -d '{"id": "new", "output_filters": {"dense_2_1/Softmax:0": ["io_argmax.ArgMaxFilter"]}, "model_file": "ML/models/mnist_cnn_model.keras", "input_filters": {"conv2d_1_input_1:0": ["i_img_file_to_ns_arr.ImageFileToNormAndScaledNPArrayFilter"]}, "model_type": "keras"}' -H "Content-Type:application/json" -X POST http://127.0.0.1:5885/model/load
{"result": true, "load_time": 0.45618462562561035, "memory_consumed": 16183296, "model_id": "new"}
और अब हम मॉडल को एक निवेदन
नमूने / इमेज 5.png और
सैंपल / इमेज 1 पर दो छवियों को एक बार में पहचानने के लिए
कहते हैं ।
curl -d '{"conv2d_1_input:0": [{"image_file": "samples/image5.png"}, {"image_file": "samples/image1.png"}]}' -H "Content-Type:application/json" -X POST http://127.0.0.1:5885/model/predict?id=new
{"result": {"dense_2_1/Softmax:0": [5, 1]}, "model_time": 0.003907206535339355}
डेमो मॉडल को फिर से गलत नहीं किया गया था।
विस्तार
0Mind की क्षमताओं का विस्तार करना मुश्किल नहीं है, इसकी मॉड्यूलर वास्तुकला के लिए धन्यवाद, परियोजना में लोकप्रिय उपकरण और अच्छे कोड सम्मेलनों का उपयोग। मुख्य विस्तार वैक्टर हो सकते हैं:
- एडाप्टर्स नई मशीन लर्निंग और न्यूरल नेटवर्क फ्रेमवर्क के साथ काम करने के लिए इंटरलेयर क्लासेस हैं।
- फिल्टर कौशल मॉडल में प्रवेश करने और छोड़ने के लिए डेटा हैंडलर हैं।
- अनुरोध हैंडलर - आप 0Mind एपीआई अनुरोधों और प्रतिक्रियाओं में नई कार्यक्षमता जोड़ने की अनुमति देते हैं।