主要内容

并行统计计算中的再现性

再现平行计算的问题和考虑因素

一种可重复的计算是每次运行时提供相同的结果。再现性对于以下是重要的:

  • 调试 - 纠正异常结果,您需要重现结果。

  • 信心 - 当您可以重现结果时,您可以调查和理解它们。

  • 修改现有代码 - 当您更改现有代码时,您要确保您不会破坏任何内容。

通常,您无需确保计算的可重复性。通常,当您想要再现性时,最简单的技术是在串行而不是并行运行。在串行计算中,您可以简单地调用RNG.功能如下:

S = RNG%获取随机流的当前状态运行统计功能RNG(s)%重置流到先前状态%再次运行统计功能,获得相同的结果

本节在函数使用随机数时解决了这种情况,并且您希望并行再现结果。当您希望在串行中并行时,此部分还解决了这种情况。

运行可重复的并行计算

要重复运行统计和机器学习工具箱™功能:

  1. 设定Userumstreams.选择真的使用实例化

  2. 设定溪流支持子流的类型的选项:金宝app'mlfg6331_64'或者'MRG32K3A'。有关这些流的信息,请参阅randstream.list.

  3. 要平行计算,请设置使用指α.选择真的

  4. 使用并行使用合奏fitcensemble.或者fitrensemble.,创建一个树模板'可重复'名称 - 值对设置为真的

    t = templatetree('可重复',真的);ens = fitcensemble(x,y,'方法''包''学习者',t,......'选项',选项);
  5. 使用选项结构调用函数。

  6. 要重现计算,重置流,然后再次调用函数。

要了解为什么这种技术提供重复性,请参阅SubStreams如何启用可重复的并行计算

例如,使用'mlfg6331_64'用于可重复计算的流:

  1. 创建适当的选项结构:

    s = randstream('mlfg6331_64');选项= statset('使用指平行',真的,......'溪流',s,'userubstreams',真的);
  2. 运行并行计算。有关说明,请参阅快速启动并行计算统计和机器学习工具箱

  3. 重置随机流:

    重置;
  4. 重新运行并行计算。你获得了相同的结果。

对于并行计算的示例运行此可重复的方式,请参阅可重复的并行引导并行列车分类集合

使用随机数的并行统计计算

什么是子流?

一种底层是随机流的一部分randstream.可以快速访问。有一个数字m这对于任何正整数K.randstream.可以去km.流中的伪随机数。从那时起,randstream.可以生成流中的后续条目。目前,randstream.m= 272.,约5e21或更多。

不同子流中的条目具有良好的统计属性,类似于单流中的条目的属性:独立性,缺乏K.在各种滞后的回合相关性。子流是长时间的,可以将子流视为独立流,如下图片所示。

randstream.流类型支持子流:金宝app'mlfg6331_64''MRG32K3A'

SubStreams如何启用可重复的并行计算

当matlab.®执行并行执行计算议案,每个工作人员以不可预测的顺序接收循环迭代。因此,您无法预测哪个工作者获取哪个迭代,因此无法确定与每个迭代相关联的随机数。

子流允许MATLAB将每个迭代绑定到特定的随机数序列。议案给每次迭代是索引。迭代使用索引作为子流编号。由于随机数与迭代相关联,而不是与工人相关联,因此整个计算是可重复的。

为了获得可重复的结果,只需重置流,并且再次调用时,所有子流都会生成相同的随机数。当所有工人使用相同的流时,此方法成功,并且流支持子流。金宝app这结论了对程序的讨论运行可重复的并行计算提供可重复的并行结果。

客户或工人上的随机数

在将它们分发到并行工人之前,少数函数在客户端生成随机数。工人不使用随机数,所以纯粹的确定性地操作。对于这些函数,您可以使用任何随机流类型重复运行并行计算。

以这种方式运行的功能包括:

要获得相同的结果,请重置客户端上的随机流,或者您传递给客户端的随机流。例如:

S = RNG%获取随机流的当前状态运行统计功能RNG(s)%重置流到先前状态%再次运行统计功能,获得相同的结果

虽然此方法使您能够并行运行可重复运行,但结果可以与串行计算不同。差异的原因是议案循环以相反的顺序运行为了循环。因此,串行计算可以以与并行计算不同的顺序产生随机数。为了不概念再现性,使用该技术运行可重复的并行计算

明确分发流

对于使用特定随机数算法进行测试或比较,您必须设置随机数生成器。您如何并行设置这些生成器,或以特定方式初始化每个工作人员的流?或者您可能希望使用与您已运行的任何其他序列使用不同的随机数进行计算。如何确保您使用的序列是统计上独立的?

并行统计和机器学习工具箱函数允许您显式在每个工作人员上设置随机流。有关信息的信息创造多个流,进入帮助randstream / create在命令行。使用使用的四个独立流'MRG32K3A'发电机:

s = randstream.Create('MRG32K3A','numstreams',4,...'celloutput',true);

使用这些流将这些流传递给统计功能溪流选项。例如:

Parpool(4)%如果至少有4个核心s = randstream.Create('MRG32K3A','NumStreams',4,...'CellOutput',True);%create 4独立流paroptions = statset('deverpallellel',true,...'streams',s);%设置4个不同的流x = [RANDN(700,1);4 + 2 * randn(300,1)];LATT = -4:0.01:12;myfun = @(x)ksdensity(x,latt);pdfestimate = myfun(x);b = bootstp(200,myfun,x,'选项',paroptions);

这种分发流的方法为每个工作人员提供了不同的不同流。但是,它不允许可重复的计算,因为工人以不可预测的顺序执行200个引导。如果要执行可重复的计算,请使用如上所述的子流运行可重复的并行计算

如果你设置了Userumstreams.选择真的,然后设置溪流选项支持子流的类型的单个随机流(金宝app'mlfg6331_64'或者'MRG32K3A')。此设置提供可重复的计算。