分布式Matlab计算集群建立方法与Demo
2016-08-08 13:26
323 查看
文章来源:http://hi.baidu.com/modelren/item/6a9d09ff178db405d99e7220
我的实验室有五台双核Pentium D 925计算机,这正适合用来做分布式或并行式计算。我打算只调用那些计算机中的一个核参与计算,留下一个核可以让其他人正常地使用该计算机。我们在这里将会介绍Matlab中Distributed Computing Toolbox的基本使用方法,目标是实现简单的分布式计算。
Distributed Computing Toolbox就是分布式计算工具箱,简称DCT,其可以在多台计算机组成的Cluster中实现分布式或并行式计算。简单来说,我们是把一个很繁重的工作,分解成许多小任务,然后分给不同的计算机去处理,最后把计算结果汇总,以达到提高计算效率的目的。
Matlab的做法是这样的:在每台参与计算的计算机中启动一个叫Matlab Distributed Computing Engine的服务,该服务能启动参与计算的worker的Matlab session和管理各台计算机workers的job manager。Job
manager对workers进行管理,给workers分配计算任务,接收workers计算后的结果。而你本人就是client,你要把你的工作分解为多个任务,然后把任务给job
manager。job manager就会根据workers的多少和空闲情况,适当地把任务分配给workers去做。workers完成任务后,会把结果返回给job manager。当所有workers都完成任务后,你,即是client,便可以从job
manager里取回结果。
具体的概念可以参考Matlab的帮助,我们也不能说得很准确。我们在这里只想给出使用Matlab实现分布式计算的简单步骤,以便初学者快速入门。
1、局域网IP地址分配与配置
首先第一步要做的,就是令每台要参与计算的计算机组成局域网。比如我有三台计算机,其IP地址分别为192.168.1.101-192.168.1.103,以下简称计算机名为101,102和103。
2、分布式计算引擎服务的启动
在三台计算机中安装Matlab Distributed Computing Engine(mdce)服务。
安装方法为:如Matlab的安装地址为C:\Program Files\MATLAB\R2006b,则Start->Run->cmd到命令行窗口,进入C:\Program Files\MATLAB\R2006b\toolbox\distcomp\bin目录,运行mdce
install(在Matlab2012下没找到此命令)命令安装mdce服务。接着去控制台->管理工具->服务,查看Matlab Distributed Computing Engine的属性。
进入登录页,选择“此帐户”,输入NT AUTHORITY\NetworkService,删除下面的密码,让该服务以NetworkService的形式登入,以便该服务存取共享的映射网络驱动器中的原程序文件。接着便可以启动该服务了。注意以后重新开机,该服务都会启动,当然你可以设置让它手动启动。
3、启动job manager。
任一台计算机都可以启动job manager,只要mdce服务启动了即可。比如使用计算机101,在C:\Program Files\MATLAB\R2006b\toolbox\distcomp\bin目录下,运行以下命令:复制内容到剪贴板代码:
4、启动workers。任一台计算机都可以启动workers,只要mdce服务启动了即可。比如使用计算机101,在C:\Program Files\MATLAB\R2006b\toolbox\distcomp\bin目录下,运行以下命令:复制内容到剪贴板代码:
5、共享设置
如令计算机101为client,即我们的程序在这里编写的。设程序文件位于D:\Matlab_code\testDCT中。共享出文件夹Matlab_code,在文件夹中按工具->映射网络驱动器->令盘符为Z:->文件夹里填\\192.168.1.101\Matlab_code。于是Z:\testDCT便成为放置你程序的地方了。以同样的方法,让计算机102和103都建立映射网络驱动器,令盘符为Z:,文件夹里填\\192.168.1.101\Matlab_code。这时三台机都可以通过Z:\testDCT访问原程序文件。
6、测试
这里给出测试的代码。首先写一个函数,模拟我们实际的工作。复制内容到剪贴板代码:
效率有明显的提升。但注意到,当第一次进行分布式计算时,其他几台机要从Z:\testDCT中读取原程序文件,会使得计算速度降低。
总结来说,Matlab的Distributed Computing Toolbox为我们提供了一种简便的分布式或并行式计算的实现方法。以上所写的是为了对DCT具体做法的整个过程做一次简单的介绍,我也是初学使用这个工具箱,文章可能很粗糙和存在许多谬误,敬请指正。
我的实验室有五台双核Pentium D 925计算机,这正适合用来做分布式或并行式计算。我打算只调用那些计算机中的一个核参与计算,留下一个核可以让其他人正常地使用该计算机。我们在这里将会介绍Matlab中Distributed Computing Toolbox的基本使用方法,目标是实现简单的分布式计算。
Distributed Computing Toolbox就是分布式计算工具箱,简称DCT,其可以在多台计算机组成的Cluster中实现分布式或并行式计算。简单来说,我们是把一个很繁重的工作,分解成许多小任务,然后分给不同的计算机去处理,最后把计算结果汇总,以达到提高计算效率的目的。
Matlab的做法是这样的:在每台参与计算的计算机中启动一个叫Matlab Distributed Computing Engine的服务,该服务能启动参与计算的worker的Matlab session和管理各台计算机workers的job manager。Job
manager对workers进行管理,给workers分配计算任务,接收workers计算后的结果。而你本人就是client,你要把你的工作分解为多个任务,然后把任务给job
manager。job manager就会根据workers的多少和空闲情况,适当地把任务分配给workers去做。workers完成任务后,会把结果返回给job manager。当所有workers都完成任务后,你,即是client,便可以从job
manager里取回结果。
具体的概念可以参考Matlab的帮助,我们也不能说得很准确。我们在这里只想给出使用Matlab实现分布式计算的简单步骤,以便初学者快速入门。
1、局域网IP地址分配与配置
首先第一步要做的,就是令每台要参与计算的计算机组成局域网。比如我有三台计算机,其IP地址分别为192.168.1.101-192.168.1.103,以下简称计算机名为101,102和103。
2、分布式计算引擎服务的启动
在三台计算机中安装Matlab Distributed Computing Engine(mdce)服务。
安装方法为:如Matlab的安装地址为C:\Program Files\MATLAB\R2006b,则Start->Run->cmd到命令行窗口,进入C:\Program Files\MATLAB\R2006b\toolbox\distcomp\bin目录,运行mdce
install(在Matlab2012下没找到此命令)命令安装mdce服务。接着去控制台->管理工具->服务,查看Matlab Distributed Computing Engine的属性。
进入登录页,选择“此帐户”,输入NT AUTHORITY\NetworkService,删除下面的密码,让该服务以NetworkService的形式登入,以便该服务存取共享的映射网络驱动器中的原程序文件。接着便可以启动该服务了。注意以后重新开机,该服务都会启动,当然你可以设置让它手动启动。
3、启动job manager。
任一台计算机都可以启动job manager,只要mdce服务启动了即可。比如使用计算机101,在C:\Program Files\MATLAB\R2006b\toolbox\distcomp\bin目录下,运行以下命令:复制内容到剪贴板代码:
startjobmanager -name frenseljobm该命令启动jobmanager,其名字叫frenseljobm,启动地点为计算机101。
4、启动workers。任一台计算机都可以启动workers,只要mdce服务启动了即可。比如使用计算机101,在C:\Program Files\MATLAB\R2006b\toolbox\distcomp\bin目录下,运行以下命令:复制内容到剪贴板代码:
startworker -jobmanagerhost 192.168.1.101 -jobmanager frenseljobm -name worker1此命令指明在计算机192.168.1.101中,启动名为worker1的worker,而该worker受名为frenseljobm的jobmanager管理。就是说来自乡下101的可怜工人worker1,成为万恶的监工frenseljobm的“马仔”了。接着,监工frenseljobm要在不同村102和103中雇用更多的工人worker2、worker3。运行如下的命令:复制内容到剪贴板代码:
startworker -jobmanagerhost 192.168.1.101 -jobmanager frenseljobm -name worker2 -remotehost 192.168.1.102即可在102计算机中启动一个新的,名为worker2的worker,如此类推启动103计算机的worker3。使用nodestatus命令可以查看节点的状态,加上-remotehost可以查看其他节点的状态。
5、共享设置
如令计算机101为client,即我们的程序在这里编写的。设程序文件位于D:\Matlab_code\testDCT中。共享出文件夹Matlab_code,在文件夹中按工具->映射网络驱动器->令盘符为Z:->文件夹里填\\192.168.1.101\Matlab_code。于是Z:\testDCT便成为放置你程序的地方了。以同样的方法,让计算机102和103都建立映射网络驱动器,令盘符为Z:,文件夹里填\\192.168.1.101\Matlab_code。这时三台机都可以通过Z:\testDCT访问原程序文件。
6、测试
这里给出测试的代码。首先写一个函数,模拟我们实际的工作。复制内容到剪贴板代码:
% hp.m function f = hp(m, n) H1 = zeros(n); H2 = zeros(n); for i = 1 : m H = H1 + H2; end f = H; end
function f = hp(m, n) H1 = zeros(n); H2 = zeros(n); for i = 1 : m H = H1 + H2; end f = H; end将此程序hp.m放在D:\Matlab_code\testDCT中。此函数计算n维随机矩阵的加法m次。接着建立另一个m文件,做具体的分布式计算。复制内容到剪贴板代码:
% runDCT.m tic % 寻找资源,比如jobmanager在什么地方,叫什么名字。 jm = findResource('scheduler', 'type', 'jobmanager', 'name',... 'frenseljobm', 'LookupURL', '192.168.1.101'); % 使用刚才找到的资源建立一个工作 job = createJob(jm); % 设置该工作的文件关联,让所有workers都可以找到原程序文件。 set(job, 'PathDependencies', {'Z:\testDCT'}) % 另一种方法,把用到的原程序文件传给所有workers。 % set(job, 'FileDependencies', {'hp.m'}) N = 100; M = 1000000; % 建立三个任务,每任务都是算hp(M, N)。 createTask(job, @hp, 1, {M, N}); createTask(job, @hp, 1, {M, N}); createTask(job, @hp, 1, {M, N}); % 提交工作给jobmanager。 submit(job) % 等待所有workers都把任务做完。 waitForState(job, 'finished') % 取出计算结果。 results = getAllOutputArguments(job); toc同样地,该程序runDCT.m也是放在D:\Matlab_code\testDCT中。该程序计算了三次100维矩阵的加法1000000次,即算了100维矩阵的加法3000000次。如果在单机上运行:复制内容到剪贴板代码:
>> tic, a = hp(3000000, 100); toc Elapsed time is 63.096369 seconds.而使用三台机作分布式计算时:复制内容到剪贴板代码:
>> runDCT Elapsed time is 24.323556 seconds.
效率有明显的提升。但注意到,当第一次进行分布式计算时,其他几台机要从Z:\testDCT中读取原程序文件,会使得计算速度降低。
总结来说,Matlab的Distributed Computing Toolbox为我们提供了一种简便的分布式或并行式计算的实现方法。以上所写的是为了对DCT具体做法的整个过程做一次简单的介绍,我也是初学使用这个工具箱,文章可能很粗糙和存在许多谬误,敬请指正。
相关文章推荐
- 分布式Matlab计算集群建立方法与Demo
- Spark RDD编程(Python和Scala版本)----Spark中的RDD就是一个不可变的分布式对象集合,是一种具有兼容性的基于内存的集群计算抽象方法,Spark则是这个方法的抽象。 Spa
- RDD论文翻译 --弹性分布式数据集:一种基于内存的集群计算的容错性抽象方法
- 【转】弹性分布式数据集:一种基于内存的集群计算的容错性抽象方法
- 分布式计算、并行计算及集群、网格、云计算的区别
- 使用MSCS建立SQL Server集群的方法探讨
- 大数据基础知识:分布式计算、服务器集群[zz]
- LINUX集群技术构建ANSYS分布式高性能计算平台
- 学界 | 进化算法可以不再需要计算集群,开普敦大学的新方法用一块GPU也能刷新MNIST记录
- Matlab中fileter和conv的区别及卷积的计算方法
- kafka2.9.2的伪分布式集群安装和demo(java api)测试
- Matlab函数运行时间的三种计算方法
- fourinone 四不像 分布式计算 上手demo
- 不用递归的方法计算米粒的个数和每个米粒的面积,matlab实现
- 建立抽象类Student,添加属性学号,姓名,平均分,添加方法show()显示学生的个人信息(学号,姓名),添加抽象方法average()计算学生的平均成绩。建立Student的子类studentIT
- 基于分布式数据库的存储和hadoop的分布式计算的分布式sql计算方法
- 数学思想方法-分布式计算-linux/unix技术基础(3)
- <一>基于Fourinone实现分布式计算上手指南和demo
- 云计算、分布式计算、并行计算、网格计算、集群
- Julia计算集群的建立和配置