2012-11-22 13 views
14

मुझे आर से एडब्ल्यूएस ईसी 2 उदाहरण से कनेक्शन शुरू करने में परेशानी हो रही है क्योंकि मुझे त्रुटि मिल रही है: Permission denied (publickey) मैं वर्तमान में मैक ओएस एक्स 10.6.8 का उपयोग कर रहा हूं क्योंकि मेरे ओएसआर समानांतर प्रसंस्करण के लिए ईसी 2 आवृत्ति से कनेक्ट

कोड है कि मैं टर्मिनल ($) और उसके बाद आर इस प्रकार है (>) के रूप में चलाने की कोशिश:

$ R --vanilla 
> require(snowfall) 
> sfInit(parallel=TRUE,socketHosts =list("ec2-xx-xxx-xx-xx.zone.compute.amazonaws.com")) 
Permission denied (publickey) 

बल्कि अजीब जब उदाहरण में ssh करने की कोशिश कर रहा के रूप में एक पासवर्ड की जरूरत नहीं है मैंने प्रारंभिकरण पर उदाहरण में सार्वजनिक कुंजी आयात कर दी है, (मुझे लगता है)

तो मेरे सामान्य टर्मिनल ... जब

$ ssh [email protected] 

यह स्वचालित रूप से जोड़ता है ... (इतना im% नहीं 100 यकीन है कि अगर इसकी Using snow (and snowfall) with AWS for parallel processing in R में की तरह एक passwordless मुद्दा)

मैं एक के माध्यम से देख कोशिश की है चलने से कुंजी आदि पर सामग्री की उचित मात्रा, लेकिन इनमें से कोई भी एक अंतर नहीं बना रहा है। इसके अलावा मेरे ~/.ssh/authorized_keys किसी कारण के लिए एक फ़ाइल एक फ़ोल्डर के बजाय है और मैं इसे भी उपयोग नहीं कर सकते जब sudo cd .ssh/authorized_keys की कोशिश कर रहा ... अनुमतियों के मामले में यह drw-------

है अंतिम लक्ष्य EC2 उदाहरणों की एक बहुत कुछ करने के लिए कनेक्ट करने के लिए है और कुछ समानांतर प्रसंस्करण करने के लिए foreach का उपयोग करें ... लेकिन अब के लिए एक से कनेक्ट करना अच्छा होगा ... मैं भी अपनी खुद की एमी का उपयोग करना चाहता हूं, इसलिए स्टारक्लस्टर वास्तव में वह नहीं है जिसे मैं ढूंढ रहा हूं .... (जब तक कि मैं निजी एमिस उपयोग करने के लिए और सभी आदेशों निजी तौर पर संचालित ...)

भी अगर doRedis एक स्थानीय मशीन है कि बहुत अच्छा होगा से अगर किसी ने मुझे दिखा सकता है की तुलना में बेहतर कैसे एक EC2 उदाहरण से कनेक्ट होता है में सक्षम हूँ। ..

संपादित

मैं ssh पासवर्ड से कम लॉगिन parallel पैकेज makePSOCKcluster रूप R and makePSOCKcluter EC2 socketConnection में दिखाया गया है का उपयोग कर के साथ सौदा करने में कामयाब रहे ... लेकिन अब socketConnection मुद्दों भर में आने वाले के रूप में लिंक में सवाल में दिखाया गया है ..

कोई विचार यह कैसे कनेक्ट करें?

इसके अलावा सबूत है कि सब कुछ काम कर रहा है, मुझे लगता है जाएगा मतलब है कि निम्न आदेश/समारोह सभी विभिन्न आईपी पतों में प्राप्त करने के लिए काम करेगा

d <- parLapply(cl1, 1:length(cl1),function(x)system("ifconfig",intern=T)[2]) 

जहां cl1make*cluster फ़ंक्शन के परिणाम है

नोट क्योंकि बकाया वास्तव में लिंक में प्रश्न के लिए है .... मुझे कोई फर्क नहीं पड़ता कि आप किस प्रश्न का उत्तर पोस्ट करते हैं ... लेकिन जब तक इस प्रश्न पर कुछ लिखा गया है जुड़े प्रश्न पर सही उत्तर, तो मैं वाई तदनुसार अंक प्रदान करेंगे ...

+0

ध्वनि जैसे आप अपनी मशीनें एसएसएच अनुमति नहीं दे रहे हैं। Http://www.youtube.com/watch?v=YfCgK1bmCjw पर एक नज़र डालें (00:06:43) – JohnRos

उत्तर

8

मास्टर नोड स्थानीय रखने की कोशिश करते समय भी समानांतर ईसी 2 सेटअप के साथ मुझे कुछ समस्याएं थीं। पूल स्थापित करने के लिए StarCluster का उपयोग करने में काफी मदद मिली, लेकिन वास्तविक सुधार स्टारक्लस्टर और का उपयोग कर ईसी 2 निजी आईपी पूल के भीतर मास्टर नोड रखने के साथ आया।

स्टारक्लस्टर सभी नोड्स के साथ-साथ उपयोग की जाने वाली किसी भी माउंट के लिए सभी महत्वपूर्ण हैंडलिंग सेट अप करता है। डायनामिक नोड आवंटन करने योग्य नहीं था, लेकिन जब तक स्पॉट इंस्टेंस का उपयोग लंबे समय तक नहीं किया जा रहा है और आपकी बोली-प्रक्रिया रणनीति आपके उदाहरणों को 'रख' नहीं देती है तो गतिशील आवंटन एक मुद्दा होना चाहिए।

कुछ अन्य सबक सीख लिया:

  • एक चर निजी आईपी युक्त createCluster के पास है और इसे निर्यात करने के लिए बनाने के लिए है, तो एक ही नोड्स यह आसान है के साथ फिर से शुरू करनी जब आपके पास।
  • मास्टर नोड byobu चलाएं और इसे आर सत्र लॉगिंग के लिए सेट करें।
  • मास्टर पर RStudio सर्वर चलाना कई बार बहुत उपयोगी हो सकता है, लेकिन दास नोड्स की तुलना में एक अलग एएमआई होना चाहिए। :)
  • नियंत्रण स्क्रिप्ट ऑफ़लोड डेटा आरडीए फ़ाइलों को उस पथ पर रखें जिसे दूरस्थ रूप से नई फ़ाइलों के लिए निगरानी की जाती है और स्वचालित रूप से उन्हें डाउनलोड किया जाता है।
  • दासों की निगरानी करने के लिए htop का उपयोग करें ताकि आप आसानी से उदाहरण देख सकें और स्क्रिप्ट आवश्यकताओं (स्मृति/सीपीयू/स्केलेबिलिटी) निर्धारित कर सकें।
  • प्रोसेसर हाइपर-थ्रेडिंग सक्षम/अक्षम स्क्रिप्ट का उपयोग करें।

मैं गुलाम कनेक्शन के साथ काफी एक मुद्दे के एक सा था और क्रमानुसार/unserialize और पाया चीजों में से एक कनेक्शन सीमा थी, और कि कनेक्शन सीमा नोड्स की संख्या से कम किया जा करने के लिए आवश्यक; और जब नियंत्रण स्क्रिप्ट को रोक दिया गया था तो क्लीनअप की सबसे आसान विधि मास्टर आर सत्र को पुनरारंभ कर रही थी, और टाइमआउट के इंतजार के बजाय दास प्रक्रियाओं को मारने के लिए एक स्क्रिप्ट का उपयोग कर रहा था।

यह सेटअप करने के लिए काम का एक सा ले किया था, लेकिन उम्मीद है कि इन विचारों मदद ...


हालांकि यह 8 महीने पहले किया गया था और दोनों StarCluster और अनुसंधान को बदल दिया है यह इस प्रकार सेटअप था के कुछ है। .. आपको स्टारक्लस्टर दस्तावेज़ों में से 9 0% मिलेगा।

  • सेटअप। स्टारक्लस्टर/कॉन्फ़िगरेशन एडब्ल्यूएस और कुंजी-जोड़ी अनुभाग AWS कंसोल से गंभीरता जानकारी के आधार पर।
  • [smallcluster]
    • कुंजी नाम
    • उपलब्धता क्षेत्र
  • परिभाषित [smallcluster] का विस्तार एक क्लस्टर टेम्पलेट को परिभाषित करें। स्टारक्लस्टर 64 बिट एचवीएम एएमआई के आधार पर एएमआई का उपयोग करना। नए सार्वजनिक एएमआई उदाहरण बनाने के बजाय मैंने अभी एक कॉन्फ़िगर किया गया उदाहरण सहेजा है (मुझे आवश्यक सभी टूल्स के साथ) और एएमआई के रूप में इस्तेमाल किया।

यहाँ एक का एक उदाहरण है ...

[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 
  • सेटअप साझा मात्रा यहीं स्क्रीन/byoubu लॉग, मुख्य .R स्क्रिप्ट चौकी उत्पादन, साझा अनुसंधान डेटा, और उत्पादन पैकेज के लिए स्रोत रहते हैं। निर्यात के नाम से बचने वाले बच्चे के रास्ते में नई फाइलों के लिए इसकी निगरानी की गई थी, ताकि क्लस्टर या कंट्रोल स्क्रिप्ट की अधिकतम संख्या में रिकॉर्ड्स की मृत्यु हो गई हो या जो भी खो जाए, वह सब खो जाएंगे और फिर से गणना की आवश्यकता होगी।

साझा मात्रा बनाने के बाद, परिभाषा बस गया था:

[volume rdata] 
VOLUME_ID = vol-1145497c 
MOUNT_PATH = /rdata 

पैकेज संस्थापक जो सभी नोड्स पर नवीनतम (और समान) आर संस्करणों सुनिश्चित किया।

[plugin pkginstaller] 
setup_class = starcluster.plugins.pkginstaller.PackageInstaller 
packages = r-base, r-base-dev, r-recommended 

अंततः दोनों 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 

फिर एक क्लस्टर 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 

ने निर्यात किए गए चेकपॉइंट लॉग के खिलाफ स्केलेबिलिटी की निगरानी के लिए प्रत्येक पर एक हॉप सत्र शुरू किया।

फिर, मास्टर में लॉग इन किया, एक स्क्रीन सत्र शुरू किया (मैंने तब से बायोबू पसंद किया है) और स्टारक्लस्टर घुड़सवार वॉल्यूम के भीतर आर को निकाल दिया। इस तरह जब क्लस्टर फिर किसी कारण आसानी से मैं कर सकता सेटअप के लिए बंद कर दिया बस आर शुरू करने से एक बार आर में पहली बात nodeXXX नाम, जो केवल की तर्ज पर कुछ था का उपयोग कर एक workers.list चर बनाने के लिए किया गया था:

cluster.nodes <- c("localhost", paste("node00", 1:7, sep='')) 
workers.list <- rep(cluster.nodes, 8) 

फिर मैंने नियंत्रण स्क्रिप्ट को लोड किया, कार्यक्षेत्र छोड़ दिया और सहेजा। नियंत्रण स्क्रिप्ट ने उत्पादन पैकेज में निर्यात और चेकपॉइंट्स और पैरा लिपटे कॉल के लिए सभी टेबल आउटपुट को संभाला। लिपि के मुख्य कार्य में 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) 
} 

एक बार आर सत्र दोबारा शुरू किए जाने (शुरू worker.list बनाने के बाद) नियंत्रण लिपि sourced गया था, और मुख्य समारोह कहा जाता है। वह यह था। इस सेटअप के साथ, अगर क्लस्टर कभी बंद हो गया, तो मैं मुख्य मेजबान पर रियायत छोड़ दूंगा; दास प्रक्रियाओं को प्रत्येक दासों और स्टार्टअप पर फिर से रोकें।

यहाँ कार्रवाई ::

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 

तुम यहाँ के लिए नीचे पढ़ लिया है, तो आप को पता है कि मुझे लगता है मैं (openmpi सहित) कर सकता है प्रत्येक क्लस्टर सेटअप का परीक्षण दिलचस्पी हो सकती है और इसे का एक उदाहरण है पाया कि गति अंतर नहीं था, शायद ऐसा इसलिए है क्योंकि मेरी गणना जहां सीपीयू बाध्य है, शायद नहीं।

इसके अलावा, हार न दें, भले ही यह एचपीसी के साथ जाने का दर्द हो। यह पूरी तरह से लायक हो सकता है। मैं अभी भी उन गणनाओं के पहले 100,000 पुनरावृत्तियों को पूरा करने का इंतजार कर रहा हूं जो मैं चला रहा था, मैंने कमोडिटी वर्कस्टेशन पर आधार-आर में एक निष्पक्ष कार्यान्वयन के साथ अटक गया था (ठीक है, वास्तव में नहीं, जैसा कि मैंने कभी आर: डी के साथ फंस नहीं लिया होगा)। क्लस्टर के साथ, एक सप्ताह के भीतर 384,000 पुनरावृत्तियों को पूरा किया गया। सेटअप करने के लिए पूरी तरह से समय के लायक (और इसमें बहुत कुछ लिया गया)।

+0

जानकारी के लिए धन्यवाद और अपने अनुभव साझा करना ...मैंने स्टार्टक्लस्टर पर एक नज़र डाली थी लेकिन यह तुरंत स्पष्ट नहीं था कि इसके साथ आर का उपयोग कैसे किया जाए, और दूसरी बात मैं जनता के इस्तेमाल के बजाय अपने निजी एएमआई का उपयोग करना चाहता था। क्या मुझे लगता है कि आपने समांतर प्रसंस्करण के लिए अपनी आवश्यकताओं को पूरा करने के लिए मौजूदा आर पैकेज का उपयोग करने पर छोड़ दिया है और इसके बजाय स्टारक्लस्टर का उपयोग किया है? इसके अलावा मैंने 'सेगुए' का उपयोग करने की कोशिश की ... लेकिन ऐसा लगता है कि ईएमआर पर्यावरण स्थापित करने में उम्र लगती है और वैयक्तिकृत पैकेज और कार्यों को चलाने के लिए उम्र लगती है। –

+1

"क्या मुझे लगता है कि आपने समांतर प्रसंस्करण के लिए अपनी आवश्यकताओं को पूरा करने के लिए मौजूदा आर पैकेज का उपयोग करने पर छोड़ दिया है" - बिल्कुल नहीं! स्टारक्लस्टर का एकमात्र हिस्सा क्लस्टर स्थापित करने में था। स्टारक्लस्टर एएमआई के आधार पर मेरे निजी एएमआई को जेनरेट करना, और फिर _it_ को बढ़ते, कुंजी सेटअप, स्टार्टअप स्क्रिप्टिंग, पैकेज जांच आदि को संभालना बहुत आसान था ... बाकी सब कुछ स्टॉक था। साझा माउंट था मेरा निजी पैकेज रखा गया था और जहां आउटपुट आरडीए निगरानी हुई थी। – Thell

+0

कोई मौका आप मुझे एक उदाहरण दिखा सकते हैं कि यह कैसे किया गया था? –

संबंधित मुद्दे