h.l*_*l.m 14 parallel-processing foreach r amazon-ec2 snowfall
我无法从R初始化与AWS EC2实例的连接,因为我似乎一直在收到错误:Permission denied (publickey)
我目前正在使用Mac OS X 10.6.8作为我的操作系统
我尝试在终端($)和R(>)中运行的代码如下:
$ R --vanilla
> require(snowfall)
> sfInit(parallel=TRUE,socketHosts =list("ec2-xx-xxx-xx-xx.zone.compute.amazonaws.com"))
Permission denied (publickey)
Run Code Online (Sandbox Code Playgroud)
但奇怪的是,当我尝试ssh到实例时,我不需要密码,因为我已经在初始化时将公钥导入实例,(我认为)
所以从我的正常终端...跑步时
$ ssh ubuntu@ec2-xx-xxx-xx-xx.zone.compute.amazonaws.com
Run Code Online (Sandbox Code Playgroud)
它会自动连接...(所以我不是100%确定它是否是无密码问题,例如在AWS中使用雪(和降雪)在R中进行并行处理)
我试过在键等上查看相当数量的材料,但似乎没有任何差别.我~/.ssh/authorized_keys
也是一个文件夹而不是文件由于某种原因,我甚至在尝试时都无法访问它sudo cd .ssh/authorized_keys
...在权限方面drw-------
最终的目标是连接到很多ec2实例并foreach
用来执行一些并行处理...但是现在连接到一个也很好...我也想使用我自己的ami所以starcluster不是我真正想要的......(除非我能够使用私有amis并私下运行所有命令......)
另外如果doRedis比有人能告诉我如何从本地机器连接到ec2实例那样好,那也是好的...
编辑
我已经设法使用parallel
包来处理ssh无密码登录makePSOCKcluster
,如R和makePSOCKcluter EC2 socketConnection所示 ......但现在遇到的socketConnection
问题如链接中的问题所示...
任何想法如何连接到它?
还证明一切正常,我想这意味着以下命令/函数可以用于获取所有不同的IP地址
d <- parLapply(cl1, 1:length(cl1),function(x)system("ifconfig",intern=T)[2])
Run Code Online (Sandbox Code Playgroud)
函数cl1
的输出在哪里make*cluster
注意,因为赏金真的是针对链接中的问题....我不介意你提出哪个问题的答案...但只要在这个问题上写了一些东西就把它与正确的答案联系起来关于相关问题,那么我将相应地奖励积分......
在尝试将主节点保持在本地时,我也遇到了很多关于并行EC2设置的问题.使用StarCluster来设置池有很大帮助,但真正的改进来自于使用StarCluster 并在EC2私有IP池中拥有主节点.
StarCluster为所有节点以及所使用的任何安装设置所有密钥处理.动态节点分配不可行,但除非现场实例将长期使用且您的出价策略不"保留"您的实例,否则动态分配应该是一个问题.
其他一些经验教训:
我对slave连接和serialize/unserialize有一个很大的问题,发现其中一个是连接限制,并且连接限制需要减少节点数量; 当控制脚本停止时,最简单的清理方法是重新启动主R会话,并使用脚本终止从属进程而不是等待超时.
设置确实需要一些工作,但希望这些想法有助于......
虽然是8个月之前,StarCluster和R都改变了这里的一些设置......你会在StarCluster文档中找到90%.
这是一个例子......
[cluster Rnodes2]
EXTENDS=smallcluster
MASTER_INSTANCE_TYPE = cc1.4xlarge
MASTER_IMAGE_ID= ami-7621f91f
NODE_INSTANCE_TYPE = cc2.8xlarge
NODE_IMAGE_ID= ami-7621f91f
CLUSTER_SIZE= 8
VOLUMES= rdata
PLUGINS= pkginstaller
SPOT_BID= 1.00
Run Code Online (Sandbox Code Playgroud)
创建共享卷后,定义只是:
[volume rdata]
VOLUME_ID = vol-1145497c
MOUNT_PATH = /rdata
Run Code Online (Sandbox Code Playgroud)
软件包安装程序确保所有节点上的最新(和相同)R版本.
[plugin pkginstaller]
setup_class = starcluster.plugins.pkginstaller.PackageInstaller
packages = r-base, r-base-dev, r-recommended
Run Code Online (Sandbox Code Playgroud)
最后,访问ssh和RStudio服务器的权限.通过代理的Https会更安全,但由于RStudio仅用于控制脚本设置...
[permission ssh]
# protocol can be: tcp, udp, or icmp
protocol = tcp
from_port = 22
to_port = 22
# [permission http]
protocol = tcp
from_port = 8787
to_port = 8787
Run Code Online (Sandbox Code Playgroud)
然后使用StarCluster接口启动集群.它处理所有访问控制,系统名称,共享等...一旦集群运行,我就从本地系统运行ssh会话,并运行脚本来停止超线程:
#!/bin/sh
# disable hyperthreading
for cpunum in $(
cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list |
cut -s -d, -f2- | tr ',' '\n' | sort -un); do
echo 0 > /sys/devices/system/cpu/cpu$cpunum/online
done
Run Code Online (Sandbox Code Playgroud)
然后在每个会话上启动htop会话,以监控导出的检查点日志的可伸缩性.
然后,登录到主服务器,启动一个屏幕会话(我已经更喜欢byobu)并从StarCluster安装的卷中启动R.这样当集群由于某种原因停止时,我可以通过启动R轻松地再次设置.一旦在R中,第一件事是workers.list
使用nodeXXX
名称创建变量,这简直就是:
cluster.nodes <- c("localhost", paste("node00", 1:7, sep='' ) )
workers.list <- rep( cluster.nodes, 8 )
Run Code Online (Sandbox Code Playgroud)
然后我加载了控制脚本,退出并保存了工作区.控制脚本处理导出和检查点的所有表输出以及生产包的par包装调用.该脚本的主要功能还采用了一个cpus
参数,该参数是放置工作者列表的位置,然后将其传递cores
给集群初始化程序.
initialize.cluster <- function( cores )
{
if( exists( 'cl' ) ) stopCluster( cl )
print("Creating Cluster")
cl <- makePSOCKcluster( cores )
print("Cluster created.")
assign( 'cl', cl, envir=.GlobalEnv )
print( cl )
# All workers need to have the bounds generator functions...
clusterEvalQ( cl, require('scoreTarget') )
# All workers need to have the production script and package.
clusterExport( cl, varlist=list('RScoreTarget', 'scoreTarget'))
return ( cl )
}
Run Code Online (Sandbox Code Playgroud)
一旦R会话重新启动(在最初创建worker.list之后),控制脚本就被获取,并且主要的func被调用.就是这样.通过这种设置,如果集群停止了,我只是退出主机上的rsession; 通过每个从站上的htop停止从站进程并再次启动.
这是一个行动的例子::
R
R version 2.15.0 (2012-03-30)
Copyright (C) 2012 The R Foundation for Statistical Computing
ISBN 3-900051-07-0
Platform: x86_64-pc-linux-gnu (64-bit)
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
Natural language support but running in an English locale
R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
[Previously saved workspace restored]
> source('/rdata/buildSatisfactionRangeTable.R')
Loading required package: data.table
data.table 1.7.7 For help type: help("data.table")
Loading required package: parallel
Loading required package: scoreTarget
Loading required package: Rcpp
> ls()
[1] "build.satisfaction.range.table" "initialize.cluster"
[3] "initialize.table" "parallel.choices.threshold"
[5] "rolled.lower" "rolled.upper"
[7] "RScoreTarget" "satisfaction.range.table"
[9] "satisfaction.search.targets" "search.range.bound.offsets"
[11] "search.range.bounds" "search.range.center"
[13] "Search.Satisfaction.Range" "update.bound.offset"
[15] "workers.list"
> workers.list
[1] "localhost" "localhost" "localhost" "localhost" "localhost" "localhost"
[7] "localhost" "localhost" "node001" "node002" "node003" "node004"
[13] "node005" "node006" "node007" "node001" "node002" "node003"
[19] "node004" "node005" "node006" "node007" "node001" "node002"
[25] "node003" "node004" "node005" "node006" "node007" "node001"
[31] "node002" "node003" "node004" "node005" "node006" "node007"
[37] "node001" "node002" "node003" "node004" "node005" "node006"
[43] "node007" "node001" "node002" "node003" "node004" "node005"
[49] "node006" "node007" "node001" "node002" "node003" "node004"
[55] "node005" "node006" "node007" "node001" "node002" "node003"
[61] "node004" "node005" "node006" "node007" "node001" "node002"
[67] "node003" "node004" "node005" "node006" "node007" "node001"
[73] "node002" "node003" "node004" "node005" "node006" "node007"
[79] "node001" "node002" "node003" "node004" "node005" "node006"
[85] "node007" "node001" "node002" "node003" "node004" "node005"
[91] "node006" "node007" "node001" "node002" "node003" "node004"
[97] "node005" "node006" "node007" "node001" "node002" "node003"
[103] "node004" "node005" "node006" "node007" "node001" "node002"
[109] "node003" "node004" "node005" "node006" "node007" "node001"
[115] "node002" "node003" "node004" "node005" "node006" "node007"
> build.satisfaction.range.table(500000, FALSE, workers.list )
[1] "Creating Cluster"
[1] "Cluster created."
socket cluster with 120 nodes on hosts ‘localhost’, ‘node001’, ‘node002’, ‘node003’, ‘node004’, ‘node005’, ‘node006’, ‘node007’
Parallel threshold set to: 11000
Starting at: 2 running to: 5e+05 :: Sat Apr 14 22:21:05 2012
Run Code Online (Sandbox Code Playgroud)
如果您已经阅读了这里,那么您可能有兴趣知道我测试了每个群集设置(包括openMPI)并发现没有速度差异,也许这是因为我的计算所在的CPU绑定,也许不是.
此外,即使与HPC合作可能会很痛苦,也不要放弃.这完全是值得的.我仍然在等待完成我运行的计算的前100,000次迭代,如果我在商品工作站上坚持使用base-R中的天真实现(好吧,不是因为我永远不会坚持使用R:D).通过集群,在一周内完成了384,000次迭代.完全值得花时间(并且需要花费很多时间)才能进行设置.
归档时间: |
|
查看次数: |
2968 次 |
最近记录: |