Blogg

Minnisþrotið í framvindumerkinu

Eitt kvöld seint í september hrundi gervigreindar-aðstoðarmaðurinn í vinnusvæði notanda með villu um skort á minni mitt í umferð. Augljósu grunsemdirnar, of margir undiragentar keyrandi í einu eða samhengi sem hafði vaxið of stórt, voru báðar rangar. Raunveruleg orsök var stöðumerki: meðan módelið streymdi stórri skipanaskel nokkrum stöfum í einu sendum við alla skipunina eins og hún var orðin aftur sem framvindumerki við hvert brot. Ein 124 KB skipun varð að um 41.000 atburðum og um 690 MB af biðröðuðum strengjum.

Hvernig aðstoðarmaðurinn streymir vinnu sinni

Þegar þú smíðar á Mythex keyrir aðstoðarmaðurinn inni í einkaskýjasandkassa verkefnisins þíns. Meðan módelið skrifar streymir úttakið aftur í vafrann þinn: texti birtist orð fyrir orð, og þegar hann keyrir verkfæri, til dæmis skipun í skel sem skrifar skrá, sérðu merki fyrir það sem uppfærist í rauntíma, svo þú veist hvað hann er að gera.

Modelið streymir í litlum bitum. Með modelinu sem við keyrðum voru þeir oft aðeins þrír stafir að lengd.

Fyrstu tilgáturnar voru rangar

Hrunið leit út eins og skölunarvandamál, svo við byrjuðum þar.

  • Samhliða undiragentar? Umferðin hafði aðeins notað tvo, sem héldu hvor um sig um 1,5 MB af stöðu. Ekki nóg.
  • Geymdir rekjanir? Rakningin okkar hélt keyrslutré í minni, en það var langt frá stærð haugsins í hruninu.

Báðar sögurnar voru trúverðugar og báðar kostuðu lítið að trúa. Hvorug endurskapaði hrunið. Lexían sem við lærum aftur og aftur: tilgáta er ekki orsök fyrr en hún endurskapar bilunina.

Að endurskapa þetta fyrir alvöru

Við bjuggum til einnota sandkassa með sömu minnismörkum og í framleiðslu og gervimódel sem streymdi stórri skrá í raunhæfum þriggja stafa bitum. Við gerðum líka lesarann hinum megin við tenginguna hægan, eins og raunverulegt net.

Það dugði. Haugurinn óx og ferlið dó með sömu villu.

Aðferðin var einföld þegar við gátum horft á hana. Meðan módelið skrifaði stóra skipun, í þessu tilviki heredoc sem skrifaði 124 KB skrá, uppfærði streymiskóðinn okkar merki verkfærisins við hvert brot. Merkið var ekki nýju þrír stafirnir; það var öll skipunin eins og hún var orðin. Atburðunum fjölgaði því: 3 stafir, svo 6, svo 9, … upp í 124 KB, um 41.000 sinnum. Innstungan gat ekki sent þá jafn hratt og þeir urðu til, þannig að þeir söfnuðust upp í skrifbuffer hennar sem strengir, um 690 MB af þeim.

Lagfæringin

  • Takmarkaðu merkið. Stöðumerki þarf aðeins að segja hvað er að gerast. Það er nú takmarkað við 200 stafi, og við stillum hversu oft við skönnum hluta skipunarinnar aftur.
  • Hættu tvíliðuðum samlestri. Að tengja streymda búta saman með endurteknum strengjasamtengingum er O(n²) fyrir stór úttök. Við skiptum yfir í aðferð sem byggir á bútum og bætir við í línulegum tíma.

Síðan leituðum við að öllu öðru sem gæti vaxið án marka við flóð úttaks og settum mörk á það:

  • Lifandi úttak skipana sem sýnt er í spjallinu er sett í hópa og heldur aðeins síðustu 8.000 stöfunum.
  • Einstakar atburðalínur eru takmarkaðar við 4 MB.
  • Endurspilunarbuffinn sem vafri notar til að ná upp eftir endurtengingu er takmarkaður við 8 MB á hvert verkefni.
  • Gömlum vistunarpunktum er hent út meðan umferð gengur, og við geymum nýjasta ástandið og þá akkeri sem fyrri umferðir þurfa.

Að prófa flóð af heiðarleika

Tvennt gerði þetta erfiðara að prófa en það þurfti að vera:

  1. Raunveruleg módel vinna ekki með. Biddu módel um að prenta gríðarstóra skrá og það mun yfirleitt neita, draga saman eða skrifa hana skynsamlegar. Til að prófa flóð þarftu handrita módel sem gerir nákvæmlega það sem þú segir, keyrandi í gegnum raunverulegan kóða aðstoðarmannsins.
  2. Handrit verða að haga sér eins og módel. Fyrsta handritaða módelið okkar notaði sama svarauðkennið í hvert svar, þannig að agnaramminn leit á hvert svar sem staðgengil þess síðasta og lauk umferðum of snemma. Það leit út eins og villa í endurnýjun viðmótsins. Svo var ekki; prófunaruppsetningin var að ljúga að okkur. Við þurftum líka að framfylgja raunverulegu samhengismörkum módelsins í handritinu, annars voru minnistölurnar óraunhæfar.

Það sem við lærðum

  • Streymisviðmót margfalda litlar villur. Allt sem þú sendir „á hvern bút“ er sent tugþúsundir sinnum. Sendu mismun, eða takmarkaðu farminn.
  • Settu mörk á hvern buffer sem fer yfir hægt skil. Innstungur, endurspilunarskrár og vistunarpunktar þurfa allir þak.
  • Endurskapaðu áður en þú lagar. Fyrstu tvær skýringar okkar hljómuðu rétt og voru rangar.

Ef þú hefur séð mjög langa skrá birtast í Mythex-spjallinu nýlega án þess að aðstoðarmaðurinn stöðvaðist er þetta hluti af ástæðunni.

Mythex · Pricing · Smíðaðu hvað sem er með gervigreind · Sniðmát fyrir vefsíður og forrit · Mythex í samanburði · Orðasafn um forritasmíði með gervigreind · Ókeypis verkfæri fyrir forritasmíði með gervigreind · 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 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 Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)