[MoodOfTheSong] 8. AWS

W jednym z ostatnich postów opisałem w jaki sposób znacznie przyspieszyłem działanie skryptu obliczającego cechy nagrań dźwiękowych.
Wyniki nie były jednak na tyle zadowalające, aby umożliwić wygodną pracę nad systemem na moim komputerze. Zamiast jednak wydawać ogromne pieniądze na sprzęt, który przetworzy dane trochę szybciej, postanowiłem wydać niewiele pieniędzy na infrastrukturę, która przetworzy dane o wiele szybciej – chmurę obliczeniową Amazon Web Services.

W ramach AWS, mamy do dyspozycji kilkadziesiąt różnych serwisów należących do wszystkich trzech grup rozwiązań chmurowych: SaaS, PaaS i IaaS.
Ja wykorzystuję jeden z popularniejszych: EC2, czyli Elastic Compute Cloud.

Z punktu widzenia użytkownika jest to nic innego jak komputer, który stoi gdzieś na świecie, do którego możemy się podłączyć np. poprzez SSH, a płacimy tylko za czas kiedy on pracuje. Możemy więc w każdej chwili go zdalnie włączyć lub wyłączyć.

AWS taki komputer nazywa po prostu instancją. Tworzy się ją bardzo prosto, najważniejsze dwa kroki to wybór typu instancji (każdy typ to inna kombinacja liczby rdzeni procesora, wielkości pamięci RAM i dysku) oraz obrazu dysku. Amazon oferuje dość dużą liczbę obrazów: z systemem Ubuntu, Windows, Red Hat Linux itp.

Ja wybrałem obraz z Ubuntu oraz instancję typu m4.4xlarge, czyli o następujących parametrach:

Liczba wirtualnych rdzeni: 16
Pamięć RAM: 64 GB
Cena: $1.026 za godzinę

Jak wspomniałem, dostać do instancji można się za pomocą protokołu SSH. Klucz w formie pliku *.pem generowany jest przez AWS i należy go pobrać na dysk. Potem używamy go jako jeden z parametrów komend ssh lub scp.

Po pierwszym połączeniu się z chmurą, zainstalowałem wszystkie niezbędne zależności, pobrałem repozytorium, uruchomiłem skrypty opisane w tym poście, aby pobrać dane treningowe.

Następnie przygotowałem kilka skryptów, które ułatwią mi pracę ze zdalną instancją.

  • Wysłanie plików aplikacji do chmury:
ssh -i $KEY $USER@$ADDR 'rm -rf ~/MoodOfTheSong/code/*'
scp -i $KEY ~/dsp/code/*.py $USER@$ADDR:'~/MoodOfTheSong/code/'
  • Uruchomienie skryptu:
ssh -X -i $KEY $USER@$ADDR '(cd ~/MoodOfTheSong/code; python3.5 main.py)'
  • Pobranie wyników (w tym przypadku wykresów pokazujących wartość danej cechy – więcej o tym napiszę niebawem):
scp -i $KEY $USER@$ADDR:'~/MoodOfTheSong/code/*.png' .

OK, czy rzeczywiście jest szybciej? Przeprowadziłem prosty eksperyment: na całym zbiorze danych obliczyłem wartości dwóch przykładowych cech. Na laptopie trwało to prawie 35 minut, na instancji EC2 – 4:20. Nie da się zaprzeczyć, że różnica jest znaczna.

Ile kosztują takie 4 minuty? Biorąc pod uwagę koszt godzinny, wychodzi koło 30 groszy. Myślę, że to niezła cena za kilkukrotnie większą produktywność. Co ważne, mogę w prosty sposób stworzyć obraz mojej instancji i na jego podstawie uruchomić nową – o innych parametrach. Dzięki temu w dosłownie 5 minut jestem w stanie przejść na mocniejszą maszynę lub słabszą ale tańszą – w zależności od chwilowych potrzeb.

2 myśli nt. „[MoodOfTheSong] 8. AWS

  1. Dla twoich zastosowan polecam Spot instance. Czyli jesli chcesz kupic wirtualną maszyne na krotki okres, taniej to polecam. Podaje sie cene maksymalną, jaka chcesz zaplacic, lub system sam dobiera. Jak aktualna cena za instancje przekroczy twoją podaną cene, to instancja jest zatrzymywana. Wiec dla dzialającej instancji dla 5 minut bardzo sie oplaca. Link:
    https://aws.amazon.com/ec2/spot/pricing/
    Dla twojej instancji m4.4xlarge to koszt $0.1 na godzine. Czyli 10 razy mniej 🙂

Możliwość komentowania jest wyłączona.