# 只使用一台办公机,把windows端的算法部署到linux服务器上(Python) **Repository Path**: q981160455/Basic_Python ## Basic Information - **Project Name**: 只使用一台办公机,把windows端的算法部署到linux服务器上(Python) - **Description**: 将你在windows端写的python代码编译为linux系统可以运行的二进制文件 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-03-16 - **Last Updated**: 2023-03-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 只使用一台办公机,把windows端的算法部署到linux服务器上(Python) ### 0 前言 大家可以从生活中感受到,微软是桌面操作系统的垄断者,从2019年的数据来看,Windows操作系统的市场占有率高达81.83%。那么如果你跟我一样,在学生实验室、或者办公室使用的是windows操作系统,你会面临两个问题:第一,就是你在windows上写了许许多多高大上的算法,它可能是人工智能、机器学习、深度学习、领域,但难以落地,因为你公司的服务器或者你的客户机器多半使用的是linux操作系统。你在windows端配置的python环境大概率不能放在linux系统上直接使用的。第二,就是在互联网公司中,开发测试和部署应该有明确的架构和分工,负责服务器的员工可能不懂算法,服务器的linux系统上也可能根本没有配置python运行环境,这意味着你写的算法有人帮你测试,但不会让你亲自上服务器去配环境。 那咋办呢?你公司的服务器或者说你客户的机器上并不会有python环境,好说,我们还有一个办法,就是编译为linux系统可以运行的二进制文件。要求:维持最低成本,在windows上单个机器完成开发、测试、部署。 ### 1 提前准备 前面提到,windows系统市场份额大,我们默认开发是在windows下使用python做的算法开发,所以首先需要一个可用的windows操作系统和python3编程环境。这里推荐:https://zhuanlan.zhihu.com/p/104537494 ,这台你正在操作的windows机器,后面我们都称为开发机。其次,你需要安装一个虚拟化软件工具,这里推荐:https://zhuanlan.zhihu.com/p/478093855,这是一个比较小的软件,其他虚拟化软件比如 vitual machine 也是可以的。然后,你需要下载一个跟公司(或客户)服务器机器一样的系统,我们公司服务器用的是比较老的centos7(linux)系统,这里我推荐:https://zhuanlan.zhihu.com/p/60408219。。这个你安装好的虚拟机,我们称为测试机或者部署机。 接着,你需要重复一次上个步骤,安装一个一模一样的 centos 虚拟系统,不一样的是,这一次的centos 系统中,你需要打开系统,并在里面配置python、安装程序包,总之,需要配置出跟你的开发机一样的编程环境。这一个机器,我们称为编译机。配置完毕之后,你的虚拟化软件中应该有这样两个系统: ![输入图片说明](image.png) 到这里我们需要的前提准备就完成了。 #### 2 算法的开发 算法的开发要从分析问题、研究算法理论开始,这篇文章的重点放到了落地方法,所以跳过前面的步骤。我以一个实际的例子来帮助各位理解。 ### 2.1 使用Pytorch方便搞定深度学习问题 公司要求的开发目标:设计文本分类算法,使得分类准确率高,运行速度快,且能在服务器上使用。 这是我得到的数据: ![输入图片说明](image1.png) 分类的方法有很多种,最最简单的不涉及机器学习的,就是进行分词,按关键词匹配程度去分类。但是由于项目其实有数百万个,类别有超过5000个,这样分类速度太慢。转而我直接采用 Pytorch 写了一个textCNN 进行更精准的分本分类,这是主要的代码: 训练: ![输入图片说明](code1.png) 使用模型(开发机上): ![输入图片说明](code2.png) 完成代码编写和网络的简单运行后,你需要把代码重新放到编译机上(有python环境的centos系统),重新运行代码,确保代码跑的通,之后,需要按照下面的步骤对程序进行编译和封装。 ### 2.2 使用Pyinstaller简单解决程序编译 切到测试机的系统中,使用 Pyinstaller YourPythonScript.py -F 编译你的程序 ![输入图片说明](code3.png) 编译的过程中,你可能会遇到如下问题: ① no moudle named *** ,因为Pyinstaller没能成功识别你导入的包,需要在Spec文件中添加hidden-imports并重新运行 pyintaller YourPythonScript.spec 编译文件。详见:https://zhuanlan.zhihu.com/p/40716095 ②no file named *** ,因为你的程序用到了本地的文件,需要在Spec文件中添加datas并重新运行 pyintaller YourPythonScript.spec 编译文件。详见:https://zhuanlan.zhihu.com/p/40716095 ③ 提示函数exit() 无法执行,解决方法:把代码里面的exit()方法 改为 sys.exit(),开头导入sys包,重新编译。 ④ 其他。。。 编译成功之后,你会看到下面的画面: ![输入图片说明](code4.png) 编译成功之后,你会在dist文件夹下看到 名为 YourPythonScript的文件。你需要把它考到测试机器上。 #### 3 算法的测试 再次注意,算法的测试是放到没有python环境的linux系统中执行的,以便更好的模拟用户应用环境。将之前dist文件夹里的文件拷贝过来。使用命令 ./YourPythonScript 运行程序,看是否正常运行。 ![输入图片说明](code5.png) 你可能会遇到的问题: ① 我在编译的时候设置了datas读取本地文件,但为何测试的时候还是 file not found?你需要定义一个函数,并在每个读取本地文件的的代码外都套一个这个函数: ![输入图片说明](code6.png) ② avx 指令不支持.... 说明机器的CPU太老了,特别是08年以前的CPU,很多python的包都不支持。换CPU,如果不行,你就只能换一个更底层的算法。 ③ 其他。。。 ####4 算法的部署 测试完毕之后,将你的脚本文件提交给负责服务器的同事,或者提交给你的客户,在服务器或者客户机上(它们跟你的纯净测试机一样是没有python环境的),我们很多时候是要求算法能够自动运行或者定时运行的,这里可以使用命令: ![输入图片说明](image7.png) 这样,就实现了从开发、测试、部署的流程。 #### 5 后话 考虑到windows市场份额大,也有很多人才精通windows系统和python算法,所以我举例是在windows系统做的开发,如果你熟悉linux系统当然可以在一台机器上配置一个虚拟的linux开发机、一个虚拟的纯净的linux测试机,在开发机写代码即可,这跟你的操作系统是无关的。然后,这篇文章的目的主要是把大家可能遇到坑给排一排,结合虚拟化技术指出一条低成本的智能化转型方案,适合正在模型阶段中小型企业、适合学生党去尝试。 代码中的sgns.sogou.char.bz2 文件需自行下载 :链接: https://pan.baidu.com/s/1XL54r9jU20rRB4swnUCjdg 提取码: 2kfg #### 6 联系我 有问题可以发邮件108547205@qq.com