2012-03-11 15 views
6

Jesteśmy studentami próbującymi obsługiwać dane o wielkości około 140 milionów rekordów i próbować uruchomić kilka algorytmów uczenia maszynowego. jesteśmy nowicjuszami w zakresie całych rozwiązań chmurowych i implementacji mahoutów. Obecnie skonfigurowaliśmy je w bazie danych PostgreSQL, ale obecna implementacja nie jest skalowana, a operacje odczytu/zapisu wydają się być bardzo powolne po wielu tuningach wydajności. Dlatego planujemy przejdź do usług opartych na chmurze.Amazon EC2 kontra PiCloud

Przeanalizowaliśmy kilka możliwych alternatyw. Usługi

  1. Amazon cloud oparte (wdrożenie Kornak)
  2. Picloud z scikits nauczyć (byliśmy planuje użyć formatu hdf5 z NumPy)
  3. Proszę polecić jakieś inne alternatywy jeśli w ogóle.

Oto następujące pytania

  1. Które dają nam lepsze wyniki (zawrócić czasu) i będzie opłacalne? Proszę wspomnieć nam o jakichkolwiek innych dostępnych alternatywach.
  2. Jeśli założyliśmy serwis Amazon, w jaki sposób mamy mieć format danych? Jeśli użyjemy dynamodb, czy koszty zostaną zwiększone?

Dzięki

Odpowiedz

5

PiCloud jest zbudowany na AWS, więc tak czy inaczej będziesz korzystać z Amazon na koniec dnia. Pytanie brzmi, ile infrastruktury trzeba będzie napisać, aby wszystko było połączone. PiCloud daje trochę wolnego użycia, aby przejść przez kolejne etapy, abyś mógł go najpierw oddać. Nie używałem go samodzielnie, ale wyraźnie starają się zapewnić łatwość wdrażania aplikacji typu uczenia maszynowego.

Wygląda na to, że to próbuje uzyskać wyniki, a nie być projektem w chmurze, więc chciałbym zagłębić się w jedną z innych usług Amazon oprócz prostego EC2 lub w inne programy takie jak PiCloud lub Heroku lub inną usługę, która może zająć dbanie o bootstrapping.

7

To zależy od natury problemu z uczeniem maszynowym, który chcesz rozwiązać. Poleciłabym Ci najpierw podsortować swój zestaw danych do czegoś, co pasuje do pamięci (na przykład 100k próbek z kilkoma niezerowymi funkcjami na próbki przy założeniu rzadkiej reprezentacji).

Następnie spróbuj kilka algorytmów uczenia maszynowego że przeskalować do dużej liczby próbek w scikit-learn:

  • SGDClassifier lub MultinomialNB jeśli chcesz zrobić klasyfikacji nadzorowanej (jeśli masz kategorycznych etykiety, aby przewidzieć w swojej Zbiór danych)
  • SGDRegressor jeśli chcesz zrobić regresji nadzorowanego (jeśli masz ciągłą zmienną docelową do przewidzenia)
  • MiniBatchKMeans klastrów zrobić bez nadzoru klastrów (ale wtedy nie ma obiektywny sposób oszacować jakość powstających klastrów domyślnie).
  • ...

Wykonaj wyszukiwanie siatki, aby znaleźć optymalne wartości dla hiperparametrów modelu (np w regularizer alpha oraz liczby podań n_iter dla SGDClassifier) ​​i ocenić wydajność za pomocą sprawdzianu krzyżowego.

Po wykonaniu, spróbuj ponownie przy użyciu 2x większego zestawu danych (nadal mieszczącego się w pamięci) i sprawdź, czy znacząco poprawia on przewidywalność. Jeśli tak nie jest, nie marnuj czasu, próbując zrównoleglić to w klastrze, aby uruchomić go na pełnym zestawie danych, ponieważ nie przyniesie to żadnych lepszych wyników.

Jeśli tak, co można zrobić, to shard danych na kawałki, a następnie plasterki danych dotyczących poszczególnych węzłów, uczyć się od SGDClassifier lub SGDRegressor modelu na każdym węźle niezależnie picloud i zebrać z powrotem wagi (coef_ i intercept_) i następnie obliczyć średnią wagę, aby zbudować ostateczny model liniowy i ocenić go na pewnym wyciągniętym wycinku zbioru danych.

Aby uzyskać więcej informacji na temat analizy błędów. Mają przyjrzeć jak wykreślić krzywe learning:

0

Należy przyjrzeć Numba jeśli szukasz niektórych prędkości upy NumPy: https://github.com/numba/numba

Nie rozwiązuje problemu z skalowaniem w chmurze, ale może skrócić czas obliczania.

-1

Właśnie utworzyłem comparison między PiCloud & Amazon EC2> może być pomocne.