Matlab 集群计算平台搭建

家庭云服务器高阶应用:通过Matlab分布式计算来演示所谓的“家庭云计算”(非云储存)(转)

Matlab是强大的计算软件,这不需要过多介绍了,大到航天航空领域,小到计算方程式,Matlab无处不在。

像是这种大型的计算工具必然要支持分布式群集计算功能,即让多台电脑、服务器,协同计算同一数据,以实现“人多力量大”的加速效果。

我本人不会使用Matlab,但出于对老婆的关心,考虑到她常因电脑性能不足,而为了一个计算登上数个小时,我决心利用家里的电脑资源(家庭服务器+家庭日用电脑主机)来打造一个基本的Matlab计算群集,以达到加速效果。而这样的一个布局,也正符合了我当初设计的“家庭云”的理念。

有了Matlab云集,上网本现在都可以跑大型计算了~ 

 

 

第一步:安装Matlab及其分布式计算服务(MDCE)

MDCE服务是需要另外购买的,学生版不提供(盗版基本都包括了)。

 

- 安装Matlab程序的部分我就省略了。安装好以后,请运行Matlab(我以2013a版本为范例)
- 在顶端地址栏部分打开以下路径:C:\Program Files\MATLAB\R2013a\toolbox\distcomp\bin (见下图)

 

 

- 然后分先后运行 !mdce install 以及 !mdce start (注意指令前面的感叹号!)

此时可以右键点击左边的addMatlabToWindowsFirewall.bat,然后选择在Windows资源管理器中打开,然后以管理员身份运行。这样的目的是为了打开防火墙中Matlab分布式计算的对应端口。

到这里就算完成Matlab分布式计算服务的安装了。需要注意的是:所有将参与该计算群集或使用该计算群集功能的服务器和计算机都需要完成以上操作,包括很弱的上网本也要,不开启MDCE服务是不能连接计算机群的

 

 

第二步:进行机群的配置

光是完成以上安装还不行,还要进行配置,即把所有可以用的计算机资源都联系捆绑在一起。

· 具体操作是在刚才打开防火墙的批运行文件目录下(C:\Program Files\MATLAB\R2013a\toolbox\distcomp\bin),以管理员身份再运行admincenter.bat文件,然后就会看见下图:

 

当然我们首先点击那个“Add or Find”,然后被要求输入主机名或相应IP地址(如果有多台主机,则需要重复此项操作将其全部加入)

完成后结果如下:

 

现在我有三台四核CPU电脑在计算机群内,且都开启了MDCE服务,接下来我要做的就是建立一个Job,然后选择开启的总线程,然后做一个示范性计算。

· 建立Job就是点上图中间部分左侧的Start
· 然后随便写一个名字,我用Job1
· 然后选择由哪台电脑作为主机来发起该计算 (见下图)

然后设置要开启的总线程(workers),由上图可见,三台四核CPU主机一共可以提供12个workers,即12条线程同时启动进行Matlab并行计算。

这里要说明一下的是,“核心”是指电脑的物理核,多线程不算核心,譬如Intel i7 四核8线程CPU只能作为四核对待,只能提供4个worker,而AMD的FX八核处理器,由于是物理核,则能提供8个worker

还有一点,服务器集群中的worker必须要统一,即大家都必须使用同等数量的worker来协同工作,不能某一台性能强点就开启四核,另一台弱点只开启两核,这样不行!所以,请不要把双核CPU、四核CPU混在一起作为一个集群,除非你只打算在四核主机上开启两个worker。

以上图为例,我勾选了全部三台主机作为计算集群,然后每台开启四个核,即四个worker,然后总共有12个worker将为我同时进行计算。

到这里,配置部分就完成了。接下来要在Matlab操作机器上调用以上配置。Matlab称之为Cluster Profile

 

第三步:Matlab客户机调用集群

回到Matlab主程序,打开下图显示的Manage Cluster Profiles

 

打开上述管理器后,默认情况下只有一个local档案(这是给Matlab开启本机多核计算的档案,不要删除了)。我们直接点击那个Discover Clusters就可以了,不需要手动配置,选择On your network(本地局域网内)

完成后看到下图

我用1和2表明了先后要做的两件事:1.给档案改名(右键然后选择改名,我改为cluster)。2.检测一下是否一切正常

全部测试通过!如果你有某项测试未通过,可以点击感叹号看到具体原因,很多时候是防火墙造成的,注意执行前面提到的开启防火墙。(如果实在是弄不清防火墙设置,可以索性关闭了~

到这里就大功告成了!演示一下开启12个worker进行计算

 matlabpool open cluster; 是调用cluster配置文件,开启12个worker的指令,右下角显示的是成功开启的worker数量。

matlabpool close; 是关闭分布式计算/并行计算的指令,建议每次用完都执行一次。

因为我不会具体的matlab代码,所以没法演示一段12 worker一起计算的表现。根据老婆之前调用8个worker(服务器+家中主电脑)的经验,仅把for循环改为parfor循环(具体参见Matlab官方指导有关如何运用并行计算),原先一个小时的计算现在能提速2.5倍甚至更多。

 

最后:关于一些疑问和解答

1. 首先要解释一下以上Matlab的分布式计算和博客主题“家庭云”的关系。很多网站的文章在提到“家庭云”的概念时,总是暗示,甚至错误地把“云技术”与“云储存”划上等号。“云技术”说白了是服务器的利用,而在服务器端存储文件,只是云技术的一部分。Matlab的分布式计算,正巧可以帮助理解云计算的核心概念,而在家中架设一个实时开放的Matlab服务器,这就是“家庭云计算”的典型表现,超越了我之前云储存的应用范围。

 

2. 这个云目前为止只是在家中局域网的范围服务,在学校在公司,怎么使用家中的云?

如果有看过前面的博文,会知道家庭云最基本的一项功能就是提供VPN连接。我没有打算把Matlab服务器公开到互联网上,所以端口不用在路由器上映射,如果学校或公司电脑需要用到家里的云,VPN连接回家就好了,所有IP都是固定好设置好的,与在网内使用服务无异。

 

3. Matlab分布式计算的防火墙端口设置是比较麻烦的。根据官方资料,如果线程多了,所使用的端口也会相应增加。也就是说,8个worker所需要打开的端口,和12个worker所需要打开的端口是不一样的!所以,上面不会设置防火墙的网友可以索性把它关闭了。

 

4. 上网本的最高阶利用:

上网本是很弱的设备,勉强跑个Windows就可以了,谈运行Matlab?简直笑话!但是,有了云集Matlab,可以在上网本上运行任何计算。这里需要注意的是,在配置上述第二步骤的时候,上网本千万不要加入到群集中,只勾选服务器就可以了。上网本所需要做的就是把代码和数据从本机发送给服务器,然后计算的工作由服务器处理。

 

本文出自 “www.DIYPCs.com” 博客,请务必保留此出处http://cnbeta.blog.51cto.com/1234897/1193348


 完整示例clear all;

% 寻找资源。

jm = findResource('scheduler', 'type', 'jobmanager', 'name', 'myJM','LookupURL', '192.168.0.100');

% 使用刚才找到的资源建立一个工作

job = createJob(jm);

% 设置该工作的文件关联,让所有 workers 都可以找到原程序文件,需要在Client 上设置共享文件夹。

set(job, 'PathDependencies', {'\\192.168.0.101\matlab_code\','/mnt/'})

% 另一种方法,把用到的原程序文件传给所有 workers。

% set(job, 'FileDependencies', {'hm.m'});N = 5;M = 4;

% 建立 4 个任务,每任务都是算 hp(M, N)。

createTask(job, @hp, 1, {{M, N}, {M, N}, {M, N}, {M, N}});

% 提交工作给 jobmanager。

submit(job)

% 等待所有 workers 都把任务做完。

waitForState(job, 'finished')

% 取出计算结果。

results = getAllOutputArguments(job);

% 销毁 Job,释放资源

destroy(job);


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352387.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c打印无符号整数_C语言基础知识:printf的输出格式,C/C++语言编程讲解

C语言基础知识:printf的输出格式printf()函数是格式输出函数,请求printf()打印变量的指令取决与变量的类型.例如,在打印整数是使用%d符号,在打印字符是用%c 符号.这些符号被称为转换…

CGI简介

原始的HTML語言是設計用來展現靜態的資料,它讓人使用一種簡單的語法展現出豐富的多媒體資料,就像廣告看板一樣。 由於WWW具有相當大的商業用途,因此推出後大受歡迎。可是單純的靜態展示好像缺少了什麼? 如果使用者需要的資料具有時效性&…

数据分析——pyecharts

导入类库 1 from pyecharts import Pie, Bar, Gauge, EffectScatter, WordCloud, Map, Grid, Line, Timeline 2 import random make_point:标注,类似于matplotlib的text is_stack:堆叠,将同一图表中的不同图像堆叠显示 is_label_s…

第三方软件要使用QQ邮箱进行发邮件相关设置

1、要在QQ邮箱的设置界面进行相关设置。 开启相应的服务器,然后获得相应的授权密码即可。 相关参考: http://service.mail.qq.com/cgi-bin/help?subtype1&&id28&&no1001256 2、对相应的服务器和接口进行设置 相关参考:…

CGI相关介绍

一、CGI 简介CGI 是 Common Gateway Interface 的 简 称 。 其 主 要 的 功 能 是 在WWW 环 境 下 , 藉 由 从 客 户 端 传 递 一 些 讯 息 给 WWW Server , 再由 WWW Server 去 启 动 所 指 定 的 程 式 码 来 完 成 特 定 的 工 作 。所 以 更 明 确 的…

mapreduce 聚合_MapReduce:处理数据密集型文本处理–局部聚合第二部分

mapreduce 聚合这篇文章继续进行有关使用MapReduce进行数据密集型处理的书中实现算法的系列文章。 第一部分可以在这里找到。 在上一篇文章中,我们讨论了使用本地聚合技术来减少通过网络进行混洗和传输的数据量的方法。 减少传输的数据量是提高MapReduce作业效率的主…

最常出现的字符串 Most Common Word

2018-10-26 00:32:05 问题描述: 问题求解: 方法一、Trie 最长出现的字符串,最容易想到的解法就是Trie树了,于是首先使用Trie树进行了实现,代码量有点大,当然了是可以A掉的,只是对于这种Easy的题…

docker启动odoo提示module没有安装_Ubuntu20.04通过docker安装微信

到目前为止,在ubuntu20.04上使用wechat最简单的方式不是wine,而是用docker。今天就传授大家一个一定可以使用的docker安装的wine版本。首先,安装一下docker:sudo apt install docker.io sudo systemctl enable --now dockersudo s…

mysql如何在一个表中插入数据的同时,更新另一个表的数据?

三种方案,你看看哪个比较适合你1,适用于学生: 写两个方法,一个新增一个更新,在新增完了以后马上去查询一下,按主键倒叙排列,取到最新插入的id,前提主键是自增的且不是uuid,然后把查到的主键返回出去作为形参让更新方法接收到,然后更新即可.2,适用于ssh框架: 写两个事务,事务的传…

Python Web初学解惑之 WSGI、flup、fastcgi、web.py的关系

首先声明这篇文章 是我从 豆瓣 上面看到的。 原文地址 http://www.douban.com/note/13508388/?start0&postok#last 看我之后 豁然开朗,对Web的理解有加深了一层,在此再感谢一下文章的作者。写这篇文章 :一 写下 自己的理解&#xff1…

继承Javadoc方法注释

尽管用于javadoc工具的JDK工具和实用程序页面通过实现和继承方法来描述Javadoc方法注释重用的规则,但是当实际上不需要使用{inheritDoc}时,很容易不必要地显式描述注释继承,因为会使用相同的注释隐式继承。 Java 8 javadoc工具页面在“ 方法公…

C++之手写strlen函数

代码: int strlen(const char *str){ assert(str!NULL); intlen0; while((*str)!\0) len;return len; } 这个函数实现起来较为简单,注意字符指针的有效性检查。 可参考:strlen、strcpy、strcat等字符串处理函数的实现 转载于:https://www.cnb…

mysql or优化_MySQL 语句优化

官方文档放这里,有什么代码先到官方文档查询:MySQL 8.0 Reference Manual :: 8 Optimization​dev.mysql.com优化涉及多个级别的配置,调整和测量性能。 根据工作角色(开发人员,DBA或两者的组合)&#xff0c…

浅谈 MySQL 的存储引擎(表类型)

什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合。 我们通常说的MySql数据库,sql server数据库等等其实是数据库管理系统,它们可以存储数据&#…

Ubuntu如何搭建Django与Flup和Nginx环境?

Ubuntu系统越来越多的用户开始使用,本文介绍的是搭建DjangoFlupNginx环境的过程。 首先我们必须明白这这3者在该环境下发挥的作用。 1.nginx:("enginex")是一个高性能的HTTP和反向代理服务器,作用和apache的类似。它可以处理一些静…

洛谷 1137 旅行计划

【题解】 拓扑排序DP即可。 1 #include<cstdio>2 #include<cstring>3 #include<algorithm>4 #include<vector>5 #define LL long long6 #define rg register7 #define N 2000108 using namespace std;9 int n,m,front,rear,q[N],f[N],in[N]; 10 bool v…

NOT IN、JOIN、IS NULL、NOT EXISTS效率对比

语句一&#xff1a;select count(*) from A where A.a not in (select a from B) 语句二&#xff1a;select count(*) from A left join B on A.a B.a where B.a is null 语句三&#xff1a;select count(*) from A where not exists (select a from B where A.a B.a) 知道以…

python ssl_Python3 ssl模块不可用的问题

编译安装完Python3之后&#xff0c;使用pip来安装python库&#xff0c;发现了如下报错&#xff1a; $ pip install numpy pipis configured with locations that require TLS/SSL, however the ssl module in Python isnot available. Collecting numpy Retrying (Retry(total4…

shell脚本 如何切换当前目录

问题&#xff1a; 是这么个情况&#xff1a;当前目录是/root/replace/ 我想在脚本a.sh中执行该目录下的一个子目录/root/replace/scripts/下的可执行文件run.out和b.sh脚本。但是这个可执行文件run.out的文件读写要求在/scripts下&#xff0c;而b.sh脚本则是以/scripts为当前目…

使用DynamoDBMapper扫描DynamoDB项目

之前&#xff0c;我们介绍了如何使用DynamoDBMapper或底层Java api查询DynamoDB数据库。 除了发出查询之外&#xff0c;DynamoDB还提供扫描功能。 扫描的目的是获取您在DynamoDB表上可能拥有的所有项目。 因此&#xff0c;扫描不需要任何基于我们的分区键或您的全局/本地二级…