本文记录Matlab Production Server 的安装、配置和测试,Matlab Production Server ,以下简称为mps或者MPS.
一、Matlab Production Server是什么?
简单来说,MPS是matlab的一个Web API服务器,它可以提供http访问的api接口,其他编程语言调用这些接口就可以执行matlab内置函数或者用户编写的matlab函数。
举个例子,小王使用matlab编写了一个牛逼的优化算法,函数名称为welloptim,小李要用C#开发一个软件,该软件里有一个地方要调用一个优化算法,正好看上了小王写的这个算法,但小李的C#无法直接调用weloptim函数。此时,小王就可以在自己的电脑上搭建mps,把welloptim以http api的形式提供给小李。小李在自己的C#里面直接访问这个http api就可以完成优化计算。
详细的介绍,可以看mathworks公司的介绍:
MATLAB Production Server 产品信息 – MATLAB (mathworks.cn)
二、MPS的安装
1、首先,下载MATLAB 2021B的安装包,下载后,是这个样子
上图种,我们只需要用到红框里三个文件,
- 20G的R2021b_Windows.iso是安装文件
- license.lic是许可文件
- libmwlmgrimpl.dll是破解文件
2、安装
这里需要一个mps的密钥,目前网上并未找到2021b的mps密钥,笔者找了一个mps的2021a的密钥,发现也可以使用。
密钥为:40236-45817-26714-51426-39281
下一步选择许可证文件,选择license.lic文件即可,图省略
到这里,已经可以开始正常安装mps了。直接安装即可。
ok,安装完成。最好一部要用破解文件libmwlmgrimpl.dll替换安装路径下的这个文件。
完成这一步,整个安装就完成了。
三、配置
1、开启管理服务器
mps提供了一个web前台网页用来管理mps服务器,当然也提供了命令行的管理方式。为了方便,这里我们直接使用第一种方式。
以管理员权限打开一个命令行,切换路径到mps的安装路径,进入dashboard目录。
执行dashboard路径下mps-dashboard.bat,首先给定参数 setup。执行后,提示让你指定一个mps实例的存储位置,包括实例的配置文件,log文件,函数文件。
cd "这里进入mps的dashboard目录"
.\mps-dashboard.bat setup
成功后,继续执行
.\mps-dashboard.bat start
此时,看到下图的端口号,说明mps管理服务器开启成功,此时有防火墙的需要同意。
打开浏览器,输入127.0.0.1:9090,即可访问管理网站
默认的用户名、密码均为admin
2、创建mps服务器
这个很容易,点鼠标就可以,这里要注意的是。mps可以为之前的6个版本的matlab提供api接口。matlab2021B的版本号为9.11,也就是说,mps2021b是支持9.6-9.11之间的版本的,按照年份算,是2018A–2021B。需要下载对应版本的MCR。地址为(搜索Matlab runtime)
MATLAB Runtime – MATLAB Compiler – MATLAB (mathworks.cn)
笔者下载安装了9.10 和9.11两个版本的mcr。测试的时候建立了2个mps服务器实例,分别命令为mps_21A和mps_21B。如下图
建立实例后,可以在自己设置存放实例(上一步骤设置的)的目录看到创建的2个实例
我们可以通过前台界面修改两个实例的配置文件,也可以直接到这两个实例里面去修改配置文件,这里用第二种方式。
这里,只需要修改三个地方
- http:这里输入api的端口号,每个实例要给不同的端口号,并且该端口号不能与系统已有端口冲突。笔者第一个实例的端口号为9910,第二个为9911
- license:这里输入许可文件的路径,或者许可服务器的地址(27000@IP)
- mcr-root:这里输入mcr的路径,笔者一个是9.10(mps_21A),另一个是9.11(mps_21B)
另一个实例的配置文件如下图
OK,记得保存配置文件。再次进入web管理界面,点击绿色箭头即可开启实例。
如果失败,应该是某一个步骤忘记了,或者配置错了。
四、测试
这里笔者以python为例来调用借口。
1、编写matlab函数
这里笔者写了一个简单的加法函数,名称为fun_add.m
function y = fun_add(a,b)
y = a+b;
2、编译和配置
分别使用matlab2021A和matlab2021B 的production server compile编译,得到两个ctf文件
在mps管理页面的两个实例里面分别加载这两个实例,mcr的版本要对应。
3、python配置
具体的配置方法,看文档:
MATLAB Production Server Documentation – MathWorks 中国
复制mps安装目录下的client\python 目录到任何路径
打开python执行
python .\setup.py install
即可成功安装相关组件。
4、编写python测试
from matlab.production_server import client
# exec MATLAB R2021A interface
client_obj = client.MWHttpClient("http://localhost:9910")
a1 = 1
a2 = 2
re = client_obj.fun_add_21A.fun_add(a1,a2)
print("21A interface result:"+str(re))
client_obj.close()
# exec MATLAB R2021B interface
client_obj = client.MWHttpClient("http://localhost:9911")
a1 = 1
a2 = 2
print("21B interface result:"+str(re))
client_obj.close()
这里的fun_add_21A是cft文件的文件名,也是应用的名称,fun_add是matlab的函数名称。
程序直接结果为
[Running] python -u "e:\dddd\repos\mpstest\test.py"
21A interface result:3
21B interface result:3
[Done] exited with code=0 in 0.288 seconds
OK,测试成功~
五、注意事项
- 每一个mps服务器可以建立多个实例,每个实例具有不同的端口号,可以实例可以上传多个ctf文件,每个ctf文件代表一个应用,ctf文件的文件名就是应用的名称,每个ctf文件可以包含多个m函数,每个函数就是方法。这里要区分实例、应用和方法。
- 所有实例,不论mcr版本如何,mps检查许可时,检查的是mps本身的许可,mcr是free的不需要许可,因此,所有实例的许可都使用matlab2021b的许可文件即可。不要用license_server.lic,也不需要安装licensen management.
MPS很有意思啊,很强大,可以让matlab代码被多种外部接口调用。赞!https://www.youtube.com/watch?v=7srPEAfZPMI 我看了个视频,主要也是说matlab里的代码怎么在其他环境下共享的,也不错,matlab代码越来越接近工程应用。
其他的共享方式都存在两个问题,一是需要客户端安装mcr,目前21B的mcr体积达到了5G,太大了;二是matlab本身精于算法,但UI并不强大,也不够美观,不适合生产环境。MPS是一种比较适合生产环境的部署方式,只是成本略高。
23A的mrc已经9个多G了
博主你好!请问MPS怎么像部署函数文件一样(即.m文件),部署simulink模型(.slx文件)?我的目的是调用simulink仿真模型,得到模型的仿真结果。
可以尝试下写个m函数里面调用.slx模型,然后编译试试看。如果不行,可能暂时还不支持。
还有一个问题请教,我是在自己电脑安装的MPS,并在上面部署了一个计算函数。但我用别的电脑做测试,写了一个python测试,这个时候应该是要将localhost改为具体Ip地址吧,我都试了下,但测试一直失败。我在自己电脑上用localhost,也就是如文章中的步骤一样,是测试成功的。简言之,就是换个电脑做测试,就一直失败。该怎么做?
你需要检查2台电脑的局域网连接,再检查二者的防火墙。