Elixir में Python एम्बेड करना, कोई समस्या नहीं
(dashbit.co)- पिछले कुछ वर्षों में, Elixir ने Nx (Numerical Elixir) प्रोजेक्ट के माध्यम से मशीन लर्निंग और डेटा क्षेत्र में अपनी क्षमताओं का विस्तार किया है
- Nx, Explorer, Axon, Bumblebee, Scholar जैसे प्रोजेक्ट सामने आए हैं और Python व R ecosystem से सीखे गए सबकों के आधार पर विकसित हो रहे हैं
- शुरुआत में यह तय किया गया था कि Python लाइब्रेरीज़ पर सीधे निर्भर नहीं होना है, ताकि Elixir के लिए optimized design अपनाया जा सके और Python environment setup की जटिलता से बचा जा सके
- लेकिन आजकल इस क्षेत्र में Elixir adoption को आगे बढ़ाने वाला मुख्य साधन Livebook है
- Elixir और Erlang की खूबियों पर आधारित, reproducibility, distributed execution और app development के अग्रिम मोर्चे पर मौजूद एक notebook platform
- Livebook के जरिए Elixir ecosystem में पहली बार कदम रखने की कोशिश कर रही टीमों और कंपनियों की रुचि लगातार बढ़ रही है
- लेकिन कुछ बाधाएँ हैं
- Elixir और Livebook को अपने infra में अपनाने की कोशिश करने वाली अधिकांश कंपनियाँ पहले से ही Python-आधारित workflows, packages और repositories का उपयोग कर रही हैं
- इसका मतलब है कि इस विकल्प को अपनाने के लिए Elixir में समान package ढूँढ़ना होगा या उन्हें शुरू से फिर से लिखना होगा, जिससे data stack में Elixir जोड़ने का जोखिम और लागत बढ़ जाती है
- इसी समस्या को हल करने के लिए Erlang VM के भीतर Python interpreter को एम्बेड करने वाला Pythonx घोषित किया गया
Pythonx
- Pythonx, Elixir और Python के बीच automatic data conversion, code evaluation और virtual environment management की सुविधा देता है
- Optical Character Recognition(OCR) करने के लिए
pytesseractpackage का उपयोग किया जा सकता है reqका उपयोग करके image download करने के बाद,Pythonx.uv_init/1कॉल के जरिए Python और dependencies को डाउनलोड व initialize किया जा सकता हैPythonx.eval/2का उपयोग करके Python code चलाया जा सकता है और परिणाम को Elixir string में बदला जा सकता है
आंतरिक संरचना
- Python का CPython reference implementation दूसरे applications में एम्बेड किया जा सकता है
- Python interpreter की core functionality एक C library के रूप में उपलब्ध है
- C/C++ applications उस library को link करके API के जरिए code चला सकते हैं और objects के साथ interact कर सकते हैं
- Elixir, Erlang NIFs के माध्यम से C/C++ के साथ interoperability प्रदान करता है
- Pythonx, NIFs का उपयोग करके Python को एम्बेड करता है और यह उसी OS process में चलता है
- Python और Elixir के बीच data transfer कुशलता से होता है
Livebook का बहुभाषी समर्थन
- Pythonx के आधार पर Livebook में Python support जोड़ने का काम चल रहा है
- अब एक ही notebook में Elixir और Python एक-दूसरे के साथ interact कर सकते हैं
- Livebook, Python और dependencies को अपने आप install करता है और Elixir व Python variables के बीच conversion को manage करता है
- यह reproducible environment सुनिश्चित करता है
- फिलहाल code completion, documentation आदि पर अतिरिक्त काम जारी है, और Livebook nightly को डाउनलोड कर उपयोग किया जा सकता है
उपयोग के समय ध्यान देने योग्य बातें और विकल्प
- Pythonx का मुख्य उद्देश्य Livebook और scripts के भीतर Python workflows को integrate करना है
- Python के Global Interpreter Lock(GIL) के कारण कई Elixir processes से
Pythonxकॉल करने पर concurrency की सीमाएँ हो सकती हैं - बेहतर है कि इसे एक ही Elixir process से कॉल किया जाए, या यह जाँच लिया जाए कि Python library concurrent calls को संभाल सकती है या नहीं
- विकल्प के रूप में
System.cmd/3या Port का उपयोग करके कई Python processes को manage किया जा सकता है - AI workflows के लिए Bumblebee के माध्यम से pre-trained models चलाए जा सकते हैं
- Ortex का उपयोग करके ONNX models चलाए जा सकते हैं
- LLM के मामले में third-party API का उपयोग किया जा सकता है या on-premises पर Llama.cpp Docker container चलाया जा सकता है
- HTTP-आधारित interface का उपयोग करने पर Elixir के Instructor और LangChain जैसे tools का उपयोग किया जा सकता है
Fine प्रोजेक्ट
- Pythonx, NIFs का उपयोग करके implement किया गया है
- NIFs, C में लिखे गए Elixir functions होते हैं और इनमें काफी boilerplate code की ज़रूरत पड़ती है
- memory management और error handling की जटिलताएँ मौजूद हैं
- इन्हें हल करने के लिए C++-आधारित Fine library विकसित की गई है
- Fine, data structure conversion को अपने आप संभालती है, resource objects को सुरक्षित रूप से manage करती है, और exceptions raise करने की सुविधा देती है
- NIF लिखते समय इससे code की मात्रा काफी कम की जा सकती है
निष्कर्ष
- Numerical Elixir प्रोजेक्ट का लक्ष्य यह है कि Elixir डेटा और मशीन लर्निंग ecosystem में अपनी स्वतंत्र पहचान बना सके
- अब interoperability को एक प्रमुख लक्ष्य बनाया जा रहा है
- Pythonx, Elixir में Python को एम्बेड करके दोनों भाषाओं के बीच पारदर्शी interconversion संभव बनाता है
2 टिप्पणियां
Numpy वाकई बहुत अच्छा है...
Hacker News टिप्पणियाँ
Livebook की functionality बहुत शानदार है। Elixir में C++ NIFs के जरिए CPython को सीधे कॉल करना और Elixir-native data structures लौटाना काफ़ी साफ़-सुथरा लगता है
यह देखना अच्छा लगता है कि Elixir community के "well-known" लोग इस approach का समर्थन कर रहे हैं और इसे सक्रिय रूप से विकसित भी कर रहे हैं
NIFs के उपयोग की safety समस्या की ओर इशारा करने वाली दूसरी टिप्पणियाँ भी हैं
यह बहुत जानकारीपूर्ण लेख है। यह साफ़ तौर पर बताया गया है कि Pythonx सिर्फ़ साधारण subprocess call नहीं है, बल्कि उसी process में चलता है
यह देखकर खुशी होती है कि AI race में Elixir, JavaScript और Python से ज़्यादा उपयुक्त होने के बावजूद पीछे है
Python से Elixir/Erlang ecosystem में आना मुझे बहुत कठिन लगता था, लेकिन Pythonx के साथ धीरे-धीरे सीखना अब कहीं ज़्यादा संभव लगता है
Elixir में कुछ ऐसी features हैं जो काश Python में भी होतीं
Elixir में गहराई से शामिल रहा हूँ और Python का भी काफ़ी उपयोग किया है, इसलिए यह मुझे बहुत practical लगता है
यह project और blog post ऐसे लगते हैं जैसे मेरे लिए ही बनाए गए हों। इसे आज़माना चाहूँगा, धन्यवाद