最近将本地写好的基于Flask的模型调用后端(含torch和tensorflow代码)部署到服务器(Ubuntu 20.04)上遇到了困扰了我两天的问题。

        按理说,深度学习研究者开发可视化系统,并进行部署的时候应该很容易遇到这种问题。但是我搜索了两天,和询问了好几页的GPT也没看见一个系统的解决方案(不知道是不是太简单了QWQ)。

        先看报错:

from torch._C import *  # noqa: F403 ImportError: libtorch_cpu.so: failed to map segment from shared object

              

报错大概意思是映射共享库文件失败。

虽然和库与python的版本及其依赖有关,但最后排查主要问题还是出在uwsgi对进程的内存分配不够

解决方法:

1.

安装与当前python版本对应的torch和tensorflow,同时确保这些库的依赖版本不冲突。如tensorflow 2.4.0对应 numpy 1.19.5

2.

正确安装python的uwsgi,如果安装不成功请先执行:

$ sudo apt-get install libpython3.x-dev

其中x为python版本,然后执行

pip install uwsgi

3.

重点配置uwsgi.ini以下参数(加粗)—— 按个人项目情况,但内存相关的配置尽量大些。

[uwsgi] # uwsgi 启动时,所使用的IP何端口 module = xxx

#http = :5050

socket = 0.0.0.0:5050#端口保持一致

buffer-size=32768000  #uwsgi进程的缓冲区大小 limit-as = 2560MB  #uwsgi进程的地址空间限制 single-interpreter = true#单解释器

plugin=python3#指定python pythonpath=/home/ubuntu/.local/lib/python3.8#指定python解释器路径

master = true  #daemonize =/path chdir=/path/to/your/project processes = 4 threads = 4 max-requests = 1000 harakiri=50 py-autoreload=1#热重载

memory-report = true  

解释:

如注释,因为共享库文件占用内存太大,所以uwsgi需要对每个需要共享库文件的进程多分配空间。所以前两项与内存大小有关的稍微大一些(以G为单位)

plugin和pythonpath主要是为了防止启动uwsgi的python不是自己期待的。

参考文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: