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后执行该脚本
或是在代码中删掉该环境变量