R losowy las na Amazon ec2 Błąd: nie można przydzielić wektora o rozmiarze 5,4 Gb

9

Uczę losowych modeli lasu w R, używając randomForest()1000 drzew i ramek danych z około 20 predyktorami i 600 000 wierszy. Na moim laptopie wszystko działa dobrze, ale kiedy przechodzę do Amazon EC2, aby uruchomić to samo, pojawia się błąd:

Error: cannot allocate vector of size 5.4 Gb
Execution halted

Używam c3.4xlargetypu instancji, więc jest dość mocny. Czy ktoś zna sposób obejścia tego problemu, aby działał w tym przypadku? Chciałbym poznać niuanse pamięci, które powodują ten problem tylko w wystąpieniu ec2, a nie na moim laptopie (OS X 10.9.5 Procesor 2,7 GHz Intel Core i7; Pamięć 16 GB 1600 MHz DDR3)

Dzięki.

Ethan
źródło

Odpowiedzi:

5

Oto kilka porad (korzystaj na własne ryzyko!):

Jeśli wyżej wymienione prostsze środki nie pomogą LUB chcesz osiągnąć większą skalowalność i / lub wydajność , w tym możliwość równoległego procesu na jednym komputerze lub na wielu komputerach, rozważ użycie bigrfpakietu R: http: // cran. r-project.org/web/packages/bigrf . Zobacz także tę dyskusję: https://stackoverflow.com/q/1358003/2872891 .

Aleksandr Blekh
źródło
2

Dodatkowy do innych pomysłów: zmniejszyć swoje dane, dopóki nie dowiedzieć się, co można uruchomić na przykład Amazon. Jeśli nie może wykonać 100 tys. Wierszy, coś jest bardzo nie tak, jeśli zawiedzie przy 590 tys. Wierszy, to jest to margines.

Instancja c3.4xlarge ma 30 GB pamięci RAM, więc tak, powinno wystarczyć.

Spacedman
źródło
2

Zawsze pomaga tylko Google dokładnie ten błąd, który widzisz, z wyłączeniem takich szczegółów, jak rzeczywista pamięć wektora. Dla mnie pierwszym hitem była interesująca dokumentacja o nazwie „ R: Limity pamięci R ”, gdzie pod „Unix” można przeczytać:

Limit przestrzeni adresowej jest specyficzny dla systemu: 32-bitowe systemy operacyjne nakładają limit nie większy niż 4 Gb: często jest to 3Gb. Uruchamianie 32-bitowych plików wykonywalnych w 64-bitowym systemie operacyjnym będzie miało podobne ograniczenia: 64-bitowe pliki wykonywalne będą miały zasadniczo nieskończony limit specyficzny dla systemu (np. 128 TB dla systemu Linux na procesorze x86_64).

Zobacz pomoc systemu operacyjnego / powłoki dotyczącą poleceń takich jak limit lub ulimit, aby dowiedzieć się, jak nakładać ograniczenia na zasoby dostępne dla pojedynczego procesu. Na przykład mógłby użyć użytkownik bash

ulimit -t 600 -v 4000000

podczas gdy użytkownik csh może użyć

limit cputime 10m limit vmemoryuse 4096m

aby ograniczyć proces do 10 minut czasu procesora i (około) 4 Gb pamięci wirtualnej. (Istnieją inne opcje ustawienia używanej pamięci RAM, ale nie są one ogólnie honorowane).

Więc powinieneś sprawdzić

  1. Jakiego rodzaju systemu operacyjnego używasz w instancji EC2
  2. Jakiego typu kompilację R używasz w tym systemie operacyjnym i upewnij się, że korzystasz z wersji 64-bitowej
  3. Jeśli oba są już 64-bitowe, użyj przycisku, ulimitaby ustawić pamięć na np. 8 Gb:ulimit -v 8000000
logc
źródło