"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > C ++ FFI का उपयोग करके DART से एक JAX कार्यक्रम चलाना

C ++ FFI का उपयोग करके DART से एक JAX कार्यक्रम चलाना

2025-03-23 ​​पर पोस्ट किया गया
ब्राउज़ करें:288

? मशीन लर्निंग के लिए डार्ट और जैक्स को क्यों मिलाएं?

अनुप्रयोगों का निर्माण करते समय, सही उपकरण का चयन करना महत्वपूर्ण है। आप उच्च प्रदर्शन, आसान विकास और सहज क्रॉस-प्लेटफॉर्म परिनियोजन चाहते हैं। लोकप्रिय फ्रेमवर्क ट्रेड-ऑफ की पेशकश करते हैं:

  • C गति प्रदान करता है लेकिन विकास को धीमा कर सकता है।
  • ] ] यह अंतर मौजूद है क्योंकि ये ढांचे एआई बूम से पहले हैं। सवाल यह है की:
  • ] ]
]

अनुकूलित एमएल और सामान्य-उद्देश्य एल्गोरिदम लिखने में सक्षम बनाता है। ]

]

इस लेख में, हम आपको दिखाएंगे कि कैसे:

पायथन में JAX कार्यक्रम लिखें।

XLA विनिर्देश उत्पन्न करें।

]

? जैक्स क्या है?
    ] Google द्वारा विकसित, यह एक निम्न-स्तरीय, उच्च-प्रदर्शन वाली लाइब्रेरी है जो एमएल को अभी तक शक्तिशाली बनाती है।
  • ]
  • ] ] ]
# numpy संस्करण एनपी के रूप में संख्या को आयात करें def assum_numpy (): a = np.empty (1000000) a [:] = १ वापस लौटना # जैक्स संस्करण JAX.Numpy JNP के रूप में आयात करें आयात Jax @jax.jit def assum_jax (): a = jnp.empty (1000000) A.AT [:]। सेट (1)

]

    ]
  1. ]
  2. ]

?

क्लाउड microservices बनाम स्थानीय परिनियोजन

]

    ]
  • समाधान: लीवरेज जैक्स के एक्सएलए संकलन
  • ] यह सक्षम करता है:
  • पायथन में एल्गोरिदम लिखना।
  • एक सी लाइब्रेरी के माध्यम से उन्हें मूल रूप से चलाना। ]

✍ चरण-दर-चरण एकीकरण

1। एक एचएलओ प्रोटो उत्पन्न करें
# NumPy version
import numpy as np  
def assign_numpy():  
  a = np.empty(1000000)  
  a[:] = 1  
  return a  

# JAX version
import jax.numpy as jnp  
import jax  

@jax.jit  
def assign_jax():  
  a = jnp.empty(1000000)  
  return a.at[:].set(1)  
अपना JAX फ़ंक्शन लिखें और इसके HLO प्रतिनिधित्व को निर्यात करें। उदाहरण के लिए:

    jax.numpy jnp के रूप में आयात करें def fn (x, y, z): jnp.dot (x, y) / z लौटें
  • HLO उत्पन्न करने के लिए, Jax_to_ir.py स्क्रिप्ट से
  • jax_to_ir.py
  • का उपयोग करें:
  • python jax_to_ir.py \ --fn jax_example.prog.fn \ --input_shapes '[("x", "f32 [2,2]"), ("y", "f32 [2,2")]' \ _ -constants {"z": 2.0} '\ _ -ir_format hlo \ -ir_human_dest /tmp/fn_hlo.txt \ --r_dest /tmp/fn_hlo.pb
]

2। एक सी डायनेमिक लाइब्रेरी का निर्माण करें


JAX के C उदाहरण कोड को संशोधित करें Running a JAX Program from Dart Using C   FFI ]


एक main.h हेडर फ़ाइल जोड़ें:

#ifndef main_h #define main_h बाहरी "सी" { इंट बार (इंट फू); } #endif
  • ]
  • cc_shared_library ( नाम = "JAX", deps = [": मुख्य"], दृश्यता = ["// दृश्यता: सार्वजनिक"], )
  • bazel के साथ संकलन:
bazel निर्माण उदाहरण

]

3। एफएफआई का उपयोग करके सी के साथ डार्ट कनेक्ट करें ] एक jax.dart फ़ाइल बनाएँ: आयात 'dart: ffi'; आयात 'पैकेज: डायनेमिक_लिब्ररी/डायनेमिक_लिब्ररी.डार्ट'; typedef foocfunc = int32 फ़ंक्शन (int32 बार); Typedef foodartfunc = int function (int bar); क्लास जैक्स { लेट फाइनल डायनेमिकलिब्रेरी डायलिब; Jax () { dylib = loadDynamicLibrary (LibraryName: 'Jax'); } फ़ंक्शन _bar => dylib.lookupfunction ('बार'); इंट बार (इंट फू) { वापसी _bar (foo); } }

    अपने प्रोजेक्ट निर्देशिका में डायनेमिक लाइब्रेरी को शामिल करें। इसके साथ परीक्षण करें:
  1. अंतिम jax = jax (); प्रिंट (jax.bar (42));
  2. आप अपने कंसोल में C लाइब्रेरी से आउटपुट देखेंगे।
  3. ? अगले कदम

इस सेटअप के साथ, आप कर सकते हैं:

JAX और XLA के साथ ML मॉडल का अनुकूलन करें।

स्थानीय रूप से शक्तिशाली एल्गोरिदम चलाएं।

import jax.numpy as jnp  

def fn(x, y, z):  
  return jnp.dot(x, y) / z  

खोज एल्गोरिदम
(जैसे, ए*)।

python jax_to_ir.py \
  --fn jax_example.prog.fn \
  --input_shapes '[("x", "f32[2,2]"), ("y", "f32[2,2")]' \
  --constants '{"z": 2.0}' \
  --ir_format HLO \
  --ir_human_dest /tmp/fn_hlo.txt \
  --ir_dest /tmp/fn_hlo.pb

छवि प्रसंस्करण
(जैसे, किनारे का पता लगाना)।

]

]

यह पूरी तरह से स्वतंत्र है, और आप इसे अपने वर्तमान आईडीई के अंदर भी आज़मा सकते हैं।

            
विज्ञप्ति वक्तव्य इस लेख को पुन: प्रस्तुत किया गया है: https://dev.to/nikl/running-a-jax-program-from-dart-using-c-ffi-45po?1 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए [email protected] से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3