Սյունակ

Այն ամենը, ինչ մեր harness-ը հրաժարվում է չափել. անվստահության changelog

Բենչմարք-harness-ին վստահում են ոչ թե չափածի, այլ մերժածի համար։ Մերը սկսվեց ութսուն տող միամիտ ցիկլից; այդուհետ ամեն տարբերակ սպի է՝ commit-հաղորդագրությամբ։ Անվավեր առաջին գործարկումը, որ պահեցինք, հարևանի ստուգումը, fallback-դետեկտորը, բառը, որ համընկավ ուրիշ բառի մեջ։

կարծիք 01 սեպտեմբերի, 2026 թ.

Սա կարծիք-սյունակ է, ոչ թե լաբորատորիայի արդյունք։ Թվերն այստեղ հեղինակի աշխատանքային օրագրից և մեջբերված արտաքին աղբյուրներից են (նշված են տեքստում), երբեք՝ claim-երի ռեեստրից։ Չափված, ապացույցներով արդյունքներն ապրում են /claims/.

Մեր հանրային արխիվի առաջին գործարկումն անվավեր է։ Ոչ ջնջված, ոչ էլ վերագործարկված ու լուռ փոխարինված — անվավեր, հենց այդպես նշված, պահված միտումնավոր։ Harness-ը 0.1.0 տարբերակն էր, go/no-go անցումը պահելու արժանի ոչ մի ելք չտվեց, և այդ ձախողման գրառումը առաջին աղյուսն է այն ամենի, ինչ դրանից հետո հրապարակել ենք։ Harness-ի ամբողջ changelog-ին ես սկսել եմ հենց այդպես նայել. ոչ թե ֆիչրների ցուցակ, այլ ցուցակ այն բաների, որոնց վստահելը դադարեցրինք՝ միջադեպ առ միջադեպ։

Դադարեցինք վստահել հոսթին։ Վաղ շրջանում մի չափում ընթացավ հենց այն պահին, երբ տուփի վրա ինչ-որ ուրիշ բան արթնացավ, և թվերը տատանվեցին այնպիսի պատճառներով, որոնք մոդելի հետ կապ չունեին։ Հիմա ամեն գործարկում հոսթի գույքագրումը գրանցում է երկու անգամ — մեկ անգամ սկզբում, մեկ անգամ վերջում, — և GPU-ընդունակ հարևանը, որ երևում է երկու snapshot-ից որևէ մեկում, բջիջն անվավեր է դարձնում։ Ոչ թե դրոշակով է նշում։ Անվավեր է դարձնում։ Երկու նոդանոց նավատորմը գոյություն ունի հենց նրա համար, որ մեկ տուփը կարողանա բավական դատարկ մնալ, որ այդ ստուգումն անցնի. կեղտոտ տուփը քշում է մնացած ամեն ինչը հենց նրա համար, որ մաքուր տուփը ոչինչ չքշի։

Դադարեցինք վստահել, որ runtime-ը կխափանվի բարձրաձայն։ Մոդելը կարող է լուռ լքել GPU-ն ու շարունակել պատասխանել — ավելի դանդաղ, ճիշտ և անտեսանելի, եթե հատուկ փնտրելու չգնաս։ Harness-ը հիմա սերվերի լոգում fallback-մարկերներ է որոնում, որովհետև լուռ CPU fallback-ը գեղեցիկ վերարտադրելի թվեր է արտադրում սխալ սարքի մասին։ Սա կանաչ-բայց-փչացած դաշբորդի չափողական ազգականն է. ամենավատ խափանումները նրանք են, որոնք շարունակում են ելք արտադրել։

Դադարեցինք վստահել մեր սեփական խողովակաշարին։ Դիմացկունության գործարկումներից մեկը մեռավ ոչ թե մոդելից, այլ հենց harness-ից. thread-pool-ի հարմար մեթոդը ամբողջ workload-ի future-ները հերթագրեց միանգամից, հերթը կերավ մեքենայի հիշողությունը, և out-of-memory killer-ը երեքժամյա չափումն ընդհատեց երկրորդ ժամին։ Ուղղումը հիմա մեկնաբանություն է սորսի մեջ՝ մեծատառերով, որպեսզի հաջորդ մարդը — սովորաբար ես — այդ հարմարությունը նորից չհայտնագործի։

Դադարեցինք վստահել ենթատողերին։ Gate-ը, որը ստուգում է, թե մոդելն ազնվորեն ասո՞ւմ է «դա փաստաթղթում չկա», մի անգամ not մարկերը գտավ Note բառի ներսում, և հորինված պատասխանը հանգիստ անցավ որպես ազնիվ հրաժարում։ Ուղղումը բառասահմաններն էին, հետո՝ դրանց թիկունքում ավելի կոշտ կանոն. պատասխանի ցանկացած կոդանման արժեք պետք է տառացիորեն մեջբերելի լինի սկզբնաղբյուր փաստաթղթից, այլապես պատասխանը ձախողվում է։ Հրաժարման gate-ի հաշվետվությունը կանգնած է այդ ուղղման վրա; առանց դրա gate-ը չափում էր մեր regex-ը, ոչ թե մոդելը։

Իսկ այս ամենի տակ՝ կանոնը, որ harness-ից էլ հին է. ձախողումները մնում են հայտարարի մեջ։ Ամեն գցված հարցում, ամեն դատարկ պատասխան, ամեն անվավեր գործարկում արդյունքի մասն է, որովհետև այլընտրանքը — միջինել միայն այն հարցումները, որոնք իրենց լավ են պահել — հուսալիության խնդիրը վերածում է արագության բոնուսի և պարգևատրում այն սերվերին, որն ամենաարագն է ձախողվում։

Այս ստուգումներից ոչ մեկը մեր թվերն ավելի մեծ չդարձրեց։ Մի քանիսը փոքրացրին, իսկ մեկը ջնջեց արդյունք, որն ինձ դուր էր գալիս։ Բանն էլ, ըստ էության, հենց դա է։ Harness-ը, որը միայն հաստատում է, ոչինչ չի չափում; քո անվստահության տարբերակների պատմությունը ամենաազնիվ փաստաթուղթն է, որ քո թվերն ունեն։ Մերը հրապարակային է՝ սպիներով ու մեծատառ մեկնաբանություններով հանդերձ — մասամբ, որ կարողանաք այն գործարկել, գլխավորապես՝ որ կարողանաք ստուգել, թե ինչ է այն հրաժարվում անել։

← Բոլոր սյունակները