华为昇腾的 NPU 真的不好用

今天稚晖君在智能基座高校活动上又一次安利了昇腾生态,加上他本身也是昇腾的人员,我又一次尝试了 NPU 的生态。其实我之前也用过 NPU ,当时就很怀疑人生,但实在想不起来应该吐槽些什么了。活动上本来希望其他人能提些有用的问题,结果整个一狂粉见面会,有些同学恨不得连人家工位在哪个位置都要问出来,不愧是三本。。

由于遇到的问题很多,之后也许还会遇到其他问题,打算把坑集中记录在这里。

NPU 生态初探

华为的 NPU 生态对标的主要是 NVIDIA 计算卡的生态:

HUAWEINVIDIA
昇腾推理卡/训练卡计算卡
NPU firmwarenvidia driver
CANNCUDA
MindSpore/AscendPytorch/Ascend TensorflowPytorch/Tensorflow

智能基座活动:“我们华为生态的优势就是所有产品都是我们自己做的。”

产品分商业版和社区版

以 CANN 为例,官方这么说明:

社区版:快速提供新特性的体验版,供开发者提前试用 商业版:满足商用标准的稳定版本

忘了在哪里还曾经看到社区版是不能用于商业环境的,只有商业版可以。现在我找不到相关的说明了,暂且当它不存在。但商业版仍然不能让用户直接下载,需要申请华为的许可才能下载!也就是说,不跟华子谈好,你用的是一个“不保证稳定”的版本。到底需不需要花钱才能拿到我不知道,因为之前 NPU 的固件、驱动是只有商业版本的,你就算买了服务器、硬件,也下载不了驱动,需要跟经销商去要。

对比 CUDA ,开发和部署用的就是一套东西,也没有什么商业、社区的区别。这 CANN 除了华子自己的 NPU 也没玩意能用,结果交了一次硬件的钱还要再交一次软件的钱。

版本混乱

1. 大版本号乱变

让我们来看看 《版本号变更通告》 ,这次改版本号时,直接把 20.1.alpha001 改到 3.1.0.alpha001 。

在装 mindspore 1.9.0 时(文章撰写时的最新版),我能在官网上下载到的 CANN 版本是 6.0.0.alpha001 。此时 mindspore 无法正常工作,根据提 issue 后官网的修改,它需要 Ascend Data Center Solution 22.0.RC3 才能运行。

不觉得这很酷吗?很符合我对乱刷版本号的印象。

2. RC 版与正式版间产生大幅度改动

6.0.RC1.alpha003 与 6.0.0.alpha001 这两个版本间库文件放置的路径都不一样,导致 mindspore 出错找不到文件。我理解 RC 是 Release Candidate 的意思,别人的 RC 可能和正式版都没什么区别了,这不仅候选了三个版本,还要有破坏性变动放在里面。

你的下一个大版本号,何必是大版本号。

3. mindspore 发布的正式版依赖了还没有发布的 CANN 版本

mindspore 1.9.0 ,目前官网文档还在那挂着没有下载链接呢。让我们问一下华子怎么说:

智能基座活动:“我们华为生态的优势就是所有产品都是我们自己做的。”

优势是需要某个东西直接给对应团队 oncall 要二进制文件?然后让用户挂在这里。

4. 为了使用不同的框架,你需要安装一堆 CANN ,甚至是 RC 版

昇子魔改的 pytorch 依赖于 RC 版的 CANN , RC 和 正式版间有大幅度变动,你不用 RC 可能就跑不起来了。

有人说用 cuda 的 pytorch 不也依赖于某个 cuda 版本吗?让我们来看看怎么安装 pytorch

conda install pytorch torchvision torchaudio pytorch-cuda=11.6 -c pytorch -c nvidia

啊这,一行命令就安装好指定版本了。让我们来看看怎么安装 mindspore :

昇腾软件包提供商用版和社区版两种下载途径:

  • 商用版下载需要申请权限,下载链接与安装方式请参考[Ascend Data Center Solution 22.0.RC3安装指引文档]。

安装包默认安装路径为/usr/local/Ascend。安装后确认当前用户有权限访问昇腾AI处理器配套软件包的安装路径,若无权限,需要root用户将当前用户添加到/usr/local/Ascend所在的用户组。

安装昇腾AI处理器配套软件包提供的whl包,whl包随配套软件包发布。如果之前安装过昇腾AI处理器配套软件包,需要先使用如下命令卸载相应的包。

pip uninstall te topi hccl -y

默认安装路径使用以下指令安装。如果安装路径不是默认路径,需要将命令中的路径替换为安装路径。

pip install sympy pip install /usr/local/Ascend/ascend-toolkit/latest/lib64/topi--py3-none-any.whl pip install /usr/local/Ascend/ascend-toolkit/latest/lib64/te--py3-none-any.whl pip install /usr/local/Ascend/ascend-toolkit/latest/lib64/hccl-*-py3-none-any.whl

别忘了使用的时候还要 source 环境变量文件哦,要先 source CANN 的,再 source mindspore 的。而且这些配置文件里默认都写的 latest ,需要自己改路径。

Mindspore 软件质量差

See https://gitee.com/mindspore/mindspore/issues/I5YCC4#note_14021343

‘/fwkacllib/lib64’ ‘/add-ons’ 已经不用了,但报警还有。因为文档差,也查不到怎么回事,留下用户一脸蒙蔽。

真正的启动检查报错(让程序无法运行那种)也是 warning ,嗯。

pytorch 使用麻烦

需要自己编译,编译之后我还没跑通测试。现在提了 issue ,等昇子跟进。

已经两天了,pytorch 这边工作人员比 mindspore 那的懒很多。

对比一下人家 intel :[https://github.com/intel/intel-extension-for-pytorch][https://github.com/intel/intel-extension-for-pytorch] ,真的华子你能不能学学人家,他做得比你晚,还做得比你好。

而且 pytorch 只魔改了几个版本,魔改后的 pytorch 自己的代码很多地方都要改。

bug 很多,之前跑三层的 LSTM ,用 CPU 跑能出结果,用 NPU 跑返回 None ,错也不报。

UPDATE:

虽然已经在各个分支里写上有 pytorch 1.11 的支持,但实际上没有支持。呃。。

https://gitee.com/ascend/pytorch/issues/I5YE0Y

文档稀碎

莫名其妙的报错,莫名其妙的错误号,一搜网上全是新闻,一点文档找不到啊。

同样在等 issue 回复。

UPDATE:

建议放弃幻想。

设备贵

Atlas 800 (Model 3010) ,系统配置:

总价 13w ,这价格你完全可以去买(甚至是涨价后的) A100 。别忘了,910A 是推理卡,你可能还需要一张训练卡。