model.train报错Exception in training: The input value must be int and must > 0, but got '0' with type 'int'.

1 系统环境

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

2 报错信息

Traceback (most recent cal1 last):  
    File "/home/ma-user/modelarts/user-job-dir/code_v18/sigma_sft_train.py", line 15, in <module>  
        runrtrain_no_ pipeline(opt)  
    File "/home/ma-user/modelarts/user-job-dir/code_v18/pangu_sigma/sft/sigmasft.py, line 294, in run_train_no_pipeline  
        model.build(train dataset=ds, sink size=args_opt.sinksize, epoch=actual_epoch num)  
  
ValueError: The input value must be int and must > 0, but got '0' with type 'int'.  
rank:5, batch_size: 1 data_size:z, eod_reset:1

3 根因分析

根据报错信息,找到报错的代码;发现报错信息集中在mindrecord,这个时候需要检查一下数据量;看报错信息,显示data_size:2,说明数据量只有两个,这个时候需要检查自己生成ds数据集的shard_id和num_shard参数设置的是多少。如果数据量确实很少,且是本机8卡时,可按如下配置:

dataset = ds.MindDataset(data[data_start_ index: ], columns_list=columns_list, shuffle=shuffle, num_samples=num_samples, shard_id_rank // 8, num_shards=device_num // 8)

根因:数据量太少,在创建ds数据集时,num_shards配置不对导致。

4 解决方案

解决方法:增大数据量。