10 पॉइंट द्वारा GN⁺ 2025-02-28 | 2 टिप्पणियां | WhatsApp पर शेयर करें
  • पिछले कुछ वर्षों में, 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) करने के लिए pytesseract package का उपयोग किया जा सकता है
  • 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 टिप्पणियां

 
aer0700 2025-03-01

Numpy वाकई बहुत अच्छा है...

 
GN⁺ 2025-02-28
Hacker News टिप्पणियाँ
  • Livebook की functionality बहुत शानदार है। Elixir में C++ NIFs के जरिए CPython को सीधे कॉल करना और Elixir-native data structures लौटाना काफ़ी साफ़-सुथरा लगता है

    • production server पर Pythonx का उपयोग थोड़ा जोखिमभरा हो सकता है। यह Elixir app के उसी OS process में चलता है, इसलिए Elixir/BEAM app की मज़बूत failure recovery क्षमताओं को bypass कर देता है
    • आम तौर पर Elixir app में supervisor tree होता है जो अपने BEAM process की failures को अच्छे से handle कर सकता है, और यही Elixir, Erlang, Gleam जैसी भाषाओं की बड़ी ताकत है
    • NIFs का उपयोग करने पर, अगर Pythonx में unhandled exception हो जाए तो पूरा OS process और सभी BEAM processes बंद हो सकते हैं
    • Rustler, Elixir में Rust के लिए एक लोकप्रिय NIF wrapper है। NIFs कई मामलों में बहुत उपयोगी होते हैं, लेकिन पूरे app को बंद कर देने वाले जोखिम को ध्यान में रखना चाहिए
    • इस लिहाज़ से Ports का उपयोग करके Python या Rust जैसे दूसरे native code को चलाना कम जोखिमभरा है
  • यह देखना अच्छा लगता है कि Elixir community के "well-known" लोग इस approach का समर्थन कर रहे हैं और इसे सक्रिय रूप से विकसित भी कर रहे हैं

    • VM और runtime दूसरी भाषाओं और technologies को orchestrate करने के लिए बहुत उपयुक्त हैं, इसलिए ऐसा लगता है जैसे standard track और offload track दोनों मौजूद हों
    • offload वाले "जोखिमभरे लगने" वाले ideas और safe execution के बीच का फ़र्क़ अक्सर सिर्फ़ workload का होता है, लेकिन runtime इसे प्रोत्साहित करता है
    • क्योंकि यह NIF है, थोड़ा जोखिम तो है, लेकिन अलग BEAM instance बनाकर उसके ज़रिए distribute किया जा सकता है
  • NIFs के उपयोग की safety समस्या की ओर इशारा करने वाली दूसरी टिप्पणियाँ भी हैं

    • Erlang VM scheduler, NIF को preempt नहीं कर सकता, इसलिए लंबे समय तक चलने वाली Python calls से VM रुकने का जोखिम है
    • GIL concurrent Python execution को रोकता है, लेकिन Erlang caller कई Python interpreters चला सकता है, इसलिए Ports में यह समस्या नहीं होती
  • यह बहुत जानकारीपूर्ण लेख है। यह साफ़ तौर पर बताया गया है कि Pythonx सिर्फ़ साधारण subprocess call नहीं है, बल्कि उसी process में चलता है

    • अच्छा होता अगर Elixir से Python में defined function को कॉल करने का example भी जोड़ा गया होता
  • यह देखकर खुशी होती है कि AI race में Elixir, JavaScript और Python से ज़्यादा उपयुक्त होने के बावजूद पीछे है

    • मुझे Elixir की ML foundation को शुरू से बढ़ाने का शुरुआती फ़ैसला पसंद है, लेकिन यह भी अच्छा है कि अब तेज़ी से आगे बढ़ रही Python libraries का लाभ उठाने का तरीका भी है
  • Python से Elixir/Erlang ecosystem में आना मुझे बहुत कठिन लगता था, लेकिन Pythonx के साथ धीरे-धीरे सीखना अब कहीं ज़्यादा संभव लगता है

    • जानना चाहूँगा कि Python के GIL मुद्दे पर free-threading के साथ कोई प्रयोग किया गया है या नहीं
  • Elixir में कुछ ऐसी features हैं जो काश Python में भी होतीं

    • atom, ज़्यादातर चीज़ों का macro होना, pipe |>, सच्ची immutability, supervisor tree की वजह से सच्चा parallelism और concurrency, hot code reloading, fault tolerance
  • Elixir में गहराई से शामिल रहा हूँ और Python का भी काफ़ी उपयोग किया है, इसलिए यह मुझे बहुत practical लगता है

    • C++ NIFs को आसानी से बनाने वाली Fine library में मेरी ज़्यादा दिलचस्पी है
  • यह project और blog post ऐसे लगते हैं जैसे मेरे लिए ही बनाए गए हों। इसे आज़माना चाहूँगा, धन्यवाद