diff --git a/faq_dataset/data_generate.py b/faq_dataset/data_generate.py new file mode 100644 index 0000000000000000000000000000000000000000..a6ee13b036e0cf136b42135b76f86fae1790b6f9 --- /dev/null +++ b/faq_dataset/data_generate.py @@ -0,0 +1,119 @@ +import requests +import csv +from bs4 import BeautifulSoup +import re + +#定义寻找特征字符位置的函数 +def find_en(st, text): + position = [] + n = 0 + for m in range(0, 1000): + pos = body.find(st, n, len(text)) + n = pos + 1 + position.append(pos) + if position[m] == -1: + break + return position + +#定义修正中英文冒号的函数,将中文冒号的QA插入 +def correct(datalist1, datalist2): + if len(datalist1) != 1: + for m in range(0, len(datalist1)-1): + for n in range(0, len(datalist2)-1): + if datalist2[n] > datalist1[m]: + datalist2.insert(n, datalist1[m]) + break + +#去除可能出现在A中的小标题 +def delete(list1): + for m in range(0, len(list1)): + l = list1[m].find('\n\n\n\n') + if l != -1: + list1[m] = list1[m][0:l + 1] + + +#定义列表和特征字符 +url = ['https://mindspore.cn/docs/zh-CN/master/faq/installation.html', 'https://mindspore.cn/docs/zh-CN/master/faq/data_processing.html', 'https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html', 'https://mindspore.cn/docs/zh-CN/master/faq/network_compilation.html', 'https://mindspore.cn/docs/zh-CN/master/faq/operators_compile.html', 'https://mindspore.cn/docs/zh-CN/master/faq/usage_migrate_3rd.html', 'https://mindspore.cn/docs/zh-CN/master/faq/performance_tuning.html', 'https://mindspore.cn/docs/zh-CN/master/faq/precision_tuning.html', 'https://mindspore.cn/docs/zh-CN/master/faq/distributed_configure.html', 'https://mindspore.cn/docs/zh-CN/master/faq/inference.html', 'https://mindspore.cn/docs/zh-CN/master/faq/feature_advice.html'] +process = ['#安装', '#数据处理', '#执行问题', '#网络编译', '#算子编译', '#第三方框架迁移使用', '#性能调优', '#精度调优', '#分布式配置', '#推理', '#特性咨询'] +process1 = ['安装', '数据处理', '执行问题', '编译', '编译', '第三方框架迁移', '性能调优', '精度调优', '分布式配置', '推理', '特性咨询'] +tag = ['GPU', 'CuBLAS库', 'Linux', 'arm', 'macOS', 'SDK版本', 'SciPy', 'whl包', 'protobuf', 'Ubuntu', 'MindInsight', 'MIndArmour', 'CPU', 'Windows', 'WSL', 'Ascend', 'Conda', 'Serving', 'gmp', 'cuda', 'MindIR', 'API', 'MindRecord', 'JupyterLab', 'Generator Dataset', 'MindData', 'pipeline', 'Datalouder', 'Dataset', 'eval', 'Model', 'SGD', 'loss', 'PyTorch', 'NLP', 'ModelZoo', 'HCLL', 'ModelArts', 'PyNative', 'Graph', 'TensorFlow', 'C++', 'AIPP', 'OpenMPI', 'NCLL', 'RDMA', 'IB', 'RoCE', 'taichi', 'Caffe', 'NPU'] +tag_change = [] +str1 = "Q:" +str2 = "A:" +str3 = "Q:" +str4 = "A:" +qa = [] +#转义tag中的特殊符号 +for i in tag: + tag_change.append(re.escape(i)) +#十一个语料库大循环 +for numbers in range(0, len(url)): + #获取网页文本 + req = requests.get(url=url[numbers]) + req.encoding = 'utf-8' + html = req.text + bs = BeautifulSoup(html, "html.parser")#html.parser是解析器 + result = bs.select(process[numbers]) + body = result[0].get_text() + #定义存放特征值位置的列表,其中i1、j1存放英文冒号的QA,wq1、wq2存放中文冒号的QA + question_en = [] + answer_en = [] + wrong_question_en = [] + wrong_answer_en = [] + #开始查找,得到位置的列表 + question_en = find_en(str1, body) + answer_en = find_en(str2, body) + wrong_question_en = find_en(str3, body) + wrong_answer_en = find_en(str4, body) + #如果找到存在中文冒号的Q和A,将其插入 + correct(wrong_question_en, question_en) + correct(wrong_answer_en, answer_en) + #在完成上述补充后,还存在不对齐的现象,断定为缺少'A'字符 + if len(question_en) != len(answer_en): + #print('存在缺少A的现象') + for m in range(0, len(question_en)-2): + if question_en[m+1] < answer_en[m]: + a = body.find('?', answer_en[m-1]+1, len(body)) + answer_en.insert(m-1, a) + #通过特征位置构造存放QA的列表 + question = [] + answer = [] + for m in range(0, len(question_en)-1): + str5 = body[question_en[m]:answer_en[m]] + question.append(str5) + for n in range(0, len(answer_en)-2): + str6 = body[answer_en[n]:question_en[n+1]] + answer.append(str6) + #最后的A一直到文本结束 + last = len(answer_en)-2 + str7 = body[answer_en[last]:] + answer.append(str7) + #在A中可能会出现小标题,进行去除 + delete(answer) + #进行不区分大小写的查找tag + tag1 = [] + tag2 = [] + for m in range(0, len(question)): + str8 = question[m]+answer[m] + for i in tag_change: + t = re.search(i, str8, flags=re.IGNORECASE) + if t != None: + tag2.append(t.group(0)) + tag1.append(tag2) + tag2 = [] + #将列表元素合并为字符串 + FinalTag = [] + for m in range(0, len(question)): + ft_str = '、'.join(tag1[m]) + FinalTag.append(ft_str) + #将各个FAQ元素合并,用于写入csv文件 + for n in range(0, len(question)): + qa.append([question[n], url[numbers], answer[n], process1[numbers], FinalTag[n]]) + +#写入数据 +headers = ('title', 'link', 'content', 'process', 'tag') +with open('dataset.csv', 'w', encoding='utf-8', newline='') as f: + write = csv.writer(f) # 创建writer对象 + write.writerow(headers) + for n in range(len(qa)): + write.writerow(qa[n]) \ No newline at end of file diff --git a/faq_dataset/faq_dataset.csv b/faq_dataset/faq_dataset.csv new file mode 100644 index 0000000000000000000000000000000000000000..caed09571753059de5e286db24815c1102117eaf --- /dev/null +++ b/faq_dataset/faq_dataset.csv @@ -0,0 +1,1897 @@ +title,link,content,process,tag +"Q: 安装MindSpore版本: GPU、CUDA 10.1、0.5.0-beta,出现问题: cannot open shared object file:No such file or directory。 +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: 从报错情况来看,是cuBLAS库没有找到。一般的情况下是cuBLAS库没有安装,或者是因为没有加入到环境变量中去。通常cuBLAS是随着CUDA以及驱动一起安装的,确认安装后把cuBLAS所在的目录加入LD_LIBRARY_PATH环境变量中即可。 + +",安装,GPU、cuBLAS库、CUDA、IB +"Q: 使用pip安装时报错: ERROR: mindspore_{VERSION}.whl is not a supported wheel on this platform应该怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: pip会通过wheel安装包的文件名来判断该安装包是否与当前Python环境兼容,例如安装mindspore_ascend-1.2.0-cp37-cp37m-linux_aarch64.whl时,pip会检查: + +当前python环境为3.7.x版本 +当前操作系统为Linux +操作系统架构为arm64 + +因此,如果出现 is not a supported wheel on this platform 问题,请检查当前环境是否满足MindSpore安装要求,以及该MindSpore安装包版本是否正确。 + +",安装,linux、arm、ascend +"Q: macOS系统源码编译后使用pip安装报错: ERROR: mindspore-{VERSION}.whl is not a supported wheel on this platform应该怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: 首先检查output目录下编译得到的安装包名,类似mindspore-1.6.0-cp37-cp37m-macosx_11_1_x84_64.whl。包名中“11_1”的意思是编译时使用的SDK版本是11.1。如果使用的SDK版本为11.x,则可能是因为编译时使用的SDK版本过高导致无法安装。 +解决方法一:可以重命名安装包后再尝试安装,例如将上述安装包重命名为mindspore-1.6.0-cp37-cp37m-macosx_10_15_x84_64.whl。 +解决方法二:在源码编译前,设置环境变量MACOSX_DEPOLYMENT_TARGET为10.15并重新编译。 + +",安装,macOS、SDK版本 +"Q: arm64架构的macOS系统使用pip安装SciPy依赖库时报错,应该怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: SciPy当前没有对应macOS系统arm64架构的whl包,可以使用第三方编译的whl包进行安装。执行如下命令先安装SciPy,再重新安装MindSpore。 +pip install --pre -i https://pypi.anaconda.org/scipy-wheels-nightly/simple scipy + + + +",安装,arm、macOS、SciPy、whl包、conda +"Q: 使用pip安装时报错: SSL:CERTIFICATE_VERIFY_FATLED应该怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: 在pip安装命令后添加参数 --trusted-host=ms-release.obs.cn-north-4.myhuaweicloud.com重试即可。 + +",安装, +"Q: MindSpore对Protobuf版本是否有特别要求? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: MindSpore默认安装Protobuf的3.13.0版本,如果不是该版本,在使用pytest测试代码时日志中会产生很多告警,建议您使用命令pip install protobuf==3.13.0重新安装3.13.0版本。 + +",安装,Protobuf +"Q: 使用pip安装时报错ProxyError(Cannot connect to proxy),应该怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: 此问题一般是代理配置问题,Ubuntu环境下可通过export http_proxy={your_proxy}设置代理;Windows环境可以在cmd中通过set http_proxy={your_proxy}进行代理设置。 + +",安装,Ubuntu、Windows +"Q: 使用pip安装时提示错误,应该怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: 请执行pip -V查看是否绑定了Python3.7+。如果绑定的版本不对,建议使用python3.7 -m pip install代替pip install命令。 + +",安装, +"Q: 使用pip安装依赖库时提示No matching distribution found for XXX错误,应该怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: 请执行pip config list,查看当前软件库索引路径index-url。某些情况下,软件库索引会出现更新滞后,可尝试设置其它软件库索引路径。 + +",安装,ib +"Q: MindSpore网站安装页面找不到MindInsight和MindArmour的whl包,无法安装怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: 您可以从MindSpore网站下载地址下载whl包,通过pip install命令进行安装。 + +",安装,Arm、whl包、MindInsight、MindArmour +"Q: MindSpore是否支持Nvidia GPU独立显卡+Windows操作系统的个人电脑? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: 目前MindSpore支持的情况是GPU+Linux与CPU+Windows的组合配置,Windows+GPU的支持还在开发中。 +如果希望在GPU+Windows的环境上运行,可以尝试使用WSL+docker的方式,操作思路: + +以WSL方式安装起Ubuntu18.04,参考https://docs.microsoft.com/en-us/windows/wsl/install-win10。 +安装支持WSL的Nvidia驱动以及在WSL运行容器的环境部署,参考https://docs.nvidia.com/cuda/wsl-user-guide/index.html。 + +由于CUDA on WSL还是预览特性,注意参考链接里对Windows版本要求的说明,版本不够的需要做升级。 + + +参考https://gitee.com/mindspore/mindspore#docker%E9%95%9C%E5%83%8F,取MindSpore-GPU镜像。如取MindSpore1.0.0版本容器,在WSL Ubuntu18.04中执行docker pull mindspore/mindspore-gpu:1.0.0运行容器: +docker run -it --runtime=nvidia mindspore/mindspore-gpu:1.0.0 /bin/bash + + + + +详细步骤可以参考社区提供的实践张小白教你安装Windows10的GPU驱动(CUDA和cuDNN)。 +在此感谢社区成员张辉的分享。 + +",安装,GPU、Linux、Ubuntu、CPU、Windows、WSL、cuda +"Q: Ascend硬件平台,在个人的Conda环境中,有时候出现报错RuntimeError: json.exception.parse_error.101 parse error at line 1, column 1: syntax error while parsing value - invalid literal; last read: ‘T’,该怎么处理? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: 出现这种类型的报错,大概率是run包更新后个人的Conda环境中没有更新te或topi或hccl工具包,可以将当前Conda环境中的上述几个工具包卸载,然后使用如下命令再重新安装: pip install /usr/local/Ascend/ascend-toolkit/latest/lib64/{te/topi/hccl}-{version}-py3-none-any.whl。 + +",安装,Ascend、Conda、ib +"Q: pip同时安装MindSpore CPU和GPU版本,import时报错 cannot import name 'context' from 'mindspore',应该怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: MindSpore不同版本的安装目录名同为mindspore,安装在同一个Python环境可能产生目录相互覆盖问题,导致无法使用,如果需要使用多平台版本的MindSpore时(例如同时使用CPU和GPU版本),请先卸载其他版本再安装新版本。 + +",安装,GPU、CPU +"Q: 在ARM架构的环境上使用pip安装MindSpore时报错: Could not find a version that satisfies the requirement应该怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: 大概率是因为pip版本低于19.3,无法识别manylinux2014标签,导致pip install阶段下载了错误版本的numpy或scipy等python软件包,进而引发了无法找到构建依赖的问题,请执行pip install --upgrade pip将环境中的pip升级到19.3以上,重新安装MindSpore。 + +",安装,linux、ARM、scipy +"Q: pip安装MindSpore时,报错 Running setup.py install for pillow: finished with status 'error' ... The headers or library files could not be found for jpeg, ...,应该怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: MindSpore依赖三方库pillow进行部分的数据处理操作,而pillow需要依赖环境上已经安装libjpeg库,以Ubuntu环境为例,可以使用sudo apt-get install libjpeg8-dev来安装libjpeg库,然后再安装MindSpore。 + + + +源码编译安装¶ +",安装,Ubuntu、ib +"Q: 编译时bash -p方式和 bash -e方式的区别? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: MindSpore Serving的编译和运行依赖MindSpore,Serving提供两种编译方式: 一种指定已安装的MindSpore路径,即bash -p {python site-packages}/mindspore/lib,避免编译Serving时再编译MindSpore;另一种,编译Serving时,编译配套的MindSpore,Serving会将-e、-V和-j选项透传给MindSpore。 +比如,在Serving目录下,bash -e ascend -V 910 -j32: + +首先将会以bash -e ascend -V 910 -j32方式编译third_party/mindspore目录下的MindSpore; +其次,编译脚本将MindSpore编译结果作为Serving的编译依赖。 + + +",安装,ascend、Serving、ib +"Q: 在Linux中已经安装了交叉编译工具,但是编译命令要怎么写呢? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: arm64版本编译: bash build.sh -I arm64;arm32版本编译: bash build.sh -I arm32;注意要先设置环境变量,指定Android NDK路径: export ANDROID_NDK=/path/to/android-ndk,编译成功后,在output目录可以找到编译出的包。 + +",安装,Linux、arm +"Q: MindSpore安装: 版本0.6.0-beta + Ascend 910 + Ubuntu_aarch64 + Python3.7.5,手动下载对应版本的whl包,编译并安装gmp6.1.2。其他Python库依赖已经安装完成,执行样例失败,报错显示找不到so文件。 +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: libdatatransfer.so动态库是fwkacllib/lib64目录下的,请先在/usr/local目录查找到这个库所在的路径,然后把这个路径加到LD_LIBRARY_PATH环境变量中,确认设置生效后,再执行。 + +",安装,whl包、Ubuntu、Ascend、gmp、ib +"Q: 源码编译MindSpore过程时间过长,或时常中断该怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: MindSpore通过submodule机制引入第三方依赖包,其中Protobuf依赖包(v3.13.0)下载速度不稳定,建议您提前进行包缓存。 + +",安装,Protobuf +"Q: 如何改变第三方依赖库安装路径? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: 第三方依赖库的包默认安装在build/mindspore/.mslib目录下,可以设置环境变量MSLIBS_CACHE_PATH来改变安装目录,比如 export MSLIBS_CACHE_PATH = ~/.mslib。 + +",安装,ib +"Q: MindSpore要求的配套软件版本与Ubuntu默认版本不一致怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: 当前MindSpore只提供版本配套关系,需要您手动进行配套软件的安装升级。(注明: MindSpore要求Python3.7.5和gcc7.3,Ubuntu 16.04默认为Python3.5和gcc5,Ubuntu 18.04默认自带Python3.7.3和gcc7.4)。 + +",安装,Ubuntu +"Q: 执行用例报错No module named 'mindpore.version',应该怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: 当有这种报错时,有可能是在创建了和MindSpore安装包相同名字的路径中执行用例,导致Python导入包的时候优先找到了当前目录下,而当前目录没有version.py这个文件。解决方法就是目录重命名或者向上退出一级或者多级目录。 + +",安装, +"Q: 源码编译时,报错MD5 does not match,应该怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: 这种报错可能是在编译的时候由于网络问题导致一些第三方库下载中断,之后重新编译的时候,该文件已经存在但是不完整,在校验MD5的时候失败。解决方法是: 删除.mslib缓存路径中的相关第三方库,然后重新编译。 + +",安装,ib +"Q: 环境上安装了Python3.7.5,环境变量设置正确,编译MindSpore时仍然报错Python3 not found,应该怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: 可能是因为当前环境上的Python未包含动态库。编译MindSpore需要动态链接Python库,因此需要使用开启动态库编译选项的Python3.7.5,即在源码编译Python时使用./configure --enable-shared命令。 + +",安装, +"Q: 编译失败后,应该清理哪些路径以确保上次失败的编译结果不会影响到下一次编译? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: 在编译MindSpore时,如果: + +第三方组件下载或编译失败,例如icu4c的patch动作失败返回错误信息Cmake Error at cmake/utils.cmake:301 (message): Failed patch:,则进入编译目录下的build/mindspore/.mslib目录,或由MSLIBS_CACHE_PATH环境变量指定的第三方软件安装目录,并删除其中的对应软件。 +其他阶段编译失败,或打算删除上一次编译结果,完全重新编译时,直接删除build目录即可。 + + +",安装,ib +"Q: 编译时报错,打开CMakeError.txt提示pthread找不到怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: 真正的失败原因会体现在打屏的日志里,CMakeError.txt无参考价值,请寻找打屏日志中的第一个报错。 + +",安装, +"Q: 编译成功后,运行时报错undefined reference to XXXX或undefined symbol XXXX怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: 可能的原因有: + +如果问题是git pull更新代码后出现,请删除掉build文件夹,排除前次构建的影响。 +如果问题是修改代码后出现,可以使用c++filt XXXX查看该符号的意义,有可能是函数未实现、虚函数未实现、依赖未链接等原因引起。 +如果问题发生在Ascend平台,排除上述原因后,很可能是由于MindSpore版本与CANN版本不匹配引起的,版本匹配关系参考安装说明。 + + + + +卸载¶ +",安装,Ascend、c++ +"Q: 如何卸载MindSpore? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: 首先请确定MindSpore的全称,例如gpu版本的MindSpore,可以执行命令pip uninstall mindspore-gpu进行卸载。 + + + +环境变量¶ +",安装,gpu +"Q: 一些常用的环境变量设置,在新启动的终端窗口中需要重新设置,容易忘记应该怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: 常用的环境变量设置写入到~/.bash_profile 或 ~/.bashrc中,可让环境变量设置在新启动的终端窗口中立即生效。 + +",安装, +"Q: 使用GPU版本MindSpore时,如何设置DEVICE_ID环境变量 +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: MindSpore GPU模式一般无需设置DEVICE_ID环境变量,MindSpore会根据cuda环境变量CUDA_VISIBLE_DEVICES,自动选择可见的GPU设备。设置CUDA_VISIBLE_DEVICES环境变量后,则DEVICE_ID环境变量代表可见GPU设备的下标: + +执行export CUDA_VISIBLE_DEVICES=1,3,5后,DEVICE_ID应当被设置为0,1或2,若设置为3及以上,MindSpore会由于设备ID不合法而运行失败。 + + +",安装,GPU、cuda、IB +"Q: 编译应用时报错/usr/bin/ld: warning: libxxx.so, needed by libmindspore.so, not found怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: 寻找缺少的动态库文件所在目录,添加该路径到环境变量LD_LIBRARY_PATH中,环境变量设置参考Ascend 310 AI处理器上使用MindIR模型进行推理#编译推理代码。 + +",安装,Ascend、MindIR、ib +"Q: 运行应用时出现ModuleNotFoundError: No module named 'te'怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: 首先确认环境安装是否正确,te、topi等whl包是否正确安装。如果用户环境中有多个Python版本,如Conda虚拟环境中,需ldd name_of_your_executable_app确认应用所链接的libpython3.so是否与当前Python路径一致,如果不一致需要调整环境变量LD_LIBRARY_PATH顺序,例如 +export LD_LIBRARY_PATH=`python -c ""import distutils.sysconfig as sysconfig; print(sysconfig.get_config_var('LIBDIR'))""`:$LD_LIBRARY_PATH + + +将当前的python命令对应程序的运行库路径加入到LD_LIBRARY_PATH的最前面。 + +",安装,whl包、Conda、ib +"Q: 运行应用时出现error while loading shared libraries: libpython3.so: cannot open shared object file: No such file or directory怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: 该报错通常出现在装有多个Python版本的环境中,首先确认Python的lib目录是否在环境变量LD_LIBRARY_PATH中,可执行以下命令进行设置: +export LD_LIBRARY_PATH=`python -c ""import distutils.sysconfig as sysconfig; print(sysconfig.get_config_var('LIBDIR'))""`:$LD_LIBRARY_PATH + + +另外如果在Conda虚拟环境中,Python 3.7.6以下版本不含该动态库,可以执行命令升级Conda中Python的版本,如:conda install python=3.7.11。 + +",安装,Conda、ib +"Q: Ascend AI处理器配套软件包与其他依赖软件已安装,但是执行MindSpore时提示Cannot open shared objectfile: No such file or directory该怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: 常见原因有两种: Ascend AI处理器配套软件包或固件/驱动包版本不正确,或没有安装在默认位置且未配置相应的环境变量。 + +打开Ascend AI处理器配套软件包安装目录,默认/usr/local/Ascend下,各个子目录中的version.info文件,观察其版本号是否与当前使用的MindSpore版本一直,参照安装页面中关于Ascend AI处理器配套软件包版本的描述。如果版本不配套,请更换软件包或MindSpore版本。 +检查Ascend AI处理器配套软件包与其他依赖软件是否安装在默认位置,MindSpore会尝试从默认安装位置/usr/local/Ascend自动加载,如果将Ascend软件包安装在自定义位置,请参照安装页面页面的安装指南一栏设置环境变量。如果将其他依赖软件安装在自定义位置,请根据其位置关系设置LD_LIBRARY_PATH环境变量。 + + + + +安装验证¶ +",安装,Ascend、IB +"Q: MindSpore的GPU版本对设备的计算能力有限制吗? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: 目前MindSpore仅支持计算能力大于5.3的设备。 + +",安装,GPU +"Q: 个人电脑CPU环境安装MindSpore后验证代码时报错: the pointer[session] is null,具体代码如下,该如何验证是否安装成功呢? +import numpy as np +import mindspore as ms +import mindspore.ops as ops + +ms.set_context(device_target=""Ascend"") +x = ms.Tensor(np.ones([1,3,3,4]).astype(np.float32)) +y = ms.Tensor(np.ones([1,3,3,4]).astype(np.float32)) +print(ops.add(x,y)) + + +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: 验证安装是否成功,可以参照对应版本的安装指南页面中 验证是否成功安装 段落的描述: +python -c ""import mindspore;mindspore.run_check()"" + + +如果输出: +MindSpore version: 版本号 +The result of multiplication calculation is correct, MindSpore has been installed successfully! + + +说明MindSpore安装成功了。 + +",安装,CPU、Ascend +"Q: Linux平台下执行用例的时候会报错sh:1:python:not found或者由于链接到了Python2.7的版本中而报错No module named mindspore._extends.remote,该怎么处理? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: 遇到类似的问题,大多是由于Python的环境问题,可以通过如下方式检查Python环境是否是MindSpore运行时所需要的环境。 + +在终端窗口中输入python,检查以下进入Python交互环境中的版本信息,如果直接报错则是没有Python的软连接;如果进入的是非Python3.7版本的环境,则当前Python环境不是MindSpore运行所需要的。 +执行sudo ln -sf /usr/bin/python3.7.x /usr/bin/python创建Python的软连接,然后再检查执行。 + + +",安装,Linux +"Q: 在脚本中import mindspore之前import了其他三方库,提示如下错误(/{your_path}/libgomp.so.1: cannot allocate memory in static TLS block)该怎么解决? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: 上述问题较为常见,当前有两种可行的解决方法,可任选其一: + +交换import的顺序,先import mindspore再import其他三方库。 +执行程序之前先添加环境变量(export LD_PRELOAD=/{your_path}/libgomp.so.1),其中{your_path}是上述报错提示的路径。 + + +",安装,ib +"Q: mindspore和gmp都已经通过源码编译安装后,在脚本中执行import mindspore, +提示如下错误(ImportError: libgmpxx.so: cannot open shared object file: No such file or directory)该怎么解决? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: 上述问题的原因是在编译安装gmp库的时候没有设置--enable-cxx,正确的gmp编译安装方式如下(假设已经下载了gmp6.1.2安装包): +$cd gmp-6.1.2 +$./configure --enable-cxx +$make +$make check +$sudo make install + + + +",安装,gmp、ib +"Q: 运行MindSpore时出现告警 UserWarning: The value of the smallest subnormal for type is zero. 应该怎么解决? +",https://mindspore.cn/docs/zh-CN/master/faq/installation.html,"A: 上述问题出现在安装了较新版本的numpy(>=1.22.0)版本的ARM python3.9环境上。告警来自numpy而非MindSpore。如果告警影响到了代码的正常调测,可以考虑手动安装较低版本的numpy(<=1.21.2)来规避。 + +",安装,ARM +"Q: 请问如果不使用高阶API,怎么实现数据下沉? +",https://mindspore.cn/docs/zh-CN/master/faq/data_processing.html,"A: 可以参考此手动下沉方式的test_tdt_data_transfer.py示例实现,不用借助model.train接口,目前支持:GPU和Ascend硬件使用。 + +",数据处理,GPU、Ascend、API、model +"Q: 在使用Dataset处理数据过程中内存占用高,怎么优化? +",https://mindspore.cn/docs/zh-CN/master/faq/data_processing.html,"A: 可以参考如下几个步骤来降低内存占用,同时也可能会降低数据处理的效率。 + +在定义数据集**Dataset对象前,设置Dataset数据处理预取的大小,ds.config.set_prefetch_size(2)。 +在定义**Dataset对象时,设置其参数num_parallel_workers为1。 +如果对**Dataset对象进一步使用了.map(...)操作,可以设置.map(...)的参数num_parallel_workers为1。 +如果对**Dataset对象进一步使用了.batch(...)操作,可以设置.batch(...)的参数num_parallel_workers为1。 +如果对**Dataset对象进一步使用了.shuffle(...)操作,可以把参数buffer_size设置减少。 + + +",数据处理,Dataset +"Q: 在使用Dataset处理数据过程中CPU占用高,表现为sy占用高而us占用低,怎么优化? +",https://mindspore.cn/docs/zh-CN/master/faq/data_processing.html,"A: 可以参考如下几个步骤来降低CPU占用,进一步提升性能,其主要原因是三方库多线程与数据处理多线程存在资源竞争。 + +如果数据处理阶段有opencv的cv2操作,那么通过cv2.setNumThreads(2)设置cv2全局线程数。 +如果数据处理阶段有numpy操作,那么通过export OPENBLAS_NUM_THREADS=1设置OPENBLAS线程数。 + + +",数据处理,CPU、Dataset +"Q: 在GeneratorDataset中,看到有参数shuffle,在跑任务时发现shuffle=True和shuffle=False,两者没有区别,这是为什么? +",https://mindspore.cn/docs/zh-CN/master/faq/data_processing.html,"A: 开启shuffle,需要传入的Dataset是支持随机访问的(例如自定义的Dataset有getitem方法),如果是在自定义的Dataset里面通过yeild方式返回回来的数据,是不支持随机访问的,具体可查看教程中的自定义数据集章节。 + +",数据处理,Dataset +"Q: 请问Dataset如何把两个columns合并成一个column? +",https://mindspore.cn/docs/zh-CN/master/faq/data_processing.html,"A: 可以添加如下操作把 两个字段合成一个。 +def combine(x, y): + x = x.flatten() + y = y.flatten() + return np.append(x, y) + +dataset = dataset.map(operations=combine, input_columns=[""data"", ""data2""], output_columns=[""data""]) + + +注:因为两个columns是不同的shape,需要先flatten下,然后再合并。 + +",数据处理,Dataset、npu +"Q: 请问GeneratorDataset支持ds.PKSampler采样吗? +",https://mindspore.cn/docs/zh-CN/master/faq/data_processing.html,"A: 自定义数据集GeneratorDataset不支持PKSampler采样逻辑。主要原因是自定义数据操作灵活度太大了,内置的PKSampler难以做到通用性,所以选择在接口层面直接提示不支持。但是对于GeneratorDataset,可以方便的定义自己需要的Sampler逻辑,即在ImageDataset类的__getitem__函数中定义具体的sampler规则,返回自己需要的数据即可。 + +",数据处理,Dataset +"Q: MindSpore如何加载已有的预训练词向量? +",https://mindspore.cn/docs/zh-CN/master/faq/data_processing.html,"A: 可以在定义EmbedingLookup或者Embedding时候,把预训练的词向量传进来,把预训练的词向量封装成一个Tensor作为EmbeddingLookup初始值。 + +",数据处理, +"Q: 请问c_transforms和py_transforms有什么区别,比较推荐使用哪个? +",https://mindspore.cn/docs/zh-CN/master/faq/data_processing.html,"A: 推荐使用c_transforms,因为纯C层执行,所以性能会更好。 +原理:c_transform底层使用的是C版本opencv/jpeg-turbo进行的数据处理,py_transform使用的是Python版本的Pillow进行数据处理。 + +",数据处理, +"Q: 由于我一条数据包含多个图像,并且每个图像的宽高都不一致,需要对转成mindrecord格式的数据进行map操作。可是我从record读取的数据是np.ndarray格式的数据,我的数据处理的operations是针对图像格式的。我应该怎么样才能对所生成的mindrecord的格式的数据进行预处理呢? +",https://mindspore.cn/docs/zh-CN/master/faq/data_processing.html,"A: 建议你按照如下操作进行: +#1 The defined schema is as follows: Among them, data1, data2, data3, ... These fields store your image, and only the binary of the image is stored here. + +cv_schema_json = {""label"": {""type"": ""int32""}, ""data1"": {""type"": ""bytes""}, ""data2"": {""type"": ""bytes""}, ""data3"": {""type"": ""bytes""}} + +#2 The organized data can be as follows, and then this data_list can be written by FileWriter.write_raw_data(...). + +data_list = [] +data = {} +data['label'] = 1 + +f = open(""1.jpg"", ""rb"") +image_bytes = f.read() +f.close + +data['data1'] = image_bytes + +f2 = open(""2.jpg"", ""rb"") +image_bytes2 = f2.read() +f2.close + +data['data2'] = image_bytes2 + +f3 = open(""3.jpg"", ""rb"") +image_bytes3 = f3.read() +f3.close + +data['data3'] = image_bytes3 + +data_list.append(data) + +#3 Use MindDataset to load, then use the decode operator we provide to decode, and then perform subsequent processing. + +data_set = ds.MindDataset(""mindrecord_file_name"") +data_set = data_set.map(input_columns=[""data1""], operations=vision.Decode(), num_parallel_workers=2) +data_set = data_set.map(input_columns=[""data2""], operations=vision.Decode(), num_parallel_workers=2) +data_set = data_set.map(input_columns=[""data3""], operations=vision.Decode(), num_parallel_workers=2) +resize_op = vision.Resize((32, 32), interpolation=Inter.LINEAR) +data_set = data_set.map(operations=resize_op, input_columns=[""data1""], num_parallel_workers=2) +for item in data_set.create_dict_iterator(output_numpy=True): + print(item) + + + +",数据处理,mindrecord、MindData、Dataset、roce、npu +"Q: 我的自定义图像数据集转为mindrecord格式时,我的数据是numpy.ndarray格式的,且shape为[4,100,132,3],这个shape的含义是四幅三通道的帧,且每个值都在0~255。可是当我查看转化成mindrecord的格式的数据时,发现是[19800]的shape,我原数据的维度全部展开有[158400],请问这是为什么? +",https://mindspore.cn/docs/zh-CN/master/faq/data_processing.html,"A: 可能是你数据中ndarray的dtype是int8,因为[158400]和[19800]刚好相差了8倍,建议将数据中ndarray的dtype指定为float64。 + +",数据处理,mindrecord +"Q: 想要保存生成的图片,代码运行完毕以后在相应目录找不到图片。相似的,在JupyterLab中生成数据集用于训练,训练时可以在相应路径读取到数据,但是自己却无法在路径中找到图片或数据集? +",https://mindspore.cn/docs/zh-CN/master/faq/data_processing.html,"A: 可能是JumperLab生成的图片或者数据集都是在Docker内,moxing下载的数据只能训练进程的Docker内看见,训练完成后这些数据就随着Docker释放了。 可以试试在训练任务中将需要download的数据再通过moxing传回obs,然后再在obs里面下载到你本地。 + +",数据处理,JupyterLab +"Q: MindSpore中model.train的dataset_sink_mode参数该如何理解? +",https://mindspore.cn/docs/zh-CN/master/faq/data_processing.html,"A: 当dataset_sink_mode=True时,数据处理会和网络计算构成Pipeline方式,即: 数据处理在逐步处理数据时,处理完一个batch的数据,会把数据放到一个队列里,这个队列用于缓存已经处理好的数据,然后网络计算从这个队列里面取数据用于训练,那么此时数据处理与网络计算就Pipeline起来了,整个训练耗时就是数据处理/网络计算耗时最长的那个。 +当dataset_sink_mode=False时,数据处理会和网络计算构成串行的过程,即: 数据处理在处理完一个batch后,把这个batch的数据传递给网络用于计算,在计算完成后,数据处理再处理下一个batch,然后把这个新的batch数据传递给网络用于计算,如此的循环往复,直到训练完。该方法的总耗时是数据处理的耗时+网络计算的耗时=训练总耗时。 + +",数据处理,Pipeline、dataset、model +"Q: MindSpore能否支持按批次对不同尺寸的图片数据进行训练? +",https://mindspore.cn/docs/zh-CN/master/faq/data_processing.html,"A: 你可以参考yolov3对于此场景的使用,里面有对于图像的不同缩放,脚本见yolo_dataset。 + +",数据处理,dataset +"Q: 使用MindSpore做分割训练,必须将数据转为MindRecord吗? +",https://mindspore.cn/docs/zh-CN/master/faq/data_processing.html,"A: build_seg_data.py是将数据集生成MindRecord的脚本,可以直接使用/适配下你的数据集。或者如果你想尝试自己实现数据集的读取,可以使用GeneratorDataset自定义数据集加载。 +GenratorDataset 示例 +GenratorDataset API说明 + +",数据处理,API、MindRecord、Dataset +"Q: MindSpore在Ascend硬件平台进行多卡训练,自定义数据集如何给不同卡传递不同数据? +",https://mindspore.cn/docs/zh-CN/master/faq/data_processing.html,"A: 使用GeneratorDataset的时候,可以使用num_shards=num_shards,shard_id=device_id参数来控制不同卡读取哪个分片的数据,__getitem__和__len__按全量数据集处理即可。 +举例: +# 卡0: +ds.GeneratorDataset(..., num_shards=8, shard_id=0, ...) +# 卡1: +ds.GeneratorDataset(..., num_shards=8, shard_id=1, ...) +# 卡2: +ds.GeneratorDataset(..., num_shards=8, shard_id=2, ...) +... +# 卡7: +ds.GeneratorDataset(..., num_shards=8, shard_id=7, ...) + + + +",数据处理,Ascend、Dataset +"Q: 如何构建图像的多标签MindRecord格式数据集? +",https://mindspore.cn/docs/zh-CN/master/faq/data_processing.html,"A: 数据Schema可以按如下方式定义: cv_schema_json = {""label"": {""type"": ""int32"", ""shape"": [-1]}, ""data"": {""type"": ""bytes""}} +说明: label是一个数组,numpy类型,这里面可以存 1, 1,0,1, 0, 1 这么多label值,这些label值对应同一个data,即: 同一个图像的二进制值。 +可以参考将数据集转换为MindRecord教程。 + +",数据处理,MindRecord +"Q: 请问自己制作的黑底白字28*28的数字图片,使用MindSpore训练出来的模型做预测,报错提示wrong shape of image是怎么回事? +",https://mindspore.cn/docs/zh-CN/master/faq/data_processing.html,"A: 首先MindSpore训练使用的灰度图MNIST数据集。所以模型使用时对数据是有要求的,需要设置为28*28的灰度图,就是单通道才可以。 + +",数据处理, +"Q: 第一次看到有专门的数据处理框架,能介绍下么? +",https://mindspore.cn/docs/zh-CN/master/faq/data_processing.html,"A: MindData提供数据处理异构硬件加速功能,高并发数据处理pipeline同时支持Ascend/GPU/CPU,CPU占用降低30%,点击查询数据处理性能优化。 + +",数据处理,GPU、CPU、Ascend、MindData、pipeline +"Q: 网络训练时出现报错提示数据下发失败“TDT Push data into device Failed”,如何定位原因? +",https://mindspore.cn/docs/zh-CN/master/faq/data_processing.html,"A: 首先上述报错指的是通过训练数据下发通道(TDT,train data transfer)发送数据到卡(device)上失败,导致这一报错的原因可能有多种,因此日志中给出了相应的检查建议,具体而言: + +通常我们会找到日志中最先抛出的错误(第一个ERROR级别的错误)或报错堆栈(TraceBack),并尝试从中找到有助于定位错误原因的信息。 +在图编译阶段,训练还没开始报错时(例如日志中还没打印loss),请先检查下报错(ERROR)日志中是否有网络中涉及的相关算子报错或涉及环境没配置好导致的报错(如hccl.json不对导致多卡通信初始化异常)。 +在中间训练过程中报错时,通常为下发的数据量(batch数)与网络训练需要的数据量(step数)不匹配导致的,可以通过get_dataset_size接口打印一个epoch中包含的batch数,导致异常的部分可能原因如下: + +通过查看打印loss次数的等方式判断如果数据量(step数)刚好为一个epoch中batch数的整数倍,则可能是数据处理部分涉及epoch的处理存在问题,如下面这场景: +... +dataset = dataset.create_tuple_iteator(num_epochs=-1) # 此处如果要返回一个迭代器则num_epochs应该给1, 但建议直接返回dataset +return dataset + + + +考虑是否是数据处理性能较慢,跟不上网络训练的速度,针对这一场景,可借助profiler工具和MindInsight看一下是否存在明显的迭代间隙,或手动遍历一下dataset,并打印计算下平均单batch的耗时,是否比网络正反向加起来的时间更长,如果是则大概率需要对数据处理部分进行性能优化。 +训练过程中出现异常数据抛出异常导致下发数据失败,通常这种情况会有其他报错(ERROR)日志会提示数据处理哪个环节出现了异常及检查建议。如果不明显,也可以通过遍历dataset每条数据的方式尝试找出异常的数据(如关闭shuffle, 然后进行二分法)。 + + +如果在训练结束后打印这条日志(大抵是强制释放资源导致),可忽略这个报错。 +如果仍不能定位具体原因,请通过提issue或论坛提问等方式找模块开发人员协助定位。 + + +",数据处理,MindInsight、dataset、loss +"Q: py_transforms 和 c_transforms 算子能否混合使用,如果混合使用具体需要怎么使用? +",https://mindspore.cn/docs/zh-CN/master/faq/data_processing.html,"A: 出于高性能考虑,通常不建议将py_transforms 与 c_transforms算子混合使用,文档也对此进行了说明。但若不追求极致的性能,主要考虑打通流程,在无法全部使用c_transforms算子(缺少对应的c_transforms算子)的情况下,可使用py_transforms算子替代,此时即存在混合使用。 +对此我们需要注意c_transforms 算子的输出通常是numpy array,py_transforms算子的输出是PIL Image,具体可查看算子说明,为此通常的混合使用方法为: + +c_transforms 算子 + ToPIL 算子 + py_transforms 算子 + ToTensor算子 +py_transforms 算子 + ToTensor 算子 + c_transforms 算子 + +# example that using c_transforms and py_transforms operators together +# in following case: c_vision refers to c_transforms, py_vision refer to py_transforms + +decode_op = c_vision.Decode() + +# If input type is not PIL, then add ToPIL operator. +transforms = [ + py_vision.ToPIL(), + py_vision.CenterCrop(375), + py_vision.ToTensor() +] +transform = mindspore.dataset.transforms.Compose(transforms) +data1 = data1.map(operations=decode_op, input_columns=[""image""]) +data1 = data1.map(operations=transform, input_columns=[""image""]) + + + +",数据处理,dataset、npu +"Q: 当错误提示 “The data pipeline is not a tree (i.e., one node has 2 consumers)” 应该怎么检查? +",https://mindspore.cn/docs/zh-CN/master/faq/data_processing.html,"A: 上述错误通常是脚本书写错误导致,具体发生在下面这种场景;正常情况下数据处理pipeline中的操作是依次串联的,下面的异常场景中dataset1有两个消费节点 dataset2和dataset3,就会出现上述错误。 + dataset2 = dataset1.map(***) + dataset3 = dataset1.map(***) + + +正确的写法如下所示,dataset3是由dataset2进性数据增强得到的,而不是在dataset1基础上进行数据增强操作得到。 + dataset2 = dataset1.map(***) + dataset3 = dataset2.map(***) + + + +",数据处理,pipeline、dataset +"Q: MindSpore中和Dataloader对应的算子是什么? +",https://mindspore.cn/docs/zh-CN/master/faq/data_processing.html,"A:如果将Dataloader考虑为接收自定义Dataset的API接口,MindSpore数据处理API中和Dataloader较为相似的是GeneratorDataset,可接收用户自定义的Dataset,具体使用方式参考GeneratorDataset 文档,差异对比也可查看API算子映射表。 + +",数据处理,API、Dataset +"Q: 自定义的Dataset出现错误时,应该如何调试? +",https://mindspore.cn/docs/zh-CN/master/faq/data_processing.html,"A:自定义的Dataset通常会传入到GeneratorDataset,在使用过程中错误指向了自定义的Dataset时,可通过一些方式进行调试(如增加打印信息,打印返回值的shape、dtype等),自定义Dataset通常要保持中间处理结果为numpy array,且不建议与MindSpore网络计算的算子混合使用。此外针对自定义的Dataset如下面的MyDataset,初始化后也可直接进行如下遍历(主要为简化调试,分析原始Dataset中的问题,可不传入GeneratorDataset),调试遵循常规的Python语法规则。 +Dataset = MyDataset() +for item in Dataset: + print(""item:"", item) + + + +",数据处理,Dataset +"Q: 数据处理算子与网络计算算子能否混合使用? +",https://mindspore.cn/docs/zh-CN/master/faq/data_processing.html,"A:通常数据处理算子与网络计算算子混合使用会导致性能有所降低,在缺少对应的数据处理算子且自定义py_transforms算子不合适时可进行尝试。需要注意的是,因为二者需要的输入不一致,数据处理算子通常输入为numpy array 或 PIL Image,但网络计算算子输入需要是MindSpore.Tensor; +将二者混合使用需要使上一个算子的输出格式和下一个算子所需的输入格式一致。数据处理算子指的是官网API文档中mindspore.dataset开头的算子,如 mindspore.dataset.vision.CenterCrop,网络计算算子包含 mindspore.nn、 mindspore.ops等目录下的算子。 + +",数据处理,API、dataset +"Q: MindRecord为何会生成.db文件? 缺少.db文件时加载数据集会有什么报错? +",https://mindspore.cn/docs/zh-CN/master/faq/data_processing.html,"A:.db文件为MindRecord文件对应的索引文件,缺少.db文件通常会在获取数据集总的数据量时报错,错误提示如:MindRecordOp Count total rows failed。 + +",数据处理,MindRecord +"Q: 自定义Dataset中如何进行图像读取并进行Decode操作? +",https://mindspore.cn/docs/zh-CN/master/faq/data_processing.html,"A:传入GeneratorDataset的自定义Dataset,在接口内部(如__getitem__函数)进行图像读取后可以直接返回bytes类型的数据、numpy array类型的数组或已经做了解码操作的numpy array, 具体如下所示: + +读取图像后直接返回bytes类型的数据 +class ImageDataset: + def __init__(self, data_path): + self.data = data_path + + def __getitem__(self, index): + # use file open and read method + f = open(self.data[index], 'rb') + img_bytes = f.read() + f.close() + + # return bytes directly + return (img_bytes, ) + + def __len__(self): + return len(self.data) + +# data_path is a list of image file name +dataset1 = ds.GeneratorDataset(ImageDataset(data_path), [""data""]) +decode_op = py_vision.Decode() +to_tensor = py_vision.ToTensor(output_type=np.int32) +dataset1 = dataset1.map(operations=[decode_op, to_tensor], input_columns=[""data""]) + + + +读取图像后返回numpy array +# 在上面的用例中,对__getitem__函数可进行如下修改, Decode操作同上述用例一致 +def __getitem__(self, index): + # use np.fromfile to read image + img_np = np.fromfile(self.data[index]) + + # return Numpy array directly + return (img_np, ) + + + +读取图像后直接进行Decode操作 +# 依据上面的用例,对__getitem__函数可进行如下修改, 直接返回Decode之后的数据,此后可以不需要通过map算子接Decode操作 +def __getitem__(self, index): + # use Image.Open to open file, and convert to RGC + img_rgb = Image.Open(self.data[index]).convert(""RGB"") + return (img_rgb, ) + + + + + +",数据处理,Dataset、npu +"Q: 在使用Dataset处理数据过程中,报错RuntimeError: can't start new thread,怎么解决? +",https://mindspore.cn/docs/zh-CN/master/faq/data_processing.html,"A: 主要原因是在使用**Dataset、.map(...)和.batch(...)时,参数num_parallel_workers配置过大,用户进程数达到最大,可以通过ulimit -u 最大进程数来增加用户最大进程数范围,或者将num_parallel_workers配置减小。 +",数据处理,Dataset +"Q: 在使用GeneratorDataset加载数据时,报错RuntimeError: Failed to copy data into tensor.,怎么解决? +",https://mindspore.cn/docs/zh-CN/master/faq/data_processing.html,"A: 在使用GeneratorDataset加载Pyfunc返回的Numpy array时,MindSpore框架将执行Numpy array到MindSpre Tensor的转换,假设Numpy array所指向的内存被释放,可能会发生内存拷贝的错误。举例如下: + +在__getitem__函数中执行Numpy array - MindSpore Tensor - Numpy array的就地转换。其中Tensor tensor和Numpy array ndarray_1共享同一块内存,Tensor tensor在__getitem__函数退出时超出作用域,其所指向的内存将被释放。 +class RandomAccessDataset: + def __init__(self): + pass + + def __getitem__(self, item): + ndarray = np.zeros((544, 1056, 3)) + tensor = Tensor.from_numpy(ndarray) + ndarray_1 = tensor.asnumpy() + return ndarray_1 + + def __len__(self): + return 8 + +data1 = ds.GeneratorDataset(RandomAccessDataset(), [""data""]) + + + +忽略上面例子中的循环转换,在__getitem__函数退出时,Tensor对象tensor被释放,和其共享同一块内存的Numpy array对象ndarray_1变成未知状态,为了规避此问题可以直接使用deepcopy函数为将返回的Numpy array对象ndarray_2申请独立的内存。 +class RandomAccessDataset: + def __init__(self): + pass + + def __getitem__(self, item): + ndarray = np.zeros((544, 1056, 3)) + tensor = Tensor.from_numpy(ndarray) + ndarray_1 = tensor.asnumpy() + ndarray_2 = copy.deepcopy(ndarray_1) + return ndarray_2 + + def __len__(self): + return 8 + +data1 = ds.GeneratorDataset(RandomAccessDataset(), [""data""]) + + + + + +",数据处理,Dataset +"Q: 请问使用MindSpore如何实现多尺度训练? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 在多尺度训练过程中,使用不同shape调用Cell对象的时候,会自动根据不同shape编译并调用不同的图,从而实现多尺度的训练。要注意多尺度训练只支持非数据下沉模式,不能支持数据下沉的训练方式。可以参考yolov3的多尺度训练实现。 + +",执行问题, +"Q: 如果MindSpore的requires_grad=False的tensor转化为numpy类型进行处理然后再转化会tensor,会对计算图和反向传播有影响吗? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 在PyNative模式下,如果中间使用numpy计算,会导致梯度传递中断,requires_grad=False的场景下,如果该tensor的反向传播不传给其他参数使用,是没有影响的;如果requires_grad=True的场景下,是有影响的。 + +",执行问题,PyNative +"Q: 请问怎样实现类似torch.nn.functional.linear()那样能够对全连接层weight、bias进行修改,应该如何操作? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: MindSpore与torch.nn.functional.linear()功能最接近的接口就是nn.Dense了。nn.Dense能指定weight和bias的初始值,后续的变化是由优化器自动更新的。训练过程中,用户不需要主动修改这两个参数的值。 + +",执行问题, +"Q: 使用MindSpore在模型保存后生成的.meta文件作用是什么,可以用.meta文件导入图结构吗? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 这里的.meta文件是编译好的图结构,但是目前并不支持直接导入这种结构。如果不知道图结构的情况下想要导入网络,还是需要用MindIR格式的文件。 + +",执行问题,MindIR +"Q: 请问yolov4-tiny-3l.weights模型文件可以直接转换成MindSpore模型吗? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 不能的,需要把其他框架训练好的参数转换成MindSpore的格式,才能转成MindSpore的模型。 + +",执行问题, +"Q: 使用MindSpore进行model.train的时候进行了如下设置,为什么会报错呢? +model.train(1, dataset, callbacks=LossMonitor(1), dataset_sink_mode=True) +model.train(1, dataset, callbacks=LossMonitor(1), dataset_sink_mode=False) + + +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 因为在已经设置为下沉模式的情况下,就不能再设置为非下沉了,是运行机制上的限制。 + +",执行问题,dataset、model、Loss +"Q: 使用MindSpore训练模型在eval阶段,需要注意什么?能够直接加载网络和参数吗?需要在Model中使用优化器吗? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 在eval阶段主要看需要什么,比如图像分类任务eval网络的输出是各个类的概率值,与对应标签计算acc。 +大多数情况是可以直接复用训练的网络和参数的,需要注意的是需要设置推理模式。 +net.set_train(False) + + +在eval阶段不需要优化器,但是需要使用MindSpore的model.eval接口的话需要配置一下loss function,如: +# 定义模型 +model = Model(net, loss_fn=loss, metrics={'top_1_accuracy', 'top_5_accuracy'}) +# 评估模型 +res = model.eval(dataset) + + + +",执行问题,dataset、eval、Model、loss +"Q: 如何使用SGD里的param_group来实现学习率的衰减? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 如果需要按照epoch来变化,可以使用Dynamic LR,把其中的step_per_epoch设置成step_size,如果需要按照step来变化,可以把其中的step_per_epoch设置成1,也可以用LearningRateSchedule。 + +",执行问题,SGD +"Q: MindSpore如何进行参数(如dropout值)修改? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 在构造网络的时候可以通过 if self.training: x = dropput(x),推理时,执行前设置network.set_train(mode_false),就可以不使用dropout,训练时设置为True就可以使用dropout。 + +",执行问题, +"Q: 如何查看模型参数量? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 可以直接加载CheckPoint统计,可能额外统计了动量和optimizer中的变量,需要过滤下相关变量。 +您可以参考如下接口统计网络参数量: +def count_params(net): + """"""Count number of parameters in the network + Args: + net (mindspore.nn.Cell): Mindspore network instance + Returns: + total_params (int): Total number of trainable params + """""" + total_params = 0 + for param in net.trainable_params(): + total_params += np.prod(param.shape) + return total_params + + +具体脚本链接。 + +",执行问题, +"Q: 如何在训练过程中监控loss在最低的时候并保存训练参数? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 可以自定义一个Callback。参考ModelCheckpoint的写法,此外再增加判断loss的逻辑: +class EarlyStop(Callback): + def __init__(self): + self.loss = None + def step_end(self, run_context): + loss = ****(get current loss) + if (self.loss == None or loss < self.loss): + self.loss = loss + # do save ckpt + + + +",执行问题,Model、loss +"Q: 使用nn.Conv2d时,怎样获取期望大小的feature map? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: Conv2d shape推导方法可以参考这里,Conv2d的pad_mode改成same,或者可以根据Conv2d shape推导公式自行计算pad,想要使得shape不变,一般pad为(kernel_size-1)//2。 + +",执行问题, +"Q: 使用MindSpore可以自定义一个可以返回多个值的loss函数? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 自定义loss function后还需自定义TrainOneStepCell,实现梯度计算时sens的个数和network的输出个数相同。具体可参考: +net = Net() +loss_fn = MyLoss() +loss_with_net = MyWithLossCell(net, loss_fn) +train_net = MyTrainOneStepCell(loss_with_net, optim) +model = Model(net=train_net, loss_fn=None, optimizer=None) + + + +",执行问题,model、loss +"Q: MindSpore如何实现早停功能? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 可以自定义callback方法实现早停功能。 +例子: 当loss降到一定数值后,停止训练。 +class EarlyStop(Callback): + def __init__(self, control_loss=1): + super(EarlyStop, self).__init__() + self._control_loss = control_loss + + def step_end(self, run_context): + cb_params = run_context.original_args() + loss = cb_params.net_outputs + if loss.asnumpy() < self._control_loss: + # Stop training + run_context._stop_requested = True + +stop_cb = EarlyStop(control_loss=1) +model.train(epoch_size, ds_train, callbacks=[stop_cb]) + + + +",执行问题,model、loss +"Q: 模型已经训练好,如何将模型的输出结果保存为文本或者npy的格式? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 您好,我们网络的输出为Tensor,需要使用asnumpy()方法将Tensor转换为numpy,再进行下一步保存。具体可参考: +out = net(x) +np.save(""output.npy"", out.asnumpy()) + + + +",执行问题, +"Q: 缓存服务器异常关闭如何处理? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 缓存服务器使用过程中,会进行IPC共享内存和socket文件等系统资源的分配。若允许溢出,在磁盘空间还会存在溢出的数据文件。一般情况下,如果通过cache_admin --stop命令正常关闭服务器,这些资源将会被自动清理。 +但如果缓存服务器被异常关闭,例如缓存服务进程被杀等,用户需要首先尝试重新启动服务器,若启动失败,则应该依照以下步骤手动清理系统资源: + +删除IPC资源。 + +检查是否有IPC共享内存残留。 +一般情况下,系统会为缓存服务分配4GB的共享内存。通过以下命令可以查看系统中的共享内存块使用情况。 +$ ipcs -m +------ Shared Memory Segments -------- +key shmid owner perms bytes nattch status +0x61020024 15532037 root 666 4294967296 1 + + +其中,shmid为共享内存块id,bytes为共享内存块的大小,nattch为链接到该共享内存块的进程数量。nattch不为0表示仍有进程使用该共享内存块。在删除共享内存前,需要停止使用该内存块的所有进程。 + +删除IPC共享内存。 +找到对应的共享内存id,并通过以下命令删除。 +ipcrm -m {shmid} + + + + + +删除socket文件。 +一般情况下,socket文件位于/tmp/mindspore/cache。进入文件夹,执行以下命令删除socket文件。 +rm cache_server_p{port_number} + + +其中port_number为用户创建缓存服务器时指定的端口号,默认为50052。 + +删除溢出到磁盘空间的数据文件。 +进入启用缓存服务器时指定的溢出数据路径。通常,默认溢出路径为/tmp/mindspore/cache。找到路径下对应的数据文件夹并逐一删除。 + + + +",执行问题, +"Q: 通过Hub可以使用GPU加载vgg16模型以及是否可以做迁移模型吗? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 请手动修改如下两处参数即可: +# 增加**kwargs参数: 如下 +def vgg16(num_classes=1000, args=None, phase=""train"", **kwargs): + + +# 增加**kwargs参数: 如下 +net = Vgg(cfg['16'], num_classes=num_classes, args=args, batch_norm=args.batch_norm, phase=phase, **kwargs) + + + +",执行问题,GPU +"Q: 如何得到VGG模型中间层特征? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 你好,获取网络中间层的特征,其实跟具体框架没有太大关系了。torchvison里定义的vgg模型,可以通过features字段获取”中间层特征”,torchvison的vgg源码如下: +class VGG(nn.Module): + + def __init__(self, features, num_classes=1000, init_weights=True): + super(VGG, self).__init__() + self.features = features + self.avgpool = nn.AdaptiveAvgPool2d((7, 7)) + + +在MindSpore的ModelZoo里定义的vgg16,可以通过layers字段获取,如下: +network = vgg16() +print(network.layers) + + + +",执行问题,Model、ModelZoo +"Q: 使用MindSpore进行模型训练时,CTCLoss的输入参数有四个: inputs, labels_indices, labels_values, sequence_length,如何使用CTCLoss进行训练? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 定义的model.train接口里接收的dataset可以是多个数据组成,形如(data1, data2, data3, …),所以dataset是可以包含inputs,labels_indices,labels_values,sequence_length的信息的。只需要定义好相应形式的dataset,传入model.train里就可以。具体的可以了解下相应的数据处理接口 + +",执行问题,dataset、model、Loss、npu +"Q: 模型转移时如何把PyTorch的权重加载到MindSpore中? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 首先输入PyTorch的pth文件,以ResNet-18为例,MindSpore的网络结构和PyTorch保持一致,转完之后可直接加载进网络,这边参数只用到BN和Conv2D,若有其他层ms和PyTorch名称不一致,需要同样的修改名称。 + +",执行问题,PyTorch +"Q: MindSpore有哪些现成的推荐类或生成类网络或模型可用? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 目前正在开发Wide & Deep、DeepFM、NCF等推荐类模型,NLP领域已经支持Bert_NEZHA,正在开发MASS等模型,用户可根据场景需要改造为生成类网络,可以关注MindSpore ModelZoo。 + +",执行问题,Model、NLP、ModelZoo +"Q: 如何使用MindSpore拟合\(f(x)=a \times sin(x)+b\)这类函数? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 以下拟合案例是基于MindSpore线性拟合官方案例改编而成。 +# The fitting function is: f(x)=2*sin(x)+3. +import numpy as np +from mindspore import dataset as ds +from mindspore.common.initializer import Normal +from mindspore import nn +import mindspore as ms + +ms.set_context(mode=ms.GRAPH_MODE, device_target=""CPU"") + +def get_data(num, w=2.0, b=3.0): + # f(x)=w * sin(x) + b + # f(x)=2 * sin(x) +3 + for i in range(num): + x = np.random.uniform(-np.pi, np.pi) + noise = np.random.normal(0, 1) + y = w * np.sin(x) + b + noise + yield np.array([np.sin(x)]).astype(np.float32), np.array([y]).astype(np.float32) + +def create_dataset(num_data, batch_size=16, repeat_size=1): + input_data = ds.GeneratorDataset(list(get_data(num_data)), column_names=['data','label']) + input_data = input_data.batch(batch_size) + input_data = input_data.repeat(repeat_size) + return input_data + +class LinearNet(nn.Cell): + def __init__(self): + super(LinearNet, self).__init__() + self.fc = nn.Dense(1, 1, Normal(0.02), Normal(0.02)) + + def construct(self, x): + x = self.fc(x) + return x + +if __name__ == ""__main__"": + num_data = 1600 + batch_size = 16 + repeat_size = 1 + lr = 0.005 + momentum = 0.9 + + net = LinearNet() + net_loss = nn.loss.MSELoss() + opt = nn.Momentum(net.trainable_params(), lr, momentum) + model = ms.Model(net, net_loss, opt) + + ds_train = create_dataset(num_data, batch_size=batch_size, repeat_size=repeat_size) + + model.train(1, ds_train, callbacks=ms.LossMonitor(), dataset_sink_mode=False) + + print(net.trainable_params()[0], ""\n%s"" % net.trainable_params()[1]) + + + +",执行问题,CPU、dataset、model、loss、GRAPH、npu +"Q: 如何使用MindSpore拟合\(f(x)=ax^2+bx+c\)这类的二次函数? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 以下代码引用自MindSpore的官方教程的代码仓 +在以下几处修改即可很好的拟合\(f(x)=ax^2+bx+c\): + +数据集生成。 +拟合网络。 +优化器。 + +修改的详细信息如下,附带解释。 +# Since the selected optimizer does not support CPU, so the training computing platform is changed to GPU, which requires readers to install the corresponding GPU version of MindSpore. +set_context(mode=GRAPH_MODE, device_target=""GPU"") + +# Assuming that the function to be fitted this time is f(x)=2x^2+3x+4, the data generation function is modified as follows: +def get_data(num, a=2.0, b=3.0 ,c = 4): + for i in range(num): + x = np.random.uniform(-10.0, 10.0) + noise = np.random.normal(0, 1) + # The y value is generated by the fitting target function ax^2+bx+c. + y = x * x * a + x * b + c + noise + # When a*x^2+b*x+c is fitted, a and b are weight parameters and c is offset parameter bias. The training data corresponding to the two weights are x^2 and x respectively, so the dataset generation mode is changed as follows: + yield np.array([x*x, x]).astype(np.float32), np.array([y]).astype(np.float32) + +def create_dataset(num_data, batch_size=16, repeat_size=1): + input_data = ds.GeneratorDataset(list(get_data(num_data)), column_names=['data','label']) + input_data = input_data.batch(batch_size) + input_data = input_data.repeat(repeat_size) + return input_data + +class LinearNet(nn.Cell): + def __init__(self): + super(LinearNet, self).__init__() + # Because the full join function inputs two training parameters, the input value is changed to 2, the first Nomral(0.02) will automatically assign random weights to the input two parameters, and the second Normal is the random bias. + self.fc = nn.Dense(2, 1, Normal(0.02), Normal(0.02)) + + def construct(self, x): + x = self.fc(x) + return x + +if __name__ == ""__main__"": + num_data = 1600 + batch_size = 16 + repeat_size = 1 + lr = 0.005 + momentum = 0.9 + + net = LinearNet() + net_loss = nn.loss.MSELoss() + # RMSProp optimalizer with better effect is selected for quadratic function fitting, Currently, Ascend and GPU computing platforms are supported. + opt = nn.RMSProp(net.trainable_params(), learning_rate=0.1) + model = Model(net, net_loss, opt) + + ds_train = create_dataset(num_data, batch_size=batch_size, repeat_size=repeat_size) + model.train(1, ds_train, callbacks=LossMonitor(), dataset_sink_mode=False) + + print(net.trainable_params()[0], ""\n%s"" % net.trainable_params()[1]) + + + +",执行问题,GPU、CPU、Ascend、dataset、model、loss、GRAPH、npu +"Q: mindspore/tests下怎样执行单个ut用例? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: ut用例通常需要基于debug版本的MindSpore包,官网并没有提供。可以基于源码使用sh build.sh编译,然后通过pytest指令执行,debug模式编包不依赖后端。编译选项sh build.sh -t on,用例执行可以参考tests/runtest.sh脚本。 + +",执行问题, +"Q: 在Ascend平台上,执行用例有时候会报错run task error,如何获取更详细的日志帮助问题定位? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 使用msnpureport工具设置device侧日志级别,工具位置在: /usr/local/Ascend/latest/driver/tools/msnpureport。 + +全局级别: + +/usr/local/Ascend/latest/driver/tools/msnpureport -g info + + + +模块级别: + +/usr/local/Ascend/latest/driver/tools/msnpureport -m SLOG:error + + + +Event级别: + +/usr/local/Ascend/latest/driver/tools/msnpureport -e disable/enable + + + +多device id级别: + +/usr/local/Ascend/latest/driver/tools/msnpureport -d 1 -g warning + + +假设deviceID的取值范围是[0-7],device0-device3和device4-device7分别在一个os上。其中device0-device3共用一个日志配置文件;device4-device7共用一个配置文件。如果修改了device0-device3中的任意一个日志级别,其他device的日志级别也会被修改。如果修改了device4-device7中的任意一个日志级别,其他device的日志级别也会被修改。 +Driver包安装以后(假设安装路径为/usr/local/HiAI,在Windows环境下,msnpureport.exe执行文件在C:\ProgramFiles\Huawei\Ascend\Driver\tools\目录下),假设用户在/home/shihangbo/目录下直接执行命令行,则Device侧日志被导出到当前目录下,并以时间戳命名文件夹进行存放。 + +",执行问题,Windows、Ascend、npu +"Q: 使用Ascend平台执行训练过程,出现报错: Out of Memory!!! total[3212254720] (dynamic[0] memory poll[524288000]) malloc[32611480064] failed! 如何解决? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 此问题属于内存占用过多导致的内存不够问题,可能原因有两种: + +batch_size的值设置过大。解决办法: 将batch_size的值设置减小。 +引入了异常大的Parameter,例如单个数据shape为[640,1024,80,81],数据类型为float32,单个数据大小超过15G,这样差不多大小的两个数据相加时,占用内存超过3*15G,容易造成Out of Memory。解决办法: 检查参数的shape,如果异常过大,减少shape。 +如果以上操作还是未能解决,可以上官方论坛发帖提出问题,将会有专门的技术人员帮助解决。 + + +",执行问题,Ascend +"Q: 如何在训练神经网络过程中对计算损失的超参数进行改变? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 您好,很抱歉暂时还未有这样的功能。目前只能通过训练–>重新定义优化器–>训练,这样的过程寻找较优的超参数。 + +",执行问题, +"Q: 运行应用时报错error while loading shared libraries: libge_compiler.so: cannot open shared object file: No such file or directory怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 安装MindSpore所依赖的Ascend 310 AI处理器配套软件包时,CANN包不能安装nnrt版本,而是需要安装功能完整的toolkit版本。 + +",执行问题,Ascend、ib +"Q: MindSpore代码里面的model_zoo/official/cv/resnet/train.py中set_ps_context(enable_ps=True)为什么一定要在init之前设置 +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: MindSpore Ascend模式下,如果先调用init,那么会为所有的进程都分配卡,但是parameter server训练模式下server是不需要分配卡的,那么worker和server就会去使用同一块卡,导致会报错: HCCL dependent tsd is not open。 + +",执行问题,Ascend、model +"Q: 在CPU ARM平台上进行resnet50训练,内存持续增长怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 在CPU ARM上进行resnet50训练时,部分算子的实现是基于oneDNN库,oneDNN库中是基于libgomp库实现多线程并行,当前libgomp存在多个并行域配置的线程数不同时有内存占用持续增长的问题。可通过全局配置统一的线程数来控制内存的持续增长。再综合性能上的考虑,建议统一配置为物理核数的1/4,比如export OMP_NUM_THREADS=32。 + +",执行问题,ARM、CPU、ib +"Q: 为什么在Ascend平台执行模型时报流超限的错误? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 流表示一个操作队列,同一条流上的任务按序串行执行,不同流之间可以并行执行。网络中的各种操作会生成Task并被分配到流上,以控制任务执行的并发方式。由于Ascend平台对同一条流上的的任务数存在限制,超限的任务会分配新流,且MindSpore框架的多种并行方式也会分配新流,例如通信算子并行,因此当分配流的数目超过Ascend平台的资源限制就会报流超限的错误。参考解决方案: + +减小网络模型规模 +减少网络中通信算子的使用 +减少网络中的条件控制语句 + + +",执行问题,Ascend +"Q: 在Ascend平台上,日志中出现报错“Ascend error occurred, error message:”且跟随了一个错误码,如“E40011”,如何查找出现错误码的原因? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 当出现“Ascend error occurred, error message:”时,说明昇腾CANN相关模块出现异常,上报了错误日志。 +此时错误码后有异常的错误信息。如果需要该异常更详细的可能原因和处理方法,请参考对应昇腾版本文档的《Error Code故障处理》部分,如昇腾CANN社区版(5.0.3 alpha 002)(训练) Error Code故障处理。 + +",执行问题,Ascend +"Q: 训练nlp类网络,当使用第三方组件gensim时,可能会报错: ValueError,如何解决? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 以下为报错信息: +>>> import gensim +Traceback (most recent call last): + File """", line 1, in + File ""/home/miniconda3/envs/ci39_cj/lib/python3.9/site-packages/gensim/__init__.py"", line 11, in + from gensim import parsing, corpora, matutils, interfaces, models, similarities, utils # noqa:F401 + File ""/home/miniconda3/envs/ci39_cj/lib/python3.9/site-packages/gensim/corpora/__init__.py"", line 6, in + from .indexedcorpus import IndexedCorpus # noqa:F401 must appear before the other classes + File ""/home/miniconda3/envs/ci39_cj/lib/python3.9/site-packages/gensim/corpora/indexedcorpus.py"", line 14, in + from gensim import interfaces, utils + File ""/home/miniconda3/envs/ci39_cj/lib/python3.9/site-packages/gensim/interfaces.py"", line 19, in + from gensim import utils, matutils + File ""/home/miniconda3/envs/ci39_cj/lib/python3.9/site-packages/gensim/matutils.py"", line 1024, in + from gensim._matutils import logsumexp, mean_absolute_difference, dirichlet_expectation + File ""gensim/_matutils.pyx"", line 1, in init gensim._matutils +ValueError: numpy.ndarray size changed, may indicate binary incompatibility. Expected 88 from C header, got 80 from PyObject + + +报错原因请参考gensim官网,或者numpy官网: +解决方案: +方法一: 重新安装numpy及gensim, 执行命令: pip uninstall gensim numpy -y && pip install numpy gensim ; +方法二: 如果还是有问题,请删除wheel安装包的缓存文件,然后执行方法一(wheel安装包缓存目录为: ~/.cache/pip/wheels)。 + +",执行问题,conda、model、nlp、ib +"Q:运行文档示例代码的过程中,遇到matplotlib.pyplot.show()或plt.show()无法执行怎么处理? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 首先确认是否安装matplotlib,如果没有安装,可以在命令行中执行pip install matplotlib进行安装。 +其次由于matplotlib.pyplot.show()的作用是以图形化方式展示,所以需要运行系统支持图形展示功能,如果系统不能支持图形展示,需要将该 +图形展示的命令行注释后再运行,不影响整体代码的运行结果。 + +",执行问题,ib +"Q: 使用文档中提供的在线运行时,遇到运行失败该如何处理? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 需要确认有做以下准备工作。 + +首先,需要通过华为云账号登录ModelArts。 +其次,注意教程文档的标签中列举的硬件环境,以及样例代码中配置的硬件环境,是Ascend、GPU还是CPU,由于登录后默认使用的硬件环境是CPU,Ascend环境和GPU环境需要用户手动点击切换。 +最后,确保当前Kernel为MindSpore。 + +完成上述步骤后,就可以运行文档了。 +具体的操作过程可以参考基于ModelArts在线体验MindSpore。 + +",执行问题,GPU、CPU、Ascend、Model、ModelArts +"Q: 静态图下使用除法结果未报错,动态图下使用除法结果却报错? +",https://mindspore.cn/docs/zh-CN/master/faq/implement_problem.html,"A: 在静态图模式下,由于使用的是静态编译,对于算子输出结果的数据类型是在图编译阶段确定的。 +例如如下代码在静态图模式下执行,输入数据的类型都为int类型,根据静态图编译,其输出结果也是int类型。 +import mindspore as ms +from mindspore import nn + +ms.set_context(mode=ms.GRAPH_MODE, device_target=""CPU"") + +class MyTest(nn.Cell): + def __init__(self): + super(MyTest, self).__init__() + + def construct(self, x, y): + return x / y +x = 16 +y = 4 +net = MyTest() +output = net(x, y) +print(output, type(output)) + + +输出结果: +4 + + +修改执行模式,将GRAPH_MODE修改成PYNATIVE_MODE,由于在动态图模式下使用的Python语法执行,Python语法对任意除法输出的类型都是float类型,因此执行结果如下: +4.0 + + +因此在后续算子明确需要使用int的场景下,建议使用Python的整除符号//。 + +",执行问题,CPU、PYNATIVE、GRAPH +"Q: 编译时报错“’self.xx’ should be defined in the class ‘init’ function.”怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/network_compilation.html,"A: 如果在construct函数里,想对类成员self.xx赋值,那么self.xx必须已经在__init__函数中被定义为Parameter类型,其他类型则不支持。局部变量xx不受这个限制。 + +",编译, +"Q: 编译时报错“This comparator ‘AnyValue’ is not supported. For statement ‘is’, only support compare with ‘None’, ‘False’ or ‘True’”怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/network_compilation.html,"A: 对于语法is 或 is not而言,当前MindSpore仅支持与True、False和None的比较。暂不支持其他类型,如字符串等。 + +",编译, +"Q: 编译时报错“MindSpore does not support comparison with operators more than one now, ops size =2”怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/network_compilation.html,"A: 对于比较语句,MindSpore最多支持一个操作数。例如不支持语句1 < x < 3,请使用1 < x and x < 3的方式代替。 + +",编译, +"Q: 编译时报错“TypeError: The function construct need 1 positional argument and 0 default argument, but provided 2”怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/network_compilation.html,"A: 网络的实例被调用时,会执行construct方法,然后会检查construct方法需要的参数个数和实际传入的参数个数,如果不一致则会抛出以上异常。 +请检查脚本中调用网络实例时传入的参数个数,和定义的网络中construct函数需要的参数个数是否一致。 + +",编译, +"Q: 编译时报错“Type Join Failed”或“Shape Join Failed”怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/network_compilation.html,"A: 在前端编译的推理阶段,会对节点的抽象类型(包含type、shape等)进行推导,常见抽象类型包括AbstractScalar、AbstractTensor、AbstractFunction、AbstractTuple、AbstractList等。在一些场景比如多分支场景,会对不同分支返回值的抽象类型进行join合并,推导出返回结果的抽象类型。如果抽象类型不匹配,或者type/shape不一致,则会抛出以上异常。 +当出现类似“Type Join Failed: dtype1 = Float32, dtype2 = Float16”的报错时,说明数据类型不一致,导致抽象类型合并失败。根据提供的数据类型和代码行信息,可以快速定位出错范围。此外,报错信息中提供了具体的抽象类型信息、节点信息,可以通过analyze_fail.dat文件查看MindIR信息,定位解决问题。关于MindIR的具体介绍,可以参考MindSpore IR(MindIR)。代码样例如下: +import numpy as np +import mindspore as ms +import mindspore.ops as ops +from mindspore import nn + +ms.set_context(mode=GRAPH_MODE) +class Net(nn.Cell): + def __init__(self): + super().__init__() + self.relu = ops.ReLU() + self.cast = ops.Cast() + + def construct(self, x, a, b): + if a > b: # if的两个分支返回值的type不一致 + return self.relu(x) # shape: (2, 3, 4, 5), dtype:Float32 + else: + return self.cast(self.relu(x), ms.float16) # shape: (2, 3, 4, 5), dtype:Float16 + +input_x = ms.Tensor(np.random.rand(2, 3, 4, 5).astype(np.float32)) +input_a = ms.Tensor(2, ms.float32) +input_b = ms.Tensor(6, ms.float32) +net = Net() +out_me = net(input_x, input_a, input_b) + + +执行结果如下: +TypeError: Cannot join the return values of different branches, perhaps you need to make them equal. +Type Join Failed: dtype1 = Float32, dtype2 = Float16. +For more details, please refer to the FAQ at https://www.mindspore.cn +The abstract type of the return value of the current branch is AbstractTensor(shape: (2, 3, 4, 5), element: AbstractScalar(Type: Float16, Value: AnyValue, Shape: NoShape), value_ptr: 0x55b9f289d090, value: AnyValue), and that of the previous branch is AbstractTensor(shape: (2, 3, 4, 5), element: AbstractScalar(Type: Float32, Value: AnyValue, Shape: NoShape), value_ptr: 0x55b9f289d090, value: AnyValue). +The node is construct.6:[CNode]13{[0]: construct.6:[CNode]12{[0]: ValueNode Switch, [1]: [CNode]11, [2]: ValueNode ✓construct.4, [3]: ValueNode ✗construct.5}}, true branch: ✓construct.4, false branch: ✗construct.5 +The function call stack: +In file test.py(14)/ if a > b: + +The function call stack (See file 'analyze_fail.dat' for more details): +# 0 In file test.py(14) + if a > b: + ^ + + +当出现类似“Shape Join Failed: shape1 = (2, 3, 4, 5), shape2 = ()”的报错时,说明shape不一致,导致抽象类型合并失败。代码样例如下: +import numpy as np +import mindspore as ms +import mindspore.ops as ops +from mindspore import nn + +ms.set_context(mode=GRAPH_MODE) +class Net(nn.Cell): + def __init__(self): + super().__init__() + self.relu = ops.ReLU() + self.reducesum = ops.ReduceSum() + + def construct(self, x, a, b): + if a > b: # if的两个分支返回值的shape不一致 + return self.relu(x) # shape: (2, 3, 4, 5), dtype:Float32 + else: + return self.reducesum(x) # shape:(), dype: Float32 + +input_x = ms.Tensor(np.random.rand(2, 3, 4, 5).astype(np.float32)) +input_a = ms.Tensor(2, ms.float32) +input_b = ms.Tensor(6, ms.float32) +net = Net() +out = net(input_x, input_a, input_b) + + +执行结果如下: +ValueError: Cannot join the return values of different branches, perhaps you need to make them equal. +Shape Join Failed: shape1 = (2, 3, 4, 5), shape2 = (). +For more details, please refer to the FAQ at https://www.mindspore.cn +The abstract type of the return value of the current branch is AbstractTensor(shape: (), element: AbstractScalar(Type: Float32, Value: AnyValue, Shape: NoShape), value_ptr: 0x55658aa9b090, value: AnyValue), and that of the previous branch is AbstractTensor(shape: (2, 3, 4, 5), element: AbstractScalar(Type: Float32, Value: AnyValue, Shape: NoShape), value_ptr: 0x55658aa9b090, value: AnyValue). +The node is construct.6:[CNode]13{[0]: construct.6:[CNode]12{[0]: ValueNode Switch, [1]: [CNode]11, [2]: ValueNode ✓construct.4, [3]: ValueNode ✗construct.5}}, true branch: ✓construct.4, false branch: ✗construct.5 +The function call stack: +In file test.py(14)/ if a > b: + +The function call stack (See file 'analyze_fail.dat' for more details): +# 0 In file test.py(14) + if a > b: + ^ + + +当出现如“Type Join Failed: abstract type AbstractTensor can not join with AbstractTuple”的报错时,说明抽象类型不匹配,导致抽象类型合并失败,代码样例如下: +import mindspore.ops as ops +import mindspore as ms +from mindspore import ms_function + +x = ms.Tensor([1.0]) +y = ms.Tensor([2.0]) +grad = ops.GradOperation(get_by_list=False, sens_param=True) +sens = 1.0 + +def test_net(a, b): + return a, b + +@ms_function() +def join_fail(): + sens_i = ops.Fill()(ops.DType()(x), ops.Shape()(x), sens) # sens_i 是一个标量shape: (1), dtype:Float64, value:1.0 + # sens_i = (sens_i, sens_i) + a = grad(test_net)(x, y, sens_i) # 对输出类型为tuple(Tensor, Tensor)的test_net求梯度需要sens_i的类型同输出保持一致,但sens_i是个Tensor; 在grad前设置sens_i = (sens_i, sens_i)可以修复问题。 + return a + +join_fail() + + +执行结果如下: +TypeError: Type Join Failed: abstract type AbstractTensor cannot join with AbstractTuple. +For more details, please refer to the FAQ at https://www.mindspore.cn. +This: AbstractTensor(shape: (1), element: AbstractScalar(Type: Float32, Value: AnyValue, Shape: NoShape), value_ptr: 0x56458a351ad0, value: Tensor(shape=[1], dtype=Float32, value=[ 1.00000000e+00])), other: AbstractTuple{element[0]: AbstractTensor(shape: (1), element: AbstractScalar(Type: Float32, Value: AnyValue, Shape: NoShape), value_ptr: 0x564583e3fa90, value: Tensor(shape=[1], dtype=Float32, value=[ 1.00000000e+00])), element[1]: AbstractTensor(shape: (1), element: AbstractScalar(Type: Float32, Value: AnyValue, Shape: NoShape), value_ptr: 0x564583cb00b0, value: Tensor(shape=[1], dtype=Float32, value=[ 2.00000000e+00])), sequence_nodes: {test_net.3:[CNode]4{[0]: ValueNode MakeTuple, [1]: a, [2]: b}, elements_use_flags: {ptr: 0x5645cbc500c0, value: [const vector][1, 1]}}} +The function call stack (See file 'analyze_fail.dat' for more details): +# 0 In file test.py(16) + a = grad(test_net)(x, y, sens_i) + ^ + + + +",编译,MindIR、GRAPH、npu +"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,例如: +class BpropUserDefinedNet(nn.Cell): + def __init__(self): + super(BpropUserDefinedNet, self).__init__() + self.zeros_like = P.ZerosLike() + + def construct(self, x, y): + return x + y + + def bprop(self, x, y, out, dout): + return self.zeros_like(out), self.zeros_like(out) + + + +Q: 编译时报错“There isn’t any branch that can be evaluated”怎么办",https://mindspore.cn/docs/zh-CN/master/faq/network_compilation.html,,编译,eval、npu +Q: 编译时报错“There isn’t any branch that can be evaluated”怎么办,https://mindspore.cn/docs/zh-CN/master/faq/network_compilation.html,"? +当出现There isn’t any branch that can be evaluated 时,说明代码中可能出现了无穷递归或者时死循环,导致if条件的每一个分支都无法推导出正确的类型和维度信息。 +例如代码 +import mindspore as ms +from mindspore import ms_function + +ZERO = ms.Tensor([0], ms.int32) +ONE = ms.Tensor([1], ms.int32) +@ms_function +def f(x): + y = ZERO + if x < 0: + y = f(x - 3) + elif x < 3: + y = x * f(x - 1) + elif x < 5: + y = x * f(x - 2) + else: + y = f(x - 4) + z = y + 1 + return z + +def test_endless(): + ms.set_context(mode=ms.GRAPH_MODE) + x = ms.Tensor([5], ms.int32) + f(x) + + + +其中f(x)由于每一个if分支都没办法推导出正确的类型信息导致失败。 + +",编译,eval、GRAPH +,https://mindspore.cn/docs/zh-CN/master/faq/network_compilation.html,"A: 用户自定义的Cell的反向传播函数bprop,它的输入需要包含正向网络的输入,以及out和dout,例如: +class BpropUserDefinedNet(nn.Cell): + def __init__(self): + super(BpropUserDefinedNet, self).__init__() + self.zeros_like = P.ZerosLike() + + def construct(self, x, y): + return x + y + + def bprop(self, x, y, out, dout): + return self.zeros_like(out), self.zeros_like(out) + + + +Q: 编译时报错“There isn’t any branch that can be evaluated”怎么办? +当出现There isn’t any branch that can be evaluated 时,说明代码中可能出现了无穷递归或者时死循环,导致if条件的每一个分支都无法推导出正确的类型和维度信息。 +例如代码 +import mindspore as ms +from mindspore import ms_function + +ZERO = ms.Tensor([0], ms.int32) +ONE = ms.Tensor([1], ms.int32) +@ms_function +def f(x): + y = ZERO + if x < 0: + y = f(x - 3) + elif x < 3: + y = x * f(x - 1) + elif x < 5: + y = x * f(x - 2) + else: + y = f(x - 4) + z = y + 1 + return z + +def test_endless(): + ms.set_context(mode=ms.GRAPH_MODE) + x = ms.Tensor([5], ms.int32) + f(x) + + + +其中f(x)由于每一个if分支都没办法推导出正确的类型信息导致失败。 + +Q: 编译时报错”Exceed function call depth limit 1000”怎么办? +当出现Exceed function call depth limit 1000 时,说明代码中出现了无穷递归死循环,或者是代码过于复杂,类型推导过程中导致栈深度超过设置的最大深度。 +此时可以通过设置set_context(max_call_depth = value)这样的方式更改栈的最大深度,并考虑简化代码逻辑或者检查代码中是否存在无穷递归或死循环。 +此外设置max_call_depth = value 虽然可以改变MindSpore的递归深度,但是此时也可能会超过系统栈的最大深度而出现段错误。此时可能还需要设置将系统栈深度进行设置。 + +",编译,eval、GRAPH +"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.”是什么原因? +",https://mindspore.cn/docs/zh-CN/master/faq/network_compilation.html,"A: MindSpore编译网络时通过inspect.getsourcelines(self.fn)获取网络代码所在的文件,如果网络是编辑在命令行中的临时代码,那么会出现如标题所示的报错,需要将网络写在Python文件中去执行才能避免该错误。 + +",编译, +"Q: 报错提示中的“Corresponding forward node candidate:”或“Corresponding code candidate:”是什么意思? +",https://mindspore.cn/docs/zh-CN/master/faq/network_compilation.html,"A: “Corresponding forward node candidate:”为关联的正向网络中的代码,表示该反向传播算子与该正向代码对应。“Corresponding code candidate:”表示该算子是由这些代码融合而来,其中分符“-”用以区分不同的代码。 +例如: + +算子FusionOp_BNTrainingUpdate_ReLUV2报错,打印了如下的代码行: +Corresponding code candidate: + - In file /home/workspace/mindspore/build/package/mindspore/nn/layer/normalization.py(212)/ return self.bn_train(x,/ + In file /home/workspace/mindspore/tests/st/tbe_networks/resnet.py(265)/ x = self.bn1(x)/ + In file /home/workspace/mindspore/build/package/mindspore/nn/wrap/cell_wrapper.py(109)/ out = self._backbone(data)/ + In file /home/workspace/mindspore/build/package/mindspore/nn/wrap/cell_wrapper.py(356)/ loss = self.network(*inputs)/ + In file /home/workspace/mindspore/build/package/mindspore/train/dataset_helper.py(98)/ return self.network(*outputs)/ + - In file /home/workspace/mindspore/tests/st/tbe_networks/resnet.py(266)/ x = self.relu(x)/ + In file /home/workspace/mindspore/build/package/mindspore/nn/wrap/cell_wrapper.py(109)/ out = self._backbone(data)/ + In file /home/workspace/mindspore/build/package/mindspore/nn/wrap/cell_wrapper.py(356)/ loss = self.network(*inputs)/ + In file /home/workspace/mindspore/build/package/mindspore/train/dataset_helper.py(98)/ return self.network(*outputs)/ + + +第一个分隔符的代码调用栈指向了网络脚本文件中第265行的“x = self.bn1(x)”,第二个分隔符的代码调用栈指向了网络脚本文件中第266行的“x = self.relu(x)”。可知,该算子FusionOp_BNTrainingUpdate_ReLUV2由这两行代码融合而来。 + +算子Conv2DBackpropFilter报错,打印了如下的代码行: +In file /home/workspace/mindspore/build/package/mindspore/ops/_grad/grad_nn_ops.py(65)/ dw = filter_grad(dout, x, w_shape)/ +Corresponding forward node candidate: + - In file /home/workspace/mindspore/build/package/mindspore/nn/layer/conv.py(266)/ output = self.conv2d(x, self.weight)/ + In file /home/workspace/mindspore/tests/st/tbe_networks/resnet.py(149)/ out = self.conv1(x)/ + In file /home/workspace/mindspore/tests/st/tbe_networks/resnet.py(195)/ x = self.a(x)/ + In file /home/workspace/mindspore/tests/st/tbe_networks/resnet.py(270)/ x = self.layer2(x)/ + In file /home/workspace/mindspore/build/package/mindspore/nn/wrap/cell_wrapper.py(109)/ out = self._backbone(data)/ + In file /home/workspace/mindspore/build/package/mindspore/nn/wrap/cell_wrapper.py(356)/ loss = self.network(*inputs)/ + In file /home/workspace/mindspore/build/package/mindspore/train/dataset_helper.py(98)/ return self.network(*outputs)/ + + +第一行是该算子的相应源码,该算子是反向算子,故由MindSpore实现。第二行提示此算子有关联的正向节点,第四行则指向了网络脚本文件第149行的“out = self.conv1(x)”。综上可知,算子Conv2DBackpropFilter是一个反向算子,相应的正向节点是一个卷积算子。 + + + +",编译,dataset、loss、npu +"Q: 什么是“JIT Fallback”?编译时报错“Should not use Python object in runtime”怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/network_compilation.html,"A: JIT Fallback从静态图的角度出发考虑静态图和动态图的统一。通过JIT Fallback特性,静态图可以支持尽量多的动态图语法,使得静态图提供接近动态图的语法使用体验。JIT Fallback的环境变量开关是DEV_ENV_ENABLE_FALLBACK,默认使用JIT Fallback。 +当出现“Should not use Python object in runtime”和“We suppose all nodes generated by JIT Fallback would not return to outside of graph”的报错信息时,说明静态图模式代码中出现了错误使用语法。JIT Fallback处理不支持的语法表达式时,将会生成相应的节点,并在编译时阶段完成推导和执行,否则这些节点传递到运行时后会引发报错。当前JIT Fallback有条件地支持Graph模式的部分常量场景,同时需要符合MindSpore的编程语法,编写代码时请参考静态图语法支持。 +例如,在调用第三方库NumPy时,JIT Fallback支持np.add(x, y)和Tensor(np.add(x, y))的语法,但MindSpore不支持NumPy类型的返回值,将会出现报错。代码样例如下: +import numpy as np +import mindspore.nn as nn +import mindspore as ms + +ms.set_context(mode=ms.GRAPH_MODE) + +class Net(nn.Cell): + def construct(self, x, y): + out = np.add(x, y) + return out + +net = Net() +out = net(1, 1) + + +执行结果如下: +RuntimeError: mindspore/ccsrc/pipeline/jit/validator.cc:139 ValidateValueNode] Should not use Python object in runtime, node: ValueNode InterpretedObject: '2' + +We suppose all nodes generated by JIT Fallback not return to outside of graph. + +# In file test.py(9) + out = np.add(x, y) + ^ + + +出现JIT Fallback相关的报错时,请根据静态图语法支持以及报错代码行,重新检视代码语法并修改。如果需要关闭JIT Fallback,可以设置export DEV_ENV_ENABLE_FALLBACK=0。 +",编译,pipeline、eVal、graph +"Q: 编译时报错“Operator[AddN] input(kNumberTypeBool,kNumberTypeBool) output(kNumberTypeBool) is not support. This error means the current input type is not supported, please refer to the MindSpore doc for supported types.”怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/network_compilation.html,"A: MindSpore当前对数据类型为bool的Tensor[后续简称Tensor(bool)]支持能力较弱,仅有少量算子支持Tensor(bool)类型的数据参与运算。若在正向图中使用了支持Tensor(bool)类型的算子且正向图语法正确,由于反向图求解全导数会引入AddN,AddN不支持Tensor(bool)类型,反向图运行就会抛出该异常。 +例如代码: +from mindspore import ops, ms_function +import mindspore as ms + +ms.set_context(save_graphs=True, save_graphs_path='graph_path') + +@ms_function +def test_logic(x, y): + z = x and y + return z and x + +x = ms.Tensor(True, ms.bool_) +y = ms.Tensor(True, ms.bool_) +grad = ops.GradOperation(get_all=True) +grad_net = grad(test_logic) +out = grad_net(x, y) + + +上述代码正向处理可以用公式表示为:r = f(z, x), z = z(x, y) 对应的全导数公式为:dr/dx = df/dz * dz/dx + df/dx, 函数f(z,x)和z(x,y)均为逻辑运算符and; 正向图中的and算子支持Tensor(bool)类型,反向图求全导数时引入的AddN不支持Tensor(bool) 类型, 且该错误无法对应到具体的正向代码行。 +执行结果如下: +Traceback (most recent call last): + File ""grad_fail.py"", line 14, in + out = grad_net(x, y) + File ""/usr/local/python3.7/lib/python3.7/site-packages/mindspore/common/api.py"", line 307, in staging_specialize + out = _MindsporeFunctionExecutor(func, ms_create_time, input_signature, process_obj)(*args) + File ""/usr/local/python3.7/lib/python3.7/site-packages/mindspore/common/api.py"", line 79, in wrapper + results = fn(*arg, **kwargs) + File ""/usr/local/python3.7/lib/python3.7/site-packages/mindspore/common/api.py"", line 221, in __call__ + phase = self.compile(args_list, arg_names, parse_method) + File ""/usr/local/python3.7/lib/python3.7/site-packages/mindspore/common/api.py"", line 195, in compile + self.enable_tuple_broaden) +TypeError: mindspore/ccsrc/runtime/device/cpu/kernel_select_cpu.cc:235 KernelNotSupportException] Operator[AddN] input(kNumberTypeBool,kNumberTypeBool) output(kNumberTypeBool) is not support. This error means the current input type is not supported, please refer to the MindSpore doc for supported types. +Trace: +In file /usr/local/python3.7/lib/python3.7/site-packages/mindspore/ops/composite/multitype_ops/add_impl.py(287)/ return F.addn((x, y))/ + + +若遇到这类问题请去除对Tensor(bool)类型的使用,本例中将Tensor(bool)替换为bool即可解决问题。 + +",编译,cpu、api、graph、ib、roce、npu +"Q: 编译时报错“Side Effect Invalid: found unsupported syntax in graph mode, those side effect codes would be ignored:”怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/network_compilation.html,"A: 如果在Cell.construct或者ms_function函数以及其调用的子函数里,使用了副作用算子,则要求所在函数不能直接返回常量值,包括最终返回值经过推导是常量的情况。由于函数返回常量时,编译器会优先把常量值以外的操作优化掉,导致其它操作看起来无效。对于非副作用的算子操作,忽略掉一般不会影响最终结果的正确性。但是如果包含了副作用算子的操作,忽略掉副作用算子往往跟用户期望相左。因此,对于出现函数返回值为常量,同时又包含副作用算子操作的情况,编译器会抛出异常,提示用户代码执行有可能无法符合预期,需要调整代码实现。 +例如代码: +from mindspore.nn import Cell + +class Demo(Cell): + def __init__(self): + super().__init__() + + def construct(self, x): + print('print here...') + y = x[1] + y[1] = 9 + return y + +x = [[1, 2, 3, 4], [5, 6, 7, 8]] +net = Demo() +output = net(x) +print(output) + + +上述代码y经过推导后是一个常量值,整个函数可以被优化为直接返回常量值。除此以外的操作全部被优化掉,包括print('print here...')也会在编译时被忽略掉。由于print算子是副作用算子,其行为被删除后不符合预期,因此编译器会抛出错误提示用户。 +执行结果如下: +Traceback (most recent call last): + File ""test_print_op.py"", line 20, in + output = net(x) + File ""/usr/local/python3.7/lib/python3.7/site-packages/mindspore/nn/cell.py"", line 586, in __call__ + out = self.compile_and_run(*args) + File ""/usr/local/python3.7/lib/python3.7/site-packages/mindspore/nn/cell.py"", line 964, in compile_and_run + self.compile(*inputs) + File ""/usr/local/python3.7/lib/python3.7/site-packages/mindspore/nn/cell.py"", line 937, in compile + _cell_graph_executor.compile(self, *inputs, phase=self.phase, auto_parallel_mode=self._auto_parallel_mode) + File ""/usr/local/python3.7/lib/python3.7/site-packages/mindspore/common/api.py"", line 1086, in compile + result = self._graph_executor.compile(obj, args_list, phase, self._use_vm_mode()) +RuntimeError: mindspore/ccsrc/pipeline/jit/static_analysis/evaluator.cc:127 CheckSideEffectNodes] Side Effect Invalid: Found unsupported syntax in graph mode, those side effect codes would be ignored: +----- +# No. 1: +In file test_print_op.py(11) + print('print here...') + ^ + +----- + +If a function return a const value or inferred const value, the side effect node would be ignored. +So the codes may not run as the user's expectation, please fix it. + +In this case, the const value '[[1, 2, 3, 4], [5, 6, 7, 8]]' returns: +In file test_print_op.py(10) + def construct(self, a): + ^ + +For more information about this issue, please refer to https://www.mindspore.cn/search?inputValue=Side%20Effect%20Invalid + + +若遇到这类问题请去除副作用算子的调用,或者修改函数返回值不返回常量。 +",编译,api、pipeline、eval、graph、ib、npu +"Q: 在使用ops.concat算子时,因为数据规模有点大,导致报错Error:Input and (output + workspace) num should <=192!,可以怎么处理? +",https://mindspore.cn/docs/zh-CN/master/faq/operators_compile.html,"A: 这种报错,主要为ops.concat算子提示shape过大。建议对dataset对象创建迭代器时可设置输出为numpy, 如下设置: +gallaryloader.create_dict_iterator(output_numpy=True) + + +另外在上述后处理环节(非网络计算过程中,即非construct函数里面),可以采用numpy直接计算,如采用numpy.concatenate代替上述ops.concat进行计算。 + +",编译,dataset、npu +"Q: 请问在静态图模式的construct函数里,如何把一个tensor中所含有的负数值全部去除掉? +",https://mindspore.cn/docs/zh-CN/master/faq/operators_compile.html,"A: 建议使用ops.clip_by_value接口,把负数全变成0来进行计算。 + +",编译, +"Q: TransData算子的功能是什么,能否优化性能? +",https://mindspore.cn/docs/zh-CN/master/faq/operators_compile.html,"A: TransData算子出现的场景是: 如果网络中相互连接的算子使用的数据格式不一致(如NC1HWC0),框架就会自动插入transdata算子使其转换成一致的数据格式,然后再进行计算。 华为Ascend支持5D格式运算,通过transdata算子将数据由4D转为5D以提升性能。 + +",编译,Ascend +"Q: 算子Concat拼接包含多个Tensor的元组出错,似乎传入的tensor list元素个数>=192就会报错。如果要Concat包含多个Tensor的元组,有什么较好的解决方案? +",https://mindspore.cn/docs/zh-CN/master/faq/operators_compile.html,"A: 这个昇腾算子底层规格限制一次拼接的Tensor个数不能超过192个,可以尝试分开两次进行拼接。 + +",编译, +"Q: 在使用Conv2D进行卷积定义的时候使用到了group的参数,group的值不是只需要保证可以被输入输出的维度整除即可了吗?group参数的传递方式是怎样的呢? +",https://mindspore.cn/docs/zh-CN/master/faq/operators_compile.html,"A: Conv2D算子是有这个约束条件的: 当group大于1 时,其值必须要与输入输出的通道数相等。不要使用ops.Conv2D,这个算子目前不支持group>1。目前MindSpore只有nn.Conv2D接口支持组卷积,但是有group要与输入输出的通道数相等的约束。 + +",编译, +"Q: MindSpore支持矩阵转置吗? +",https://mindspore.cn/docs/zh-CN/master/faq/operators_compile.html,"A: 支持,请参考mindspore.ops.Transpose的算子教程。 + +",编译, +"Q: 请问MindSpore能算给定任意一个tensor的方差吗? +",https://mindspore.cn/docs/zh-CN/master/faq/operators_compile.html,"A: mindspore目前暂无可以直接求出tensor方差的算子或接口。不过MindSpore有足够多的小算子可以支持用户实现这样的操作,你可以参考class Moments(Cell)来实现。 + +",编译, +"Q: nn.Embedding层与PyTorch相比缺少了Padding操作,有其余的算子可以实现吗? +",https://mindspore.cn/docs/zh-CN/master/faq/operators_compile.html,"A: 在PyTorch中padding_idx的作用是将embedding矩阵中padding_idx位置的词向量置为0,并且反向传播时不会更新padding_idx位置的词向量。在MindSpore中,可以手动将embedding的padding_idx位置对应的权重初始化为0,并且在训练时通过mask的操作,过滤掉padding_idx位置对应的Loss。 + +",编译,Loss、PyTorch +"Q: Operations中Tile算子执行到__infer__时value值为None,丢失了数值是怎么回事? +",https://mindspore.cn/docs/zh-CN/master/faq/operators_compile.html,"A: Tile算子的multiples input必须是一个常量(该值不能直接或间接来自于图的输入)。否则构图的时候会拿到一个None的数据,因为图的输入是在图执行的时候才传下去的,构图的时候拿不到图的输入数据。 +相关的资料可以看静态图语法支持。 + +",编译,npu +"Q: 使用conv2d算子将卷积核设置为(3,10),Tensor设置为[2,2,10,10],在ModelArts上利用Ascend跑,报错: FM_W+pad_left+pad_right-KW>=strideW,CPU下不报错。 +",https://mindspore.cn/docs/zh-CN/master/faq/operators_compile.html,"A: TBE(Tensor Boost Engine)算子是华为自研的Ascend算子开发工具,在TVM框架基础上扩展,进行自定义算子开发。上述问题是这个TBE算子的限制,x的width必须大于kernel的width。CPU的这个算子没有这个限制,所以不报错。 + +",编译,CPU、Ascend、Model、ModelArts +"Q: 请问MindSpore实现了反池化操作了吗?类似于nn.MaxUnpool2d 这个反池化操作? +",https://mindspore.cn/docs/zh-CN/master/faq/operators_compile.html,"A: 目前 MindSpore 还没有反池化相关的接口。用户可以通过自定义算子的方式自行开发算子,详情请见自定义算子。 + +",编译, +"Q: 使用ExpandDims算子报错: Pynative run op ExpandDims failed。具体代码: +set_context(mode=GRAPH_MODE,device_target='Ascend') +input_tensor=Tensor(np.array([[2,2],[2,2]]),mindspore.float32) +expand_dims=ops.ExpandDims() +output=expand_dims(input_tensor,0) + + +",https://mindspore.cn/docs/zh-CN/master/faq/operators_compile.html,"A: 这边的问题是选择了Graph模式却使用了PyNative的写法,所以导致报错,MindSpore支持两种运行模式,在调试或者运行方面做了不同的优化: + +PyNative模式: 也称动态图模式,将神经网络中的各个算子逐一下发执行,方便用户编写和调试神经网络模型。 +Graph模式: 也称静态图模式或者图模式,将神经网络模型编译成一整张图,然后下发执行。该模式利用图优化等技术提高运行性能,同时有助于规模部署和跨平台运行。 + + +",编译,Ascend、Pynative、GRAPH、npu +"Q: Ascend后端报错:AI CORE 和AI CPU中都找不到有效的kernel info这个Kernel Select Failed时,如何定位? +",https://mindspore.cn/docs/zh-CN/master/faq/operators_compile.html,"A: Ascend后端,算子有AI CORE算子和AI CPU算子之分,部分算子AI CORE支持,部分算子AI CPU支持,部分算子两者同时支持。根据报错信息: + +如果AI CORE候选算子信息为空,则可能是在算子check support阶段,所有的算子信息均校验未通过。可以在日志中搜索关键字CheckSupport找到未通过的原因,根据具体信息修改shape或data type, 或者找开发人员进一步定位; +如果AI CPU候选算子信息不为空,或者AI CORE和AI CPU候选算子信息都不为空,则可能是用户给到该算子的输入数据类型不在候选列表中,在选择阶段被过滤掉导致,可以根据候选列表尝试修改该算子的输入data type。 + +用户可以参考官网教程选择合适、统一的模式和写法来完成训练。 +",编译,CPU、Ascend +"Q: 请问想加载PyTorch预训练好的模型用于MindSpore模型finetune有什么方法? +",https://mindspore.cn/docs/zh-CN/master/faq/usage_migrate_3rd.html,"A: 需要把PyTorch和MindSpore的参数进行一一对应,因为网络定义的灵活性,所以没办法提供统一的转化脚本。 +一般情况下,CheckPoint文件中保存的就是参数名和参数值,调用相应框架的读取接口后,获取到参数名和数值后,按照MindSpore格式,构建出对象,就可以直接调用MindSpore接口保存成MindSpore格式的CheckPoint文件了。 +其中主要的工作量为对比不同框架间的parameter名称,做到两个框架的网络中所有parameter name一一对应(可以使用一个map进行映射),下面代码的逻辑转化parameter格式,不包括对应parameter name。 +import torch +import mindspore as ms + +def pytorch2mindspore(default_file = 'torch_resnet.pth'): + # read pth file + par_dict = torch.load(default_file)['state_dict'] + params_list = [] + for name in par_dict: + param_dict = {} + parameter = par_dict[name] + param_dict['name'] = name + param_dict['data'] = ms.Tensor(parameter.numpy()) + params_list.append(param_dict) + ms.save_checkpoint(params_list, 'ms_resnet.ckpt') + + + +",第三方框架迁移,PyTorch +"Q: 怎么将PyTorch的dataset转换成MindSpore的dataset? +",https://mindspore.cn/docs/zh-CN/master/faq/usage_migrate_3rd.html,"A: MindSpore和PyTorch的自定义数据集逻辑是比较类似的,需要用户先定义一个自己的dataset类,该类负责定义__init__,__getitem__,__len__来读取自己的数据集,然后将该类实例化为一个对象(如: dataset/dataset_generator),最后将这个实例化对象传入GeneratorDataset(mindspore用法)/DataLoader(pytorch用法),至此即可以完成自定义数据集加载了。而MindSpore在GeneratorDataset的基础上提供了进一步的map->batch操作,可以很方便的让用户在map内添加一些其他的自定义操作,并将其batch起来。 +对应的MindSpore的自定义数据集加载如下: +# 1 Data enhancement,shuffle,sampler. +class Mydata: + def __init__(self): + np.random.seed(58) + self.__data = np.random.sample((5, 2)) + self.__label = np.random.sample((5, 1)) + def __getitem__(self, index): + return (self.__data[index], self.__label[index]) + def __len__(self): + return len(self.__data) +dataset_generator = Mydata() +dataset = ds.GeneratorDataset(dataset_generator, [""data"", ""label""], shuffle=False) +# 2 Customized data enhancement +dataset = dataset.map(operations=pyFunc, {other_params}) +# 3 batch +dataset = dataset.batch(batch_size, drop_remainder=True) + + + +",第三方框架迁移,dataset、PyTorch +"Q: 其他框架的脚本或者模型怎么迁移到MindSpore? +",https://mindspore.cn/docs/zh-CN/master/faq/usage_migrate_3rd.html,"A: 关于脚本或者模型迁移,可以查询MindSpore官网中关于迁移脚本的介绍。 + +",第三方框架迁移, +"Q: MindConverter转换TensorFlow脚本报错提示terminate called after throwing an instance of 'std::system_error', what(): Resource temporarily unavailable, Aborted (core dumped) +",https://mindspore.cn/docs/zh-CN/master/faq/usage_migrate_3rd.html,"A: 该问题由TensorFlow导致。脚本转换时,需要通过TensorFlow库加载TensorFlow的模型文件,此时TensorFlow会申请相关资源进行初始化,若申请资源失败(可能由于系统进程数超过Linux最大进程数限制),TensorFlow C/C++层会出现Core Dumped问题。详细信息请参考TensorFlow官方ISSUE,如下ISSUE仅供参考: TF ISSUE 14885, TF ISSUE 37449 + +",第三方框架迁移,Linux、TensorFlow、C++ +"Q: MindConverter是否可以在ARM平台运行? +",https://mindspore.cn/docs/zh-CN/master/faq/usage_migrate_3rd.html,"A: MindConverter同时支持X86、ARM平台,若在ARM平台运行需要用户自行安装模型所需的依赖包和运行环境。 + +",第三方框架迁移,ARM +"Q: 为什么使用MindConverter进行模型转换需要很长时间(超过十分钟),而模型并不大? +",https://mindspore.cn/docs/zh-CN/master/faq/usage_migrate_3rd.html,"A: MindConverter进行转换时,需要使用Protobuf对模型文件进行反序列化,请确保Python环境中安装的Protobuf采用C++后端实现,检查方法如下,若输出为Python,则需要安装采用C++实现的Python Protobuf(下载Protobuf源码并进入源码中的python子目录,使用python setup.py install –cpp_implementation进行安装);若输出为cpp,转换过程仍耗时较长,请在转换前使用添加环境变量export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=cpp。 +from google.protobuf.internal import api_implementation + +print(api_implementation.Type()) + + + +",第三方框架迁移,Protobuf、api、C++ +"Q: 使用.pb文件进行转换时,已确定model_file,shape,input_nodes,output_nodes均无误,并且环境中的依赖库已经正常安装,但是仍然报异常代码1000001,可能是什么原因? +",https://mindspore.cn/docs/zh-CN/master/faq/usage_migrate_3rd.html,"A: 请检查生成该.pb文件所使用的TensorFlow版本不高于用于转换时安装的TensorFlow版本,避免由于旧版本TensorFlow无法解析新版本生成的.pb文件,而导致的模型文件解析失败。 + +",第三方框架迁移,model、TensorFlow、npu +"Q: 出现报错信息[ERROR] MINDCONVERTER: [BaseConverterError] code: 0000000, msg: {python_home}/lib/libgomp.so.1: cannot allocate memory in static TLS block时,应该怎么处理? +",https://mindspore.cn/docs/zh-CN/master/faq/usage_migrate_3rd.html,"A: 该问题通常是由于环境变量导入不正确导致的。建议用户设置export LD_PRELOAD={python_home}/lib/libgomp.so.1.0.0这一环境变量,然后重新尝试进行转换。 +",第三方框架迁移,ib +"Q: MindSpore安装完成,执行训练时发现网络性能异常,权重初始化耗时过长,怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/performance_tuning.html,"A: 可能与环境中使用了scipy 1.4系列版本有关,通过pip list | grep scipy命令可查看scipy版本,建议改成MindSpore要求的scipy版本。版本第三方库依赖可以在requirement.txt中查看。 +https://gitee.com/mindspore/mindspore/blob/%7Bversion%7D/requirements.txt + +其中version替换为MindSpore具体的版本分支。 + +",性能调优,scipy +"Q: 导致Loss值不收敛或者精度不达标的原因有哪些呢,应该怎样定位调优? +",https://mindspore.cn/docs/zh-CN/master/faq/precision_tuning.html,"A: 可能导致Loss值不收敛或者精度问题的原因很多,推荐参考下面总结,逐一排查问题。 +MindSpore模型精度调优实战(一)精度问题的常见现象、原因和简要调优思路 +MindSpore模型精度调优实战(二)精度调试调优思路 +MindSpore模型精度调优实战(三)常见精度问题简介 +",精度调优,Loss +"Q: 进行HCCL分布式训练出错:Init plugin so failed, ret = 1343225860? +",https://mindspore.cn/docs/zh-CN/master/faq/distributed_configure.html,"A: 初始化HCCL失败了,通常由于rank json没写对,可以用mindspore/model_zoo/utils/hccl_tools下面的工具生成一个试试。或者导入环境变量export ASCEND_SLOG_PRINT_TO_STDOUT=1打开HCCL的日志打印,然后检查日志信息。 + +",分布式配置,ASCEND、model +"Q: MindSpore执行GPU分布式训练报错如下,如何解决: +Loading libgpu_collective.so failed. Many reasons could cause this: +1.libgpu_collective.so is not installed. +2.nccl is not installed or found. +3.mpi is not installed or found + + +",https://mindspore.cn/docs/zh-CN/master/faq/distributed_configure.html,"A: 此问题为MindSpore动态加载集合通信库失败,可能原因如下: + +执行环境未安装分布式训练依赖的OpenMPI以及NCCL。 +NCCL版本未更新至v2.7.6: MindSpore v1.1.0新增GPU P2P通信算子,该特性依赖于NCCL v2.7.6,若环境使用的NCCL未升级为此版本,则会引起加载失败错误。 + + +",分布式配置,GPU、OpenMPI、ib +"Q:GPU分布式训练场景下,若错误设置环境变量CUDA_VISIBLE_DEVICES的个数小于执行的进程数时,可能导致进程阻塞问题。 +",https://mindspore.cn/docs/zh-CN/master/faq/distributed_configure.html,"A:此场景下,部分训练进程会提示如下报错: +[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. +[ERROR] DEVICE [mindspore/ccsrc/runtime/device/gpu/gpu_device_manager.cc:27] InitDevice] Op Error: Failed to set current device id | Error Number: 0 + + +其余进程由于GPU资源已分配成功,会正常执行到初始化NCCL步骤,日志如下: +[INFO] DEVICE [mindspore/ccsrc/runtime/hardware/gpu/gpu_device_context.cc:90] Initialize] Start initializing NCCL communicator for device 1 + + +此步骤中会调用NCCL接口ncclCommInitRank,该接口会阻塞,直到所有进程达成一致。因此如果某进程没有调用ncclCommInitRank,则会导致进程阻塞。 +此问题我们已向NCCL社区反馈,社区开发者正在设计解决方案中,目前最新版本还未修复,详见issue链接。 +解决方法:手动kill训练进程,根据报错日志,设置正确的卡号后,重启训练任务。 + +",分布式配置,GPU、CUDA、IB +"Q:GPU分布式训练场景下,若某进程异常退出,可能导致其余进程阻塞问题。 +",https://mindspore.cn/docs/zh-CN/master/faq/distributed_configure.html,"A:此场景下,异常进程由于各种问题退出,其余进程由于GPU资源已分配成功,会正常执行到初始化NCCL步骤,日志如下: +[INFO] DEVICE [mindspore/ccsrc/runtime/hardware/gpu/gpu_device_context.cc:90] Initialize] Start initializing NCCL communicator for device 1 + + +此步骤中会调用NCCL接口ncclCommInitRank,该接口会阻塞,直到所有进程达成一致。因此如果某进程没有调用ncclCommInitRank,则会导致进程阻塞。 +此问题我们已向NCCL社区反馈,社区开发者正在设计解决方案中,目前最新版本还未修复,详见issue链接。 +解决方法:手动kill训练进程后重启训练任务。 + +",分布式配置,GPU +"Q:在执行GPU单机单卡的脚本时,不使用mpirun启动进程时,调用mindspore.communication.init方法可能会报错,导致执行失败,该如何处理? +[CRITICAL] DISTRIBUTED [mindspore/ccsrc/distributed/cluster/cluster_context.cc:130] InitNodeRole] Role name is invalid... + + +",https://mindspore.cn/docs/zh-CN/master/faq/distributed_configure.html,"A:在用户不使用mpirun启动进程,但是依然调用了init()方法的情况下,MindSpore要求用户按照不依赖OpenMPI进行训练配置若干环境变量并进行校验,若没有配置,MindSpore会给出以上报错提示。因此建议只有在执行分布式训练时调用mindspore.communication.init,并在不使用mpirun的场景下,根据文档配置正确的环境变量以启动分布式训练。 + +",分布式配置,GPU、OpenMPI、IB +"Q:在通过OpenMPI执行多机多卡训练时,提示由于MPI_Allgather失败。 +pml_ucx.c:175 Error: Failed to receive UCX worker address: Not found (-13) +pml_ucx.c:452 Error: Failed to resolve UCX endpoint for rank X + + +",https://mindspore.cn/docs/zh-CN/master/faq/distributed_configure.html,"A:此问题是OpenMPI在Host侧通信时,无法和对端地址进行通信,一般是机器之间的网卡配置不同导致的,可以通过手动设置网卡名或者子网的方式解决: +mpirun -n process_num --mca btl tcp --mca btl_tcp_if_include eth0 ./run.sh + + +以上指令启动了process_num个run.sh进程,并且选择Host侧通信方式为tcp,网卡选择了eth0,这样就能保证在每台机器上使用的网卡相同,进而解决通信异常问题。 +还可以选择子网来进行匹配: +mpirun -n process_num --mca btl tcp --mca btl_tcp_if_include 192.168.1.0/24 ./run.sh + + +子网范围需要包括所有机器所用的IP地址。 + +",分布式配置,OpenMPI、roce +"Q:在通过OpenMPI执行分布式训练时,单机多卡训练正常,但在多机多卡训练时,某些机器提示GPU device id设置失败。 +[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. +[ERROR] DEVICE [mindspore/ccsrc/runtime/device/gpu/gpu_device_manager.cc:27] InitDevice] Op Error: Failed to set current device id | Error Number: 0 + + +",https://mindspore.cn/docs/zh-CN/master/faq/distributed_configure.html,"A:在多机场景下,各进程卡号需要通过在Host侧AllGather HOSTNAME后计算得到,如果机器间有使用相同的HOSTNAME,则进程卡号会计算出错,导致卡号越界而设置失败。可以在执行脚本中设置每台机器的HOSTNAME为各自的IP地址来解决: +export HOSTNAME=node_ip_address + + + +",分布式配置,GPU、cuda、OpenMPI、IB +"Q:在通过OpenMPI执行多机多卡训练时,NCCL报错提示网络不通。 +include/socket.h:403 NCCL WARN Connect to XXX failed: Network is unreachable + + +",https://mindspore.cn/docs/zh-CN/master/faq/distributed_configure.html,"A:此问题是NCCL在Host侧同步进程信息或者初始化通信域时,无法和对端地址进行通信,一般是机器之间的网卡配置不同导致的,可以通过设置NCCL环境变量NCCL_SOCKET_IFNAME,进行网卡选择: +export NCCL_SOCKET_IFNAME=eth + + +以上指令设置了NCCL在Host侧选择网卡名中带有eth的网卡进行通信。 + +",分布式配置,OpenMPI +"Q:多机多卡选择特定名称的RDMA网卡(通过NCCL_SOCKET_IFNAME设置)通信后,训练仍然报错: +misc/ibvwrap.cc:284 NCCL WARN Call to ibv_modify_qp failed with error Invalid argument +... +include/socket.h:403 NCCL WARN Connect to XXX failed: Connection refused + + +",https://mindspore.cn/docs/zh-CN/master/faq/distributed_configure.html,"A:一般此问题是多机之间RDMA网卡配置存在差异,需要具体情况具体分析。但常见原因是存在某些主机网卡存在IB协议和RoCE协议同时存在的情况,可能出现连接建立失败的情况。解决方案: +需要使用以下指令指定使用的RDMA网卡名为ib开头: +export NCCL_IB_HCA=mlx + + + +",分布式配置,RDMA、ib、RoCE +"Q:单机多卡训练能够成功,但是扩展脚本到多机多卡后,其他主机提示各类报错: +报错内容有多种,下面是几种典型的报错,可能有: +1.已经安装的whl包找不到。 +2.IB网卡通信失败。 +3.Cuda库加载失败。 +",https://mindspore.cn/docs/zh-CN/master/faq/distributed_configure.html,"A:这些问题,都是由于在mpirun启动其他主机时,其他主机的环境变量(包括NCCL的网卡选择配置)没有与本机同步,导致了单机多卡正常执行而多机多卡失败的现象。解决方法是通过mpirun的-x选项,导出特定的环境变量: +mpirun --hostfile /path/to/hostfile -n 64 -x PYTHONPATH -x GLOG_v -x LD_LIBRARY_PATH -x NCCL_SOCKET_IFNAME -x NCCL_IB_HCA -x NCCL_DEBUG=INFO python train.py + + +以上指令导出了在本机已经设置的一些环境变量到其他主机,保证了在执行训练脚本前所有主机环境变量保持一致,达到多机多卡训练目标。 + +",分布式配置,whl包、Cuda、IB +"Q: 在Ascend上通过OpenMPI执行分布式训练时,HcclCommInitRootInfo报错: +Ascend collective Error: ""HcclCommInitRootInfo failed. | Error Number 2 + + +",https://mindspore.cn/docs/zh-CN/master/faq/distributed_configure.html,"A: OpenMPI启动时,当前版本的hccl下,创建通信域时,相应的卡需要分配大约300M的device内存,因此每张卡所在的通信域的数量越多,则额外需要的内存越多,因此会有内存不足的问题。 +可以设置context中的variable_memory_max_size来减少Ascend进程可用的内存,从而为hccl预留足够的内存创建通信域。 +",分布式配置,Ascend、OpenMPI +"Q: 在Ascend310硬件平台安装了MindSpore1.3版本,运行mindspore_serving中的add_model.py样例出现报错? +",https://mindspore.cn/docs/zh-CN/master/faq/inference.html,"A: Ascend310上支持模型导出、Serving推理,但是不支持MindSpore前端Python脚本直接推理,add样例中导出模型多了MindSpore前端Python脚本直接推理的代码,在Ascend310场景注释掉即可。 +def export_net(): + """"""Export add net of 2x2 + 2x2, and copy output model `tensor_add.mindir` to directory ../add/1"""""" + x = np.ones([2, 2]).astype(np.float32) + y = np.ones([2, 2]).astype(np.float32) + add = Net() + # MindSpore前端Python脚本直接推理,310注释掉 + # output = add(ms.Tensor(x), ms.Tensor(y)) + ms.export(add, ms.Tensor(x), ms.Tensor(y), file_name='tensor_add', file_format='MINDIR') + dst_dir = '../add/1' + try: + os.mkdir(dst_dir) + except OSError: + pass + + dst_file = os.path.join(dst_dir, 'tensor_add.mindir') + copyfile('tensor_add.mindir', dst_file) + print(""copy tensor_add.mindir to "" + dst_dir + "" success"") + + print(x) + print(y) + # print(output.asnumpy())。 + + + +",推理,Ascend、serving、mindir、model +"Q: 编译应用时报错/usr/bin/ld: warning: libxxx.so, needed by libmindspore.so, not found怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/inference.html,"A: 寻找缺少的动态库文件所在目录,添加该路径到环境变量LD_LIBRARY_PATH中,环境变量设置参考Ascend 310 AI处理器上使用MindIR模型进行推理#编译推理代码。 + +",推理,Ascend、MindIR、ib +"Q: 运行应用时报错error while loading shared libraries: libge_compiler.so: cannot open shared object file: No such file or directory怎么办? +",https://mindspore.cn/docs/zh-CN/master/faq/inference.html,"A: 安装MindSpore所依赖的Ascend 310 AI处理器配套软件包时,CANN包不能安装nnrt版本,而是需要安装功能完整的toolkit版本。 + +",推理,Ascend、ib +"Q: 使用昇腾310进行推理的时候怎么设置高精度或者高性能模式? +",https://mindspore.cn/docs/zh-CN/master/faq/inference.html,"A: 在推理代码中通过Ascend310DeviceInfo中的SetPrecisionMode接口进行设置,可选:force_fp16、allow_fp32_to_fp16、must_keep_origin_dtype,allow_mix_precision。默认值为force_fp16,指的就是高性能模式。高精度模式可设置为allow_fp32_to_fp16或must_keep_origin_dtype。 + +",推理,Ascend +"Q: AIPP文件怎么配置? +",https://mindspore.cn/docs/zh-CN/master/faq/inference.html,"A: AIPP(Artificial Intelligence Pre-Processing)AI预处理,用于在AI Core上完成图像预处理,包括改变图像尺寸、色域转换(转换图像格式)、减均值/乘系数(改变图像像素),数据处理之后再进行真正的模型推理。相关的配置介绍比较复杂,可以参考ATC工具的AIPP使能章节。 + +",推理,AIPP、roce +"Q: 怎么设置昇腾310推理过程中的日志级别? +",https://mindspore.cn/docs/zh-CN/master/faq/inference.html,"A: 通过ASCEND_GLOBAL_LOG_LEVEL来设置,0:DEBUG级别;1:INFO级别;2:WARNING级别;3:ERROR级别;4:NULL级别,不输出日志;其他值为非法值。配置示例:export ASCEND_GLOBAL_LOG_LEVEL=1。如果推理过程中出现错误可通过修改日志级别来获取更详细的日志信息。 +",推理,ASCEND +"Q: 导出MindIR格式的时候,input=np.random.uniform(...)是不是固定格式? +",https://mindspore.cn/docs/zh-CN/master/faq/feature_advice.html,"A: 不是固定格式的,这一步操作是为了创建一个输入,以便于构建网络结构。export里只要传入正确的shape即可,使用np.ones和np.zeros创建都是可以的。 + +",特性咨询,MindIR、npu +"Q: MindSpore现支持直接读取哪些其他框架的模型和哪些格式呢?比如PyTorch下训练得到的pth模型可以加载到MindSpore框架下使用吗? +",https://mindspore.cn/docs/zh-CN/master/faq/feature_advice.html,"A: MindSpore采用Protobuf存储训练参数,无法直接读取其他框架的模型。对于模型文件本质保存的就是参数和对应的值,可以用其他框架的API将参数读取出来之后,拿到参数的键值对,然后再加载到MindSpore中使用。比如想用其他框架训练好的ckpt文件,可以先把参数读取出来,再调用MindSpore的save_checkpoint接口,就可以保存成MindSpore可以读取的ckpt文件格式了。 + +",特性咨询,Protobuf、API、PyTorch +"Q: 在使用ckpt或导出模型的过程中,报Protobuf内存限制错误,如何处理? +",https://mindspore.cn/docs/zh-CN/master/faq/feature_advice.html,"A: 当单条Protobuf数据过大时,因为Protobuf自身对数据流大小的限制,会报出内存限制的错误。这时可通过设置环境变量PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python解除限制。 + +",特性咨询,Protobuf +"Q: PyNative模式和Graph模式的区别? +",https://mindspore.cn/docs/zh-CN/master/faq/feature_advice.html,"A: 通过下面四个方面进行对比: + +网络执行:两个模式使用的算子是一致的,因此相同的网络和算子,分别在两个模式下执行时,精度效果是一致的。由于Graph模式运用了图优化、计算图整图下沉等技术,Graph模式执行网络的性能和效率更高; +场景使用:Graph模式需要一开始就构建好网络结构,然后框架做整图优化和执行,比较适合网络固定没有变化,且需要高性能的场景; +不同硬件(Ascend、GPU和CPU)资源:都支持这两种模式; +代码调试:由于PyNative模式是逐行执行算子,用户可以直接调试Python代码,在代码中任意位置打断点查看对应算子的输出或执行结果。而Graph模式由于在构造函数里只是完成网络构造,实际没有执行,因此在construct函数里打断点无法获取对应算子的输出,只能先指定算子进行打印,然后在网络执行完成后查看输出结果。 + + +",特性咨询,GPU、CPU、Ascend、PyNative、Graph +"Q: 使用MindSpore在GPU上训练的网络脚本可以不做修改直接在Ascend上进行训练么? +",https://mindspore.cn/docs/zh-CN/master/faq/feature_advice.html,"A: 可以的,MindSpore面向Ascend/GPU/CPU提供统一的API,在算子支持的前提下,网络脚本可以不做修改直接跨平台运行。 + +",特性咨询,GPU、CPU、Ascend、API +"Q: 一个环境中如果既安装了MindSpore,又安装了PyTorch,是否在一个python文件中可以混用两个框架的语法呢? +",https://mindspore.cn/docs/zh-CN/master/faq/feature_advice.html,"A: 可以在一个python文件中混用两个框架的。要注意类型间的区别。例如两个框架创建的Tensor类型是不同的,但对于python的基础类型都是通用的。 + +",特性咨询,PyTorch +"Q: MindSpore可以读取TensorFlow的ckpt文件吗? +",https://mindspore.cn/docs/zh-CN/master/faq/feature_advice.html,"A: MindSpore的ckpt和TensorFlow的ckpt格式是不通用的,虽然都是使用Protobuf协议,但是proto的定义是不同的。当前MindSpore不支持读取TensorFlow或PyTorch的ckpt文件。 + +",特性咨询,Protobuf、PyTorch、TensorFlow +"Q: 用MindSpore训练出的模型如何在Ascend 310上使用?可以转换成适用于HiLens Kit用的吗? +",https://mindspore.cn/docs/zh-CN/master/faq/feature_advice.html,"A: Ascend 310需要运行专用的OM模型,先使用MindSpore导出ONNX或AIR模型,再转化为Ascend 310支持的OM模型。具体可参考多平台推理。可以,HiLens Kit是以Ascend 310为推理核心,所以前后两个问题本质上是一样的,需要转换为OM模型. + +",特性咨询,Ascend +"Q:MindSpore只能在华为自己的Ascend上跑么? +",https://mindspore.cn/docs/zh-CN/master/faq/feature_advice.html,"A: MindSpore同时支持华为自己的Ascend、GPU与CPU,是支持异构算力的。 + +",特性咨询,GPU、CPU、Ascend +"Q: MindSpore在Ascend 310上是否可以转AIR模型? +",https://mindspore.cn/docs/zh-CN/master/faq/feature_advice.html,"A: Ascend 310不能导出AIR,需要在Ascend 910加载训练好的checkpoint后,导出AIR,然后在Ascend 310转成OM模型进行推理。Ascend 910的安装方法可以参考官网MindSpore安装指南。 + +",特性咨询,Ascend +"Q: MindSpore对导出、导入模型的单个Tensor输入大小有什么限制? +",https://mindspore.cn/docs/zh-CN/master/faq/feature_advice.html,"A: 由于Protobuf的硬件限制,导出AIR、ONNX格式时,模型参数大小不能超过2G;导出MINDIR格式时,模型参数大小没有限制,MindSpore不支持导入AIR、ONNX格式,只支持MINDIR,导入大小的限制与导出一致。 + +",特性咨询,Protobuf、MINDIR +"Q: 安装运行MindSpore时,是否要求平台有GPU计算单元?需要什么硬件支持? +",https://mindspore.cn/docs/zh-CN/master/faq/feature_advice.html,"A: MindSpore当前支持CPU/GPU/Ascend。目前笔记本电脑或者有GPU的环境,都可以通过Docker镜像来使用。当前MindSpore Model Zoo中有部分模型已经支持GPU的训练和推理,其他模型也在不断地进行完善。在分布式并行训练方面,MindSpore当前支持GPU多卡训练。你可以通过项目Release note获取最新信息。 + +",特性咨询,GPU、CPU、Ascend、Model +"Q: 针对异构计算单元的支持,MindSpore有什么计划? +",https://mindspore.cn/docs/zh-CN/master/faq/feature_advice.html,"A: MindSpore提供了可插拔式的设备管理接口,其他计算单元(比如FPGA)可快速灵活地实现与MindSpore的对接,欢迎您参与社区进行异构计算后端的开发工作。 + +",特性咨询, +"Q: MindSpore与ModelArts是什么关系,在ModelArts中能使用MindSpore吗? +",https://mindspore.cn/docs/zh-CN/master/faq/feature_advice.html,"A: ModelArts是华为公有云线上训练及推理平台,MindSpore是华为深度学习框架。 + +",特性咨询,Model、ModelArts +"Q: 最近出来的taichi编程语言有Python扩展,类似import taichi as ti就能直接用了,MindSpore是否也支持? +",https://mindspore.cn/docs/zh-CN/master/faq/feature_advice.html,"A: MindSpore支持Python原生表达,import mindspore相关包即可使用。 + +",特性咨询,taichi +"Q: 请问MindSpore支持梯度截断吗? +",https://mindspore.cn/docs/zh-CN/master/faq/feature_advice.html,"A: 支持,可以参考梯度截断的定义和使用。 + +",特性咨询, +"Q: MindSpore的IR设计理念是什么? +",https://mindspore.cn/docs/zh-CN/master/faq/feature_advice.html,"A: 函数式: 一切皆函数,易于微分实现;无副作用,易于实现自动并行化分析。JIT编译能力: 图形IR,控制流依赖和数据流合一,平衡通用性/易用性。图形完备的IR: 更多的转换Python灵活语法,包括递归等。 + +",特性咨询, +"Q: MindSpore并行模型训练的优势和特色有哪些? +",https://mindspore.cn/docs/zh-CN/master/faq/feature_advice.html,"A: MindSpore分布式训练除了支持数据并行,还支持算子级模型并行,可以对算子输入tensor进行切分并行。在此基础上支持自动并行,用户只需要写单卡脚本,就能自动切分到多个节点并行执行。 + +",特性咨询, +"Q: MindSpore在语义协同和处理上是如何实现的?是否利用当前学术界流行的FCA理论? +",https://mindspore.cn/docs/zh-CN/master/faq/feature_advice.html,"A: MindSpore框架本身并不需要支持FCA。对于语义类模型,用户可以调用第三方的工具在数据预处理阶段做FCA数学分析。MindSpore本身支持Python语言,import FCA相关包即可使用。 + +",特性咨询, +"Q: 当前在云上MindSpore的训练和推理功能是比较完备的,至于边端场景(尤其是终端设备)MindSpore有什么计划? +",https://mindspore.cn/docs/zh-CN/master/faq/feature_advice.html,"A: MindSpore是端边云统一的训练和推理框架,支持将云侧训练的模型导出到Ascend AI处理器和终端设备进行推理。当前推理阶段支持的优化包括量化、算子融合、内存复用等。 + +",特性咨询,Ascend +"Q: MindSpore自动并行支持情况如何? +",https://mindspore.cn/docs/zh-CN/master/faq/feature_advice.html,"A: 自动并行特性对CPU GPU的支持还在完善中。推荐用户在Ascend 910 AI处理器上使用自动并行,可以关注开源社区,申请MindSpore开发者体验环境进行试用。 + +",特性咨询,GPU、CPU、Ascend +"Q: MindSpore有没有类似基于TensorFlow实现的对象检测算法的模块? +",https://mindspore.cn/docs/zh-CN/master/faq/feature_advice.html,"A: TensorFlow的对象检测Pipeline接口属于TensorFlow Model模块。待MindSpore检测类模型完备后,会提供类似的Pipeline接口。 + +",特性咨询,Pipeline、Model、TensorFlow +"Q: 使用PyNative模式能够进行迁移学习? +",https://mindspore.cn/docs/zh-CN/master/faq/feature_advice.html,"A: PyNative模式是兼容迁移学习的。 + +",特性咨询,PyNative +"Q: MindSpore仓库中的ModelZoo和昇腾官网的ModelZoo有什么关系? +",https://mindspore.cn/docs/zh-CN/master/faq/feature_advice.html,"A: MindSpore的ModelZoo主要提供MindSpore框架实现的模型,同时包括了Ascend/GPU/CPU/Mobile多种设备的支持。昇腾的ModelZoo主要提供运行于Ascend加速芯片上的模型,包括了MindSpore/PyTorch/TensorFlow/Caffe等多种框架的支持。可以参考对应的Gitee仓库 +其中MindSpore+Ascend的组合是有重合的,这部分模型会以MindSpore的ModelZoo为主要版本,定期向昇腾ModelZoo发布。 + +",特性咨询,GPU、CPU、Ascend、Model、PyTorch、ModelZoo、TensorFlow、Caffe +"Q: Ascend与NPU是什么关系? +",https://mindspore.cn/docs/zh-CN/master/faq/feature_advice.html,"A: NPU指针对神经网络算法的专用处理器,不同公司推出的NPU架构各异,Ascend是基于华为公司自研的达芬奇架构的NPU。 +",特性咨询,Ascend、NPU diff --git a/faq_dataset/readme.md b/faq_dataset/readme.md new file mode 100644 index 0000000000000000000000000000000000000000..c76eaafbaaccf151216abb3dc408657863821e67 --- /dev/null +++ b/faq_dataset/readme.md @@ -0,0 +1,25 @@ +# 基于官网FAQ文档的数据集 +## 概述 +如题所示,本项目是基于官网FAQ文档整理的数据集,用于做问答机器人的语料库。采用python语言,从官网中下载FAQ文档,并对其各项属性进行划分所得到的格式为.csv的数据集。其headline一共分为如下部分:title,link,content,process和tag。 + +## Title +Title为FAQ中的questions,是可能出现的问题。采用的是文本的格式,去掉了一些xml标签,本身这些标签对于问题的表述没有较大影响。 + +## Link +Link为FAQ语料库的源网页地址链接,共有十一个链接。 + +## Content +Content为FAQ中的answers,是对应问题的解答模块。与title一致,去掉了一些xml标签,同时,还去掉的部分名词自带的网页链接(多是用于展开介绍),这一点值得注意。 + +## Process +Process将问题分为了几大类型,分别为:安装、数据处理、执行问题、编译、第三方框架迁移,调优,分布式配置,推理,特性咨询。其中“执行问题”,“第三方框架迁移”,“分布式配置”和“特性咨询”为新添加的process。其分类标准参照的是语料库的分类。 + +## Tag +Tag为FAQ所涉及到的领域,没有具体的分类标准。暂时将tag设置为以下类别:GPU、CuBLAS库、Linux、armmacOS、SDK版本、SciPy、whl包、protobuf、Ubuntu、MindInsight、MIndArmour、CPU、Windows、WSL、Ascend、Conda、Serving、gmp、cuda、MindIR、API、MindRecord、JupyterLab、Generator Dataset、MindData、pipeline、Datalouder、Dataset、eval、Model、SGD、loss、PyTorch、NLP、ModelZoo、HCLL、ModelArts、PyNative、Graph、TensorFlow、 +C++、AIPP、OpenMPI、NCLL、RDMA、IB、RoCE、taichi、Caffe、NPU。其中所属有很多领域,包括系统,芯片,编程语言,部分库函数、环境等等。如果该问题不属于以上所有tag,则将其定义为’ ’,即空字符。 + +# Python源代码修改方法 +####(1)如要增加语料库,需要在url,process和process1三个列表中添加元素,其中,url为语料库的网址链接,process为文章块的id,process1为定义的process属性。要注意的是,这三个列表需要对齐,否则会发生错误。 +####(2)如在原有语料库的基础上增加QA,只需要重新运行该代码即可。 +####(3)如要增加或者删减tag,只需要在tag列表中进行相应的添加或删减。在进行tag查找的时候,是不区分大小写的,所以进行添加时,对于大小写没有要求,最终输出是按照原文本的大小写进行输出的。 +####(4)关于FAQ文本的要求,本代码可以区分中英文的冒号,同时,如果缺少‘A’字符,也是能够进行整理的。但是,如果出现‘Q’字符消失或者两个特征字符同时消失的情况,是不能进行整理的,需要注意。 \ No newline at end of file