mindspore.ops.rotary_position_embedding
=======================================

.. image:: https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source.svg
    :target: https://gitee.com/mindspore/mindspore/blob/master/docs/api/api_python/ops/mindspore.ops.func_rotary_position_embedding.rst
    :alt: 查看源文件


.. py:function:: mindspore.ops.rotary_position_embedding(x, cos, sin, mode=0)

    旋转位置编码算法的实现。
    请参阅论文 `Enhanced Transformer with Rotary Position Embedding <https://arxiv.org/pdf/2104.09864.pdf>`_ 。

    .. warning::
        这是一个实验性API,后续可能修改或删除。

    参数:
        - **x** (Tensor) - 4维Tensor,数据类型float16、bfloat16、float32。
        - **cos** (Tensor) - 4维常量,数据类型和 `x` 一致。取值范围为[-1,1]。
        - **sin** (Tensor) - 和 `cos` 相同。
        - **mode** (int) - 可选属性,选择计算模式。0表示rotate_half(GPT-NeoX style), 1表示rotate_interleaved(GPT-J style)。默认 ``0`` 。

    .. list-table:: Layout配置约束
        :widths: 5 20 20
        :header-rows: 1

        * - 参数
          - RotateHalf(mode: 0)
          - RotateInterleaved(mode: 1)
        * - x
          - layout支持BNSD、BSND、SBND;

            D < 896,且为2的倍数;B,N < 1000;

          - layout支持:BNSD、BSND、SBND;

            B * N < 1000;D < 896,且D为2的倍数
        * - cos
          - 对应 `x` layout的支持情况:

            `x` 为BNSD:11SD、B1SD、BNSD;

            `x` 为BSND:1S1D、BS1D、BSND;

            `x` 为SBND:S11D、SB1D、SBND。
          - 对应 `x` layout的支持情况:

            `x` 为BNSD: 11SD;

            `x` 为BSND: 1S1D;

            `x` 为SBND: S11D。
        * - sin
          - 同 `cos`
          - 同 `cos`
      
    .. note::
        layout是BNSD,并且D是32bytes对齐、B * N > 8S 时,因为性能不好,不允许调用。

    返回:
        Tensor,其shape和dtype和 `x` 保持一致。

    异常:
        - **TypeError** - `x` 不是Tensor。
        - **TypeError** - `cos` 不是Tensor。
        - **TypeError** - `sin` 不是Tensor。
        - **TypeError** - `mode` 不是int。