llama2 70B mindie 推理开箱报错问题
这周支撑了一个 llama2 70B MindIE 开箱推理报错的问题,给大家分享一下。
背景
事情是这样,开发者搞了一台昇腾 800I A2 服务器,这个服务器的配置是 8 卡,每个卡显存是 32G。他想用 MindIE 跑一下 llama2 70B 的推理,测一下性能,结果报了 2 个错,1 个是 NPU out of memory,一个是 not support modelName。
开发者就很纳闷了,说我直接用你们的代码跑的,啥也没改,咋就不行呢?作为 DR,我当然不能坐视不管,立马和开发者开始了交流。
分析
开发者很配合,提供了他的日志,我仔细看了一下,out of memory 是在 0 卡和 1 卡上加载权重的时候发生的,not support modelName 是在其他卡上发生的。我估算了一下,70B 模型,分到 8 卡上,每个卡加载权重顶多用 140G/8<20G,32G 肯定够够的呀!至于 not support modelName,一般就是模型调用的算子和算子库里面的算子名字没对上导致的,由于 mindie 大模型推理使用的是 ATB 库,所以我推测是 MindIE 和 ATB 版本没对上。分析完后,心理差不多有底了,为了赶时间,而且对方是咱的 VIP 客户,就直接约开发者开腾讯会议了。
实操
上了会,我说,你再复现给我看一下。在他启动之前,我说,执行 npu-smi info 看一下有没有卡被占用,结果看到,0 卡和 1 卡的显存被占得满满的,但开发者还是想继续启动任务。。。我说,停停!你这卡被占着呢,咋跑?先释放掉。开发者哦了一声,把占用显存的进程 kill 掉了。果然,启动之后没有 out of memory 了,只剩下 not support modelName 的错误了。
我说,我看看你的 CANN 版本和 MindIE 版本以及 ATB 版本。开发者是在 docker 里面跑的,所以以 docker 里面的/usr/local/Ascend 里面的版本为准。看了一下,CANN 和 MindIE 版本没有问题,但是 ATB 的版本他没有使用 MindIE 镜像里面自带的,而是自己下载了一个新版本的,我问为什么?他说,这个版本的测试用例可以多传一个参数。好吧,我说你把 ATB 版本换成 MindIE 自带的试试。结果换回去后,成功跑起来了。
总结
所以,不管是帮忙他人排查问题,还是自己排查问题,先从基本的检查开始,先检查卡有没有被占用,有的话就 kill 掉(如果是别人的任务,先知会一下哈)!其次,不要自己随意组合版本,否则会因为经验不足卡在莫名其妙的问题上。当然,也可以从产品本身出发,做得更好用一些,比如说,报错信息里面给出一些解决问题的提示、增加版本不匹配提示等等。好用的产品需要精雕细琢,任重而道远!
评论