主要内容

统计计算并行再现性

问题在繁殖并行计算和注意事项

一个可再生的计算出相同的结果是每次它运行。再现性是很重要的:

  • 调试正确——一个反常的结果,你需要复制的结果。

  • 信心——当你可以复制的结果,你可以调查和理解他们。

  • 修改现有的代码,当你改变现有代码,你想确保你不要破坏任何东西。

一般来说,你不需要确保再现性计算。通常来说,当你想要重现性,最简单的方法是运行在串行并行代替。在串行计算您可以简单地调用rng函数如下:

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

这部分地址当你的函数使用随机数,并行而你想要的可重复的结果。这一节还解决了并行情况下当你想要同样的结果序列。

运行的并行计算

运行统计和机器学习工具箱™函数可再生产地:

  1. 设置UseSubstreams选项真正的使用statset

  2. 设置选择一个类型,支持substreams:金宝app“mlfg6331_64”“mrg32k3a”。在这些流的更多信息,请参阅RandStream.list

  3. 并行计算,设置UseParallel选项真正的

  4. 适合一个并行使用fitcensemblefitrensemble,创建一个树的模板“复制”名称-值对将真正的:

    t = templateTree (“复制”,真正的);实体= fitcensemble (X, Y,“方法”,“包”,“学习者”t“选项”、选择);
  5. 调用该函数的选择结构。

  6. 复制的计算,重置流,然后再次调用该函数。

要理解为什么这种技术给再现性,明白了Substreams使可再生的并行计算如何

例如,使用“mlfg6331_64”流的计算:

  1. 创建一个适当的选择结构:

    s = RandStream (“mlfg6331_64”);选择= statset (“UseParallel”,真的,“流”年代,“UseSubstreams”,真正的);
  2. 运行您的并行计算。说明,请参阅快速启动并行计算的统计和机器学习工具

  3. 重置随机流:

    重置(年代);
  4. 重新运行你的并行计算。您获得相同的结果。

对并行计算的例子运行这个可再生的方式,明白了可再生的并行自举火车并行分类合奏

并行使用随机数统计计算

Substreams是什么?

一个substream是一个随机的一部分流RandStream很快可以访问。有一个号码这样,对于任何正整数k,RandStream可以去公里th伪随机数流。从这一点上,RandStream可以生成后续流中的条目。目前,RandStream= 272年大约5 e21,或者更多。

不同的条目substreams具有良好的统计特性,类似于一个流条目的属性:独立,和缺乏k方法相关性在不同滞后。substreams这么长时间,您可以查看substreams作为独立的溪流,如以下图片。

两个RandStream支持substreams流金宝app类型:“mlfg6331_64”“mrg32k3a”

Substreams使可再生的并行计算如何

当MATLAB®执行并行计算parfor在不可预知的,每个工人接收循环迭代顺序。因此,你不能预测哪个工人得到迭代,所以不能确定相关的随机数每次迭代。

Substreams允许MATLAB将每次迭代中一个特定序列的随机数。parfor给每个迭代索引。迭代使用索引作为substream号码。由于随机数与迭代相关联,而不是工人,整个计算是可再生的。

获得可重复的结果,只是重置流,substreams再次调用时产生相同的随机数。该方法成功当所有的工人使用相同的流,流支持substreams。金宝app讨论的过程到此结束运行的并行计算为可再生的平行的结果。

随机数在客户端或工人

前几个函数产生随机数在客户端分布并行的工作。工人们不使用随机数,因此操作纯粹的确定性。对于这些函数,您可以运行一个并行计算可重复使用任何随机流类型。

这样的功能操作包括:

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

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

虽然这种方法使您能够并行地运行,其结果可能不同于一个串行计算。差异的原因parfor循环运行在相反的顺序循环。因此,一个串行计算可以生成随机数比并行计算以不同的顺序。对于明确的再现性,使用的技术运行的并行计算

分配流明确

为测试或使用特定的随机数算法比较,你必须设置随机数生成器。如何设置这些发电机并联或初始化流在每一个工人在一个特定的方式?或者你可能想要运行一个计算使用不同的随机数序列比任何其他运行。你怎么能保证你使用的序列是统计独立的?

并行统计和机器学习的工具箱函数允许您显式地设置每个工人随机流。的信息创建多个流,输入帮助RandStream /创建在命令行中。使用创建四个独立的流“mrg32k3a”发电机:

s = RandStream.create (‘mrg32k3a’,‘NumStreams 4…“CellOutput”,真正的);

通过这些流统计函数使用选择。例如:

parpool(4) %如果你有至少4芯s = RandStream.create (‘mrg32k3a’,‘NumStreams 4…“CellOutput”,真正的);% 4创建独立的溪流paroptions = statset (UseParallel,真的,…流,年代);%设置4种不同流x = [randn (700 1);4 + 2 * randn (300 1)];奈= 4:0.01:12;myfun = @ (X) ksdensity (X,奈);pdfestimate = myfun (x);myfun B = bootstrp(200年,x,“选项”,paroptions);

这种分配方法流给每个工人不同的流计算。但是,它不允许重复计算,因为工人执行200接连在不可预知的秩序。如果你想执行一个可再生的计算,使用substreams作为描述运行的并行计算

如果你设置UseSubstreams选项真正的,然后设置选择一个随机的支持substreams类型(金宝app“mlfg6331_64”“mrg32k3a”)。这个设置了重复计算。