StableHLO की स्पेसिफ़िकेशन की चेकलिस्ट

इस दस्तावेज़ में, हमने किसी खास जानकारी में किए गए बदलावों की समीक्षा करने के दिशा-निर्देशों के बारे में बताया है. फ़िलहाल, इन बदलावों में आम तौर पर कई स्रोतों में कई चीज़ों की जांच करना शामिल है. इसलिए, इस दस्तावेज़ में उन सभी चीज़ों की खास जानकारी दी गई है, ताकि समीक्षा को आसान बनाया जा सके:

  1. देखें कि status.md में "खास जानकारी" कॉलम में "हां" लिखा है या नहीं. अगर नया विकल्प जोड़ा जा रहा है, तो एक लाइन जोड़ें.
  2. देखें कि सेक्शन का टाइटल, ODS में ऑपरेटर के याददाश्त से मिलता-जुलता है या नहीं.
  3. देखें कि "सीमेंटिक्स" सेक्शन, XLA के ऑपरेशन सेमैंटिक्स से मेल खाता है या नहीं.
  4. देखें कि क्या "इनपुट" और "आउटपुट" सेक्शन दिख रहे हैं:
    1. ओडीएस वाले आइटम की सूची बनाएं.
    2. उन आइटम की सूची बनाएं जो HloInstruction::CreateFromProto जैसे हैं.
    3. ओडीएस की तरह ही व्यवस्थित किए जाते हैं.
    4. अगर कुछ मेल नहीं खाता है, तो देखें कि उससे जुड़े टिकट मौजूद हैं.
  5. देखें कि "सीमाएं" सेक्शन:
    1. XLA की shape_inference.cc से मेल खाता है.
    2. यह XLA की hlo_verifier.cc से मेल खाता है.
    3. ODS से मैच करता है.
    4. StablehloOps.cpp से मेल खाता हो.
    5. अगर कुछ मेल नहीं खाता है, तो देखें कि उससे जुड़े टिकट मौजूद हैं. उन सभी टिकटों को स्पेसिफ़िकेशन में उन जगहों से लिंक करें जहां ज़्यादा से ज़्यादा जानकारी दी गई हो. उदाहरण के लिए, अगर कोई टिकट किसी ऐसी सीमा के बारे में है जिसे लागू नहीं किया गया है, तो टिकट को कंस्ट्रेंट में सीधे लिंक करें.
    6. अगर ODS और StablehloOps.cpp के संबंधित हिस्से, स्पेसिफ़िकेशन से मेल खाते हैं, तो देखें कि status.md में, "पुष्टि" और "टाइप अनुमान" कॉलम में "हां" लिखा हो.
  6. देखें कि क्या "उदाहरण" सेक्शन:
    1. सिर्फ़ एक उदाहरण है. (आने वाले समय में, हम StableHLO अनुवादक टेस्ट सुइट के और उदाहरणों के लिंक देंगे).
    2. कोड उदाहरणों पर stablehlo-opt चलाकर, मान्य MLIR सिंटैक्स का इस्तेमाल किया जाता है.
    3. सामान्य MLIR सिंटैक्स का इस्तेमाल किया जाता है, जिसे stablehlo-opt -mlir-print-op-generic चलाकर हासिल किया जा सकता है. प्रिटीप्रिंटर बदलावों से जुड़ी खास जानकारी को बदलने से बचने के लिए, हम स्पेसिफ़िकेशन में सामान्य सिंटैक्स का इस्तेमाल करते हैं.
  7. देखें कि ऑपरेटर के ODS में description:
    1. इसमें स्पेसिफ़िकेशन का पहला वाक्य शामिल है.
    2. इसके बाद, खास जानकारी से जुड़े सेक्शन से लिंक करता है.
    3. इसके बाद, उसी उदाहरण का इस्तेमाल करता है जैसा खास जानकारी के लिए किया जाता है. हालांकि, अच्छे सिंटैक्स के ज़रिए इसे stablehlo-opt चलाकर हासिल किया जा सकता है.
  8. पक्का करें कि पुष्टि करने और टाइप अनुमान से जुड़ी पाबंदियों से जुड़ी फ़ाइलें, इन दिशा-निर्देशों का पालन करती हों:
    1. StablehloOps.td के लिए, #1 दिशा-निर्देश का पालन करें.
    2. TypeInference.cpp और StablehloOps.cpp के लिए, दिशा-निर्देश #2 का पालन करें.
    3. ops_stablehlo.mlir के लिए दिए गए दिशा-निर्देश #5 का पालन करें.
    4. infer_stablehlo.mlir के लिए दिए गए दिशा-निर्देश #6 का पालन करें.
  9. साइड इफ़ेक्ट और अनुमान लगाने की क्षमता के लिए, राय का आकलन करें.
    1. अगर ऑप से कोई खराब असर नहीं पड़ता और हमेशा अनुमान लगाया जा सकता है, तो उसे Pure एट्रिब्यूट दें. ऐसा बहुत कम होता है, क्योंकि ज़्यादातर ऑपरेशन डाइनैमिक आकार की अनुमति देते हैं. इस वजह से रनटाइम के दौरान, डेटा में अंतर दिख सकता है. इसके व्यवहार की कोई जानकारी नहीं होती. कुछ ऑपरेशन से दूसरी स्थितियों में भी ऐसा व्यवहार हो सकता है जिसकी जानकारी नहीं हो. ज़्यादातर ऑपरेशन का कोई खराब असर नहीं होता (उनमें NoMemoryEffect एट्रिब्यूट होना चाहिए).
    2. ज़्यादातर ऑपरेशन HLO_SpeculatableIf* एट्रिब्यूट में से किसी एक के तहत आते हैं. अगर ऑप इनमें से किसी भी काम के नहीं है, तो उसे ConditionallySpeculatable trait दें और इंटरफ़ेस के तरीके लागू करें. अनुमान लगाने की क्षमता के लॉजिक को कवर करने के लिए, stablehlo/tests/ops_speculatability.mlir में टेस्ट जोड़ें.