Photomathov AI tim: podrška eksperimentima na globalnoj skali

Autor: Marijan Smetko, AI engineer

Nije tajna kako je Photomath jedna od najpopularnijih aplikacija edukativnog sektora u svijetu, rame uz rame divovima poput Duolinga ili Khan Academyja. U skoro 200 zemalja, broj zadataka koje riješimo za učenike, njihove roditelje, ali i učitelje, tutore ili samo matematički znatiželjne mjeri se u desecima milijuna svaki mjesec. Značajni dio ovog uspjeha ostvario se servisima upravo Photomathovog AI tima. Kako bismo nastavili s unaprijeđenjem vrijednosti koju Photomath isporučuje krajnjim korisnicima, od neizmjerne važnosti je nastaviti s inovacijama i jahati val novih napredaka u području umjetne inteligencije. A za to, pak, potrebna je pozamašna količina podrške u vidu hardvera i softvera.

Cilj opravdava sredstva

AI team broji skoro desetak različitih komponenti našeg okruženja u oblaku. Dok su neke tek na početku svog inovacijskog života, druge već poslužuju naše korisnike preko godinu dana. Većinu servisa razvili smo za potrebe proizvoda Photomath i korisnici se njima svakodnevno služe, dok je manji dio razvijen više radi nekih internih potreba, tipa analitika i ostalo.

Photomath primarno radi na principu slikanja matematičkog sadržaja čiji postupak i konačno rješenje korisnik želi. Zbog toga ne čudi da je najkorištenija komponenta model koji iz ulazne slike izvlači izraz koji je na njoj napisan. Izlaz ovog kritičnog modela koristi se dalje u našem matematičkom engineu,  internoj softverskoj komponenti za generiranje koraka rješenja, stvaranja animacija te filtriranje ulaza koji nisu matematički.

Premium korisnici Photomatha dodatno još imaju pristup i bazi svih rješenih zadataka iz skoro 500 udžbenika iz cijelog svijeta. Pretragu svih sličnih zadataka radi jedna retrieval komponenta AI tima.

Za interne potrebe, imamo razno-razne klasifikatore, poput procjene orijentacije slike, razlikovanje rukopisa i ekrana, a odnedavno i predviđanje poretka kartica s mogućim rješenjima. U fazi istraživanja imamo još nekoliko projekata, iz kojih izdvajam početne korake sa semantičkom segmentacijom, procjene ispravnosti korisnikovog postupka, te, naravno, iskorištavanje potencijala male beskonačnosti novonastalih jezičnih modela.

Ideja je puno, resursa malo

Sve u svemu, imamo puno potreba za inteligentnim algoritmima. Problem koji nastaje je realizacija tih silnih algoritama – najbitniji od njih imaju skupove podataka koji se mjere u milijunima slika i pripadajućih anotacija. “Žvakanje” toga čak i na najmodernijim grafičkim karticama namijenjenih specifično za duboko učenje traju desetak dana (i više). Osim pokretanja eksperimenata, izazovi uključuju jos i ažuriranje skupova podataka s novim anotacijama (nakon obavljanja iste, naravno 😀), distribucija podataka do on-premise strojeva za eksperimente, upravljanje okružjem za eksperimente, treniranje novih modela, usporedba starih i novih inačica modela, testovi performansi, a na kraju sve to treba staviti u produkciju da proces stvaranja vrijednosti konačno počne. U nastavku opisujem koje tehnologije koristimo za borbu s gore spomenutim izazovima.

Podaci su nova nafta

Kao informatički startup, podaci i njihova obrada temelji su svih naših inicijativa. Zbog toga s podacima radi nekoliko timova: za generiranje podataka imamo vojsku anotatora, a uz njih cijeli tim koji se bavi organizacijom samih anotacija. Nakon njih imamo novi tim koji te podatke skuplja, transformira i sprema, i na kraju jedan koji ih analizira. Tehnologije su u rasponu od svih standardnih web tehnologija za anotacijske alate, preko Pythona, NodeJS-a i YAML-a  definiranje potrebnih transformacija, sve do dobrog starog Basha. Podatke spremamo na Google Storage i BigQuery tablice, a za transformacije se po potrebi koristimo svim Googleovim alatima (Cloud Functions, Cloud Runs, DataFlow, PubSub). Svi timovi surađuju skupa kako bi (ponekad nestrpljivi) AI inženjeri bili posluženi sa prijeko potrebnim podacima.

Kod kuće je najljepše

Iako sve (i izvorne i transformirane) podatke čuvamo na cloudu, naposljetku oni moraju završiti na našim on-premise strojevima za eksperimente. Primarni faktor u odluci za takve strojeve bila je ušteda: svatko tko se okušao u GPU instancama u oblaku zna da je to sport koji košta tisuće i tisuće dolara mjesečno. Uz to, prednosti su potpuna kontrola operacijskih sustava te verzija njihovih paketa i raznih drivera. S druge strane, mana on-premise strojeva su operativni troškovi administriranja takvih strojeva te mogući popravci koji bi onemogućili pokretanje eksperimenata. Tehnologije koje koristimo su svi mogući Unix alati, skupa povezani Bashom i Pythonom, a vizualni pregled sustava crta nam Netdata.

Čisto strojno učenje

Za obavljanje samih eksperimenata, osim podataka potrebno je i okruženje sa svim kodom, s točnim paketima i pristupom odabranim grafičkim karticama. Uz to, jako je bitno monitorirati eksperimente, i u smislu potrošnje resursa poput CPU, GPU i RAM, ali i točnosti. Nakon inicijalnih sklepanih rješenja u Google Sheetsu, i kontempliranja pisanja svog job queueing and monitoring sustava, naletjeli smo na ClearML. Iako nije bez svojih mušica, omogućuje nam da naš Python kod u Docker kontejnerima pretvorimo u modele na cloudu, te nudi crtanje prijeko potrebnih grafova ali i neke napredne mogućnosti poput pipelineova i upravljanje skupovima podataka.

Količina eksperimenata koje treba isprobati, zajedno sa povremenim hardverskim problemima na strojevima, dovelo je da nam ponekad ipak nedostaje kapaciteta. Zbog toga smo razvili vlastiti in-house sustav za pokretanje eksperimenata na GCP kroz ClearML. Time smo omogućili pokretanje eksperimenata s puno različitijim (i naprednijim) konfiguracijama nego on-premise, što nam ultimativno dopušta veću fleksibilnost te balansiranje između utrošenog vremena i potrošenog novca.

Iznad oblaka nema laganja

Na kraju ciklusa, rezultat je binarni zapis modela koji spreman za posluživanje u produkciji, koja je u već spomenutom oblaku. Za to je potrebno model staviti u okolinu spremnu za posluživanje. Temelj naše poslužiteljske okoline je Nvidijin triton server u obliku Docker kontejnera. Testiranje performansi samog modela obavljamo Locustom i još jednim in-house load testing alatom. Konačni kontejner s modelom, kao i mnoge druge, predajemo (preko ArgoCD) Kubernetes clusterima na upravljanje, a kako bismo ostali informirani o ponašanju produkcije, uz čitav skup Googleovih alata i metrika koristimo i Grafanu.

Teško je, naravno, opisati baš cijelu mašineriju koja stoji iza komponenti AI tima, ali to i nije potrebno. Ovisno o potrebama i implementacijama, mnoge tehnologije smo prvo objeručke prigrlili pa se onda s njima pozdravili. Jedina konstanta, zapravo, je da je sve promjenjivo.