Wpis z mikrobloga

#machinelearning #sztucznainteligencja #naukaprogramowania

Żeby zacząć bawić się z Machine Learningiem potrzebna jest dobra karta graficzna. Bo nawet na dobrym zwykłym procesorze uczenie sieci trwa długo. Na procesorze graficznym jest to dużo szybsze.

Co jeśli chciałbym taką aplikację z ML postawić w internecie? Przecież nie będzie stała na moim GPU pod biurkiem. Trzeba ją uruchomić na jakimś serwerze. Obecnie nawet VPS-y nie mają GPU. Zostaje mi jedynie Amazon AWS (czy podobne rozwiązanie od Google lub Azure) gdzie słono się płaci za każdą uruchomioną godzinę.

Nie ma innego wyboru?

A może jedynie uczenie sieci wymaga mocnego GPU, a postawienie aplikacji i jej działanie już nie?
Przykładowo, aplikacja ma rozpoznawać koty/psy:
- Do przemielenia tysięcy zdjęć potrzeba mocnego GPU. Wystarczy to zrobić tylko raz (np. u mnie na komputerze pod biurkiem).
- Ale jak już wytrenuję sieć (taką "wyuczoną sieć" mógłbym przenieść w formie np. jakiegoś pliku), to aplikacja po podaniu nowego zdjęcia ma tylko sprawdzić czy zgadza się z wyuczonymi wagami. To mogłoby być szybko realizowane nawet na zwykłym procesorze? Dobrze myślę?

Oczywiście jakby siec miała uczyć się na bieżąco z nowych zdjęć, to musiałaby aktualizować tą sieć. Ale nowe dane spływałyby bardzo wolno. Ewentualnie raz na jakiś czas zbierałbym dane i trenował (aktualizował) siec u siebie lokalnie zamiast na serwerze.
  • 10
Jeśli to prawda, to teraz drugie pytanie. Czemu takie gotowe wytrenowane sieci nie są udostępniane w internecie? Albo czemu firmy nie sprzedają takich gotowych sieci? Jakbym miał jakiś biznes to wolałbym kupić gotowca niż bawić się samemu z uczeniem.
@mk321: Nie robiłem sieci rozwiązujących skomplikowane problemy, ale pewnie będzie jak przy prostszych, czyli nauka jest najbardziej obliczeniożerna, a samo używanie już nauczonej sieci dużo mniej. Jak nie chcesz używać AWS to załatw sobie stałe ip, i sam sobie taki serwer z GPU postaw ( ͡° ʖ̯ ͡°). Co do drugiego pytania, pewnie ciężko zrobić coś na tyle uniwersalnego żeby sprzedawać jako nauczoną sieć. Łatwiej udostępnić framework
@mk321: "Użycie" sieci jest bardzo mało zasobożerne w porównaniu do uczenia jej. Przy uczeniu ta sieć jest używana i poprawiana tysiące, miliony albo i więcej razy, zależnie od problemu do rozwiązania i wielkości sieci.
Użycie to jest tylko wykonywanie wielu operacji mnożenia i dodawania i jest zależne jedynie od rozmiarów sieci - ilości i wielkości warstw oraz ilości danych wejściowych i wyjściowych.
Uczenie sieci jest drogie. Ja płacę za AWS i dodatkowo mam dwie 1070. Jak to się robi komercyjnie, to nie jest tak tragicznie drogo, ale hobbystycznie to chyba bym nie inwestował w to.

Można ściągnąć sporo sieci z internetu. Poszukaj pre trained neural network github.

Do predykcji (rozpoznawanie) karta graficzna nie jest niezbędna.
@mk321: Wszystko zależy od architektury sieci, czyli głebokości, ilości neuronów, a w przypadku rozpoznawania obrazów wielkości nakładanych filtrów i innych parametrów (conv net).

Sieci są jaknajbardziej publikowane, ale słyszałem jedynie o tych konkursowych, takich jak google net czy resnet.
Te razem z obszerną ich recenzją są publikowane w ramach rozwoju nauki.
Problem z nimi jest taki, że są przystosowane do rozpoznawania tysiąca czy więcej klas, przez co są całkiem ogólne i
@mk321: Jeszcze myślę że warto dodać w ramach tego co pisałem, że na GPU rzeczywiście jest szokujący przyrost prędkości, natomiast nie zmienia to tego, że na CPU można sobie poradzić.

Wlaśnie po mękach postawiłem dual boota z linuxem z sterownikami i bibliotekami potrzebnymi pod obliczenia na NN i okazało się że trening wykonuje się około 60 razy szybciej niż na mobilnym CPU i5.
Sam jestem w szoku że to aż taki
@mk321: Gotowe sieci można ściągnąć np. ze strony Model Zoo (http://caffe.berkeleyvision.org/model_zoo.html oraz https://github.com/BVLC/caffe/wiki/Model-Zoo ). Robiłem parę eksperymentów z siecią Places-CNN (zob. https://github.com/BVLC/caffe/wiki/Model-Zoo#places-cnn-model-from-mit oraz http://places.csail.mit.edu/) i bardzo dobrze rozpoznawała moje zdjęcia. Można tego używać z poziomu Pythona. Tu jest demo tej sieci (oficjalne): http://places.csail.mit.edu/demo.html , chociaż ja dostawałem inne wyniki niż w tym demie. Może kwestia konfiguracji albo mają jakąś inną wersję.