Numerus a rovnaká odpoveď dvakrát

Platný rozdiel v pohyblivej rádovej čiarke sa dá ľahko prehliadnuť, kým nezmení test, simuláciu, prehrávanie alebo rozhodovaciu vetvu. Numerus považuje...

Numerus a rovnaká odpoveď dvakrát

Chyba, ktorá existuje len na inom počítači

Najviac frustrujúca numerická chyba je tá, ktorá sa odmieta objaviť tam, kde sa práve pozeráte. Test zlyháva na CI, nie lokálne. Simulácia sa po aktualizácii závislostí odchyľuje. Vstavaný cieľový systém produkuje mierne odlišný výsledok ako server. Modelová pipeline vyzerá v poriadku, kým replay nepožiada o rovnaký výpočet dvakrát a nedostane dve odpovede, ktoré sú dosť blízko na to, aby začali hádku.

Blízkosť je niekedy v poriadku. Blízkosť nie je vždy zmluva. Ak je výpočet súčasťou replay cesty, bezpečnostnej kontroly, simulácie, rozhodovania o cene, digitálneho dvojčaťa, audítorskej stopy alebo kroku kompresie modelu, potom sa blízkosť môže zmeniť na produktové riziko. Rozdiel môže byť nepatrný. Nepatrné rozdiely sú stále rozdiely. Softvér vytvoril celé kariéry z toho, že ho nepatrné rozdiely urážajú.

To je dôvod, prečo Numerus existuje v zásobníku Dweve. Stránka Numerus ho rámcuje ako open-source numerický základ pre deterministickú aritmetiku: binárna a desiatková pevná rádová čiarka, adaptívna premenná rádová čiarka Dweve AXIOM, celočíselne orientované operácie, Rust, povrchy kompatibilné s no_std, overovanie proti vysokopresným referenciám tam, kde to dáva zmysel, a deterministické profily určené na to, aby bol replay pokojnejší naprieč podporovanými cieľovými systémami. Zdieľaná spoločná numerická vrstva pod tým je ešte širšia: binárne, trojkové, celočíselné, pevné, pohyblivé a adaptívne rodiny AXIOM pod jednou zmluvou v štýle Element. Presné detaily implementácie zaujímajú inžinierov. Produktové ponaučenie je jednoduchšie: aritmetika nie je šum na pozadí. Je to infraštruktúra.

Keď výsledok vstúpi do replay alebo audítorskej cesty, užitočná otázka nie je, či sú dve odpovede blízko. Je to, či systém dokáže vyprodukovať rovnakú odpoveď dvakrát.

To znie samozrejme, kým nesledujete, kam čísla putujú. Simulácia napája digitálne dvojča. Dvojča napája dashboard. Dashboard informuje ľudské rozhodnutie. Rozhodnutie sa zaznamená. O mesiac sa niekto spýta prečo. Ak numerická vrstva nedokáže reprodukovať výpočet, zvyšok reťazca dôkazov sa stane vratkým. Stále to môže byť obhájiteľné, ale teraz musí tím vysvetľovať zdroj odchýlky, ktorému sa dalo vyhnúť. To je zlý koníček.

Pohyblivá rádová čiarka nie je morálne zlá

Toto nie je kázeň o tom, že pohyblivá rádová čiarka je zlá. Pohyblivá rádová čiarka je jedným z dôvodov, prečo moderné výpočty fungujú. Je rýchla, kompaktná, dobre podporovaná a pre mnohé pracovné zaťaženia úplne správna. Problém začína, keď tímy predstierajú, že jej správanie je univerzálna riadiaca zmluva.

Pohyblivá rádová čiarka žije vo svete režimov zaokrúhľovania, hardvérových rozdielov, rozhodnutí kompilátora, výberu inštrukcií, fúzovaných operácií, vektorizácie, denormalizovaných čísel, správania knižníc a detailov špecifických pre cieľový systém. Väčšinou je to zvládnuteľné. Niekedy je to dokonca neviditeľné. Potom potrebujete bitovo presný replay, paritu naprieč cieľovými systémami, deterministickú simuláciu alebo build, ktorý by sa mal správať rovnako po presune zo servera na edge. Zrazu detaily prestanú byť akademické. Stanú sa stretnutím.

Numerus volí inú cestu pre pracovné zaťaženia, kde opakovateľnosť znamená viac ako predstieranie, že každá operácia je malý systém počasia. Čisto celočíselná aritmetika robí reprezentáciu explicitnou. Formáty s pevnou rádovou čiarkou definujú, kde žije desatinná čiarka. Desiatkové rodiny spracúvajú hodnoty, kde záleží na presných miestach. Dweve AXIOM poskytuje spôsob, ako prispôsobiť tvar exponentu pre každú hodnotu bez toho, aby sa kontrola odovzdala späť nepriehľadnému prostrediu s pohyblivou rádovou čiarkou. Pointa nie je jedna numerická forma navždy. Pointa je výber formy so zmluvou.

To je dôležité, pretože produktové systémy nielen počítajú. Pamätajú si. Prehrávajú. Porovnávajú. Vysvetľujú. Ak rovnaký výpočet prináša rozdielne výsledky na podporovaných povrchoch, rozdiel sa stane súčasťou produktu, či to niekto plánoval alebo nie.

Jedna numerická knižnica je v skutočnosti niekoľko prísľubov

Numerický základ nie je jedna vec. Je to súbor prísľubov pre rôzne publikum. Embedded inžinier sa stará o to, aby obmedzené ciele mohli spustiť relevantné profily zamerané na celé čísla bez toho, aby ťahali so sebou pohodlný serverový runtime. Simulačný inžinier sa stará o to, aby prehrávanie dokázalo reprodukovať stav. Audítor sa stará o to, aby sa cesta k odpovedi dala vysvetliť. Vlastník produktu sa stará o to, aby sa vec nesprávala ako nervózna kalkulačka, keď sa presunie z jedného prostredia do druhého.

Verejná stránka Numerus upozorňuje na rodiny, na ktoré sa ľudia najčastejšie pýtajú ako prvé: Q-format fixed-point, Decimal a AXIOM. Základ kódu je širší. common/numeric nesie binárne formy XNOR a POPCNT, ternárne hodnoty, natívne a sub-bajtové celé čísla, aliasy fixed-point, malé float formáty a adaptívny AXIOM. Fasáda Numerus potom okolo tohto základu pridáva produktové desatinné a aritmetické povrchy. Toto rozdelenie je dôležité, pretože sa vyhýba falošnej elegancii nútiť každé číslo do jedného kostýmu.

Rôzne pracovné zaťaženia potrebujú rôzne tvary čísel. Spoločným prísľubom je deterministické správanie naprieč širším numerickým povrchom, nie jeden módny spôsob reprezentácie pre všetko.

Toto je veľmi európsky druh inžinierstva v tom najlepšom zmysle. Menej drámy, viac zmluvy. Výpočet by mal povedať, čím je. Rozsah by mal byť známy. Desatinné správanie by malo byť explicitné. Obmedzenia cieľa by mali byť rešpektované. Výsledok by mal byť reprodukovateľný. Nikto na to nepotrebuje keynote. Potrebujú, aby to fungovalo.

AXIOM si zaslúži vlastný článok, pretože nie je len ďalším aliasom v zozname. Je to adaptívna rodina s pohyblivou rádovou čiarkou od Dweve: znamienko, index exponentu a mantisa zabalené do kompaktnej reprezentácie, pričom zoznamy exponentov sú vybrané pre všeobecné, husté, jemnozrnné alebo dáta v tvare neurónových sietí. Tento príspevok ho len umiestňuje do mapy Numerus. Hlbší príbeh je o tom, ako adaptívny výber exponentov dáva meniacim sa magnitúdam viac priestoru bez toho, aby sa aritmetika opäť stala nedeterministickou.

Tiež to zabraňuje preháňaniu. Numerus nerobí každý numerický problém ľahkým. Neodstraňuje potrebu vybrať škály, rozsahy, správanie zaokrúhľovania, zoznamy exponentov, šírky mantisy alebo domény overovania. Aritmetika s pevnou aj pohyblivou rádovou čiarkou sa dá zneužiť s veľkým nadšením. Hodnota je v tom, že zneužitie sa stáva viditeľnejším. Explicitná numerická zmluva vám dá niečo na preskúmanie. Skrytý predpoklad o pohyblivej rádovej čiarke vám dá malého ducha vo výrobe.

Overovanie nie je odznak

Každá numerická knižnica sa nakoniec naučí, že slová ako správny a presný sú lacné, kým nie sú pripojené k testovaciemu rámcu. Správny kde? Presný v porovnaní s čím? Nad ktorou vstupnou doménou? S ktorým správaním zaokrúhľovania? V ktorej verzii? Pod ktorými testami?

Materiály Numerus dávajú overovanie do popredia: CORDIC len s celými číslami pre transcendentné funkcie, porovnanie s vysoko presným orákulom MPFR, property testy a kontroly vydaní. Presné tvrdenie má zmysel len vtedy, keď je viazané na tento mechanizmus. Odznak, ktorý hovorí presný, je dekorácia. Testovací rámec, ktorý porovnáva, zmenšuje a zlyháva, je inžinierstvo.

Numerická dôveryhodnosť by mala pochádzať z orákulovej cesty a testov vlastností, nie z grafu, ktorý je sám so sebou spokojný.

Tento rozdiel je dôležitý, pretože numerické chyby sa často skrývajú na okrajoch. Stred domény sa správa správne. Ukážka sa správa správne. Bežné hodnoty sa správajú správne. Potom príde hraničná hodnota s tabuľkou v ruke. Záporné vstupy, hodnoty blízke nule, hranice pretečenia, prechody mierok, zaokrúhľovacie remízy, hranice zoznamov exponentov a opakované operácie sú miesta, kde numerické knižnice buď získajú dôveru, alebo začnú písať fikciu.

Testovanie vlastností je užitočné, pretože ľudia si vedia len ťažko predstaviť všetky spôsoby, akými môže byť číslo nepríjemné. Vysokopresné orákulum je užitočné, pretože implementácia potrebuje referenciu, ktorá nie je ona sama. Kontroly vydania sú užitočné, pretože overené tvrdenie z minulého mesiaca nie je zárukou pre tento mesiac. Softvér nezostáva správny zo zdvorilosti.

Determinizmus patrí do architektúry, nie do poznámky pod čiarou

Je lákavé považovať deterministickú aritmetiku za detail nízkoúrovňovej knižnice. Práve tam ju mnohé tímy stratia. Kým produkt potrebuje prehrávanie, numerické predpoklady sú už roztrúsené naprieč službami, notebookmi, vstavanými cieľmi, nástrojmi pre modely a integračnými testami. Potom sa determinizmus stáva dodatočnou úpravou. Dodatočné úpravy sú miesta, kde rozpočty získavajú charakter.

Správny moment na rozhodnutie o numerickom postoji je skoro. Potrebuje táto záťaž bitovo stabilné prehrávanie? Prechádza cez viacero strojov? Prechádza cez viacero architektúr? Podporuje regulované rozhodnutie? Napája simuláciu? Stáva sa tréningovými dátami, vstupom pre inferenciu, výstupom kompresie modelu alebo stavom digitálneho dvojčaťa? Ak áno, aritmetika je architektonická.

Numerus sa hodí vedľa FMI a Twin presne z tohto dôvodu. FMI sa stará o deterministické simulačné jadrá a výmenu modelov. Twin sa stará o prehrávanie prevádzkového alebo fyzického stavu v čase. Ledger zaznamenáva prevádzkové udalosti. Trace nesie dôkazy o prehrávateľných výpočtoch. Tieto vrstvy sa upokoja len vtedy, keď numerická vrstva pod nimi neblúdi ako nákupný vozík s jedným pokazeným kolieskom.

V systémoch umelej inteligencie je to ešte konkrétnejšie. Kvantizácia, skórovanie, radenie, simulácia, obmedzenia, kalibrácia, kompresia a prehrávanie všetky používajú čísla. Ak sa tieto čísla správajú odlišne v rôznych prostrediach, model nemusí byť vinná strana. Je jednoducho najviditeľnejším podozrivým. Pohodlné, ale nie vždy správne.

Malé stroje nie sú občania druhej kategórie

Veľa architektúry umelej inteligencie a simulácií ticho predpokladá pohodlný stroj. Bude tam server. Bude tam GPU. Bude dosť pamäte. Bude cloudová služba. Bude účet, ktorý niekoho prinúti vymyslieť frázu strategická investícia.

Skutočné systémy sú menej upratané. Niektoré výpočty musia bežať na vstavaných cieľoch. Niektoré žijú na okraji. Niektoré sedia vo vnútri zariadení bez jednotky s pohyblivou rádovou čiarkou. Niektoré potrebujú kompatibilitu s no_std. Niektoré musia fungovať, aj keď sieť nie je pozvaná. Ak sa numerický základ správa správne len v pohodlnom prípade, nie je to základ. Je to nábytok.

Rovnaká numerická zmluva musí prežiť obmedzenia nasadenia, nielen vývojársky notebook, kde je všetko štedré a teplé.

Celocíselná aritmetika tu pomáha, pretože znižuje závislosť od špecifického správania pohyblivej rádovej čiarky v cieľovom prostredí tam, kde pracovné zaťaženie môže tieto profily využiť. Povrchy schopné fungovať bez štandardnej knižnice (no_std) pomáhajú, pretože nie každé prostredie má výdobytky štandardnej knižnice ako serverový proces. Nejde o nostalgiu za menšími strojmi. Ide o kontrolu nad tým, ktorá numerická zmluva putuje do obmedzených cieľových prostredí.

Toto nie je nostalgia za menšími strojmi. Je to kontrola. Ak je výpočet súčasťou produktu, produkt by nemal vyžadovať to najpohodlnejšie prostredie len preto, aby bol dôveryhodný.

Nudný príklad je ten dôležitý

Predstavte si výpočet dávkovania, výpočet tarify, krok simulácie, prehratú hodnotu zo senzora alebo prah kompresie modelu. Nič z toho neznie očarujúco. Dobre. Očarujúce je zvyčajne miesto, kde sa začína mlátenie prázdnej slamy. Nudné príklady sú miestom, kde si numerická determinovanosť získava svoje opodstatnenie.

Ak sa výsledok použije raz a zabudne sa naň, malý posun nemusí záležať. Ak sa výsledok zaznamená a prehrá, záleží. Ak sa porovnáva naprieč prostrediami, záleží. Ak napája neskoršie rozhodnutie, záleží. Ak sa zákazník, audítor alebo inžinier môže opýtať, prečo sa táto hodnota objavila, rozhodne záleží. V tom bode výpočet už nie je interným detailom implementácie. Je súčasťou príbehu, ktorý produkt rozpráva.

Preto Numerus nie je len matematická knižnica v abstraktnom zmysle. Je komponentom v architektúre dôkazov. Dáva iným systémom pokojnejšiu numerickú vrstvu, na ktorú sa môžu postaviť. Reed dokáže analyzovať zdroj s potvrdenkami. Ledger dokáže zaznamenávať udalosti. BitWeave dokáže spraviť vyhľadávanie deterministické. HEDL dokáže spraviť štruktúrované dáta menej plytvavé. Numerus robí aritmetiku menej šmykľavou. Každý kus odstraňuje jedno miesto, kde by systém inak len pokrčil plecami.

Ponaučenie

Ponaučenie z Numerus je, že čísla sú správaním produktu. Nie len detailom implementácie. Nie len matematikou. Správaním. Ak rovnaký vstup môže pri presune do iného podporovaného prostredia vyprodukovať inú odpoveď, tento rozdiel teraz patrí produktu.

Deterministická aritmetika nie je vždy potrebná. Keď je potrebná, mala by byť navrhnutá od začiatku, nie vyprosená neskôr. Vyberte si explicitné numerické rodiny. Overte proti orákulu. Otestujte okrajové prípady. Rešpektujte obmedzenia nasadenia. Myslite na prehrávanie skôr, než prvá správa o incidente spraví všetkých zrazu filozofickými.

Numerus je užitočný, pretože mení aritmetiku na zmluvu, na ktorú sa zvyšok zásobníka môže spoľahnúť. Binárny, ternárny, celočíselný, pevný, pohyblivý, Decimal a AXIOM nie sú slogany. Sú to spôsoby, ako tvarovať čísla tak, aby sa rovnaká odpoveď mohla objaviť dvakrát, zámerne. AXIOM má svoj vlastný hlbší príbeh, pretože je to časť, kde sa samotný bod začína hýbať, zatiaľ čo zmluva zostáva deterministická. To nie je efektné. Je to lepšie ako efektné. Je to ten druh nudy, ktorý umožňuje vážnym systémom v noci pokojne spať.