使用mint.arctan2在图模式下报错RuntimeError: Compile graph kernel_graph0 failed.

1 系统环境

硬件环境(Ascend/GPU/CPU): Ascend
MindSpore版本: mindspore=2.4.0
执行模式(PyNative/ Graph): 不限
Python版本: Python=3.9
操作系统平台: linux

2 报错信息

2.1 问题描述

使用mint.arctan2接口在mindspore.GRAPH_MODE静态图模式时运行出错。

2.2 报错信息

RuntimeError: Compile graph kernel_graph0 failed.

2.3 脚本信息

在终端分别使用或者不使用unset RANK_TABLE_FILE,再使用下面的脚本。

import mindspore as ms
from mindspore import mint, Tensor, value_and_grad
import numpy as np

ms.set_context(mode=ms.GRAPH_MODE)
input_data = np.array([0, 1])
other_data = np.array([1, 1])
ms_input = Tensor(input_data, ms.float32)
ms_other = Tensor(other_data, ms.float32)

def forward_ms(x, y):
    return mint.arctan2(x, y)

# Gradients for MindSpore
grad_fn = value_and_grad(forward_ms)
output_ms, gradient_ms = grad_fn(ms_input, ms_other)

# 打印输出和梯度
print("MindSpore output:", output_ms)
print("MindSpore gradient:", gradient_ms)

3 根因分析

如果unset RANK_TABLE_FILE,该代码是可以正常执行的。
如果设置了RANK_TABLE_FILE。打印的日志里面多了个jit level 设定为O2

[WARNING] CORE(2631152,400007f165c0,python):2025-04-01-11:04:57.470.107 [mindspore/core/utils/ms_context.cc:530] GetJitLevel] Set jit level to O2 for rank table startup method.

查看mint接口的说明

mint接口当前是实验性接口,在图编译模式为O0和PyNative模式下性能比ops更优。当前暂不支持O2(图下沉模式)及CPU、GPU后端,后续会逐步完善。
因此当环境设置了RANK_TABLE_FILE,查看如下代码的527行。
https://gitee.com/mindspore/mindspore/blob/v2.4.0/mindspore/core/utils/ms_context.cc

 // If use rank table startup method, set jit level to O2.
  if (!common::UseDynamicCluster() && !common::GetEnv("RANK_TABLE_FILE").empty() && jit_level != kAttrJitLevelO2) {
    if (first_call) {
      MS_LOG(WARNING) << "Set jit level to O2 for rank table startup method.";
    }
    jit_level = kAttrJitLevelO2;
  }
  first_call = false;

4 解决方案

unset RANK_TABLE_FILE后执行该脚本
或是在代码中删掉该环境变量