Blogu

Kuweka Zamu za Wakala Zenye Picha Nyingi Ndani ya Kumbukumbu

Zamu moja ya wakala kwenye uzalishaji ilikosa kumbukumbu kwa MB 952 wakati ikikata bidhaa kutoka kwenye skana sita za katalogi na kuangalia kupunguzwa kwake. Haikuwa uvujaji mmoja — kulikuwa na tatu. Kila wito kwa modeli ulituma tena picha za zamu kwa ukubwa kamili; maktaba tunayotumia kuita modeli iliweka kila ombi hai hadi zamu iishe; na ufuatiliaji wa mfumo wa wakala ulishika ingizo la kila wito, pamoja na picha, kwa zamu nzima. Tumezirekebisha zote tatu: picha zinapunguzwa kabla ya kutumwa, na picha za kila wito zinaachiwa mara tu wito unapokamilika.

Wakala anavyoona picha

Unapojenga kwenye Mythex, wakala anafanya kazi ndani ya sandbox ya wingu ya mradi wako. Anaweza kuangalia picha — picha ya skrini uliyoambatisha, mockup, faili kwenye mradi wako, au picha ambayo yeye mwenyewe ameitengeneza — kwa kuituma kwa modeli pamoja na mazungumzo.

Zamu ni kila kitu wakala anachofanya kujibu ujumbe mmoja kutoka kwako. Ndani ya zamu, wakala anaita modeli mara nyingi: anafikiri, anaendesha zana, anaangalia matokeo, kisha anafikiri tena. Kila wito unatuma mazungumzo hadi sasa, na hilo linajumuisha picha za zamu, zilizosimbwa kama maandishi (base64, ambayo huifanya kuwa kubwa kwa takriban theluthi moja).

Zamu iliyoanguka ilikuwa inafanya kitu cha kawaida. Ilichukua skana sita za katalogi, takriban 2.4 MB kila moja, ikakata bidhaa binafsi kutoka kwake, na ikaendelea kusoma tena vipande vyake ili kuvikagua. Hiyo ni miito mingi ya modeli, kila moja ikibeba picha kubwa kadhaa.

Sababu ya 1: kila wito ulituma tena picha za ukubwa kamili

Kila wito wa modeli ulijenga upya mwili wake wa ombi ukiwa na picha za zamu kwa ukubwa kamili — takriban MB 20 za base64 kwa kila wito. Mwili unajengwa kama mfuatano mmoja kwenye kumbukumbu ya wakala, kwa hiyo kila wito ulitenga MB nyingine 20.

Hata kutuma ukubwa kamili hakukuwa na faida yoyote. Modeli yenyewe inapunguza picha hadi takriban pikseli 1,300 upande wake mrefu, kwa hiyo pikseli za ziada zilikuwa zinagharimu kumbukumbu na muda wa kupakia tu.

Suluhisho: punguza mara moja, tuma ndogo

  • Picha zilizozidi KB 400 sasa zinabadilishwa kuwa JPEG ya upeo wa pikseli 1,568 upande wake mrefu kabla ya kutumwa. Picha ndogo zinatumwa zilivyo.
  • Ubadilishaji unatumia ImageMagick, ambayo ipo kwenye kila sandbox ya Mythex, na unaendeshwa mara moja kwa kila faili. Zamu inayoonyesha skana zilezile kwenye kila wito inatumia tena nakala iliyopunguzwa. Akiba hiyo inatambuliwa kwa njia ya faili, ukubwa wake na tarehe ya mwisho ya kubadilishwa, kwa hiyo faili lililohaririwa linabadilishwa tena, na lina kikomo chake cha ukubwa ili lisiwe kitu kinachojaza kumbukumbu.
  • Bajeti ya picha kwa wito mmoja wa modeli inashuka kutoka MB 16 hadi MB 6.

Skana sita zilezile sasa zinagharimu MB 4.4 kwa kila wito badala ya MB 19.7.

Sababu ya 2: mteja wa modeli hakuachilia ombi kamwe

Ukubwa wa kila ombi ulikuwa sehemu tu ya tatizo. Kumbukumbu pia iliongezeka wito baada ya wito. Kwenye mazingira yetu ya staging, zamu ya aina hiyohiyo ilishikilia MB 369 za kumbukumbu hai hata baada ya garbage collection kamili — hatua ambapo kila kitu ambacho hakifikiki kimeshaachiwa. Uchunguzi wa heap uliweka ukuaji wote kwenye sehemu ya maktaba ya mteja wa modeli inayosimba miili ya maombi.

Sababu ilikuwa abort listener. Unapobonyeza Stop, abort signal ya zamu inawaka, na kila ombi linalosikiliza linaghairiwa. Tulipitisha ishara hiyo ya zamu nzima kwa kila ombi. Maktaba ya mteja inaongeza listener ya "abort" kwenye ishara yoyote anayopewa — na kamwe haiiondoi.

Kwa hiyo kila ombi la zamu lilibaki likifikiwa kutoka kwenye ishara ya zamu, kwa muda wote zamu ilipodumu: listener, ambayo ilishikilia kidhibiti cha ombi, ambacho kilishikilia ombi lenyewe, pamoja na mwili wake wote na picha zake.

Suluhisho: ishara moja kwa kila ombi

Kila ombi sasa linapata ishara yake. Linaunganishwa na ishara ya zamu wakati tu linapoendeshwa — kwa jibu lenye mtiririko, hadi kipande cha mwisho kisomwe — kisha linatenganishwa mara baada ya hapo. Stop bado inafika kwenye ombi lolote linaloendelea, lakini ishara ya zamu inashikilia listener mmoja tu kwa wakati mmoja.

Majaribio yanafunika sehemu zote tatu:

  • Baada ya miito 12, hakuna listeners zinazobaki kwenye ishara ya zamu. Kabla ya marekebisho kulikuwa na 12.
  • Kwa maombi 15 ya MB 8 kila moja, kumbukumbu inabaki tambarare. Kabla, ilikua kwa MB 128.
  • Kubonyeza Stop bado kunaghairi ombi katikati ya mtiririko wake.

Sababu ya 3: ufuatiliaji ulihifadhi ingizo la kila wito

Uchunguzi wa snapshot ya heap ulionyesha mshikiliaji wa tatu: takriban MB 6 zilizohifadhiwa kwa kila wito wa modeli. Hii ilitoka kwenye utiririshaji wa matukio wa mfumo wa wakala. Unarekodi kila wito wa modeli kwenye zamu kama mtoto wa zamu hiyo, pamoja na ingizo, hadi zamu iishe. Kila picha iliyoambatishwa kwenye kila wito ilibaki kwenye kumbukumbu nayo.

Suluhisho: futa picha mara wito unaporudi

Picha zinaambatishwa tu kwenye ujumbe uliotengenezwa kwa wito maalum wa modeli. Hazihifadhiwi kamwe kwenye hali iliyohifadhiwa ya mazungumzo. Kwa hiyo wito ukisharudi, ni salama kufuta data ya picha kwenye ujumbe hizo. Ufuatiliaji unabaki na rekodi ya maandishi ya wito; pikseli zinaondoka.

Jambo moja muhimu: picha lazima zifutwe papo hapo (in place). Ufuatiliaji unaweza kufikia data ya picha hiyohiyo kupitia marejeo zaidi ya moja kwenye ujumbe, kwa hiyo kubadilisha kwa orodha mpya tupu kungeacha ile ya awali — pikseli na zote — bado ikifikiwa. Hali ya mazungumzo iliyohifadhiwa haibadilishwi kamwe.

Jaribio moja linaendesha grafu ya wakala chini ya utiririshaji huo wa matukio na picha ya MB 4 kwenye kila wito. Bila marekebisho, kumbukumbu ilikua kwa MB 77 kwa miito 16. Kwa marekebisho, kumbukumbu inabaki tambarare.

Tuliyojifunza

  • Matatizo ya kumbukumbu yanaweza kuja kwa tabaka. Sababu tatu tofauti zilishikilia picha kwa muda mrefu, na zote tatu zilipaswa kuondolewa ndipo zamu ikae ndani ya kumbukumbu.
  • Chochote unachompa maktaba kinaweza kubakizwa. Ishara na ufuatiliaji vyote vilidumu zaidi ya miito iliyopewa. Kumbukumbu inapokua kwa kila wito, angalia vitu vya muda mrefu ambavyo wito unavigusa.
  • Usitume kile upande mwingine unachokitupa. Pikseli ambazo modeli ingezitupa hata hivyo ziligharimu kumbukumbu yetu kwenye kila wito.
  • Jaribu kumbukumbu moja kwa moja. Kila marekebisho yalikuja na jaribio linalopima ukuaji wa heap au idadi ya listeners, kwa hiyo kurudi nyuma kunaonekana kama namba, si ajali.

Hii ni hadithi ya pili ya kumbukumbu kutoka kwa wakala kwa muda mfupi; ya kwanza ilikuwa lebo ya maendeleo iliyotuma tena mara 41,000. Ukitaka kujua zaidi kuhusu wakala ni nini na unavyofanya kazi, angalia mwongozo wetu wa wakala wa AI na nyaraka za chat.

Mythex · Pricing · Jenga chochote kwa AI · Violezo vya tovuti na programu · Mythex ikilinganishwa · Kamusi ya istilahi za kujenga programu kwa AI · Zana za bure za kujenga programu kwa AI · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)