设置 H2O 集群,同时 运行 几个需要访问集群的 R 程序(接近 20 个)

Setting up H2O cluster while running several R programs (close to 20) that needs access to cluster

我必须 运行 使用不同参数并行(通过批处理)相同的 R 脚本。 R 脚本构建 H2O 模型并为其评分。在这种情况下,我应该

  1. 为 R 脚本的每个批次 运行 设置一个单独的集群?

(或)

  1. 创建一个公共集群并设置脚本以使用它?

我更喜欢后一种解决方案,但我不确定如何为这么多批次自动初始化和关闭 H2O 集群。第一批必须创建集群(H2O.init(),最后一批必须将其关闭)

为每个 R 会话设置单独的 h2o 集群是理想的。

在使用 h2o::h2o.init() 启动 h2o 集群时,请确保为每个 R 会话指定不同的这些(每个脚本 运行 它自己的 R 会话):

  • ip/port(本地主机下的端口尚未占用)
  • name(通过top/htop在终端上检查其progress/usage)

根据需要更改其他选项。每个 R 会话都知道它是 运行 的 h2o 集群,h2o::h2o.shutdown() 只会关闭特定的 h2o 集群。

设置单个集群,并让所有脚本使用它是推荐的方法,因为它更高效。每个集群都有内存开销,所以你的 20 个单独的集群会很浪费(如果有任何静态数据 tables 所有你的脚本都需要使用,则更是如此)。您还必须猜出每个人的正确金额。

另一方面,如果您的 20 个脚本每个都将引用特定的 table,例如用他们自己的数据加载它,并且通常假设它们是唯一的脚本 运行ning,你会遇到一个问题:你要么需要修改脚本以使其表现良好,要么 运行 每个脚本自己ip/port.

I am not sure how to automate initialization and shutting down of the H2O cluster for so many batches. The first batch has to create the cluster (H2O.init() and the last batch has to shut it down)

Start H2O from the commandline 在第一个脚本 运行 之前,并在所有脚本完成后手动终止它。通过这种方式,每个脚本在执行 h2o.init() 调用时会发现它已经 运行ning。

如果您必须完全自动化,请确保启动命令将首先 运行,但您需要某种观察程序脚本来通知所有其他进程何时完成。 (我倾向于 运行 在 cron 作业上 psgrep 的组合;当然还有更复杂的方法。)