VHLO 言語

作成時の手順については、vhlo_checklist.md をご覧ください VHLO に変更します。

VHLO 言語とは何ですか?

VHLO(Versioned StableHLO)言語は、シリアル化と安定性に使用されます。 特定の時点の StableHLO 言語のスナップショットを、 バージョニングを使用します。

VHLO は、バージョニングされたオペレーション、タイプ、属性を備えた追加専用の言語です。 つまり、一度言語に追加した特徴を後で変更することは 影響を与えることがあります。

オペレーション、タイプ、属性を変更した場合は、新しいバージョンを あります。たとえば、架空の my_op が StableHLO に追加された場合、 0.9.0 でしたが、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 言語には、最新バージョンの op のみが含まれています。実行中 たとえば、v0.11.0 の StableHLO 言語には StableHLO_MyOp のみが含まれます。 これは operandattr を持ち、VHLO は演算の各フェーズをキャプチャします。 進化です

VHLO はなぜ有用なのでしょうか。

バージョニングされた言語を使用すると、以前のバージョンの StableHLO opset。これは前方互換性と下位互換性が VHLO 言語の op 間の変換を

上位互換性: 上位互換性は、 ターゲット バージョンへのダウングレードなどです。クラスタ内のすべての運用/タイプ/攻撃者が VHLO プログラムはターゲット バージョンにダウングレードでき、 バージョンを実行しているコンシューマでシリアル化解除および StableHLO に変換可能 これは VHLO には VM のイメージの現在のスナップショットが そのときのオペレーションです。

上位互換性の画像

このダウングレード変換は、Cloud Storage に存在しないオペレーションや 古いバージョンの opset が使用されます。つまり上位互換性は 検出されるのは、実行時ではなく、プロデューサーでのみです。

下位互換性: 下位互換性は、アップグレードによって提供されます。 VHLO オペレーションを最新バージョンに(必要な場合)、オペレーションを StableHLO。互換性期間内のすべての VHLO プログラムがアップグレード可能です StableHLO に変換してください。つまり、異なるバージョンのコンシューマが同じコードを逆シリアル化できます。 以前のバージョンの VHLO ペイロード。

下位互換性の画像

さらに重要な点として、VHLO はシリアル化の背後で抽象化されています。つまり、ML では フレームワーク(プロデューサー)は StableHLO op のみをターゲットとし、コンパイラ サポートされているのは、最新バージョンである StableHLO オペレーション セット。VHLO との間のコンバージョンは機械によって処理されます StableHLO リポジトリにあります。

MLIR バイトコード形式のバージョン

上位互換性を維持するため、StableHLO バージョンには MLIR Bytecode Format バージョン。また、最新バージョンの StableHLO では、最新バージョンの MLIR バイトコード形式が使用されます。Google MLIR バイトコード形式のバージョンがインクリメントされたため、StableHLO の次のリリースで マイナー バージョンをインクリメントして Version.cpp を更新する を使用して、最新の MLIR Bytecode Format バージョンを使用する必要があります。

MLIR バイトコード形式の詳細と StableHLO で使用する理由については、 bytecode.md をご覧ください。