Блог

Прогресс жапсырмасында жасырынған жадтың толуы (out-of-memory) қатесі

Қыркүйектің бір кешінде бір пайдаланушының жұмыс кеңістігіндегі AI агенті жадтың таусылуы (out-of-memory) қатесімен бір айналым ортасында құлады. Ойға оралатын себептер — тым көп суб-агент бір уақытта жұмыс істеп тұрды, немесе контекст тым ұлғайып кетті — екеуі де қате болды. Нағыз себеп күй жапсырмасы еді: модель үлкен shell командасын бірнеше таңбадан ағызып жіберген кезде, біз әр бөлікте жапсырманың сол кезге дейінгі бүкіл командасын қайта жібердік. 124 КБ командадан шамамен 41 000 оқиға және шамамен 690 МБ кезекке тұрған жолдар шықты.

Агент жұмысын қалай ағызады

Mythex-те құрастырғанда агент жобаңыздың жеке бұлттық sandbox-ында жұмыс істейді. Модель жазған сайын шығысы браузеріңізге ағады: мәтін сөз-сөзден пайда болады, ал ол құралды іске қосқанда — мысалы файл жазатын shell командасын — оның жапсырмасын жанды жаңартқанын көресіз.

Модель шағын бөліктермен ағады. Біз пайдаланған модельде бөліктер жиі үш таңбадан ғана болатын.

Алғашқы болжамдар қате болды

Құлау масштабтау мәселесіне ұқсады, сондықтан сонда бастадық.

  • Параллель суб-агенттер ме? Айналымда тек екеуі жұмыс істеген, әрқайсысы шамамен 1,5 МБ күйді ұстап тұрған. Бұл жеткіліксіз.
  • Сақталған іздер ме? Біздің трассировка жадта іздеу ағашын ұстап тұрды, бірақ ол құлау кезіндегі жады үйіндісіне жақын да емес еді.

Екі болжам да сенімді естілді, екеуі де оңай сеніп алуға болатындай еді. Екеуі де құлауды қайталамады. Біз қайта-қайта үйренетін сабақ: болжам себеп бола алмайды, ол құлауды қайталағанша.

Нақты қайталау

Өндірістегідей жад шектеуі бар уақытша sandbox жасадық және үлкен файлды шынайы үш таңбалық бөліктермен ағызатын жалған модель қостық. Желінің басқа жағындағы оқушыны да баяу етіп жасадық, нақты желідей.

Міне, осы жерде құлады. Жад өсіп, процесс сол жад қатесімен өлді.

Механизм бақылағанда қарапайым болды. Модель үлкен команданы — бұл жағдайда 124 КБ файлды жазатын heredoc — жазып жатқанда, біздің ағын коды құралдың жапсырмасын әр бөлікте жаңартты. Жапсырма жаңа үш таңба емес, сол кезге дейінгі бүкіл команда болды. Сондықтан оқиғалар өсті: 3 таңба, сосын 6, сосын 9, … 124 КБ-қа дейін, шамамен 41 000 рет. Сокет оларды өндірілгеннен жылдамырақ жібере алмағандықтан, олар жолдар ретінде оның жазу буферінде жиналды — шамамен 690 МБ.

Түзету

  • Жапсырманы шектедік. Күй жапсырмасы тек не болып жатқанын айтуы керек. Енді ол 200 таңбамен шектелген, ал жартылай команданы қайта қарауды жиілігін шектейміз.
  • Квадраттық қосуды тоқтаттық. Ағындағы бөліктерді қайталанатын жол қосуымен біріктіру үлкен шығыс үшін O(n²) болады. Біз сызықтық уақытта қосатын бөлікке негізделген тәсілге көштік.

Содан кейін үздіксіз шығыс ағынында шексіз өсетін басқа нәрсені іздедік және шектедік:

  • Чатта көрсетілетін жанды команда шығысы топтастырылып, соңғы 8 000 таңбамен шектеледі.
  • Жеке оқиға жолдары 4 МБ-пен шектеледі.
  • Браузер қайта қосылғаннан кейін жонғыру үшін пайдаланатын қайталау буфері әр жоба үшін 8 МБ-пен шектеледі.
  • Ескі чекпоинттер айналым барысында тазаланады, ең жаңа күйді және бұрынғы айналымдарға қажетті бекіту нүктелерін сақтай отырып.

Ағындарды адал тексеру

Ағындарды тексеру күткеннен қиынырақ болды, екі себеппен:

  1. Нақты модельдер бағынбайды. Оларға үлкен файлды басып шығаруды сұрасаңыз, әдетте бас тартады, қысқартады немесе ақылдырақ жазады. Ағындарды тексеру үшін сізге нақты агент коды арқылы жүретін, айтқаныңызды дәл орындайтын скрипттелген модель керек.
  2. Скрипттер модельдер сияқты әрекет етуі керек. Біздің алғашқы скрипттелген модель әр жауапта бірдей жауап ID-ін қайта пайдаланды, сондықтан агент фреймворкі әр жауапты алдыңғысының ауысуы деп қабылдап, айналымдарды ерте аяқтады. Бұл UI жаңарту қатесі сияқты көрінді. Бұл олай емес еді — сынақ жабдығы бізді алдап отырған. Жад сандары шынайы болуы үшін скриптке модельдің нақты контекст шегін де күштеуге тура келді.

Одан не алдық

  • Ағын UI шағын қателерді көбейтеді. «Бөлікке қарай» жіберген кез келген нәрсе ондаған мыңдаған рет жіберіледі. Өзгерістерді жіберіңіз немесе жүктемені шектеңіз.
  • Баяу шекарадан өтетін әр буферді шектеңіз. Сокеттер, қайталау журналдары және чекпоинттер бәріне шек керек.
  • Түзетпес бұрын қайталаңыз. Біздің алғашқы екі түсіндіру дұрыс естілді, бірақ қате болды.

Егер жақында Mythex чатында агент тоқтамай-ақ өте ұзын файлдың пайда болғанын байқаған болсаңыз, бұл соның бір себебі.

Mythex · Pricing · ЖИ көмегімен кез келген нәрсені жасаңыз · Сайттар мен қосымшаларға арналған үлгілер · Mythex салыстыруда · ЖИ-мен қосымша жасау сөздігі · ЖИ-мен қосымша жасауға арналған тегін құралдар · 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 Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)