ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
Numărul 150
Numărul 149 Numărul 148 Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 146
Abonament PDF

Spring și procesarea imaginilor. Interviu cu Mihăiță Țintă și Bogdan Arvinte

Luminița Voicu
Desktop Publisher @ Today Software Magazine



INTERVIU

Prezentarea voastră de la The Developers 2024 a fost foarte apreciată de public : procesarea de imagine server side și integrarea cu un llm.

Care a fost arhitectura aplicației?

Mihăiță Țintă: Intenția noastră a fost să discutăm pe baza unei aplicații near-realtime în care două sisteme funcționează concomitent pentru a afișa informații utile clientului final. Arhitectura este una simplificată în care un client (browser) stabilește o conexiune bidirecțională cu un server web. Acesta, la rândul său, consumă serviciile unui alt sistem mai greoi de care însă depinde funcționalitatea de bază a aplicației: sistemul apelat rulează un model LLM pentru a putea decoda imagini din streamul video primit de la user în emoții afișate sub formă de emoji.

  Am văzut că ați ales 12 frame-uri pe secundă. De ce nu ați mers pe 24? Ce implicații ar fi avut asta în partea de procesare?

Bogdan Arvinte: Din punct de vedere vizual, versiunea cu 12FPS era aproape de cea cu 24FPS ca percepție a mișcării utilizatorilor (imagini de tip selfie). Micșorând această cifră, numărul de mesaje din rețea a devenit mai mic.

În aplicație, userii se pot vedea simultan, iar fiecăruia îi este asociată în mod constant o emoție. Avem așadar două funcționalități - streamul video de imagini de tip broadcast - toată lumea vede pe toată lumea - și procesarea imaginilor, care presupune că la fiecare secundă este afișat un anumit emoji. Cum această a doua operație consumă foarte mult CPU pe partea de procesare, decizia noastră a fost să limităm apelurile externe pentru un mic procent din imaginile primite de la user. În practică, nu ar fi ajutat să avem un emoji pentru fiecare frame, deoarece utilizatorii ar fi putut vedea aproape doar emojis, în loc de imaginile celorlalți.

  Cum ați fixat prima eroare simulată legată de transmiterea datelor prin threaduri concurente și cum ați optimizat soluția?

Mihăiță Țintă: Scrierea mesajelor prin websocket folosea un obiect nesincronizat în Java, iar unele threaduri ajungeau să eșueze în a scrie frame-urile trimise către alți utilizatori. Din acest motiv, sesiunea de websocket este închisă, deconectând practic fiecare utilizator afectat. Prima variantă a fost să folosim o altă implementare thread-safe în care un singur thread va putea scrie mesaje pe sesiune. În practică, în momentul în care am folosit un număr foarte mare de threaduri de sistem, această sincronizare a arătat o penalizare a performanței. Varianta cu threaduri virtuale a fost mai bună, deoarece un număr mic de threaduri de platformă au fost folosite pentru a realiza scrierea mesajelor.                   

Care este volumul de imagini procesate pe secundă din simulare?

Bogdan Arvinte: În simulare am reușit să plimbăm 270.000 de mesaje pe secundă între 150 de utilizatori pentru a avea percepția unui video care nu se mișcă sacadat. Pentru o mică parte din acele imagini am adăugat analiza emoțiilor, astfel încât la fiecare moment să existe câte un emoji pentru aproape toți utilizatorii.

Menționați-ne care este una dintre cele mai importante optimizări de cod realizate în timpul demo-ului.

Mihăiță Țintă: Dincolo de orice optimizare, am avut o înțelegere mai bună asupra a ceea ce se întâmplă în sistem abia după ce am activat metricile și am construit câteva grafice. Activarea de virtual threads este o schimbare ușoară (toggle on/off în spring), dar și ea, ca orice altă optimizare, trebuie însoțită de dovezi concrete de îmbunătățire a performanței, nu ne putem baza pe presupuneri.

Față de o prezentare obișnuită un demo poate avea și probleme. Cum a mers demo-ul vostru?

Bogdan Arvinte: Prezentarea noastră a avut loc la mijlocul zilei și ne-am putut bucura de conținutul prezentat de speakerii de dinaintea noastră. Pentru a ne asigura că totul va decurge cum trebuie, am verificat din timp tot setupul local, astfel încât să minimizăm riscul unor incidente tehnice. Întregul proiect poate fi folosit ca studiu de caz pentru comunicare realtime, profiling de performanță sau integrare cu LLM, iar principala provocare a fost timpul limitat în care să ne încadrăm cu un astfel de subiect. Faptul că am putut testa aplicația cu ajutorul colegilor din sală ne-a oferit o satisfacție suplimentară și a contribuit la succesul demo-ului.

Ce v-a plăcut cel mai mult la conferința de anul acesta ?

Mihăiță Țintă: Orașul Cluj-Napoca ne este drag și ne bucurăm de fiecare dată când putem reveni aici. Participanții la conferință au fost activi de-a lungul prezentărilor; e un aspect pe care îl apreciem fiindcă ne ajută să înțelegem ce tip de informație este relevantă pentru ei și unde putem îmbunătăți prezentările sau sesiunile de demo.
Evenimentul a avut parte de discuții interesante și bine pregătite, iar speakerii invitați s-au ridicat la nivelul așteptărilor noastre, dar și al publicului, din ceea ce am putut observa în sală.

NUMĂRUL 149 - Development with AI

Sponsori

  • Accenture
  • BT Code Crafters
  • Accesa
  • Bosch
  • Betfair
  • MHP
  • BoatyardX
  • .msg systems
  • P3 group
  • Ing Hubs
  • Cognizant Softvision
  • Colors in projects