Have fun with sci.dog

Matlab Production Server 2021B 安装、配置、测试

本文记录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的安装包,下载后,是这个样子

matlab安装包

上图种,我们只需要用到红框里三个文件,

  • 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.

赞(3)
未经允许不得转载:SciDog » Matlab Production Server 2021B 安装、配置、测试

评论 7

  1. #1

    MPS很有意思啊,很强大,可以让matlab代码被多种外部接口调用。赞!https://www.youtube.com/watch?v=7srPEAfZPMI 我看了个视频,主要也是说matlab里的代码怎么在其他环境下共享的,也不错,matlab代码越来越接近工程应用。

    fx47223年前 (2021-10-03)回复
    • 其他的共享方式都存在两个问题,一是需要客户端安装mcr,目前21B的mcr体积达到了5G,太大了;二是matlab本身精于算法,但UI并不强大,也不够美观,不适合生产环境。MPS是一种比较适合生产环境的部署方式,只是成本略高。

      ALPFF3年前 (2021-10-06)回复
      • 23A的mrc已经9个多G了

        2339个月前 (08-17)回复
  2. #2

    博主你好!请问MPS怎么像部署函数文件一样(即.m文件),部署simulink模型(.slx文件)?我的目的是调用simulink仿真模型,得到模型的仿真结果。

    Giact2年前 (2021-11-13)回复
    • 可以尝试下写个m函数里面调用.slx模型,然后编译试试看。如果不行,可能暂时还不支持。

      ALPFF2年前 (2022-01-05)回复
  3. #3

    还有一个问题请教,我是在自己电脑安装的MPS,并在上面部署了一个计算函数。但我用别的电脑做测试,写了一个python测试,这个时候应该是要将localhost改为具体Ip地址吧,我都试了下,但测试一直失败。我在自己电脑上用localhost,也就是如文章中的步骤一样,是测试成功的。简言之,就是换个电脑做测试,就一直失败。该怎么做?

    Giact2年前 (2021-11-14)回复
    • 你需要检查2台电脑的局域网连接,再检查二者的防火墙。

      ALPFF2年前 (2022-01-05)回复