BLAS loading error: Neither BLAS_VERSION is set nor does blas.spec return a library name.

序言

最近在使用Docker打包MATLAB程序,之前一直运行着好好的,没有一点问题,最近在银河麒麟v10系统上面部署,遇到了这个很恶心的问题。
我都一度去怀疑是Docker的问题,最初感觉是Docker版本不对,我在高版本打包在低版本上运行,然后重装Docker,发现还是报错。然后搜索一番,发现可能是芯片不支持,MATLAB的bug,他没法自动找到路径,所以需要自己下载并指定blas
https://ww2.mathworks.cn/support/search.html/answers/1584284-the-problem-of-conv2-with-blas-loading-error.html?fq%5B%5D=asset_type_name:answer&fq%5B%5D=category:parallel-computing/gpu-computing&page=1
然后就操作Docker,进去后下载了个这个blas,然后也给他设置全局变量了,但是,当时是必须用root用户进去才可以下载包,所以也是在root下设置的全局变量,以为设置成功了,其实并没有,重新运行发现还是不行,这个时候没有重新进去镜像里面看看是否有这个全局变量,后来发现必须是用户身份才能更新~/.bashrc,这个有印象,因为之前遇到过sudo ~/.bashrc报错找不到的问题,所以当没有找到变量的时候,第一时间想到是用户的问题,切换普通用户进去后,果然设置保存成功了。
潸然泪下
所以,如果想直接操作Docker的话,那就先root身份进去装包,再普通用户身份进去更新变量,这次成功更新了变量,本来以为这样就一定可以了(因为花了半天的时间在这个机子上装了个MATLAB软件运行了,只要有这个路径就能运行),结果还是不行,然后才他是设置的顺序不对,可能Docker里面MATLAB软件是在变量设置前就启动的,但是懒得改Dockerfile了,直接在运行Docker的时候命令行指定,果然,果然终于是没有问题了。

解决方法

先是正常打包

打包好后,把镜像运行起来

然后进入到容器里面,注意这里要用root身份进去

sudo docker exec -u 0 -it 3d42134dfd59 /bin/bash

进去以后

apt update
apt install libopenblas-dev

然后

ldconfig -p | grep blas

用这个命令看一看装到哪个路径下面了,根据实际情况替换下面的路径
知道在哪个路径就行,这时候就可以退出容器了
然后更新镜像

docker commit container_id image:latest

最后就可以运行了

docker run -e BLAS_VERSION=/lib/x86_64-linux-gnu/libopenblas.so --rm -p 9900:9910 transformer1:latest -l trace

–rm 是停止运行自动删除容器
-l trace是显示详细信息

你可能感兴趣的:(开发语言,docker,matlab)