Praca w STX-ie: 5 pytań do Machine Learning & Data Engineering

W 2018 roku zapowiadaliśmy plan wdrożenia nowych kierunków technologicznych w STX Next (i oczywiście pisaliśmy o tym na blogu: Nowe technologie w STX Next). W połowie 2019 roku do grona osób odpowiedzialnych za otwarcie jednego z kierunków dołączył Łukasz Grzybowski – Head of Machine Learning & Data Engineering w STX Next.

Powoli zbliżamy się do połowy 2020 roku – jest to idealna okazja na rozmowę z Łukaszem o jego zespole, realizowanych projektach, sukcesach i planach na przyszłość. Zahaczamy również o to w jaki sposób nowe technologie,  a w tym przypadku cały zestaw technologii związany z ML/DE, komplementarnie uzupełniły to, co firma oferowała do tej pory, zaś osobom współpracującym z firmą stworzyła ciekawe możliwości rozwoju.

Zanim przejdziemy do pytań, zapraszam do krótkiego bio naszego dzisiejszego gościa.  

Zawodowa praca Łukasza była związana z inżynierią danych i uczeniem maszynowym, kiedy to jeszcze nie było modne.  W ciągu ostatnich 8 lat zdobywał doświadczenie w sektorze badań, ubezpieczeń, bankowości oraz telekomunikacji, a od prawie roku pełni rolę Head of Machine Learning and Data Engineering w STX Next. Łukasz jest przedsiębiorcą i fanem startupów, nowych technologii oraz innowacji, szczególnie związanych z obszarem Fintech, IoT oraz AI. 


Zespół Machine Learning & Data Engineering w STX Next to…? 

… to grupa pasjonatów technologii związanych z przetwarzaniem danych. Zespół ML&DE to przede wszystkim programiści Python’a (w końcu jest to główna specjalizacja i core’owa technologia STX Next, która jest  najprawdopodobniej najpopularniejszym językiem w obszarze Machine Learning & Data Engineering). Ponadto to osoby o usystematyzowanej wiedzy teoretycznej i dużym apetycie na poznawanie nowych rozwiązań. 

Oprócz samej wiedzy i doświadczenia bardzo istotne jest też nastawienie. Często mamy do czynienia ze skomplikowanymi problemami, dlatego takie cechy jak kreatywność, samodzielność, zdolność do rozwiązywania problemów,  zorientowanie na wyniki czy chęć dzielenia się wiedzą to nieodzowne filary tego zespołu. Otwarta głowa i ciekawość są szalenie istotne, gdy mamy przed sobą całą gamę bibliotek, frameworków, algorytmów i narzędzi możliwych do użycia w ramach konkretnego problemu.


Jak wygląda standardowy setup technologii oraz narzędzi, z których korzysta Data Engineer oraz Machine Learning Engineer? 

Ciężko jest wskazać standardowy setup, ponieważ jest to mocno powiązane z potrzebą biznesową, wymaganiami technologicznymi po stronie klienta i danymi, które mają być przetwarzane. Oba stanowiska są mocno techniczne i osoby te muszą być świadome i zorientowane w nowych trendach technologicznych.

Życie Data Engineera jest bardzo intensywne z uwagi na naprawdę szerokie spektrum wykorzystywanych technologii. Ich mnogość związana jest z liczbą wyzwań stojących przed specjalistą w tej roli. W codziennej pracy spotyka się on z takimi obszarami jak: 

  • projektowanie przetwarzania wsadowego,
  • projektowanie przetwarzania strumieniowego,
  • zrównoleglanie przetwarzania,
  • projektowanie rozproszonego przetwarzania,
  • poprawa wydajności kodu,
  • automatyzacja przetwarzania danych,
  • projektowanie i optymalizowanie schematów danych,
  • projektowanie i optymalizowanie sposobu przechowywania danych,
  • projektowanie i optymalizowanie sposobu dostępu do danych,
  • projektowanie systemów raportujących,
  • integrowanie danych pochodzących z różnych źródeł,
  • projektowanie i optymalizowanie logiki biznesowej dotyczącej przetwarzania,
  • projektowanie i optymalizowanie logiki ekstrakcji danych,
  • projektowanie i optymalizowanie logiki  wzbogacania danych,
  • projektowanie i optymalizowanie logiki  transformowania i czyszczenia danych,
  • projektowanie i optymalizowanie logiki ładowania danych,
  • integracja z komponentami uczenia maszynowego,
  • współpraca z DevOps w obszarze infrastruktury,
  • współpraca z DevOps w celu zapewnienia bezpieczeństwa systemu.

Oczywiście takie technologie jak Spark, Kafka, Airflow, DynamoDB, BigQuery są bardzo popularne już od dłuższego czasu. Są też technologie, które ostatnio mocno zyskały na popularności, m.in. Kubeflow, Presto, MLflow, GraphQL czy Databrics. To tylko kilka z najbardziej popularnych rozwiązań, z którymi przychodzi nam się zmierzyć. Na co dzień pracujemy też z bazami danych, zarówno relacyjnymi: PostgreSQL, MySQL, MariaDB, Oracle, jak i NoSQL: MongoDB, Cassandra, Neo4J. Jeśli jest taka potrzeba to wdrażamy również specjalistyczne rozwiązania jak PostGIS. Do tego wszystkiego dochodzi znajomość usług chmurowych: Amazon Web Services, Google Cloud Platform czy Microsoft Azure, które w obecnych czasach wykorzystywane są w niemal każdym projekcie. 

Machine Learning Engineer ma zdecydowanie krótszą listę potencjalnych narzędzi. Nie sposób nie wspomnieć o tak bardzo popularnych narzędziach związanych z głębokimi sieciami neuronowymi jak TensorFlow, Keras czy PyTorch. Tutaj, podobnie jak w przypadku Data Engineera, wybrane narzędzia również zależą od problemu, który mamy do rozwiązania. Dlatego często korzystamy też z XGBoost, OpenCV, SpaCy, NLTK, Gensim, StatsModels, Hyperopt, KerasRL

Budowanie modeli predykcyjnych jest specyficznym zadaniem. Każdy przypadek musi być rozpatrywany indywidualnie, a z pozoru podobne zadania mogą wymagać zupełnie innych rozwiązań. I tutaj dochodzimy do głównego wyzwania stojącego przed Machine Learning Engineerem: dobór i dostrojenie odpowiedniego algorytmu uczenia maszynowego. Często na początkowym etapie konieczne jest przeprowadzenie przeglądu aktualnego state-of-the-art. Uczenie maszynowe to dziedzina, która dynamicznie się zmienia. Ciągle pojawiają się poprawki do niedawno zaproponowanych algorytmów lub unowocześnione architektury sieci dedykowane konkretnym problemom. Niejednokrotnie trzeba poświęcić czas na zapoznanie się z publikacjami naukowymi oraz innymi informacjami zamieszczonymi w internecie, a następnie należy przetestować różne rozwiązania i wybrać to, które zapewni najlepsze rezultaty. Wracając jednak do technologii – kładziemy duży nacisk na to, aby nasi specjaliści byli w stanie przenieść swoje modele na środowiska produkcyjne. Dlatego osoba w roli Machine Learning Engineer również musi sprawnie poruszać się w środowiskach usług chmurowych. 

Oczywiście nie należy zapominać o bibliotekach typu Pandas i Numpy, które są podstawowymi narzędziami w Pythonie dla osób pracujących z danymi. Podobnie jest z rozwiązaniami standardowo wykorzystywanymi w software developmencie, czyli Git, Docker czy Jira. Oba te obszary to chleb powszedni Data Engineerów i Machine Learning Engineerów.


Jakie macie sposoby na rozwój?

Ciągłe doskonalenie się to jedna z pięciu wartości STX Next. Każdy z członków naszego zespołu jest odpowiedzialny za swój kierunek i tempo rozwoju, które w dowolnym momencie może zaimplementować korzystając z rocznego budżetu szkoleniowego. Jest to istotne nie tylko z perspektywy naszej firmy, ale również z perspektywy rynku i tego co się na nim dzieje. Internet jest nieopisaną kopalnią wiedzy i chcąc nauczyć się czegoś nowego najczęściej korzystamy z:

Ponadto, dbamy o regularne dzielenie się wiedzą w ramach zespołu oraz całej organizacji (jedną z takich inicjatyw są Lightning Talks – cykl krótkich technicznych prezentacji odbywających się co miesiąc). Poza tym prowadzimy swojego bloga, na którym niedawno ukazał się artykuł The Best Machine Learning Blogs and Resources, oraz gościnnie udzielamy się na blogach zewnętrznych, np.: datasciencecentral. Nasi specjaliści występują jako speakerzy na różnych webinarach oraz konferencjach, zarówno zewnętrznych jak i  organizowanych przez STX Next.


Jak wygląda współpraca zespołu Machine Learning & Data Engineering z zespołem developerskim i jakie są największe wyzwania w tej relacji?

Zasadniczo Machine Learning Engineer oraz Data Engineer to są programiści, którzy zdecydowali mocniej wyspecjalizować się w obszarze przetwarzania danych.  Część z tych osób była kiedyś częścią typowego software developmentu – to zdecydowanie pomaga we współpracy. 

Wyzwania we współpracy z resztą zespołu nie są duże. Praca w Scrumie zapewnia zachowanie pewnych standardów współpracy, planowania i korygowania tego, co nie zadziałało w poprzednich iteracjach. Każdy odpowiada za swoje zadania, które są koordynowane, estymowane i planowane z udziałem Product Ownera. 

Oczywiście najwięcej tarć jest na styku dwóch światów i ta relacja wygląda podobnie do współpracy Backend i Frontend developera. Czasami trzeba przygotować pewne atrapy (ang. mock) części rozwiązania, żeby nie blokować innych osób. Później najczęściej okazuje się, że finalne rozwiązanie wygląda trochę inaczej niż wcześniej przygotowana atrapa i to wymusza wprowadzanie zmian w przygotowanej już części kodu. 

Trochę trudniej stosuje się scrumowe sprinty w odniesieniu do researchu robionego przez Machine Learning Engineerów na początku pracy. Jednak tutaj też staramy się zamknąć to w ramach Scruma, przygotować tickety, które później są swego rodzaju wstępem do dokumentacji technicznej. Na podstawie komentarzy do zadań zawsze można się cofnąć i sprawdzić jakie algorytmy były testowane. Zaś część implementacyjna już jest prostsza do koordynacji w ramach Scruma.


Jakie największe wyzwania stoją przed Twoim zespołem w ciągu najbliższych miesięcy? Czy wszechobecna pandemia sprzyja rozwojowi projektów opartych o Data Engineering i Machine Learning? 

Pandemia ma niestety negatywny wpływ na wiele firm –  w tym na branżę IT. Szczególnie platformy, które w jakiś sposób współgrały z fizycznymi usługami lub produktami, takimi jak rezerwowanie usług fryzjerskich, sprzedaż biletów czy wyszukiwanie lotów, mocno odczuły skutki pandemii. Tego typu serwisy raczej skupiają się na przetrwaniu, aniżeli rozwoju nowych lub optymalizacji starych funkcji.

Są jednak przedsięwzięcia, które stają się beneficjentami obecnej sytuacji. Ruch w internecie zdecydowanie wzrósł. Część  platform e-commercowych, e-learningowych, gamingowych odnotowują zwiększone zainteresowanie ich usługami. Zwiększony ruch jest okazją do zastanowienia się nad optymalizacją części procesów, usprawnieniem działania platformy, a też efektywniejszym przechowywaniem, kalkulowaniem i udostępnianiem danych. Ponadto, dla tych firm może to być dobry czas na wprowadzenie nowych funkcji wykorzystujących sztuczną inteligencję w celu przyciągnięcia i zatrzymania nowych klientów. Mogą to być zarówno nowe, innowacyjne funkcje platformy,  dobrze znane rozwiązania, które do tej pory nie były jeszcze wdrożone, jak i analizy oraz systemy raportujące, które pomogą podejmować lepsze decyzje biznesowe. We wszystkich tych zastosowaniach niezbędni są Data i/lub Machine Learning Engineerowie.

Dwa największe wyzwania stojące przed moim zespołem w najbliższych miesiącach to stabilizacja i wolny wzrost. Budujemy wewnątrz firmy kompetencje dotyczące jak największej liczby technologii, dla których popyt na rynku jest duży. Część z nich rozwijamy wewnętrznie, a część zdobywamy zewnętrznie poprzez rekrutację specjalistów. Jak wiadomo, sytuacja związana z pandemią utrudniła codzienne funkcjonowanie firm, w tym również procesy rekrutacyjne – część firm zamroziła rekrutacje, a inne wręcz zostały zmuszone do redukcji zatrudnienia. Dlatego stabilizacja jest w tej chwili jeszcze bardziej istotna niż 3 miesiące temu mogło nam się wydawać, a wolny wzrost pozwoli zwiększać i rozwijać poziom kompetencji w zespole Machine Learning & Data Engineering, którego działalność zarówno teraz, jak i po ustabilizowaniu się sytuacji, jest wartościowa i pożądana na rynku.  

Przeczytaj również

Najciekawsze w Praca w STX Next

Nasz przepis na skuteczne wdrożenie Junior Developerów – STX Next Crash Course

Wejście do nowej organizacji, pierwsza praca czy zmiana pracy w momencie, gdy nie ma się jeszcze dużego doświadczenia, może być bardzo stresujące. Wszyscy doskonale pamiętamy swoje pierwsze zawodowe kroki, dlatego w STX Next bardzo mocno stawiamy na wysokiej jakości proces wdrożenia. W tym celu właśnie powstał STX Next Crash Course dla Junior Developerów, co jest […]

Praca Solutions Architecta oczami Produktowca

Jarek Feith pracuje z nami od kilku miesięcy jako Product Solutions Consultant. Swoim wieloletnim doświadczeniem produktowym wspiera Solutions Architectów – programistycznych ekspertów do zadań specjalnych. Jak wygląda ta współpraca oczami Jarka? O tym możecie przeczytać poniżej: Standardowa ścieżka kariery dla senior developera to najczęściej przejście na poziom zarządzania działem, zespołem – generalnie praca bardziej z […]

REST API w Pythonie: Flask czy FastAPI?

Tworzenie aplikacji internetowych, a w tym REST API, to chleb powszedni backend developerów. Dlatego praca z frameworkiem webowym powinna być szybka i prosta. Microframeworki to bardzo dobry start dla małych projektów, MVP czy nawet dużych aplikacji, które potrzebują REST API – a do nich zaliczają się m.in.: Flask i FastAPI. Flask jest jedną z najpopularniejszych […]

Czytaj więcej

Kontakt

Masz pytania?