वीएचएलओ बोली

VHLO में बदलाव करने के बाद, आगे क्या करना है, यह जानने के लिए vhlo_checklist.md पर जाएं.

VHLO बोली क्या है?

VHLO (वर्शन वाले StableHLO) डायलेक्ट का इस्तेमाल, सीरियलाइज़ेशन और स्थिरता के लिए किया जाता है. यह किसी खास समय पर, StableHLO डायलेक्ट का स्नैपशॉट उपलब्ध कराता है. इसके लिए, प्रोग्राम के अलग-अलग एलिमेंट के वर्शन का इस्तेमाल किया जाता है.

VHLO एक सिर्फ़ जोड़ने वाली डायलेक्ट है, जिसमें वर्शन वाले ऑपरेशन, टाइप, और एट्रिब्यूट होते हैं. इसका मतलब है कि डायलेक्ट में कोई सुविधा जोड़ने के बाद, उसमें किसी भी तरह का ऐसा बदलाव नहीं किया जा सकता जिससे सेमेटिक्स पर असर पड़े.

किसी ऑपरेशन, टाइप या एट्रिब्यूट में बदलाव करने के लिए, बोली में नया वर्शन जोड़ना ज़रूरी है. उदाहरण के लिए, अगर my_op को 0.9.0 में StableHLO में जोड़ा गया था, लेकिन 0.11.0 में बदल दिया गया था, तो VHLO में हमें यह जानकारी दिखेगी:

// This represents the StableHLO version of the op from 0.9.0 -> 0.10.0
// Both the lower and the upper bound of versions are inclusive
def VHLO_MyOpV1 : VHLO_Op<"my_op_v1", "0.9.0", "0.10.0"> {
  let arguments = (ins
    VHLO_AnyType:$operand
  );
  let results = (outs VHLO_AnyType:$result);
}

// This represents the StableHLO version of the op from 0.11.0 -> current
def VHLO_MyOpV2 : VHLO_Op<"my_op_v2", "0.11.0", "current"> {
  let arguments = (ins
    VHLO_AnyType:$operand,
    VHLO_AnyAttr:$attr  // New attribute added to StableHLO in 0.11.0
  );
  let results = (outs VHLO_AnyType:$result);
}

StableHLO डायलेक्ट में, ऑपरेशन का सिर्फ़ नया वर्शन होता है. ऊपर दिए गए उदाहरण में, StableHLO डायलेक्ट के v0.11.0 वर्शन में सिर्फ़ वह StableHLO_MyOp होगा जिसमें operand और attr है. वहीं, VHLO, ऑपरेशन के हर चरण को कैप्चर करता है.

वीएचएलओ का इस्तेमाल क्यों करना चाहिए?

वर्शन वाली बोली होने से हम StableHLO ऑपसेट के पिछले वर्शन को टारगेट कर सकते हैं. यह VHLO डायलेकट में ऑपरेशन के बीच कन्वर्ज़न में, फ़ॉरवर्ड और बैकवर्ड कम्पैटिबिलिटी को शामिल करता है.

आने वाले समय में काम करने की सुविधा: आने वाले समय में काम करने की सुविधा, VHLO में बदलकर और ऑपरेशन को टारगेट वर्शन में डाउनग्रेड करके दी जाती है. अगर किसी वीएचएलओ प्रोग्राम के हर ऑप/टाइप/एट्रिब्यूट को टारगेट वर्शन में डाउनग्रेड किया जा सकता है, तो यह गारंटी दी जाती है कि वह टारगेट वर्शन से बेहतर या उसके बराबर के वर्शन का इस्तेमाल करने वाले उपभोक्ता के लिए डीसी किया जा सकने वाला और StableHLO में बदल जाएगा. ऐसा इसलिए होता है, क्योंकि VHLO में उस समय के ऑपरेशन का स्नैपशॉट होता है.

फ़ॉरवर्ड करने की सुविधा के साथ काम करने वाली इमेज

अगर ऑपसेट के पिछले वर्शन में मौजूद ऑप या सुविधाओं का इस्तेमाल किया जाता है, तो यह डाउनग्रेड कन्वर्ज़न पूरा नहीं होगा. इसका मतलब है कि फ़ॉरवर्ड करने की सुविधा, रनटाइम के बजाय प्रोड्यूसर पर पता चलती है.

पुराने सिस्टम के साथ काम करने की सुविधा: पुराने सिस्टम के साथ काम करने की सुविधा, VHLO ऑपरेशन को उनके नए वर्शन में अपग्रेड करके (ज़रूरत पड़ने पर) दी जाती है. इसके बाद, ऑपरेशन को फिर से StableHLO में बदल दिया जाता है. साथ काम करने की सुविधा वाली विंडो में मौजूद सभी VHLO प्रोग्राम, StableHLO में अपग्रेड किए जा सकते हैं. इसका मतलब है कि उपभोक्ताओं के अलग-अलग वर्शन, पिछले वर्शन का वही वीएचएलओ पेलोड डीसीरियलाइज़ कर सकते हैं.

पुराने सिस्टम के साथ काम करने की सुविधा वाली इमेज

सबसे अहम बात यह है कि VHLO को सीरियलाइज़ेशन के पीछे रखा गया है. इसका मतलब है कि एमएल फ़्रेमवर्क (प्रोड्यूसर) को सिर्फ़ StableHLO ऑपरेशन को टारगेट करना होगा. साथ ही, कंपाइलर बैकएंड (उपयोगकर्ता) को सिर्फ़ नए वर्शन का इस्तेमाल करना होगा, जो कि StableHLO ऑपरेशन का सेट है. VHLO से मिले और VHLO से मिले कन्वर्ज़न का रखरखाव, StableHLO रिपो में रखी जाने वाली मशीनों की मदद से किया जाता है.

MLIR बाइटकोड फ़ॉर्मैट वर्शन

आने वाले समय में भी काम करने के लिए, StableHLO वर्शन के साथ एक MLIR बाइटकोड फ़ॉर्मैट वर्शन जुड़ा होता है. इसके अलावा, StableHLO के नए वर्शन में MLIR बाइटकोड फ़ॉर्मैट का नया वर्शन इस्तेमाल किया जाएगा. जब MLIR बाइटकोड फ़ॉर्मैट का वर्शन बढ़ाया जाता है, तो StableHLO की अगली रिलीज़ में, माइनर वर्शन बढ़ाया जाएगा. साथ ही, MLIR बाइटकोड फ़ॉर्मैट के नए वर्शन का इस्तेमाल करने के लिए, Version.cpp को अपडेट किया जाएगा.

MLIR बाइटकोड फ़ॉर्मैट और StableHLO में इसका इस्तेमाल करने के बारे में ज़्यादा जानकारी के लिए, bytecode.md देखें.