Ajali ya Kumbukumbu Iliyojificha Ndani ya Lebo ya Maendeleo
Jioni moja mwishoni mwa Septemba, agent wa AI kwenye workspace ya mtumiaji mmoja aliporomoka kwa hitilafu ya out-of-memory katikati ya zamu. Washukiwa dhahiri — sub-agents wengi wanaoendeshwa kwa wakati mmoja, au muktadha uliokuwa umekua mno — wote walikuwa si sahihi. Chanzo halisi kilikuwa lebo ya hali: model ilipokuwa ikitiririsha amri kubwa ya shell herufi chache kwa wakati mmoja, sisi tulituma tena amri nzima kufikia hapo kama lebo ya maendeleo kwenye kila kipande. Amri moja ya KB 124 ikawa takriban matukio 41,000 na takriban MB 690 za nyuzi zilizopangwa foleni.
Agent anavyotiririsha kazi yake
Unapojenga kwenye Mythex, agent anaendeshwa ndani ya sandbox ya wingu ya faragha ya mradi wako. Model inapoandika, matokeo yake yanarudi kwenye kivinjari chako kwa mtiririko: maandishi yanaonekana neno kwa neno, na inapoendesha zana — kwa mfano amri ya shell inayoandika faili — unaona lebo yake ikisasishwa moja kwa moja, ili ujue inafanya nini.
Model inatiririsha kwa vipande vidogo. Kwa model tuliyokuwa tukiitumia, vipande hivyo mara nyingi vilikuwa herufi tatu tu.
Dhana za kwanza zilikuwa si sahihi
Ajali ilionekana kama tatizo la ukuaji, kwa hiyo tulianzia hapo.
- Sub-agents sambamba? Zamu ilitumia wawili tu, kila mmoja akishikilia takriban MB 1.5 za hali. Hakitoshi.
- Mifuatilio iliyohifadhiwa? Ufuatiliaji wetu uliweka mti wa run kwenye kumbukumbu, lakini ulikuwa mbali sana na ukubwa wa heap wakati wa ajali.
Hadithi zote mbili zilikuwa za kuaminika, na zote mbili zilikuwa rahisi kuziamini. Hakuna iliyozalisha tena ajali. Somo tunalojifunza tena na tena: dhana si chanzo hadi izalishe kushindwa kwenyewe.
Kuizalisha kwa kweli
Tulijenga sandbox ya kutupa yenye mipaka ya kumbukumbu ile ile ya uzalishaji, na model bandia iliyotiririsha faili kubwa kwa vipande halisi vya herufi tatu. Pia tulifanya msomaji upande wa pili wa socket awe polepole, kama mtandao halisi.
Hilo lilifanya kazi. Heap ilipanda na mchakato ukafa kwa hitilafu ile ile.
Utaratibu ulikuwa rahisi mara tulipoweza kuuona. Model ilipokuwa ikiandika amri kubwa — katika kesi hii heredoc iliyoandika faili la KB 124 — msimbo wetu wa utiririshaji ulisasisha lebo ya zana kwenye kila kipande. Lebo haikuwa herufi tatu mpya; ilikuwa amri nzima kufikia hapo. Kwa hiyo matukio yalikua: herufi 3, kisha 6, kisha 9, … hadi KB 124, takriban mara 41,000. Socket haikuweza kuyatuma haraka kama yalivyozalishwa, kwa hiyo yalirundikana kwenye bafa yake ya kuandika kama nyuzi — takriban MB 690 zake.
Marekebisho
- Weka kikomo kwa lebo. Lebo ya hali inahitaji tu kusema kinachotokea. Sasa imewekewa kikomo cha herufi 200, na tunapunguza kasi ya kuchanganua upya amri ya sehemu.
- Acha kuunganisha kwa mraba. Kuunganisha vipande vilivyotiririshwa kwa kuunganisha nyuzi mara kwa mara ni O(n²) kwa matokeo makubwa. Tulihamia kwenye mbinu ya vipande inayoongeza kwa muda wa mstari.
Kisha tulitafuta chochote kingine kinachoweza kukua bila mpaka kwenye mafuriko ya matokeo, na tukakiwekea mipaka:
- Matokeo ya amri ya moja kwa moja yanayoonyeshwa gumzoni yanakusanywa na kuhifadhiwa herufi 8,000 za mwisho tu.
- Mistari ya matukio ya kibinafsi imewekewa kikomo cha MB 4.
- Bafa ya kucheza tena ambayo kivinjari hutumia kujishika baada ya kuunganishwa upya imewekewa kikomo cha MB 8 kwa kila mradi.
- Checkpoints za zamani zinafutwa kadiri zamu inavyoendelea, huku hali ya hivi karibuni na nanga zinazohitajika na zamu za awali zikibaki.
Kujaribu mafuriko kwa uaminifu
Mambo mawili yalifanya hili kuwa gumu kujaribu kuliko inavyopaswa:
- Models halisi hazishirikiani. Ukiiomba model ichapishe faili kubwa mno, kwa kawaida itakataa, itafupisha, au kuliandika kwa busara zaidi. Ili kujaribu mafuriko unahitaji model bandia inayofanya hasa unachoiambia, ikikimbia kupitia msimbo halisi wa agent.
- Scripts zinapaswa kuishi kama models. Model yetu ya kwanza bandia ilitumia kitambulisho kile kile cha jibu kwenye kila jibu, kwa hiyo mfumo wa agent uliona kila jibu kama mbadala wa lililotangulia na kumaliza zamu mapema. Ilionekana kama hitilafu ya kusasisha UI. Haikuwa hivyo — ilikuwa harness ya majaribio inatudanganya. Pia ilibidi tutekeleze kikomo halisi cha muktadha wa model kwenye script, la sivyo namba za kumbukumbu zisingekuwa za kweli.
Tulichojifunza
- UI za utiririshaji zinakuza makosa madogo. Chochote unachotuma “kwa kila kipande” kinatumwa mara elfu kadhaa. Tuma tofauti (deltas), au weka kikomo kwenye mzigo.
- Weka mpaka kwa kila bafa inayovuka mpaka wa polepole. Sockets, kumbukumbu za kucheza tena na checkpoints zote zinahitaji dari.
- Zalisha kabla ya kurekebisha. Maelezo yetu mawili ya kwanza yalisikika sahihi na yalikuwa si sahihi.
Ikiwa umeona faili refu sana likionekana kwenye gumzo la Mythex hivi karibuni bila agent kukwama, hii ni sehemu ya sababu.