Wpis z mikrobloga

#programowanie #python #machinelearning

Mirki, zacznę od was bo nie wiem gdzie dalej się udać. Mam następujący problem.
Chciał bym wydajnie przerabiać zdjęcia na macierze. Robię sobie trochę kaggli ale w każdym mam dokładnie ten sam problem. Ładowanie dużych Data Setów zajmuje dużo czasu.
Zaimplementowałem multiprocessing - bardzo naiwnie bo nie bardzo się na tym znam, niby jest szybciej ale to nadal dużo poniżej możliwości mojego serwera. Dysk NVMe - jakieś 3.3Gb/s odczytu, 40 core, 300+GB RAMu.

Nie wiem jak i gdzie szukać bottle necków, jeśli ktoś chce pomóc, uporządkowałem trochę temat i wystawiłem git repo
GIT REPO
https://github.com/zboinek/image_processing

Obrazek sprzed paru iteracji - niższa wydajność dla zwiększenia zainteresowania.
zboinek - #programowanie #python #machinelearning

Mirki, zacznę od was bo nie wiem...

źródło: comment_1595257108OFkIo0jBDZR8zYoFTiyu4x.jpg

Pobierz
  • 17
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@vornikor: 2. to wskazuje tylko jak zrobić populate odczytanych obrazów do listy. Fakt może to być proces nad którym się pochylę jednak jak na razie interesuje mnie bardziej jak przyśpieszyć odczyt z dysku.
  • Odpowiedz
@mackarr: ze co? :D chyba sie nie rozumiemy. obraz -> imread -> macierz -> lista.append(macierz). Zaczynam coraz bardziej zastanawiać się nad tym append-em. Może tak na prawde, imread jest wydajny a nie wydajne jest appendowanie do listy czy cos.
  • Odpowiedz
@zboinek: Co właściwie chcesz zrobić? nie lepiej napisać w c++ "wtyczkę" do numpy? Pisałem kiedyś takie, i wydajność w moim przypadku polepszyła się o kilka *rzędów* wielkości
  • Odpowiedz
@vornikor: chce przyspieszyc proces ladowania zdjec do ramu w formie listy macierzy.
Średnio ogarniam c++ - wiem, że tam można sporo przyśpieszyć bo sam zarządzasz pamięcią. Co miała by robić taka wtyczka do numpy? odczytywać obraz i zapisywać go w formie macierzy?
  • Odpowiedz
@zboinek: przeczytaj: http://xyproblem.info/

The XY problem is asking about your attempted solution rather than your actual problem. This leads to enormous amounts of wasted time and energy, both on the part of people asking for help, and on the part of those providing help.


Chodziło mi co ma robić program z wyższej perspektywy, może samo ładowanie tych zdjęć można zrealizować w inny sposób aby to szło bardziej efektywnie (np ładowanie
  • Odpowiedz
@vornikor: Znam, często się na to łapie ale generalnie to dokładnie to ma zrobić program. Ale możesz pomóc więc już piszę. Tak jak wspomniałem jest to jedno z zadań na kaggle. Ostatecznie załadowane zdjęcia mają trafić do sieci neuronowej - klasyfikatora z dwiema klasami, która stwierdzi czy dane zdjęcie pochodzi od osoby chorej czy zdrowej. Nigdzie w analizowanych przeze mnie problemach nikt za bardzo nie zastanawia się nad samym procesem
  • Odpowiedz
@vornikor: Właśnie natknąłem się na taką oto funkcje- pic rel. Nowa implementacja w tensorflow. Widać jest dokładnie tak jak myślę czyli to ładowanie jest zrealizowane zupełnie inaczej. Tutaj odczyt z dysku jest żaden, czas trwania koło 2s, co znaczy, że wcale nie tworzy tego od razu i trzyma w ramie tylko zacznie mielić dopiero jak będzie na to czas. Batch_size duży ale to tylko dla testu czy może czasami nie
zboinek - @vornikor: Właśnie natknąłem się na taką oto funkcje- pic rel. Nowa impleme...

źródło: comment_15952860963WEcAQTYjli2ffKDDj8Q6V.jpg

Pobierz
  • Odpowiedz
@zboinek: te dwie sekundy które ta funkcja zajmuje to wczytywanie metadanych. Ogólnie w każdym szanującym się frameworku jest zaimplementowany tzw. lazy loading, czyli zamiast wczytywać wszystkie obrazy naraz w jednym miejscu skryptu (co nie jest możliwe przy większych projektach, chociaż czasem ma to sens w bardzo specyficznych zastosowaniach), to framework wczytuje jedynie referencje na poszczególne sample w datasecie, a rzeczywiste ładowanie ma miejsce dopiero przy konstruowaniu batchy podczas treningu.

Ale
  • Odpowiedz
@Lugi: Co do drugiej części zgoda, tylko ze zeby zmniejszyc zdjecia, musisz je wczytac do RAMu w ten czy inny sposob ;) augumentacja geometryczna jak najbardziej jest bo zawsze jak uczysz model to chcesz go tez nauczyc szumu.
Co do części z SSD to jak dysk może być tu bottle neckiem skoro ma odczyt na poziomie 3.3GB ale wydaje mi się, że tutaj też popełniam jakiś błąd, to 400 w
  • Odpowiedz
Co do drugiej części zgoda, tylko ze zeby zmniejszyc zdjecia, musisz je wczytac do RAMu w ten czy inny sposob ;)


@zboinek: tak, ale robisz to raz, a nie przy każdym treningu

Co do części z SSD to jak dysk może być tu bottle neckiem skoro ma odczyt na poziomie 3.3GB ale wydaje mi się, że tutaj też popełniam jakiś błąd, to 400 w porywach do 600MB/s prędkości ładowania samego
  • Odpowiedz
@Lugi: Też o tym pomyślałem i staram się znaleźć jakieś źródło, które pokazywało by jakieś metryki dla bibliotek, których używam. Pomyślałem też, że może większe pliki będą czytane lepiej ale też nie.
  • Odpowiedz