FakeConvert

注: FakeConvert は実験的な操作であり、将来変更される可能性があります。

バージョン名: FakeConvert-13

カテゴリー: 量子化

簡単な説明: FakeConvert は、浮動小数点入力値を要素単位で量子化し、ターゲットの低精度浮動小数点タイプに対応する値のセットに変換します。

詳細な説明: FakeConvert 操作は、入力テンソルを指定されたターゲットの低精度浮動小数点タイプに変換し、ソース精度への逆変換を実行します。また、変換ステップの前に scaleshift のパラメーターで定義されたアフィン変換を適用し、逆方向変換後にその逆の形式を適用します。

data 入力の元のタイプで、destination_type 属性で定義された型をエミュレートします。

可能なデスティネーション・タイプは “f8e4m3”、“f8e5m2” です。“f8e4m3” は 8 ビットの浮動小数点形式で、符号 1 ビット、指数 4 ビット、仮数 3 ビットで構成されます。“f8e5m2” は 8 ビット浮動小数点形式で、符号 1 ビット、指数 5 ビット、仮数 2 ビットで構成されます。FP8 タイプは、FP8 Formats for Deep Learning という論文で紹介されています。

FakeConvertFake は、出力テンソルが、destination_type ではなく、入力テンソルの元のタイプと同じ要素タイプを保持することを意味します。

出力の各要素は、次の式の結果として定義されます。

 data = data * scale - shift
                                ConvertLike(Convert(data, destination_type), data)
                                data = (data + shift) / scale

属性:

  • destination_type

    • 説明: destination_type はエミュレートされたタイプです

    • 値の範囲: “f8e4m3”、“f8e5m2”

    • タイプ: string

    • 必須: はい

入力:

  • 1: data - タイプ T_F の任意の形状のテンソル。必須。

  • 2: scale - data 入力値のスケール係数を持つ T_F タイプのテンソル。形状は data の形状に対して numpy ブロードキャスト可能である必要があります。必須。

  • 3: shift - data 入力値の変換前に減算し、変換後に加算する値を持つ T_F タイプのテンソル。形状は data の形状に対して numpy ブロードキャスト可能であり、scale 入力の形状と一致する必要があります。オプション。

出力:

  • 1: 1 番目の入力テンソル data と一致する形状とタイプを持つ、タイプ T_F の出力テンソル。

タイプ:

  • T_F: サポートされている浮動小数点タイプ (FP16BF16FP32)。

例:

<layer  type="FakeConvert">
    <data destination_type="f8e4m3"/>
    <input>
        <port id="0">
            <dim>1</dim>
            <dim>64</dim>
            <dim>56</dim>
            <dim>56</dim>
        </port>
        <port id="1">
            <dim>1</dim>
            <dim>64</dim>
            <dim>1</dim>
            <dim>1</dim>
        </port>
        <port id="2">
            <dim>1</dim>
            <dim>64</dim>
            <dim>1</dim>
            <dim>1</dim>
        </port>
    </input>
    <output>
        <port id="3">
            <dim>1</dim>
            <dim>64</dim>
            <dim>56</dim>
            <dim>56</dim>
        </port>
    </output>
</layer>