From d6ae44c4d947922af8ce0998f9a569277a94111f Mon Sep 17 00:00:00 2001 From: huan-xiaoling <3174348550@qq.com> Date: Tue, 16 Dec 2025 10:37:41 +0800 Subject: [PATCH] modify faq format --- .../source_en/faq/data_processing.md | 2 +- .../source_en/faq/distributed_parallel.md | 2 +- .../mindspore/source_en/faq/feature_advice.md | 2 +- .../source_en/faq/implement_problem.md | 2 +- docs/mindspore/source_en/faq/inference.md | 2 +- .../source_en/faq/network_compilation.md | 2 +- docs/mindspore/source_en/faq/operators_api.md | 2 +- .../source_en/faq/performance_tuning.md | 2 +- .../source_en/faq/precision_tuning.md | 2 +- docs/mindspore/source_en/faq/tools.md | 2 +- .../source_zh_cn/faq/data_processing.md | 68 ++++++++-------- .../source_zh_cn/faq/distributed_parallel.md | 34 ++++---- .../source_zh_cn/faq/feature_advice.md | 46 +++++------ .../source_zh_cn/faq/implement_problem.md | 78 ++++++++++--------- docs/mindspore/source_zh_cn/faq/inference.md | 12 +-- .../source_zh_cn/faq/network_compilation.md | 42 +++++----- .../source_zh_cn/faq/performance_tuning.md | 6 +- .../source_zh_cn/faq/precision_tuning.md | 4 +- docs/mindspore/source_zh_cn/faq/tools.md | 4 +- 19 files changed, 166 insertions(+), 148 deletions(-) diff --git a/docs/mindspore/source_en/faq/data_processing.md b/docs/mindspore/source_en/faq/data_processing.md index 93b1ccc5ed..f835b86178 100644 --- a/docs/mindspore/source_en/faq/data_processing.md +++ b/docs/mindspore/source_en/faq/data_processing.md @@ -2,7 +2,7 @@ [![View Source On Gitee](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source_en.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindspore/source_en/faq/data_processing.md) -##   +## FAQ ### Q: How do I offload data if I do not use high-level APIs? diff --git a/docs/mindspore/source_en/faq/distributed_parallel.md b/docs/mindspore/source_en/faq/distributed_parallel.md index 4e8c7d2ed0..c45e0ced5e 100644 --- a/docs/mindspore/source_en/faq/distributed_parallel.md +++ b/docs/mindspore/source_en/faq/distributed_parallel.md @@ -2,7 +2,7 @@ [![View Source On Gitee](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source_en.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindspore/source_en/faq/distributed_parallel.md) -##   +## FAQ ### Q: What should I do if the error message `Init plugin so failed, ret = 1343225860` is displayed during the HCCL distributed training? diff --git a/docs/mindspore/source_en/faq/feature_advice.md b/docs/mindspore/source_en/faq/feature_advice.md index c40c76c959..20c04c0e1d 100644 --- a/docs/mindspore/source_en/faq/feature_advice.md +++ b/docs/mindspore/source_en/faq/feature_advice.md @@ -2,7 +2,7 @@ [![View Source On Gitee](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source_en.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindspore/source_en/faq/feature_advice.md) -##   +## FAQ ### Q: Is the `input=np.random.uniform(...)` format fixed when the MindIR format is exported? diff --git a/docs/mindspore/source_en/faq/implement_problem.md b/docs/mindspore/source_en/faq/implement_problem.md index bd2831b733..12d49b046d 100644 --- a/docs/mindspore/source_en/faq/implement_problem.md +++ b/docs/mindspore/source_en/faq/implement_problem.md @@ -2,7 +2,7 @@ [![View Source On Gitee](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source_en.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindspore/source_en/faq/implement_problem.md) -##   +## FAQ ### Q: How do I use MindSpore to implement multi-scale training? diff --git a/docs/mindspore/source_en/faq/inference.md b/docs/mindspore/source_en/faq/inference.md index 309f0a3241..ea638dc6ff 100644 --- a/docs/mindspore/source_en/faq/inference.md +++ b/docs/mindspore/source_en/faq/inference.md @@ -2,7 +2,7 @@ [![View Source On Gitee](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source_en.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindspore/source_en/faq/inference.md) -##   +## FAQ ### Q: In the previous version, Atlas 200/300/500 inference product inference is performed based on the MindSpore installation package. However, the MindSpore release package of the new version does not support Atlas 200/300/500 inference product inference. How do I use Atlas 200/300/500 inference product for inference? (Changes in the MindSpore Atlas 200/300/500 Inference Product Inference Release Package) diff --git a/docs/mindspore/source_en/faq/network_compilation.md b/docs/mindspore/source_en/faq/network_compilation.md index 53b0fd5c27..f7c07ac14b 100644 --- a/docs/mindspore/source_en/faq/network_compilation.md +++ b/docs/mindspore/source_en/faq/network_compilation.md @@ -2,7 +2,7 @@ [![View Source On Gitee](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source_en.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindspore/source_en/faq/network_compilation.md) -##   +## FAQ ### Q: What is the set of syntaxes supported by static graph mode? diff --git a/docs/mindspore/source_en/faq/operators_api.md b/docs/mindspore/source_en/faq/operators_api.md index bb561b9393..aabb974b96 100644 --- a/docs/mindspore/source_en/faq/operators_api.md +++ b/docs/mindspore/source_en/faq/operators_api.md @@ -2,7 +2,7 @@ [![View Source On Gitee](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source_en.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindspore/source_en/faq/operators_api.md) -##   +## FAQ ### Q: When using the `ops.ring_attention_update` operator on an Ascend machine with the CANN 8.1.RC1 package, the error `RuntimeError: aclnnRingAttentionUpdateGetWorkSpaceSize call failed` occurs. What is the reason? diff --git a/docs/mindspore/source_en/faq/performance_tuning.md b/docs/mindspore/source_en/faq/performance_tuning.md index 0735b3f5be..9d5ef12ff4 100644 --- a/docs/mindspore/source_en/faq/performance_tuning.md +++ b/docs/mindspore/source_en/faq/performance_tuning.md @@ -2,7 +2,7 @@ [![View Source On Gitee](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source_en.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindspore/source_en/faq/performance_tuning.md) -##   +## FAQ ### Q: What can I do if the network performance is abnormal and weight initialization takes a long time during training after MindSpore is installed? diff --git a/docs/mindspore/source_en/faq/precision_tuning.md b/docs/mindspore/source_en/faq/precision_tuning.md index 95f93c0ace..e9adda9c10 100644 --- a/docs/mindspore/source_en/faq/precision_tuning.md +++ b/docs/mindspore/source_en/faq/precision_tuning.md @@ -2,7 +2,7 @@ [![View Source On Gitee](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source_en.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindspore/source_en/faq/precision_tuning.md) -##   +## FAQ ### Q: Why is the loss value not converged or why does the accuracy not meet the requirement? How can I locate and optimize the loss value? diff --git a/docs/mindspore/source_en/faq/tools.md b/docs/mindspore/source_en/faq/tools.md index f4fda971e6..bca4e4e7ed 100644 --- a/docs/mindspore/source_en/faq/tools.md +++ b/docs/mindspore/source_en/faq/tools.md @@ -2,7 +2,7 @@ [![View Source On Gitee](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source_en.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindspore/source_en/faq/tools.md) -##   +## FAQ ### Q: When using the overflow detection Dump feature, I encounter the error `RuntimeError: aclnnAllFiniteGetWorkspaceSize call failed, please check!`. How can I resolve this? diff --git a/docs/mindspore/source_zh_cn/faq/data_processing.md b/docs/mindspore/source_zh_cn/faq/data_processing.md index c659fc7593..b46299e1ed 100644 --- a/docs/mindspore/source_zh_cn/faq/data_processing.md +++ b/docs/mindspore/source_zh_cn/faq/data_processing.md @@ -2,13 +2,15 @@ [![查看源文件](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindspore/source_zh_cn/faq/data_processing.md) -## Q: 请问如果不使用高阶API,怎么实现数据下沉? +## 常见问题 + +### Q: 请问如果不使用高阶API,怎么实现数据下沉? A: 可以参考此手动下沉方式的[test_tdt_data_transfer.py](https://gitee.com/mindspore/mindspore/blob/master/tests/st/data_transfer/test_tdt_data_transfer.py)示例实现,不用借助`model.train`接口,目前支持:GPU和Ascend硬件使用。
-## Q: 在使用`Dataset`处理数据过程中内存占用高,怎么优化? +### Q: 在使用`Dataset`处理数据过程中内存占用高,怎么优化? A: 可以参考如下几个步骤来降低内存占用,同时也可能会降低数据处理的效率。 @@ -24,7 +26,7 @@ A: 可以参考如下几个步骤来降低内存占用,同时也可能会降
-## Q: 在使用`Dataset`处理数据过程中CPU占用高,表现为sy占用高而us占用低,怎么优化? +### Q: 在使用`Dataset`处理数据过程中CPU占用高,表现为sy占用高而us占用低,怎么优化? A: 可以参考如下几个步骤来降低CPU占用,进一步提升性能,其主要原因是三方库多线程与数据处理多线程存在资源竞争。 @@ -36,13 +38,13 @@ A: 可以参考如下几个步骤来降低CPU占用,进一步提升性能,
-## Q: 在`GeneratorDataset`中,看到有参数`shuffle`,在跑任务时发现`shuffle=True`和`shuffle=False`,两者没有区别,这是为什么? +### Q: 在`GeneratorDataset`中,看到有参数`shuffle`,在跑任务时发现`shuffle=True`和`shuffle=False`,两者没有区别,这是为什么? A: 开启`shuffle`,需要传入的`Dataset`是支持随机访问的(例如自定义的`Dataset`有`getitem`方法),如果是在自定义的`Dataset`里面通过`yeild`方式返回回来的数据,是不支持随机访问的,具体可查看[GeneratorDataset 示例](https://www.mindspore.cn/docs/zh-CN/master/api_python/dataset/mindspore.dataset.GeneratorDataset.html)章节。
-## Q: 请问`Dataset`如何把两个`columns`合并成一个`column`? +### Q: 请问`Dataset`如何把两个`columns`合并成一个`column`? A: 可以添加如下操作把两个字段合成一个。 @@ -59,19 +61,19 @@ dataset = dataset.map(operations=combine, input_columns=["data", "data2"], outpu
-## Q: 请问`GeneratorDataset`支持`ds.PKSampler`采样吗? +### Q: 请问`GeneratorDataset`支持`ds.PKSampler`采样吗? -A: 自定义数据集`GeneratorDataset`不支持`PKSampler`采样逻辑。主要原因是自定义数据操作灵活度太大了,内置的`PKSampler`难以做到通用性,所以选择在接口层面直接提示不支持。但是对于`GeneratorDataset`,可以方便的定义自己需要的`Sampler`逻辑,即在`ImageDataset`类的`__getitem__`函数中定义具体的`sampler`规则,返回自己需要的数据即可。 +A: 自定义数据集`GeneratorDataset`不支持`PKSampler`采样逻辑。主要原因是自定义数据操作灵活度太大了,内置的`PKSampler`难以做到通用性,所以选择在接口层面直接提示不支持。但是对于`GeneratorDataset`,可以方便地定义自己需要的`Sampler`逻辑,即在`ImageDataset`类的`__getitem__`函数中定义具体的`sampler`规则,返回自己需要的数据即可。
-## Q: MindSpore如何加载已有的预训练词向量? +### Q: MindSpore如何加载已有的预训练词向量? A: 可以在定义EmbedingLookup或者Embedding时候,把预训练的词向量传进来,把预训练的词向量封装成一个Tensor作为EmbeddingLookup初始值。
-## Q: 请问`c_transforms`和`py_transforms`有什么区别,比较推荐使用哪个? +### Q: 请问`c_transforms`和`py_transforms`有什么区别,比较推荐使用哪个? A: 推荐使用`c_transforms`,因为纯C层执行,所以性能会更好。 @@ -81,7 +83,7 @@ A: 推荐使用`c_transforms`,因为纯C层执行,所以性能会更好。
-## Q: 由于我一条数据包含多个图像,并且每个图像的宽高都不一致,需要对转成mindrecord格式的数据进行`map`操作。可是我从`record`读取的数据是`np.ndarray`格式的数据,我的数据处理的`operations`是针对图像格式的。我应该怎么样才能对所生成的mindrecord的格式的数据进行预处理呢? +### Q: 由于我一条数据包含多个图像,并且每个图像的宽高都不一致,需要对转成mindrecord格式的数据进行`map`操作。可是我从`record`读取的数据是`np.ndarray`格式的数据,我的数据处理的`operations`是针对图像格式的。我应该怎么样才能对所生成的mindrecord的格式的数据进行预处理呢? A: 建议你按照如下操作进行: @@ -130,19 +132,19 @@ for item in data_set.create_dict_iterator(output_numpy=True):
-## Q: 我的自定义图像数据集转为mindrecord格式时,我的数据是`numpy.ndarray`格式的,且`shape`为[4,100,132,3],这个`shape`的含义是四幅三通道的帧,且每个值都在0~255。可是当我查看转化成mindrecord的格式的数据时,发现是`[19800]`的`shape`,我原数据的维度全部展开有`[158400]`,请问这是为什么? +### Q: 我的自定义图像数据集转为mindrecord格式时,我的数据是`numpy.ndarray`格式的,且`shape`为[4,100,132,3],这个`shape`的含义是四幅三通道的帧,且每个值都在0~255。可是当我查看转化成mindrecord的格式的数据时,发现是`[19800]`的`shape`,我原数据的维度全部展开有`[158400]`,请问这是为什么? A: 可能是你数据中`ndarray`的`dtype`是`int8`,因为`[158400]`和`[19800]`刚好相差了8倍,建议将数据中`ndarray`的`dtype`指定为`float64`。
-## Q: 想要保存生成的图片,代码运行完毕以后在相应目录找不到图片。相似的,在JupyterLab中生成数据集用于训练,训练时可以在相应路径读取到数据,但是自己却无法在路径中找到图片或数据集? +### Q: 想要保存生成的图片,代码运行完毕以后在相应目录找不到图片。相似的,在JupyterLab中生成数据集用于训练,训练时可以在相应路径读取到数据,但是自己却无法在路径中找到图片或数据集? A: 可能是JumperLab生成的图片或者数据集都是在Docker内,`moxing`下载的数据只能训练进程的Docker内看见,训练完成后这些数据就随着Docker释放了。可以试试在训练任务中将需要`download`的数据再通过`moxing`传回`obs`,然后再在`obs`里面下载到你本地。
-## Q: MindSpore中`model.train`的`dataset_sink_mode`参数该如何理解? +### Q: MindSpore中`model.train`的`dataset_sink_mode`参数该如何理解? A: 当`dataset_sink_mode=True`时,数据处理会和网络计算构成Pipeline方式,即: 数据处理在逐步处理数据时,处理完一个`batch`的数据,会把数据放到一个队列里,这个队列用于缓存已经处理好的数据,然后网络计算从这个队列里面取数据用于训练,那么此时数据处理与网络计算就`Pipeline`起来了,整个训练耗时就是数据处理/网络计算耗时最长的那个。 @@ -150,13 +152,13 @@ A: 当`dataset_sink_mode=True`时,数据处理会和网络计算构成Pipeline
-## Q: MindSpore能否支持按批次对不同尺寸的图片数据进行训练? +### Q: MindSpore能否支持按批次对不同尺寸的图片数据进行训练? A: 你可以参考yolov3对于此场景的使用,里面有对于图像的不同缩放,脚本见[yolo_dataset](https://gitee.com/mindspore/models/blob/master/official/cv/YOLOv3/src/yolo_dataset.py)。
-## Q: 使用MindSpore做分割训练,必须将数据转为MindRecord吗? +### Q: 使用MindSpore做分割训练,必须将数据转为MindRecord吗? A: [build_seg_data.py](https://gitee.com/mindspore/models/blob/master/research/cv/FCN8s/src/data/build_seg_data.py)是将数据集生成MindRecord的脚本,可以直接使用/适配下你的数据集。或者如果你想尝试自己实现数据集的读取,可以使用`GeneratorDataset`自定义数据集加载。 @@ -164,7 +166,7 @@ A: [build_seg_data.py](https://gitee.com/mindspore/models/blob/master/research/c
-## Q: MindSpore在Ascend硬件平台进行多卡训练,自定义数据集如何给不同卡传递不同数据? +### Q: MindSpore在Ascend硬件平台进行多卡训练,自定义数据集如何给不同卡传递不同数据? A: 使用`GeneratorDataset`的时候,可以使用`num_shards=num_shards`,`shard_id=device_id`参数来控制不同卡读取哪个分片的数据,`__getitem__`和`__len__`按全量数据集处理即可。 @@ -184,7 +186,7 @@ ds.GeneratorDataset(..., num_shards=8, shard_id=7, ...)
-## Q: 如何构建图像的多标签MindRecord格式数据集? +### Q: 如何构建图像的多标签MindRecord格式数据集? A: 数据Schema可以按如下方式定义: `cv_schema_json = {"label": {"type": "int32", "shape": [-1]}, "data": {"type": "bytes"}}` @@ -193,19 +195,19 @@ A: 数据Schema可以按如下方式定义: `cv_schema_json = {"label": {"type":
-## Q: 请问自己制作的黑底白字`28*28`的数字图片,使用MindSpore训练出来的模型做预测,报错提示`wrong shape of image`是怎么回事? +### Q: 请问自己制作的黑底白字`28*28`的数字图片,使用MindSpore训练出来的模型做预测,报错提示`wrong shape of image`是怎么回事? A: 首先MindSpore训练使用的灰度图MNIST数据集。所以模型使用时对数据是有要求的,需要设置为`28*28`的灰度图,就是单通道才可以。
-## Q: MindSpore设计了专门用于数据处理的框架,有相关的设计和用法介绍? +### Q: MindSpore设计了专门用于数据处理的框架,有相关的设计和用法介绍? A: MindSpore Dataset模块使得用户很简便地定义数据预处理Pipeline,并以高效(多进程/多线程)的方式处理数据集中样本,同时MindSpore Dataset也提供了多样化的API加载和处理数据集,详细介绍请参阅[数据处理Pipeline介绍](https://mindspore.cn/docs/zh-CN/master/api_python/mindspore.dataset.loading.html#%E6%95%B0%E6%8D%AE%E5%A4%84%E7%90%86pipeline%E4%BB%8B%E7%BB%8D)。如果想进一步对数据处理Pipeline进行性能调优,请参阅[数据处理性能优化](https://www.mindspore.cn/tutorials/zh-CN/master/dataset/optimize.html)。
-## Q: 网络训练时出现报错提示数据下发失败“TDT Push data into device Failed”,如何定位原因? +### Q: 网络训练时出现报错提示数据下发失败“TDT Push data into device Failed”,如何定位原因? A: 首先上述报错指的是通过训练数据下发通道(TDT,train data transfer)发送数据到卡(device)上失败,导致这一报错的原因可能有多种,因此日志中给出了相应的检查建议,具体而言: @@ -233,7 +235,7 @@ A: 首先上述报错指的是通过训练数据下发通道(TDT,train data
-## Q: py_transforms 和 c_transforms 增强操作能否混合使用,如果混合使用具体需要怎么使用? +### Q: py_transforms 和 c_transforms 增强操作能否混合使用,如果混合使用具体需要怎么使用? A: 出于高性能考虑,通常不建议将py_transforms 与 c_transforms增强操作混合使用,但若不追求极致的性能,主要考虑打通流程,在无法全部使用c_transforms增强模块(缺少对应的c_transforms增强操作)的情况下,可使用py_transforms模块中的增强操作替代,此时即存在混合使用。 对此我们需要注意c_transforms 增强模块的输出通常是numpy array,py_transforms增强模块的输出是PIL Image,具体可查看对应的模块说明,为此通常的混合使用方法为: @@ -276,7 +278,7 @@ data1 = data1.map(operations=transforms, input_columns=["image"])
-## Q: 当错误提示 "The data pipeline is not a tree (i.e., one node has 2 consumers)" 应该怎么检查? +### Q: 当错误提示 "The data pipeline is not a tree (i.e., one node has 2 consumers)" 应该怎么检查? A: 上述错误通常是脚本书写错误导致。正常情况下数据处理pipeline中的操作是依次串联的,如下列定义: @@ -311,13 +313,13 @@ dataset3 = dataset2.map(***)
-## Q: MindSpore中和DataLoader对应的接口是什么? +### Q: MindSpore中和DataLoader对应的接口是什么? A: 如果将DataLoader考虑为接收自定义Dataset的API接口,MindSpore数据处理API中和Dataloader较为相似的是GeneratorDataset,可接收用户自定义的Dataset,具体使用方式参考[GeneratorDataset 示例](https://www.mindspore.cn/docs/zh-CN/master/api_python/dataset/mindspore.dataset.GeneratorDataset.html),差异对比也可查看[API算子映射表](https://www.mindspore.cn/docs/zh-CN/master/note/api_mapping/pytorch_api_mapping.html)。
-## Q: 自定义的Dataset出现错误时,应该如何调试? +### Q: 自定义的Dataset出现错误时,应该如何调试? A: 自定义的Dataset通常会传入到GeneratorDataset,在使用过程中错误指向了自定义的Dataset时,可通过一些方式进行调试(如增加打印信息,打印返回值的shape、dtype等),自定义Dataset通常要保持中间处理结果为numpy array,且不建议与MindSpore网络计算的算子混合使用。此外针对自定义的Dataset如下面的MyDataset,初始化后也可直接进行如下遍历(主要为简化调试,分析原始Dataset中的问题,可不传入GeneratorDataset),调试遵循常规的Python语法规则。 @@ -329,20 +331,20 @@ for item in Dataset:
-## Q: 数据处理操作与网络计算算子能否混合使用? +### Q: 数据处理操作与网络计算算子能否混合使用? A: 通常数据处理操作与网络计算算子混合使用会导致性能有所降低,在缺少对应的数据处理操作且自定义Python操作不合适时可进行尝试。需要注意的是,因为二者需要的输入不一致,数据处理操作通常输入为numpy array 或 PIL Image,但网络计算算子输入需要是MindSpore.Tensor; 将二者混合使用需要使上一个的输出格式和下一个所需的输入格式一致。数据处理操作指的是官网API文档中[mindspore.dataset](https://www.mindspore.cn/docs/zh-CN/master/api_python/mindspore.dataset.html)模块下的接口,如 [mindspore.dataset.vision.CenterCrop](https://www.mindspore.cn/docs/zh-CN/master/api_python/dataset_vision/mindspore.dataset.vision.CenterCrop.html),网络计算算子包含 mindspore.nn、 mindspore.ops等模块下的算子。
-## Q: MindRecord为何会生成.db文件? 缺少.db文件时加载数据集会有什么报错? +### Q: MindRecord为何会生成.db文件? 缺少.db文件时加载数据集会有什么报错? A: .db文件为MindRecord文件对应的索引文件,缺少.db文件通常会在获取数据集总的数据量时报错,错误提示如:`MindRecordOp Count total rows failed`。
-## Q: 自定义Dataset中如何进行图像读取并进行Decode操作? +### Q: 自定义Dataset中如何进行图像读取并进行Decode操作? A: 传入GeneratorDataset的自定义Dataset,在接口内部(如`__getitem__`函数)进行图像读取后可以直接返回bytes类型的数据、numpy array类型的数组或已经做了解码操作的numpy array,具体如下所示: @@ -396,13 +398,13 @@ A: 传入GeneratorDataset的自定义Dataset,在接口内部(如`__getitem__
-## Q: 在使用`Dataset`处理数据过程中,报错`RuntimeError: can't start new thread`,怎么解决? +### Q: 在使用`Dataset`处理数据过程中,报错`RuntimeError: can't start new thread`,怎么解决? A: 主要原因是在使用`**Dataset`、`.map(...)`和`.batch(...)`时,参数`num_parallel_workers`配置过大,用户进程数达到最大,可以通过`ulimit -u 最大进程数`来增加用户最大进程数范围,或者将`num_parallel_workers`配置减小。
-## Q: 在使用`GeneratorDataset`加载数据时,报错`RuntimeError: Failed to copy data into tensor.`,怎么解决? +### Q: 在使用`GeneratorDataset`加载数据时,报错`RuntimeError: Failed to copy data into tensor.`,怎么解决? A: 在使用`GeneratorDataset`加载Pyfunc返回的Numpy array时,MindSpore框架将执行Numpy array到MindSpore Tensor的转换,假设Numpy array所指向的内存被释放,可能会发生内存拷贝的错误。举例如下: @@ -447,7 +449,7 @@ A: 在使用`GeneratorDataset`加载Pyfunc返回的Numpy array时,MindSpore框
-## Q: 如何根据数据预处理退出状态判断GetNext超时原因? +### Q: 如何根据数据预处理退出状态判断GetNext超时原因? A: 在使用数据下沉模式(此时 `数据预处理` -> `发送队列` -> `网络计算` 三者构成Pipeline模式)进行训练时,当出现GetNext超时报错,数据预处理模块会输出状态信息,帮助用户分析出错原因。用户可以通过环境变量 `export MS_SUBMODULE_LOG_v={MD:1}` 来开启日志输出。其中: `channel_name` 代表host侧向设备侧发送数据通道的名称, `have_sent` 代表已经向设备发送的数据总条数, `host_queue` 代表最近10次dataset host侧队列的大小, `device_queue` 代表最近10次设备侧队列大小, `push_first_start_time` 和 `push_first_end_time` 代表host侧向设备发送第一条数据的起始时间, `push_start_time` 和 `push_end_time` 代表最近10次host侧向设备侧发送数据的起始时间。用户可以在日志中看到如下几种情况,具体原因及改进方法可参考: @@ -549,7 +551,7 @@ A: 在使用数据下沉模式(此时 `数据预处理` -> `发送队列` -> `
-## Q: 数据处理阶段报错 `Malloc device memory failed, free memory size is less than half of total memory size.Device 0 Device MOC total size:65464696832 Device MOC free size:3596279808 may be other processes occupying this card, ...` 怎么办? +### Q: 数据处理阶段报错 `Malloc device memory failed, free memory size is less than half of total memory size.Device 0 Device MOC total size:65464696832 Device MOC free size:3596279808 may be other processes occupying this card, ...` 怎么办? A:通常是使用了自定义数据增强操作(其中包含了基于Ascend的数据增强操作)且使用了多进程模式,导致多进程使用同一个卡资源出现设备内存不足。 @@ -650,7 +652,7 @@ data2 = data2.map(pyfunc, input_columns="image", python_multiprocessing=True)
-## Q: GeneratorDataset和map在哪些场景下支持调用dvpp算子? +### Q: GeneratorDataset和map在哪些场景下支持调用dvpp算子? A: 对于GeneratorDataset和map来说: @@ -712,7 +714,7 @@ A: 对于GeneratorDataset和map来说:
-## Q: MindSpore支持Python脚本中启动多线程处理Tensor数据吗? +### Q: MindSpore支持Python脚本中启动多线程处理Tensor数据吗? A: 不支持。MindSpore框架暂时不支持多线程处理Tensor数据,可能会发生卡死或者coredump。可以改成多进程处理Tensor数据,或者先调用`Tensor.numpy()`接口将Tensor转成`numpy.ndarray`再用多线程处理数据。 diff --git a/docs/mindspore/source_zh_cn/faq/distributed_parallel.md b/docs/mindspore/source_zh_cn/faq/distributed_parallel.md index 8b2113e95a..6cde59fd77 100644 --- a/docs/mindspore/source_zh_cn/faq/distributed_parallel.md +++ b/docs/mindspore/source_zh_cn/faq/distributed_parallel.md @@ -2,13 +2,15 @@ [![查看源文件](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindspore/source_zh_cn/faq/distributed_parallel.md) -## Q: 进行HCCL分布式训练出错:`Init plugin so failed, ret = 1343225860`,该如何处理? +## 常见问题 + +### Q: 进行HCCL分布式训练出错:`Init plugin so failed, ret = 1343225860`,该如何处理? A: 在Ascend进行分布式训练时初始化HCCL失败了,通常由于`rank_table.json`配置不正确,可以执行此文件[hccl_tools.py](https://gitee.com/mindspore/models/blob/master/utils/hccl_tools/hccl_tools.py)生成一个新的`rank_table.json`。或者导出环境变量`export ASCEND_SLOG_PRINT_TO_STDOUT=1`打开HCCL的日志打印,根据日志中的ERROR信息来排查问题。
-## Q: GPU分布式训练场景下,若错误设置环境变量CUDA_VISIBLE_DEVICES的个数小于执行的进程数时,可能导致进程阻塞问题,该如何处理? +### Q: GPU分布式训练场景下,若错误设置环境变量CUDA_VISIBLE_DEVICES的个数小于执行的进程数时,可能导致进程阻塞问题,该如何处理? A: 此场景下,部分训练进程会提示如下报错: @@ -29,7 +31,7 @@ A: 此场景下,部分训练进程会提示如下报错:
-## Q: GPU分布式训练场景下,若某进程异常退出,可能导致其余进程阻塞问题,该如何处理? +### Q: GPU分布式训练场景下,若某进程异常退出,可能导致其余进程阻塞问题,该如何处理? A: 此场景下,异常进程由于各种问题退出,其余进程由于GPU资源已分配成功,会正常执行到初始化`NCCL`步骤,日志如下: @@ -43,7 +45,7 @@ A: 此场景下,异常进程由于各种问题退出,其余进程由于GPU
-## Q: 在执行GPU单机单卡的脚本时,不使用mpirun启动进程时,调用mindspore.communication.init方法可能会报错,导致执行失败,该如何处理? +### Q: 在执行GPU单机单卡的脚本时,不使用mpirun启动进程时,调用mindspore.communication.init方法可能会报错,导致执行失败,该如何处理? ```text [CRITICAL] DISTRIBUTED [mindspore/ccsrc/distributed/cluster/cluster_context.cc:130] InitNodeRole] Role name is invalid... @@ -53,7 +55,7 @@ A: 在用户不使用`mpirun`启动进程,但是依然调用了`init()`方法
-## Q: 在通过OpenMPI执行多机多卡训练时,提示由于MPI_Allgather失败,该如何处理? +### Q: 在通过OpenMPI执行多机多卡训练时,提示由于MPI_Allgather失败,该如何处理? ```text pml_ucx.c:175 Error: Failed to receive UCX worker address: Not found (-13) @@ -78,7 +80,7 @@ mpirun -n process_num --mca btl tcp --mca btl_tcp_if_include 192.168.1.0/24 ./ru
-## Q: 在通过OpenMPI执行分布式训练时,单机多卡训练正常,但在多机多卡训练时,某些机器提示GPU device id设置失败,该如何处理? +### Q: 在通过OpenMPI执行分布式训练时,单机多卡训练正常,但在多机多卡训练时,某些机器提示GPU device id设置失败,该如何处理? ```text [ERROR] DEVICE [mindspore/ccsrc/runtime/device/gpu/cuda_driver.cc:245] SetDevice] SetDevice for id:7 failed, ret[101], invalid device ordinal. Please make sure that the 'device_id' set in context is in the range:[0, total number of GPU). If the environment variable 'CUDA_VISIBLE_DEVICES' is set, the total number of GPU will be the number set in the environment variable 'CUDA_VISIBLE_DEVICES'. For example, if export CUDA_VISIBLE_DEVICES=4,5,6, the 'device_id' can be 0,1,2 at the moment, 'device_id' starts from 0, and 'device_id'=0 means using GPU of number 4. @@ -93,7 +95,7 @@ export HOSTNAME=node_ip_address
-## Q: 在通过OpenMPI执行多机多卡训练时,NCCL报错提示网络不通,该如何处理? +### Q: 在通过OpenMPI执行多机多卡训练时,NCCL报错提示网络不通,该如何处理? ```text include/socket.h:403 NCCL WARN Connect to XXX failed: Network is unreachable @@ -109,7 +111,7 @@ export NCCL_SOCKET_IFNAME=eth
-## Q: 多机多卡选择特定名称的RDMA网卡(通过NCCL_SOCKET_IFNAME设置)通信后,训练仍然报错,该如何处理? +### Q: 多机多卡选择特定名称的RDMA网卡(通过NCCL_SOCKET_IFNAME设置)通信后,训练仍然报错,该如何处理? ```text misc/ibvwrap.cc:284 NCCL WARN Call to ibv_modify_qp failed with error Invalid argument @@ -127,7 +129,7 @@ export NCCL_IB_HCA=mlx
-## Q: 单机多卡训练能够成功,但是扩展脚本到多机多卡后,其他主机提示各类报错,该如何处理? +### Q: 单机多卡训练能够成功,但是扩展脚本到多机多卡后,其他主机提示各类报错,该如何处理? 报错内容有多种,下面是几种典型的报错,可能有: @@ -145,7 +147,7 @@ mpirun --hostfile /path/to/hostfile -n 64 -x PYTHONPATH -x GLOG_v -x LD_LIBRARY_
-## Q: 在Ascend上通过OpenMPI执行分布式训练时,`HcclCommInitRootInfo`报错,该如何处理? +### Q: 在Ascend上通过OpenMPI执行分布式训练时,`HcclCommInitRootInfo`报错,该如何处理? ```text Ascend collective Error: "HcclCommInitRootInfo failed. | Error Number 2 @@ -156,7 +158,7 @@ A: OpenMPI启动时,当前版本的hccl下,创建通信域时,相应的卡
-## Q: 在自动并行下执行分布式网络时,报张量无法被当前策略完整切分的错误如下,该怎么解决? +### Q: 在自动并行下执行分布式网络时,报张量无法被当前策略完整切分的错误如下,该怎么解决? ```text np_tensor can not be split by strategy! @@ -166,19 +168,19 @@ A: 该报错表明网络中有对参数配置了切分策略,但是参数的
-## Q: Linux环境上执行多卡训练过程中进程异常退出,通过ipcs命令看到有共享内存残留,该如何处理? +### Q: Linux环境上执行多卡训练过程中进程异常退出,通过ipcs命令看到有共享内存残留,该如何处理? A: 在多卡训练并使能图算融合情况下,框架采用共享内存机制进行多卡间的算子统一编译,如果编译过程中遇到内外部异常导致进程意外结束,共享内存得不到有效释放。通过ipcs命令可以看到残留的共享内存的nattch为0,重新执行训练脚本时框架会重新接管共享内存,只要无异常出现就可以正常释放。也可以通过ipcrm命令释放共享内存,不会影响训练脚本执行。
-## Q: Ascend平台下训练较小规模网络,但在分布式模块初始化过程中,依然提示设备侧内存不足,如何解决? +### Q: Ascend平台下训练较小规模网络,但在分布式模块初始化过程中,依然提示设备侧内存不足,如何解决? A: 这是因为在Ascend平台下,MindSpore后端默认会预分配一块内存,约80%的NPU内存会被占用,剩余的20%内存则用于HCCL集合通信库的初始化。每个HCCL通信组会默认占用200MB的内存,那么在通信组较多的场景下,就容易出现设备侧内存不足的报错。解决方法是设置`HCCL_BUFFSIZE`环境变量修改通信域内存占用,具体配置方式可参考[HCCL官方文档](https://www.hiascend.com/document/detail/zh/canncommercial/80RC3/apiref/envvar/envref_07_0088.html)。
-## Q: 使用msrun启动分布式框架时,若传入的hostname作为master_addr,但报错DNS解析失败,如何解决? +### Q: 使用msrun启动分布式框架时,若传入的hostname作为master_addr,但报错DNS解析失败,如何解决? ```text RuntimeError: DNS resolution failed: [Errno -2] Name or service not known. Please check whether the correct host name is input. @@ -192,7 +194,7 @@ A: 这是因为在使用msrun启动分布式框架且通过hostname指定主节
-## Q: 多机场景使用动态组网或msrun启动分布式任务时,报错device id越界,如何解决? +### Q: 多机场景使用动态组网或msrun启动分布式任务时,报错device id越界,如何解决? ```text RuntimeError: Ascend kernel runtime initialization failed, device id: 9. The details refer to 'Ascend Error Message'. @@ -211,7 +213,7 @@ A: 这是因为在多机场景,分布式框架会依据hostname自动分配dev
-## Q: 多卡场景,使用动态组网或msrun启动分布式任务,且后端使用HCCL时,重复尝试获取Unique ID,最终失败超时,如何解决? +### Q: 多卡场景,使用动态组网或msrun启动分布式任务,且后端使用HCCL时,重复尝试获取Unique ID,最终失败超时,如何解决? ```text [WARNING] DEVICE(xxx,xxxxxx,python):xxxx-xx-xx-xx:xx:xx.xxx.xxx [mindspore/ccsrc/plugin/device/cpu/hal/hardware/ms_collective_comm_lib.cc:251] QueryUniqueID] Retry to lookup the unique id for group xxx from the meta server node...Retry time: 3/66, sleep 2 diff --git a/docs/mindspore/source_zh_cn/faq/feature_advice.md b/docs/mindspore/source_zh_cn/faq/feature_advice.md index 50c637159c..c6b15d1464 100644 --- a/docs/mindspore/source_zh_cn/faq/feature_advice.md +++ b/docs/mindspore/source_zh_cn/faq/feature_advice.md @@ -2,19 +2,21 @@ [![查看源文件](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindspore/source_zh_cn/faq/feature_advice.md) -## Q: 导出MindIR格式的时候,`input=np.random.uniform(...)`是不是固定格式? +## 常见问题 + +### Q: 导出MindIR格式的时候,`input=np.random.uniform(...)`是不是固定格式? A: 不是固定格式的,这一步操作是为了创建一个输入,以便于构建网络结构。`export`里只要传入正确的`shape`即可,使用`np.ones`和`np.zeros`创建都是可以的。
-## Q: MindSpore现支持直接读取哪些其他框架的模型和哪些格式呢?比如PyTorch下训练得到的pth模型可以加载到MindSpore框架下使用吗? +### Q: MindSpore现支持直接读取哪些其他框架的模型和哪些格式呢?比如PyTorch下训练得到的pth模型可以加载到MindSpore框架下使用吗? A: MindSpore采用Protobuf存储训练参数,无法直接读取其他框架的模型。对于模型文件本质保存的就是参数和对应的值,可以用其他框架的API将参数读取出来之后,拿到参数的键值对,然后再加载到MindSpore中使用。比如想用其他框架训练好的ckpt文件,可以先把参数读取出来,再调用MindSpore的[save_checkpoint](https://www.mindspore.cn/docs/zh-CN/master/api_python/mindspore/mindspore.save_checkpoint.html)接口,就可以保存成MindSpore可以读取的ckpt文件格式了。
-## Q: PyNative模式和Graph模式的区别? +### Q: PyNative模式和Graph模式的区别? A: 通过下面四个方面进行对比: @@ -30,114 +32,114 @@ A: 通过下面四个方面进行对比:
-## Q: 使用MindSpore在GPU上训练的网络脚本可以不做修改直接在Ascend上进行训练么? +### Q: 使用MindSpore在GPU上训练的网络脚本可以不做修改直接在Ascend上进行训练么? A: 可以的,MindSpore面向Ascend/GPU/CPU提供统一的API,在算子支持的前提下,网络脚本可以不做修改直接跨平台运行。
-## Q: 一个环境中如果既安装了MindSpore,又安装了PyTorch,是否在一个python文件中可以混用两个框架的语法呢? +### Q: 一个环境中如果既安装了MindSpore,又安装了PyTorch,是否在一个python文件中可以混用两个框架的语法呢? A: 可以在一个python文件中混用两个框架的。要注意类型间的区别。例如两个框架创建的Tensor类型是不同的,但对于python的基础类型都是通用的。
-## Q: MindSpore可以读取TensorFlow的ckpt文件吗? +### Q: MindSpore可以读取TensorFlow的ckpt文件吗? A: MindSpore的`ckpt`和TensorFlow的`ckpt`格式是不通用的,虽然都是使用`Protobuf`协议,但是`proto`的定义是不同的。当前MindSpore不支持读取TensorFlow或PyTorch的`ckpt`文件。
-## Q: 用MindSpore训练出的模型如何在Atlas 200/300/500推理产品上使用?可以转换成适用于HiLens Kit用的吗? +### Q: 用MindSpore训练出的模型如何在Atlas 200/300/500推理产品上使用?可以转换成适用于HiLens Kit用的吗? A: Atlas 200/300/500推理产品需要运行专用的OM模型,先使用MindSpore导出ONNX模型,再转化为Atlas 200/300/500推理产品支持的OM模型。可以,HiLens Kit是以Atlas 200/300/500推理产品为推理核心,所以前后两个问题本质上是一样的,需要转换为OM模型。
-## Q: MindSpore只能在华为自己的`Ascend`上跑么? +### Q: MindSpore只能在华为自己的`Ascend`上跑么? A: MindSpore除了支持华为自己的`Ascend`之外,也支持`GPU`与`CPU`,是支持异构算力的。
-## Q: MindSpore对导出、导入模型的单个Tensor输入大小有什么限制? +### Q: MindSpore对导出、导入模型的单个Tensor输入大小有什么限制? A: 由于Protobuf的硬件限制,导出ONNX格式时,模型参数大小不能超过2G;导出MINDIR格式时,模型参数大小没有限制,MindSpore不支持导入ONNX格式,只支持导入MINDIR。MINDIR的导入不存在模型参数大小限制。
-## Q: 针对异构计算单元的支持,MindSpore有什么计划? +### Q: 针对异构计算单元的支持,MindSpore有什么计划? A: MindSpore提供了可插拔式的设备管理接口,其他计算单元(比如FPGA)可快速灵活地实现与MindSpore的对接,欢迎您参与社区进行异构计算后端的开发工作。
-## Q: MindSpore与ModelArts是什么关系,在ModelArts中能使用MindSpore吗? +### Q: MindSpore与ModelArts是什么关系,在ModelArts中能使用MindSpore吗? A: ModelArts是华为公有云线上训练及推理平台,MindSpore是华为AI框架。
-## Q: 最近出来的taichi编程语言有Python扩展,类似`import taichi as ti`就能直接用了,MindSpore是否也支持? +### Q: 最近出来的taichi编程语言有Python扩展,类似`import taichi as ti`就能直接用了,MindSpore是否也支持? A: MindSpore支持Python原生表达,`import mindspore`相关包即可使用。
-## Q: 请问MindSpore支持梯度截断吗? +### Q: 请问MindSpore支持梯度截断吗? A: 支持,可以参考代码[梯度截断脚本](https://gitee.com/mindspore/models/blob/master/official/nlp/Transformer/src/transformer_for_train.py#L35)。
-## Q: MindSpore的IR设计理念是什么? +### Q: MindSpore的IR设计理念是什么? A: 函数式: 一切皆函数,易于微分实现;无副作用,易于实现自动并行化分析。`JIT`编译能力: 图形IR,控制流依赖和数据流合一,平衡通用性/易用性。图形完备的IR: 更多的转换`Python`灵活语法,包括递归等。
-## Q: MindSpore并行模型训练的优势和特色有哪些? +### Q: MindSpore并行模型训练的优势和特色有哪些? A: MindSpore分布式训练除了支持数据并行,还支持算子级模型并行,可以对算子输入tensor进行切分并行。在此基础上支持自动并行,用户只需要写单卡脚本,就能自动切分到多个节点并行执行。
-## Q: MindSpore在语义协同和处理上是如何实现的?是否利用当前学术界流行的FCA理论? +### Q: MindSpore在语义协同和处理上是如何实现的?是否利用当前学术界流行的FCA理论? A: MindSpore框架本身并不需要支持FCA。对于语义类模型,用户可以调用第三方的工具在数据预处理阶段做FCA数学分析。MindSpore本身支持Python语言,`import FCA`相关包即可使用。
-## Q: 当前在云上MindSpore的训练和推理功能是比较完备的,至于边端场景(尤其是终端设备)MindSpore有什么计划? +### Q: 当前在云上MindSpore的训练和推理功能是比较完备的,至于边端场景(尤其是终端设备)MindSpore有什么计划? A: MindSpore是端边云统一的训练和推理框架,支持将云侧训练的模型导出到Ascend AI处理器和终端设备进行推理。当前推理阶段支持的优化包括量化、算子融合、内存复用等。
-## Q: MindSpore自动并行支持情况如何? +### Q: MindSpore自动并行支持情况如何? A: 自动并行特性对CPU GPU的支持还在完善中。推荐用户在Atlas训练系列产品上使用自动并行,可以关注开源社区,申请MindSpore开发者体验环境进行试用。
-## Q: MindSpore有没有类似基于TensorFlow实现的对象检测算法的模块? +### Q: MindSpore有没有类似基于TensorFlow实现的对象检测算法的模块? A: TensorFlow的对象检测Pipeline接口属于TensorFlow Model模块。待MindSpore检测类模型完备后,会提供类似的Pipeline接口。
-## Q: 使用PyNative模式能够进行迁移学习? +### Q: 使用PyNative模式能够进行迁移学习? A: PyNative模式是兼容迁移学习的。
-## Q: Ascend与NPU是什么关系? +### Q: Ascend与NPU是什么关系? A: NPU指针对神经网络算法的专用处理器,不同公司推出的NPU架构各异,Ascend是基于华为公司自研的达芬奇架构的NPU。
-## Q: MindSpore加密导出模型时,如果卡住该怎么办? +### Q: MindSpore加密导出模型时,如果卡住该怎么办? A: 首先,判断一下是否只是由于模型较大而导致加密时间较长,可以根据用户软硬件环境实际的加密速度预估一下大致加密开销。如果发现加密耗时远超预期,可以通过查看系统熵池来判断是否是由于系统熵值不够,导致安全随机数阻塞。以Linux系统为例,可以先执行`cat /proc/sys/kernel/random/read_wakeup_threshold`查询系统熵池的读取阈值,而后通过命令行执行`cat /proc/sys/kernel/random/entropy_avail`命令查看当前熵池中熵值的数量,如发现熵值数量持续低于阈值,则可以认为该卡顿是由于系统可用熵值不够导致的。推荐的解决方案为,开启系统的补熵服务,如`haveged`,提升系统熵池更新速度。 diff --git a/docs/mindspore/source_zh_cn/faq/implement_problem.md b/docs/mindspore/source_zh_cn/faq/implement_problem.md index 125a97e9a5..418b7a1ef1 100644 --- a/docs/mindspore/source_zh_cn/faq/implement_problem.md +++ b/docs/mindspore/source_zh_cn/faq/implement_problem.md @@ -2,37 +2,39 @@ [![查看源文件](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindspore/source_zh_cn/faq/implement_problem.md) -## Q: 请问使用MindSpore如何实现多尺度训练? +## 常见问题 + +### Q: 请问使用MindSpore如何实现多尺度训练? A: 在多尺度训练过程中,使用不同`shape`调用`Cell`对象的时候,会自动根据不同`shape`编译并调用不同的图,从而实现多尺度的训练。要注意多尺度训练只支持非数据下沉模式,不能支持数据下沉的训练方式。可以参考[yolov3](https://gitee.com/mindspore/models/tree/master/official/cv/YOLOv3)的多尺度训练实现。
-## Q: 如果MindSpore的`requires_grad=False`的`tensor`转化为`numpy`类型进行处理然后再转化为`tensor`,会对计算图和反向传播有影响吗? +### Q: 如果MindSpore的`requires_grad=False`的`tensor`转化为`numpy`类型进行处理然后再转化为`tensor`,会对计算图和反向传播有影响吗? A: 在PyNative模式下,如果中间使用`numpy`计算,会导致梯度传递中断,`requires_grad=False`的场景下,如果该`tensor`的反向传播不传给其他参数使用,是没有影响的;如果`requires_grad=True`的场景下,是有影响的。
-## Q: 请问怎样实现类似`torch.nn.functional.linear()`那样能够对全连接层`weight`、`bias`进行修改,应该如何操作? +### Q: 请问怎样实现类似`torch.nn.functional.linear()`那样能够对全连接层`weight`、`bias`进行修改,应该如何操作? A: MindSpore与`torch.nn.functional.linear()`功能最接近的接口就是[nn.Dense](https://www.mindspore.cn/docs/zh-CN/master/api_python/nn/mindspore.nn.Dense.html)了。`nn.Dense`能指定`weight`和`bias`的初始值,后续的变化是由优化器自动更新的。训练过程中,用户不需要主动修改这两个参数的值。
-## Q: 使用MindSpore在模型保存后生成的`.meta`文件作用是什么,可以用`.meta`文件导入图结构吗? +### Q: 使用MindSpore在模型保存后生成的`.meta`文件作用是什么,可以用`.meta`文件导入图结构吗? A: 这里的`.meta`文件是编译好的图结构,但是目前并不支持直接导入这种结构。如果不知道图结构的情况下想要导入网络,还是需要用MindIR格式的文件。
-## Q: 请问`yolov4-tiny-3l.weights`模型文件可以直接转换成MindSpore模型吗? +### Q: 请问`yolov4-tiny-3l.weights`模型文件可以直接转换成MindSpore模型吗? A: 不能的,需要把其他框架训练好的参数转换成MindSpore的格式,才能转成MindSpore的模型。
-## Q: 使用MindSpore进行`model.train`的时候进行了如下设置,为什么会报错呢? +### Q: 使用MindSpore进行`model.train`的时候进行了如下设置,为什么会报错呢? ```python model.train(1, dataset, callbacks=ms.train.LossMonitor(1), dataset_sink_mode=True) @@ -43,7 +45,7 @@ A: 因为在已经设置为下沉模式的情况下,就不能再设置为非
-## Q: 使用MindSpore训练模型在`eval`阶段,需要注意什么?能够直接加载网络和参数吗?需要在Model中使用优化器吗? +### Q: 使用MindSpore训练模型在`eval`阶段,需要注意什么?能够直接加载网络和参数吗?需要在Model中使用优化器吗? A: 在`eval`阶段主要看需要什么,比如图像分类任务`eval`网络的输出是各个类的概率值,与对应标签计算`acc`。 大多数情况是可以直接复用训练的网络和参数的,需要注意的是需要设置推理模式。 @@ -63,19 +65,19 @@ res = model.eval(dataset)
-## Q: 如何使用SGD里的`param_group`来实现学习率的衰减? +### Q: 如何使用SGD里的`param_group`来实现学习率的衰减? A: 如果需要按照`epoch`来变化,可以使用[Dynamic LR](https://mindspore.cn/docs/zh-CN/master/api_python/mindspore.nn.html#dynamic-lr函数),把其中的`step_per_epoch`设置成`step_size`,如果需要按照`step`来变化,可以把其中的`step_per_epoch`设置成1,也可以用[LearningRateSchedule](https://mindspore.cn/docs/zh-CN/master/api_python/mindspore.nn.html#learningrateschedule类)。
-## Q: MindSpore如何进行参数(如dropout值)修改? +### Q: MindSpore如何进行参数(如dropout值)修改? A: 在构造网络的时候可以通过 `if self.training: x = dropout(x)`,推理时,执行前设置`network.set_train(False)`,就可以不使用dropout,训练时设置为True就可以使用dropout。
-## Q: 如何查看模型参数量? +### Q: 如何查看模型参数量? A: 可以直接加载CheckPoint统计,可能额外统计了动量和optimizer中的变量,需要过滤下相关变量。 您可以参考如下接口统计网络参数量: @@ -98,7 +100,7 @@ def count_params(net):
-## Q: 如何在训练过程中监控`loss`在最低的时候并保存训练参数? +### Q: 如何在训练过程中监控`loss`在最低的时候并保存训练参数? A: 可以自定义一个`Callback`。参考`ModelCheckpoint`的写法,此外再增加判断`loss`的逻辑: @@ -121,13 +123,13 @@ model.train(epoch_size, ds_train, callbacks=[stop_cb])
-## Q: 使用`nn.Conv2d`时,怎样获取期望大小的`feature map`? +### Q: 使用`nn.Conv2d`时,怎样获取期望大小的`feature map`? A: `Conv2d shape`推导方法可以[参考这里](https://www.mindspore.cn/docs/zh-CN/master/api_python/nn/mindspore.nn.Conv2d.html#mindspore.nn.Conv2d),`Conv2d`的`pad_mode`改成`same`,或者可以根据`Conv2d shape`推导公式自行计算`pad`,想要使得`shape`不变,一般pad为`(kernel_size-1)//2`。
-## Q: 使用MindSpore可以自定义一个可以返回多个值的loss函数? +### Q: 使用MindSpore可以自定义一个可以返回多个值的loss函数? A: 自定义`loss function`后还需自定义`TrainOneStepCell`,实现梯度计算时`sens`的个数和`network`的输出个数相同。具体可参考: @@ -141,13 +143,13 @@ model = ms.train.Model(net=train_net, loss_fn=None, optimizer=None)
-## Q: MindSpore如何实现早停功能? +### Q: MindSpore如何实现早停功能? A:可以使用[EarlyStopping 方法](https://www.mindspore.cn/docs/zh-CN/master/api_python/train/mindspore.train.EarlyStopping.html)。
-## Q: 模型已经训练好,如何将模型的输出结果保存为文本或者`npy`的格式? +### Q: 模型已经训练好,如何将模型的输出结果保存为文本或者`npy`的格式? A: 您好,我们网络的输出为`Tensor`,需要使用`asnumpy()`方法将`Tensor`转换为`numpy`,再进行下一步保存。具体可参考: @@ -158,7 +160,7 @@ np.save("output.npy", out.asnumpy())
-## Q: 缓存服务器异常关闭如何处理? +### Q: 缓存服务器异常关闭如何处理? A: 缓存服务器使用过程中,会进行IPC共享内存和socket文件等系统资源的分配。若允许溢出,在磁盘空间还会存在溢出的数据文件。一般情况下,如果通过`dataset-cache --stop`命令正常关闭服务器,这些资源将会被自动清理。 @@ -203,7 +205,7 @@ A: 缓存服务器使用过程中,会进行IPC共享内存和socket文件等
-## Q: 通过Hub可以使用GPU加载`vgg16`模型以及是否可以做迁移模型吗? +### Q: 通过Hub可以使用GPU加载`vgg16`模型以及是否可以做迁移模型吗? A: 请手动修改如下两处参数即可: @@ -219,7 +221,7 @@ net = Vgg(cfg['16'], num_classes=num_classes, args=args, batch_norm=args.batch_n
-## Q: 如何得到VGG模型中间层特征? +### Q: 如何得到VGG模型中间层特征? A: 你好,获取网络中间层的特征,其实跟具体框架没有太大关系了。`torchvision`里定义的`vgg`模型,可以通过`features`字段获取"中间层特征",`torchvision`的`vgg`源码如下: @@ -241,25 +243,25 @@ print(network.layers)
-## Q: 使用MindSpore进行模型训练时,`CTCLoss`的输入参数有四个: `inputs`、`labels_indices`、`labels_values`、`sequence_length`,如何使用`CTCLoss`进行训练? +### Q: 使用MindSpore进行模型训练时,`CTCLoss`的输入参数有四个: `inputs`、`labels_indices`、`labels_values`、`sequence_length`,如何使用`CTCLoss`进行训练? A: 定义的`model.train`接口里接收的`dataset`可以是多个数据组成,形如(`data1`、`data2`、`data3`...),所以`dataset`是可以包含`inputs`、`labels_indices`、`labels_values`、`sequence_length`的信息的。只需要定义好相应形式的`dataset`,传入`model.train`里就可以。具体的可以了解下相应的[数据处理接口](https://www.mindspore.cn/docs/zh-CN/master/features/index.html)。
-## Q: MindSpore有哪些现成的推荐类或生成类网络或模型可用? +### Q: MindSpore有哪些现成的推荐类或生成类网络或模型可用? A: 目前正在开发Wide & Deep、DeepFM、NCF等推荐类模型,NLP领域已经支持Bert_NEZHA,正在开发MASS等模型,用户可根据场景需要改造为生成类网络,可以关注[MindSpore ModelZoo](https://gitee.com/mindspore/models/blob/master/README_CN.md#)。
-## Q: `mindspore/tests`下怎样执行单个`ut`用例? +### Q: `mindspore/tests`下怎样执行单个`ut`用例? A: `ut`用例通常需要基于debug版本的MindSpore包,官网并没有提供。可以基于源码使用`sh build.sh`编译,然后通过`pytest`指令执行,debug模式编包不依赖后端。编译选项`sh build.sh -t on`,用例执行可以参考`tests/runtest.sh`脚本。
-## Q: 在Ascend平台上,执行用例有时候会报错`run task error`,如何获取更详细的日志帮助问题定位? +### Q: 在Ascend平台上,执行用例有时候会报错`run task error`,如何获取更详细的日志帮助问题定位? A: 使用msnpureport工具设置device侧日志级别,工具位置在: `/usr/local/Ascend/latest/driver/tools/msnpureport`。 @@ -293,7 +295,7 @@ A: 使用msnpureport工具设置device侧日志级别,工具位置在: `/usr/l
-## Q: 使用Ascend平台执行训练过程,出现报错: `Out of Memory!!! total[3212254720] (dynamic[0] memory poll[524288000]) malloc[32611480064] failed!` 如何解决? +### Q: 使用Ascend平台执行训练过程,出现报错: `Out of Memory!!! total[3212254720] (dynamic[0] memory poll[524288000]) malloc[32611480064] failed!` 如何解决? A: 此问题属于内存占用过多导致的内存不够问题,可能原因有两种: @@ -303,31 +305,31 @@ A: 此问题属于内存占用过多导致的内存不够问题,可能原因
-## Q: 如何在训练神经网络过程中对计算损失的超参数进行改变? +### Q: 如何在训练神经网络过程中对计算损失的超参数进行改变? A: 您好,很抱歉暂时还未有这样的功能。目前只能通过训练 -> 重新定义优化器 -> 训练,这样的过程寻找较优的超参数。
-## Q: 运行应用时报错`error while loading shared libraries: libge_compiler.so: cannot open shared object file: No such file or directory`怎么办? +### Q: 运行应用时报错`error while loading shared libraries: libge_compiler.so: cannot open shared object file: No such file or directory`怎么办? A: 安装MindSpore所依赖的Atlas 200/300/500推理产品配套软件包时,`CANN`包不能安装`nnrt`版本,而是需要安装功能完整的`toolkit`版本。
-## Q: MindSpore代码里面的model_zoo/official/cv/ResNet/train.py中set_ps_context(enable_ps=True)为什么一定要在init之前设置? +### Q: MindSpore代码里面的model_zoo/official/cv/ResNet/train.py中set_ps_context(enable_ps=True)为什么一定要在init之前设置? A: MindSpore Ascend模式下,如果先调用init,那么会为所有的进程都分配卡,但是parameter server训练模式下server是不需要分配卡的,那么worker和server就会去使用同一块卡,导致会报错: Ascend kernel runtime initialization failed。
-## Q: 在CPU ARM平台上进行resnet50训练,内存持续增长怎么办? +### Q: 在CPU ARM平台上进行resnet50训练,内存持续增长怎么办? A: 在CPU ARM上进行resnet50训练时,部分算子的实现是基于oneDNN库,oneDNN库中是基于libgomp库实现多线程并行,当前libgomp存在多个并行域配置的线程数不同时有内存占用持续增长的问题。可通过全局配置统一的线程数来控制内存的持续增长。再综合性能上的考虑,建议统一配置为物理核数的1/4,比如`export OMP_NUM_THREADS=32`。
-## Q: 为什么在Ascend平台执行模型时报错`Stream isn't enough`? +### Q: 为什么在Ascend平台执行模型时报错`Stream isn't enough`? A: 流表示一个操作队列,同一条流上的任务按序串行执行,不同流之间可以并行执行。网络中的各种操作会生成Task并被分配到流上,以控制任务执行的并发方式。由于Ascend平台对同一条流上的任务数存在限制,超限的任务会分配新流,且MindSpore框架的多种并行方式也会分配新流,例如通信算子并行,因此当分配流的数目超过Ascend平台的资源限制就会报流超限的错误。参考解决方案: @@ -339,7 +341,7 @@ A: 流表示一个操作队列,同一条流上的任务按序串行执行,
-## Q: 在Ascend平台上,日志中出现报错“Ascend error occurred, error message:”且跟随了一个错误码,如“E40011”,如何查找出现错误码的原因? +### Q: 在Ascend平台上,日志中出现报错“Ascend error occurred, error message:”且跟随了一个错误码,如“E40011”,如何查找出现错误码的原因? A: 当出现“Ascend error occurred, error message:”时,说明昇腾CANN相关模块出现异常,上报了错误日志。 @@ -347,7 +349,7 @@ A: 当出现“Ascend error occurred, error message:”时,说明昇腾CANN相
-## Q: 训练nlp类网络,当使用第三方组件gensim时,可能会报错: ValueError,如何解决? +### Q: 训练nlp类网络,当使用第三方组件gensim时,可能会报错: ValueError,如何解决? A: 以下为报错信息: @@ -379,7 +381,7 @@ ValueError: numpy.ndarray size changed, may indicate binary incompatibility. Exp
-## Q:运行文档示例代码的过程中,遇到`matplotlib.pyplot.show()`或`plt.show()`无法执行怎么处理? +### Q:运行文档示例代码的过程中,遇到`matplotlib.pyplot.show()`或`plt.show()`无法执行怎么处理? A: 首先确认是否安装`matplotlib`,如果没有安装,可以在命令行中执行`pip install matplotlib`进行安装。 @@ -387,7 +389,7 @@ A: 首先确认是否安装`matplotlib`,如果没有安装,可以在命令
-## Q: 使用文档中提供的在线运行时,遇到运行失败该如何处理? +### Q: 使用文档中提供的在线运行时,遇到运行失败该如何处理? A: 需要确认有做以下准备工作。 @@ -401,7 +403,7 @@ A: 需要确认有做以下准备工作。
-## Q: 静态图下使用除法结果未报错,动态图下使用除法结果却报错? +### Q: 静态图下使用除法结果未报错,动态图下使用除法结果却报错? A: 在静态图模式下,由于使用的是静态编译,对于算子输出结果的数据类型是在图编译阶段确定的。 @@ -443,7 +445,7 @@ print(output, type(output))
-## Q: 算子执行过程中出现报错: `MemoryError: std::bad_alloc` 如何解决? +### Q: 算子执行过程中出现报错: `MemoryError: std::bad_alloc` 如何解决? A: 此问题的原因为:用户未正确配置算子参数,导致算子申请的内存空间超过了系统内存限制,进而系统分配内存失败。下面以算子 mindspore.ops.UniformCandidateSampler 为例进行说明: @@ -455,7 +457,7 @@ A: 此问题的原因为:用户未正确配置算子参数,导致算子申
-## Q: 如何理解报错提示中的"Ascend Error Message"? +### Q: 如何理解报错提示中的"Ascend Error Message"? A: "Ascend Error Message"是MindSpore调用CANN(昇腾异构计算架构)接口时,CANN执行出错后抛出的故障信息,其中包含错误码和错误描述等信息,如下例子: @@ -489,13 +491,13 @@ tsd client wait response fail, device response code[1]. unknown device error.[F
-## Q: 如何控制`print`方法打印出的Tensor值? +### Q: 如何控制`print`方法打印出的Tensor值? A: 在PyNative动态图模式下,可以使用numpy原生方法如`set_printoptions`对输出的值进行控制。在Graph静态图模式下,因为`print`方法需要转化成为算子,所以暂时无法对输出的值进行控制。print算子具体用法可[参考](https://www.mindspore.cn/docs/zh-CN/master/api_python/ops/mindspore.ops.Print.html)。
-## Q: `Tensor.asnumpy()`是怎么和Tensor共享内存地址的? +### Q: `Tensor.asnumpy()`是怎么和Tensor共享内存地址的? A: `Tensor.asnumpy()`会将Tensor本身转换为NumPy的ndarray。这个Tensor和`Tensor.asnumpy()`返回的ndarray共享host侧的内存地址,在host侧,对Tensor本身的修改会反映到相应的ndarray上,反之亦然。需要注意的是,host侧的修改无法自动同步到device侧。如: @@ -523,7 +525,7 @@ print(y)
-## Q: 1.8版本首次运行GPU的脚本会卡很久? +### Q: 1.8版本首次运行GPU的脚本会卡很久? A: 由于NVCC编译CUDA算子时为了兼容更多GPU架构,先编译成ptx文件,在首次使用时会进行JIT编译成二进制执行文件,因此会产生编译耗时。 而1.8版本相较于前版本增加了许多CUDA算子,导致这部分编译时间增加(不同设备时间不同,如在V100上首次编译时间为5分钟左右)。 diff --git a/docs/mindspore/source_zh_cn/faq/inference.md b/docs/mindspore/source_zh_cn/faq/inference.md index b39d316361..22d28e50bd 100644 --- a/docs/mindspore/source_zh_cn/faq/inference.md +++ b/docs/mindspore/source_zh_cn/faq/inference.md @@ -2,7 +2,9 @@ [![查看源文件](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindspore/source_zh_cn/faq/inference.md) -## Q: 原先基于MindSpore安装包进行Atlas 200/300/500推理产品推理,新版本MindSpore发布包不支持Atlas 200/300/500推理产品平台的推理?如何使用Atlas 200/300/500推理产品进行推理?(MindSpore Atlas 200/300/500推理产品推理功能发布包变更说明) +## 常见问题 + +### Q: 原先基于MindSpore安装包进行Atlas 200/300/500推理产品推理,新版本MindSpore发布包不支持Atlas 200/300/500推理产品平台的推理?如何使用Atlas 200/300/500推理产品进行推理?(MindSpore Atlas 200/300/500推理产品推理功能发布包变更说明) A: 由于MindSpore推理功能统一由MindSpore核心组件 - MindSpore Lite提供。自2.0版本起,统一由MindSpore Lite发布Atlas 200/300/500推理产品推理包,并提供相关功能的持续维护演进,而MindSpore主发布包里的对应接口不再维护和演进。自2.2版本起MindSpore主发布包不再提供配套Atlas 200/300/500推理产品的推理接口使能,如需使用请切换安装MindSpore Lite发布包或下载MindSpore 2.0之前的版本。MindSpore Lite的安装部署与用法详见 。 @@ -83,24 +85,24 @@ Atlas 200/300/500推理产品是面向边缘场景的高能效高集成度AI处
-## Q: 编译应用时报错`/usr/bin/ld: warning: libxxx.so, needed by libmindspore.so, not found`怎么办? +### Q: 编译应用时报错`/usr/bin/ld: warning: libxxx.so, needed by libmindspore.so, not found`怎么办? A: 寻找缺少的动态库文件所在目录,添加该路径到环境变量`LD_LIBRARY_PATH`中。
-## Q: 更新MindSpore版本后,编译应用报错`WARNING: Package(s) not found: mindspore-ascend`、`CMake Error: The following variables are use in this project, but they are set to NOTFOUND. Please set them or make sure they are set and tested correctly in the CMake files: MS_LIB`怎么办? +### Q: 更新MindSpore版本后,编译应用报错`WARNING: Package(s) not found: mindspore-ascend`、`CMake Error: The following variables are use in this project, but they are set to NOTFOUND. Please set them or make sure they are set and tested correctly in the CMake files: MS_LIB`怎么办? A: MindSpore 2.0开始统一了各平台的安装包,不再以`-ascend`、`-gpu`等后缀区分不同安装包,因此旧编译命令或旧`build.sh`中的``MINDSPORE_PATH="`pip show mindspore-ascend | grep Location | awk '{print $2"/mindspore"}' | xargs realpath`"``需要修改为``MINDSPORE_PATH="`pip show mindspore | grep Location | awk '{print $2"/mindspore"}' | xargs realpath`"``。
-## Q: 运行应用时报错`error while loading shared libraries: libge_compiler.so: cannot open shared object file: No such file or directory`怎么办? +### Q: 运行应用时报错`error while loading shared libraries: libge_compiler.so: cannot open shared object file: No such file or directory`怎么办? A: 安装MindSpore所依赖的Atlas 200/300/500推理产品配套软件包时,`CANN`包不能安装`nnrt`版本,而是需要安装功能完整的`toolkit`版本。
-## Q: AIPP文件怎么配置? +### Q: AIPP文件怎么配置? A: AIPP(Artificial Intelligence Pre-Processing)AI预处理,用于在AI Core上完成图像预处理,包括改变图像尺寸、色域转换(转换图像格式)、减均值/乘系数(改变图像像素),数据处理之后再进行真正的模型推理。相关的配置介绍比较复杂,可以参考[ATC工具的AIPP使能章节](https://www.hiascend.com/document/detail/zh/canncommercial/800/devaids/devtools/atc/atlasatc_16_0017.html)。 diff --git a/docs/mindspore/source_zh_cn/faq/network_compilation.md b/docs/mindspore/source_zh_cn/faq/network_compilation.md index 679ca17511..cba71b1351 100644 --- a/docs/mindspore/source_zh_cn/faq/network_compilation.md +++ b/docs/mindspore/source_zh_cn/faq/network_compilation.md @@ -2,38 +2,40 @@ [![查看源文件](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindspore/source_zh_cn/faq/network_compilation.md) -## Q: 静态图模式支持的语法集合是什么? +## 常见问题 + +### Q: 静态图模式支持的语法集合是什么? A: 静态图模式能够支持覆盖Python常用语法子集,以支持神经网络的构建和训练,部分Python语法暂不支持。具体支持的语法集合,请参考[静态图语法支持](https://www.mindspore.cn/tutorials/zh-CN/master/compile/static_graph.html)。静态图模式提供了JIT语法支持级别选项,便于用户选择是否扩展静态图语法,对于一些网络场景,推荐使用基础语法(nn/ops等)而非扩展语法(例如numpy三方库)。此外,推荐使用 [静态图高级编程技巧](https://www.mindspore.cn/tutorials/zh-CN/master/compile/static_graph_expert_programming.html) 优化编译性能。
-## Q: 编译时报错'self.xx' should be initialized as a 'Parameter' type in the '`__init__`' function怎么办? +### Q: 编译时报错'self.xx' should be initialized as a 'Parameter' type in the '`__init__`' function怎么办? A: 在 `construct` 函数内,如果想对类成员 `self.xx` 赋值,那么 `self.xx` 必须已经在 `__init__` 函数中被定义为 [Parameter](https://www.mindspore.cn/docs/zh-CN/master/api_python/mindspore/mindspore.Parameter.html) 类型,其他类型则不支持。局部变量 `xx` 不受这个限制。
-## Q: 编译时报错`For syntax like 'a is not b', b supports True, False and None`怎么办? +### Q: 编译时报错`For syntax like 'a is not b', b supports True, False and None`怎么办? A: 对于语法 `is` 或 `is not` 而言,当前 `MindSpore` 仅支持与 `True`、`False` 和 `None` 的比较。暂不支持其他类型,如字符串等。
-## Q: 编译时报错`TypeError: For 'Cell', the function construct requires 1 positional argument and 0 default argument, total 1, but got 2`怎么办? +### Q: 编译时报错`TypeError: For 'Cell', the function construct requires 1 positional argument and 0 default argument, total 1, but got 2`怎么办? A: 网络的实例被调用时,会执行 `construct` 方法,然后会检查 `construct` 方法需要的参数个数和实际传入的参数个数,如果不一致则会抛出以上异常。 请检查脚本中调用网络实例时传入的参数个数,和定义的网络中 `construct` 函数需要的参数个数是否一致。
-## Q: 编译时报错`Unsupported expression 'Yield'`怎么办? +### Q: 编译时报错`Unsupported expression 'Yield'`怎么办? A: MindSpore在静态图模式下不支持 `yield` 语法。
-## Q: 编译时报错`Type Join Failed`怎么办? +### Q: 编译时报错`Type Join Failed`怎么办? A: 在前端编译的推理阶段,会对节点的抽象类型(包含 `type`、`shape` 等)进行推导,常见抽象类型包括 `AbstractScalar`、`AbstractTensor`、`AbstractFunction`、`AbstractTuple`、`AbstractList` 等。在一些场景比如多分支场景,会对不同分支返回值的抽象类型进行 `join` 合并,推导出返回结果的抽象类型。如果抽象类型不匹配,或者 `type`/`shape` 不一致,则会抛出以上异常。 @@ -125,7 +127,7 @@ The function call stack:
-## Q: 编译时报错`The params of function 'bprop' of Primitive or Cell requires the forward inputs as well as the 'out' and 'dout'`怎么办? +### Q: 编译时报错`The params of function 'bprop' of Primitive or Cell requires the forward inputs as well as the 'out' and 'dout'`怎么办? A: 用户自定义的Cell的反向传播函数 `bprop`,它的输入需要包含正向网络的输入,以及 `out` 和 `dout`,代码样例如下: @@ -165,13 +167,13 @@ In file test.py(13)
-## Q: 编译时报错`There isn't any branch that can be evaluated`怎么办? +### Q: 编译时报错`There isn't any branch that can be evaluated`怎么办? A: 当出现There isn't any branch that can be evaluated 时,说明代码中可能出现了无穷递归或者死循环,导致if条件的每一个分支都无法推导出正确的类型和维度信息。
-## Q: 编译时报错`Exceed function call depth limit 1000`怎么办? +### Q: 编译时报错`Exceed function call depth limit 1000`怎么办? A: 当出现Exceed function call depth limit 1000 时,说明代码中出现了无穷递归死循环,或者是代码过于复杂,类型推导过程中导致栈深度超过设置的最大深度。 此时可以通过设置 `mindspore.set_recursion_limit(recursion_limit=value)` 更改栈的最大深度,并考虑简化代码逻辑或者检查代码中是否存在无穷递归或死循环。 @@ -179,13 +181,13 @@ A: 当出现Exceed function call depth limit 1000 时,说明代码中出现了
-## Q: 编译时报错`could not get source code`以及`MindSpore can not compile temporary source code in terminal. Please write source code to a python file and run the file.`是什么原因? +### Q: 编译时报错`could not get source code`以及`MindSpore can not compile temporary source code in terminal. Please write source code to a python file and run the file.`是什么原因? A: MindSpore编译网络时通过 `inspect.getsourcelines(self.fn)` 获取网络代码所在的文件,如果网络是编辑在命令行中的临时代码,那么会出现如标题所示的报错,需要将网络写在Python文件中去执行才能避免该错误。
-## Q: 报错提示中的`Corresponding forward node candidate:”或“Corresponding code candidate:`是什么意思? +### Q: 报错提示中的`Corresponding forward node candidate:”或“Corresponding code candidate:`是什么意思? A: `Corresponding forward node candidate:`为关联的正向网络中的代码,表示该反向传播算子与该正向代码对应。`Corresponding code candidate:`表示该算子是由这些代码融合而来,其中分隔符“-”用以区分不同的代码。 @@ -226,7 +228,7 @@ A: `Corresponding forward node candidate:`为关联的正向网络中的代码
-## Q: 为什么运行代码时屏幕中会出现`Start compiling and it will take a while. Please wait...`和`End compiling.`的打印? +### Q: 为什么运行代码时屏幕中会出现`Start compiling and it will take a while. Please wait...`和`End compiling.`的打印? A: 当需要加速执行时,MindSpore会将Python源码转换成一种基于图表示的函数式IR,并进行相关的优化。这个过程也被称为编译流程。 当出现“Start compiling and it will take a while. Please wait...”的打印时,MindSpore开始了图编译流程;当出现“End compiling.”则表明图编译流程结束。 @@ -240,7 +242,7 @@ A: 当需要加速执行时,MindSpore会将Python源码转换成一种基于
-## Q: 编译时报出告警:`On the Ascend platform, if you read-only access to the parameter, you can take the value of the parameter, so that the system can do more optimization.`,是什么意思? +### Q: 编译时报出告警:`On the Ascend platform, if you read-only access to the parameter, you can take the value of the parameter, so that the system can do more optimization.`,是什么意思? A: 由于Ascend平台不能真正返回一个内存地址,导致在整图下沉模式下,对于控制流场景中返回值存在参数的情况,会存在一些问题。为了避免出现问题,会对这种场景切换到统一运行时模式,从整图下沉模式切换到统一运行时模式,网络性能可能会劣化。如果控制流子图的返回值仅使用参数的值,可以通过参数的value接口获取参数的值,从而避免模式切换导致的性能劣化。 @@ -292,7 +294,7 @@ out: (Tensor(shape=[], dtype=Int64, value=8), Tensor(shape=[], dtype=Int64, valu
-## Q: load MindIR 时,出现 `The input number of parameters is not Compatible.`该怎么办? +### Q: load MindIR 时,出现 `The input number of parameters is not Compatible.`该怎么办? A: 首先检查导出参数和导入执行的参数个数是否是匹配的。如果是匹配的,则需要检查一下导出时候的参数是不是存在非Tensor的场景。 @@ -302,7 +304,7 @@ A: 首先检查导出参数和导入执行的参数个数是否是匹配的。
-## Q: 编译时报错`ValueError: The shape of sense must not be dynamic shape.`怎么办? +### Q: 编译时报错`ValueError: The shape of sense must not be dynamic shape.`怎么办? A: 在图模式中,当调用GradOperation接口且参数sens_param=True时,通过nn.Cell.set_inputs传入动态shape的sense参数时会导致报错。代码样例如下: @@ -403,13 +405,13 @@ print(net(Tensor(x)))
-## Q: 编译时报错 `'External' TypeError`怎么办? +### Q: 编译时报错 `'External' TypeError`怎么办? A: “External” 类型表示在图模式中使用了无法原生支持的对象。例如:第三方库对象是 “External” 类型。
-## Q: 编译时报错`Nested execution during JIT execution for 'xxx' is not supported when 'xxx' compile and execute.`怎么办? +### Q: 编译时报错`Nested execution during JIT execution for 'xxx' is not supported when 'xxx' compile and execute.`怎么办? A: 当触发编译流程,即代码编译成静态计算图时,同时在默认使用JIT Fallback特性时,再次进入编译流程时,则会抛出以上异常。 @@ -620,7 +622,7 @@ print("out:", out)
-## Q: 编译时报错 `ValueError: The value Parameter (name=name_a, shape=(1,), dtype=Float32, requires_grad=True) , its name 'name_a' already exists. Please set a unique name for the parameter.`,是什么含义?应该怎么处理? +### Q: 编译时报错 `ValueError: The value Parameter (name=name_a, shape=(1,), dtype=Float32, requires_grad=True) , its name 'name_a' already exists. Please set a unique name for the parameter.`,是什么含义?应该怎么处理? A: 图模式下要求Parameter的name拥有唯一性,如果存在同名的两个或者多个Parameter,网络中区分不出不同的对象,将造成错误。我们可以从下面几个角度来排查脚本中的同名的Parameter,对其中的Parameter设置唯一的name。 @@ -756,7 +758,7 @@ print(grad_fn(a))
-## Q: 多次调用同一个网络时,什么情况会重新编译? +### Q: 多次调用同一个网络时,什么情况会重新编译? A: 以下场景会触发重新编译: @@ -770,7 +772,7 @@ A: 以下场景会触发重新编译:
-## Q: 静态图模式如何判断有几张图?什么情况会切分子图?多子图有什么影响?如何避免出现多子图? +### Q: 静态图模式如何判断有几张图?什么情况会切分子图?多子图有什么影响?如何避免出现多子图? A: 1、子图数量可以通过查看IR文件并搜索"Total subgraphs"获取。关于如何查看分析IR文件,请参考 [IR文件分析](https://www.mindspore.cn/tutorials/zh-CN/master/debug/error_analysis/mindir.html)。 diff --git a/docs/mindspore/source_zh_cn/faq/performance_tuning.md b/docs/mindspore/source_zh_cn/faq/performance_tuning.md index c24e225156..09d354e365 100644 --- a/docs/mindspore/source_zh_cn/faq/performance_tuning.md +++ b/docs/mindspore/source_zh_cn/faq/performance_tuning.md @@ -2,13 +2,15 @@ [![查看源文件](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindspore/source_zh_cn/faq/performance_tuning.md) -## Q: MindSpore安装完成,执行训练时发现网络性能异常,权重初始化耗时过长,怎么办? +## 常见问题 + +### Q: MindSpore安装完成,执行训练时发现网络性能异常,权重初始化耗时过长,怎么办? A:可能与环境中使用了`scipy 1.4`系列版本有关,通过`pip list | grep scipy`命令可查看scipy版本,建议改成MindSpore要求的`scipy`版本。版本第三方库依赖可以在`requirement.txt`中查看。
-## Q: 在昇腾芯片上进行模型训练时,如何选择batchsize达到最佳性能效果? +### Q: 在昇腾芯片上进行模型训练时,如何选择batchsize达到最佳性能效果? A:在昇腾芯片上进行模型训练时,在batch_size等于AI CORE个数或倍数的情况下可以获取更好的训练性能。AI CORE个数可通过[链接](https://support.huawei.com/enterprise/zh/doc/EDOC1100206828/eedfacda)中的命令行进行查询。 diff --git a/docs/mindspore/source_zh_cn/faq/precision_tuning.md b/docs/mindspore/source_zh_cn/faq/precision_tuning.md index 305db727ac..4402b9f284 100644 --- a/docs/mindspore/source_zh_cn/faq/precision_tuning.md +++ b/docs/mindspore/source_zh_cn/faq/precision_tuning.md @@ -2,7 +2,9 @@ [![查看源文件](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindspore/source_zh_cn/faq/precision_tuning.md) -## Q: 导致Loss值不收敛或者精度不达标的原因有哪些呢,应该怎样定位调优? +## 常见问题 + +### Q: 导致Loss值不收敛或者精度不达标的原因有哪些呢,应该怎样定位调优? A: 可能导致Loss值不收敛或精度问题的原因很多,推荐参考下面总结,逐一排查问题。 diff --git a/docs/mindspore/source_zh_cn/faq/tools.md b/docs/mindspore/source_zh_cn/faq/tools.md index 96efb7d260..c9aa0668de 100644 --- a/docs/mindspore/source_zh_cn/faq/tools.md +++ b/docs/mindspore/source_zh_cn/faq/tools.md @@ -2,7 +2,9 @@ [![查看源文件](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindspore/source_zh_cn/faq/tools.md) -## Q: 使用溢出检测Dump功能时,遇到`RuntimeError: aclnnAllFiniteGetWorkspaceSize call failed, please check!`报错,该如何解决? +## 常见问题 + +### Q: 使用溢出检测Dump功能时,遇到`RuntimeError: aclnnAllFiniteGetWorkspaceSize call failed, please check!`报错,该如何解决? A: 该错误通常是因为溢出检测功能所依赖的自定义算子与当前 CANN 版本不兼容所致。MindSpore 的溢出检测 Dump 功能对 CANN 版本有严格要求,高版本 MindSpore 无法兼容低版本 CANN。 -- Gitee