मुख्य कंटेंट तक स्किप करें

Morok

अल्फ़ा सॉफ़्टवेयर। कोर फ़ंक्शनैलिटी टेस्टेड है, लेकिन APIs अस्थिर हैं और बिना नोटिस के बदल सकते हैं।

Morok एक Rust-आधारित ML कम्पाइलर है जो Tinygrad से प्रेरित है। इसमें UOp-आधारित IR के साथ lazy tensor इवैल्यूएशन, पैटर्न-ड्रिवन ऑप्टिमाइज़ेशन, और मल्टी-बैकएंड कोड जनरेशन शामिल है।

मुख्य विशेषताएँ

विशेषताविवरण
डिक्लेरेटिव ऑप्टिमाइज़ेशनZ3-सत्यापित शुद्धता के साथ ग्राफ़ रीराइट्स के लिए patterns! DSL
Lazy इवैल्यूएशनTensor कम्प्यूटेशन ग्राफ़ बनाते हैं, कम्पाइल केवल realize() पर होता है
प्रोवेनेंस ट्रैकिंग#[track_caller] हर UOp को सोर्स लोकेशन तक ट्रेस करता है
80+ IR ऑपरेशनअरिथमेटिक, मेमोरी, कंट्रोल फ़्लो, WMMA tensor cores
20+ ऑप्टिमाइज़ेशनकॉन्स्टेंट फ़ोल्डिंग, tensor cores, वेक्टराइज़ेशन, लूप अनरोलिंग

आर्किटेक्चर की डिटेल्स के लिए डॉक्यूमेंटेशन साइट देखें।

वर्कस्पेस

Crateविवरण
dtypeटाइप सिस्टम: scalars, vectors, pointers, images
macrosप्रोसीज़रल मैक्रोज़ (patterns! DSL)
irUOp ग्राफ़ IR: 80+ ops, symbolic integers, प्रोवेनेंस
deviceबफ़र मैनेजमेंट: lazy alloc, zero-copy views, LRU कैशिंग
scheduleऑप्टिमाइज़ेशन इंजन: 20+ पासेज़, RANGEIFY, Z3 वेरिफ़िकेशन
codegenकोड जनरेशन: Clang (डिफ़ॉल्ट), LLVM JIT, MLIR
runtimeJIT कम्पाइलेशन और कर्नेल एक्ज़ीक्यूशन
tensorहाई-लेवल lazy tensor API
onnxONNX मॉडल इम्पोर्टर
archइन्फ़रेंस प्रिमिटिव्स
modelप्री-ट्रेन्ड मॉडल्स

त्वरित उदाहरण

use morok_tensor::Tensor;
use ndarray::array;

// Zero-copy from ndarray (C-contiguous fast path)
let a = Tensor::from_ndarray(&array![[1.0f32, 2.0], [3.0, 4.0]]);
let b = Tensor::from_ndarray(&array![[5.0f32, 6.0], [7.0, 8.0]]);

// Lazy — nothing executes yet
let mut c = &a + &b;
c.realize()?;

// Zero-copy view into the result
let view = c.array_view::<f32>()?;
assert_eq!(view, array![[6.0, 8.0], [10.0, 12.0]].into_dyn());

Pattern DSL उदाहरण

use morok_schedule::patterns;

let optimizer = patterns! {
// Identity folding (commutative)
Add[x, @zero] ~> x,
Mul[x, @one] ~> x,

// Constant folding
for op in binary [Add, Mul, Sub] {
op(a @const(av), _b @const(bv))
=> |a, av, bv| eval_binary_op(op, av, bv).map(|r| UOp::const_(a.dtype(), r)),
},
};

डेवलपमेंट

एनवायरनमेंट सेटअप

Nix

इस प्रोजेक्ट में सभी डिपेंडेंसीज़ और कम्पाइलर्स के साथ एक प्री-डिफ़ाइंड Nix डेवलपमेंट एनवायरनमेंट है। वही इंफ़्रास्ट्रक्चर CI/CD के लिए इस्तेमाल होता है, इसलिए यह डेवलप और टेस्ट करने का प्रिफ़र्ड तरीका है।

nix develop # Open development shell
nix flake check # Run CI tests
nix fmt # Format source files

बेयर मेटल

डिपेंडेंसीवर्शनज़रूरीविवरण
Rust1.85+हाँEdition 2024
LLVM21.xहाँCPU कोड जनरेशन बैकएंड
Clang-हाँLLVM बिल्ड्स के लिए C कम्पाइलर
pkgconf-हाँबिल्ड कॉन्फ़िगरेशन टूल
protobuf-हाँONNX proto कम्पाइलेशन
zlib>=1.3हाँकम्प्रेशन लाइब्रेरी
libffi>=3.4हाँफ़ॉरेन फ़ंक्शन इंटरफ़ेस
libxml2>=2.13हाँXML पार्सिंग
Z3>=4.15नहींऑप्टिमाइज़ेशन वेरिफ़िकेशन के लिए SMT सॉल्वर

टेस्ट

cargo test
cargo test --features z3,proptest # With Z3 verification and PB generated tests
cargo test --features cuda # With CUDA tests