mindspore.mint 接口测试

mindspore.mint.exp

mindspore.mint.expm1

mindspore.mint.fix

mindspore.mint.floor

mindspore.mint.log

环境准备

安装 MindSpore

1
$ conda install mindspore=2.4.0 -c mindspore -c conda-forge

安装 PyTorch

1
$ conda install pytorch==2.5.0 torchvision==0.20.0 torchaudio==2.5.0 pytorch-cuda=11.8 -c pytorch -c nvidia

安装其他依赖:

1
$ conda install numpy pytest
Name Version
python 3.9.21
mindspore 2.4.0
pytorch 2.5.0
torchvision 0.20.0
torchaudio 2.5.0
pytorch-cuda 11.8
numpy 1.26.4
pytest 7.4.4

代码测试

测试要求

按照任务要求,每个接口的测试代码需要放在单独的文件中,文件名为 test_xxx.py,其中 xxx 是接口名。

测试文件 测试功能
test_exp.py 测试 mindspore.mint.exp
test_expm1.py 测试 mindspore.mint.expm1
test_fix.py 测试 mindspore.mint.fix
test_floor.py 测试 mindspore.mint.floor
test_log.py 测试 mindspore.mint.log

每个测试文件需要包含以下测试点:

测试随机输入不同 dtype

  • 生成随机输入数据,测试不同数据类型(如 float32, float64)。
  • 对比 MindSpore 和 PyTorch 的输出。

测试固定 dtype,随机输入值

  • 固定数据类型,生成随机输入数据。
  • 对比 MindSpore 和 PyTorch 的输出。

测试固定 shape,固定输入值,不同输入参数

  • 测试不同输入参数(如 string, bool 等)。
  • 对比两个框架的支持度。

测试随机混乱输入,报错信息的准确性

  • 测试混乱输入(如 None, inf, NaN 等)。
  • 检查报错信息是否准确。

测试接口构造函数/神经网络的准确性

  • 在 GitHub 上搜索使用该接口的代码片段或神经网络。
  • 固定输入和权重,测试正向推理结果。
  • 测试反向传播(梯度计算)。

mindspore.mint.exp

工具函数

  • create_tensors:创建 MindSpore 和 PyTorch 的张量,支持指定数据类型。
1
2
3
4
5
def create_tensors(input_data, ms_dtype, torch_dtype, requires_grad=False):
ms_tensor = Tensor(input_data, ms_dtype)
torch_tensor = torch.tensor(
input_data, dtype=torch_dtype, requires_grad=requires_grad)
return ms_tensor, torch_tensor
  • compare_results:比较 MindSpore 和 PyTorch 的结果,使用 np.allclose 检查误差,并输出详细的错误信息。
1
2
3
def compare_results(ms_result, torch_result, atol=1e-3):
assert np.allclose(ms_result.asnumpy(), torch_result.detach().numpy(), atol=atol), \
f"MindSpore and PyTorch results differ: {ms_result.asnumpy()} vs {torch_result.detach().numpy()}"

参数化测试

使用 @pytest.mark.parametrize 对测试函数进行参数化,减少重复代码。

测试点覆盖

test_exp_different_dtypes

测试不同数据类型。

test_exp_random_input_fixed_dtype

测试固定数据类型(float32)下的随机输入,包括不同形状(1D、2D、3D、标量、空张量、包含空维度的张量)。

test_exp_fixed_shape_fixed_input

测试固定输入值和形状,包括正数、负数、零和空输入。

test_exp_chaotic_input

测试混乱输入(None, inf, -inf, NaN, 非法输入类型、布尔值输入)。

test_exp_forward_backward

测试前向和反向传播,确保梯度计算正确。

mindspore.mint.expm1

mindspore.mint.fix

mindspore.mint.floor

mindspore.mint.log