VHLO Lehçesi

VHLO'da değişiklik yaparken uygulamanız gereken adımlar için vhlo_checklist.md bölümüne bakın.

VHLO lehçesi nedir?

VHLO (Sürümlü StableHLO) Diyaleti, serileştirme ve kararlılık için kullanılır. Tek tek program öğelerine sürüm vererek StableHLO lehçesinin belirli bir zamandaki anlık görüntüsünü sağlar.

VHLO, sürümlü işlemler, türler ve özellikler içeren yalnızca ekleme dili'dir. Yani bir özellik dile eklendikten sonra semantiği etkileyecek şekilde değiştirilemez.

Bir işlemde, türde veya özellikte yapılan tüm değişiklikler için lehçeye yeni bir sürümün eklenmesi gerekir. Örneğin, StableHLO'ya 0.9.0 sürümünde eklenen ancak 0.11.0 sürümünde değiştirilen varsayımsal bir my_op varsa VHLO'da aşağıdakileri görürüz:

// 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 lehçesi yalnızca işlemlerin en son sürümüne sahiptir. Çalışan örnekte, v0.11.0'daki StableHLO lehçesi yalnızca operand ve attr içeren StableHLO_MyOp'ye sahipken VHLO, işlemin evriminin her aşamasını yakalar.

VHLO neden faydalıdır?

Sürümlü bir lehçe kullanmak, StableHLO opset'inin önceki sürümlerini hedeflememize olanak tanır. Bu, VHLO diyalektindeki işlemler arasındaki dönüşümlerde ileriye ve geriye dönük uyumluluğu kapsar.

İleriye dönük uyumluluk: İleriye dönük uyumluluk, VHLO'ya dönüştürme ve işlemleri hedef bir sürüme indirgeme yoluyla sağlanır. Bir VHLO programındaki her işlem/tür/özellik hedef sürüme düşürülebiliyorsa VHLO'nun o anda işlem grubunun anlık görüntüsüne sahip olması nedeniyle, hedef sürümden daha yüksek veya hedef sürüme eşit bir sürüm çalıştıran bir tüketicide seri dışı olarak okunabilir ve StableHLO'ya dönüştürülebilir.

İleriye doğru uyumluluk resmi

Opset'in önceki sürümünde bulunmayan işlemler veya özellikler kullanılırsa bu sürüm düşürme dönüşümü başarısız olur. Bu, ileriye dönük uyumluluğun çalışma zamanında değil, üreticide keşfedildiği anlamına gelir.

Geriye dönük uyumluluk: Geriye dönük uyumluluk, VHLO işlemlerini en son sürümlerine yükseltip (gerekirse) ardından operasyonu StableHLO'ya dönüştürerek sağlanır. Uyumluluk aralığındaki tüm VHLO programları StableHLO'ya yükseltilebilir. Bu, tüketicilerin farklı sürümlerinin önceki bir sürümdeki aynı VHLO yükünü seri dışı hale getirebileceği anlamına gelir.

Geriye dönük uyumluluk resmi

Daha da önemlisi, VHLO, serileştirmenin arka planında soyutlanır. Bu, makine öğrenimi çerçevelerinin (üreticilerin) yalnızca StableHLO işlemlerini hedeflemesi gerektiği ve derleyici arka uçlarının (tüketiciler) yalnızca StableHLO işlem grubu olan en son sürümü desteklemesi gerektiği anlamına gelir. VHLO'ya ve VHLO'dan dönüşümler, StableHLO deposunda tutulan makinelerle gerçekleştirilir.

MLIR Bayt Kodu Biçimi Sürümleri

İleriye dönük uyumluluğu korumak için StableHLO sürümlerinin ilişkili bir MLIR bayt kodu biçimi sürümü vardır. Ayrıca, StableHLO'nun en son sürümü MLIR bayt kodu biçiminin en son sürümünü kullanır. MLIR bayt kodu biçimi sürümü arttığında, StableHLO'nun sonraki sürümü ara sürümü artırır ve Version.cpp dosyasını en son MLIR bayt kodu biçimi sürümünü kullanacak şekilde günceller.

MLIR bayt kodu biçimi ve StableHLO'da kullanılmasının gerekçesi hakkında ayrıntılı bilgi için bytecode.md dosyasını inceleyin.