Numerus og det samme svar to gange
Fejlen, der kun findes på den anden maskine
Den mest irriterende numeriske fejl er den, der nægter at dukke op, hvor du kigger. Testen fejler på CI, ikke lokalt. Simulationen driver af efter en dependency-opdatering. Den indlejrede target giver et lidt andet resultat end serveren. Model-pipelinen ser fin ud, indtil replay beder om den samme beregning to gange og får to svar, der er tætte nok til at starte en diskussion.
Tæt er nogle gange fint. Tæt er ikke altid en kontrakt. Hvis en beregning er en del af en replay-sti, et sikkerhedstjek, en simulation, en prisbeslutning, en digital tvilling, et revisionsspor eller et modelkomprimeringstrin, så kan tæt blive til en produktrisiko. Forskellen kan være lille. Små forskelle er stadig forskelle. Software har lavet hele karrierer ud af at blive stødt over små forskelle.
Det er derfor, Numerus findes i Dweve-stakken. Numerus-siden beskriver det som et open source-numerisk fundament for deterministisk aritmetik: binær og decimal fixed-point, Dweve AXIOM adaptiv variabel-punkt-matematik, heltalsorienteret drift, Rust, no_std-kompatible overflader, verifikation mod højpræcisionsreferencer, hvor det giver mening, og deterministiske profiler, der skal gøre replay roligere på tværs af understøttede targets. Det fælles numeriske lag nedenunder er endnu bredere: binære, ternære, heltals-, fixed-, float- og adaptive AXIOM-familier under én Element-lignende kontrakt. De præcise implementeringsdetaljer betyder noget for ingeniører. Produktlektionen er enklere: aritmetik er ikke baggrundsstøj. Det er infrastruktur.
Det lyder indlysende, indtil du følger, hvor tal rejser hen. En simulation fodrer en digital tvilling. Tvillingen fodrer et dashboard. Dashboardet informerer en menneskelig beslutning. Beslutningen bliver registreret. En måned senere spørger nogen hvorfor. Hvis det numeriske lag ikke kan reproducere beregningen, bliver resten af evidenskæden vakkelvorn. Den kan stadig være forsvarlig, men nu skal teamet forklare en undgåelig kilde til drift. Det er en dårlig hobby.
Floating point er ikke moralsk forkert
Dette er ikke en prædiken om, at floating point er ondt. Floating point er en af grundene til, at moderne computing virker. Det er hurtigt, kompakt, godt understøttet og præcis rigtigt til mange arbejdsbelastninger. Problemet starter, når teams lader som om, dets adfærd er en universel governance-kontrakt.
Floating point lever i en verden af afrundingstilstande, hardwareforskelle, compiler-valg, instruktionsvalg, fusionerede operationer, vektorisering, denormale tal, biblioteksadfærd og target-specifikke detaljer. Det meste af tiden er det håndterbart. Nogle gange er det endda usynligt. Så har du brug for bit-eksakt replay, eller cross-target-paritet, eller deterministisk simulation, eller et build, der skal opføre sig ens efter at være flyttet fra server til edge. Pludselig holder detaljerne op med at være akademiske. De bliver til et møde.
Numerus tager en anden vej for arbejdsbelastninger, hvor repeterbarhed betyder mere end at lade som om, hver operation er et lille vejrsystem. Ren heltalsaritmetik gør repræsentationen eksplicit. Fixed-point-formater definerer, hvor decimalen ligger. Decimal-familier håndterer værdier, hvor eksakte pladser betyder noget. Dweve AXIOM giver en måde at tilpasse eksponentformen per værdi uden at give kontrollen tilbage til et uigennemsigtigt floating-miljø. Pointen er ikke én numerisk form for evigt. Pointen er at vælge en form med en kontrakt.
Det betyder noget, fordi produktsystemer ikke kun beregner. De husker. De afspiller. De sammenligner. De forklarer. Hvis den samme beregning giver forskellige resultater på tværs af understøttede overflader, bliver forskellen en del af produktet, uanset om nogen havde planlagt det eller ej.
Ét numerisk bibliotek er reelt flere løfter
Et numerisk fundament er ikke én ting. Det er et sæt løfter med forskellige målgrupper. Den indlejrede ingeniør bekymrer sig om, at begrænsede mål kan køre de relevante heltalsorienterede profiler uden at trække en behagelig serverkørsel med ind. Simuleringsingeniøren bekymrer sig om, at afspilning kan reproducere en tilstand. Revisionspersonen bekymrer sig om, at svarets vej kan forklares. Produktejeren bekymrer sig om, at tingen ikke opfører sig som en nervøs lommeregner, når den flyttes fra ét miljø til et andet.
Den offentlige Numerus-side fremhæver de familier, de fleste spørger om først: Q-format fixed-point, Decimal og AXIOM. Kodebasen er bredere. common/numeric indeholder binære XNOR- og POPCNT-former, ternære værdier, native og sub-byte heltal, fixed-point-aliaser, små float-formater og adaptiv AXIOM. Numerus-facaden tilføjer derefter de produktvendte decimal- og aritmetiske overflader omkring det fundament. Den opdeling betyder noget, fordi den undgår den falske elegance ved at tvinge hvert tal ind i ét kostume.
Dette er en meget europæisk form for ingeniørarbejde i bedste forstand. Mindre drama, mere kontrakt. Beregningen skal sige, hvad den er. Området skal være kendt. Decimaladfærden skal være eksplicit. Målbegrænsningerne skal respekteres. Resultatet skal kunne reproduceres. Ingen har brug for en keynote til det. De har brug for, at det virker.
AXIOM fortjener sin egen artikel, fordi det ikke bare er endnu et alias på listen. Det er Dweves adaptive variable-point-familie: fortegn, eksponentindeks og mantisse pakket i en kompakt repræsentation, med eksponentlister valgt til generelle, tætte, finkornede eller neuralnetværksformede data. Dette indlæg placerer det kun i Numerus-kortet. Den dybere historie er, hvordan adaptiv eksponentudvælgelse giver skiftende størrelser mere plads uden at gøre aritmetikken ikke-deterministisk igen.
Det forhindrer også overdrivelser. Numerus gør ikke ethvert numerisk problem nemt. Det fjerner ikke behovet for at vælge skalaer, områder, afrundingsadfærd, eksponentlister, mantissebredder eller verifikationsdomæner. Fixed-point- og variable-point-aritmetik kan begge misbruges med stor entusiasme. Værdien er, at misbruget bliver mere synligt. En eksplicit numerisk kontrakt giver dig noget at gennemgå. En skjult flydende antagelse giver dig et lille spøgelse i produktionen.
Verifikation er ikke et badge
Ethvert numerisk bibliotek lærer til sidst, at ord som korrekt og præcis er billige, indtil de er knyttet til et testmiljø. Korrekt hvor? Præcis sammenlignet med hvad? Over hvilket inputdomæne? Med hvilken afrundingsadfærd? På hvilken udgivelse? Under hvilke tests?
Numerus-materialet sætter verifikation i forgrunden: heltalskun CORDIC til transcendentale funktioner, sammenligning mod en højpræcisions-MPFR-orakel, egenskabstests og udgivelsestjek. Det præcise krav er kun meningsfuldt, når det er knyttet til det maskineri. Et badge, der siger nøjagtig, er dekoration. Et testmiljø, der sammenligner, formindsker og fejler, er ingeniørarbejde.
Denne forskel betyder noget, fordi numeriske fejl ofte gemmer sig i kanterne. Midten af domænet opfører sig. Demoet opfører sig. De almindelige værdier opfører sig. Så ankommer grænseværdien med en clipboard under armen. Negative input, værdier tæt på nul, overflow-grænser, skalaovergange, afrundingsuafgjortheder, eksponentliste-grænser og gentagne operationer er der, hvor numeriske biblioteker enten opnår tillid eller begynder at skrive fiktion.
Egenskabstest er nyttigt, fordi mennesker er dårlige til at forestille sig alle de måder, et tal kan være irriterende på. En højpræcisionsorakel er nyttig, fordi implementeringen har brug for en reference, der ikke er sig selv. Release-tjek er nyttige, fordi en verificeret påstand fra sidste måned ikke er en garanti for denne måned. Software forbliver ikke korrekt af høflighed.
Determinisme hører til i arkitekturen, ikke i en fodnote
Det er fristende at behandle deterministisk aritmetik som en lavniveau-biblioteksdetalje. Det er der, mange teams mister den. Når produktet har brug for replay, er de numeriske antagelser allerede spredt ud over tjenester, notebooks, indlejrede mål, modelværktøjer og integrationstests. Så bliver determinisme en eftermontering. Eftermonteringer er der, hvor budgetter udvikler karakter.
Det rigtige tidspunkt at beslutte den numeriske holdning er tidligt. Har denne arbejdsbyrde brug for bit-stabilt replay? Krydser den maskiner? Krydser den arkitekturer? Understøtter den en reguleret beslutning? Føder den en simulering? Bliver den til træningsdata, inferensinput, modelkomprimeringsoutput eller en digital tvilling-tilstand? Hvis ja, er aritmetikken arkitektonisk.
Numerus passer ind ved siden af FMI og Twin af netop den grund. FMI beskæftiger sig med deterministiske simuleringskerner og modeludveksling. Twin beskæftiger sig med at afspille operationel eller fysisk tilstand over tid. Ledger registrerer operationelle hændelser. Trace bærer replaybar beregningsdokumentation. Disse lag bliver kun roligere, når det numeriske lag under dem ikke driver rundt som en indkøbsvogn med et dårligt hjul.
I AI-systemer bliver dette endnu mere konkret. Kvantisering, scoring, rangering, simulering, begrænsninger, kalibrering, kompression og replay bruger alle tal. Hvis disse tal opfører sig forskelligt på tværs af miljøer, er modellen måske ikke den skyldige part. Den er simpelthen den mest synlige mistænkte. Praktisk, men ikke altid korrekt.
Små maskiner er ikke andenrangsborgere
Meget AI- og simuleringsarkitektur antager stille og roligt en behagelig maskine. Der vil være en server. Der vil være en GPU. Der vil være nok hukommelse. Der vil være en cloud-tjeneste. Der vil være en regning, der får nogen til at opfinde udtrykket strategisk investering.
Virkelige systemer er mindre ryddelige. Nogle beregninger skal køre på indlejrede mål. Nogle lever i kanten. Nogle sidder inde i enheder uden en floating-point-enhed. Nogle har brug for no_std-kompatibilitet. Nogle skal blive ved med at fungere, når netværket ikke er inviteret. Hvis det numeriske fundament kun opfører sig i den behagelige sag, er det ikke et fundament. Det er møbler.
Heltalsorienteret aritmetik hjælper her, fordi det reducerer afhængigheden af platformspecifik floating-point-adfærd, hvor arbejdsbyrden kan bruge disse profiler. no_std-kompatible overflader hjælper, fordi ikke alle miljøer har standardbibliotekets luksus som en serverproces. Pointen er ikke nostalgi for mindre maskiner. Det er kontrol over, hvilken numerisk kontrakt der følger med til begrænsede platforme.
Dette er ikke nostalgi for mindre maskiner. Det er kontrol. Hvis beregningen er en del af produktet, bør produktet ikke kræve det mest komfortable miljø for blot at være pålideligt.
Det kedelige eksempel er det vigtige
Forestil dig en doseringsberegning, en tarifberegning, et simulationstrin, en afspillet sensorværdi eller en tærskel for modelkomprimering. Ingen af disse lyder glamourøse. Godt. Glamour er typisk, hvor håndsvingningen begynder. De kedelige eksempler er, hvor numerisk determinisme tjener sin værdi.
Hvis resultatet bruges én gang og glemmes, betyder lille afvigelse måske ikke noget. Hvis resultatet registreres og afspilles, gør det. Hvis det sammenlignes på tværs af miljøer, gør det. Hvis det fodrer en senere beslutning, gør det. Hvis en kunde, revisor eller ingeniør kan spørge, hvorfor denne værdi optrådte, gør det absolut. På det tidspunkt er beregningen ikke længere en intern implementeringsdetalje. Det er en del af den historie, produktet fortæller.
Derfor er Numerus ikke bare et matematikbibliotek i abstrakt forstand. Det er en komponent i en evidensarkitektur. Det giver andre systemer et roligere numerisk lag at stå på. Reed kan parse kildekode med kvitteringer. Ledger kan registrere hændelser. BitWeave kan gøre hentning deterministisk. HEDL kan gøre struktureret data mindre spildende. Numerus gør aritmetikken mindre glat. Hver del fjerner ét sted, hvor systemet ellers ville trække på skuldrene.
Lektionen
Lektionen fra Numerus er, at tal er produktadfærd. Ikke bare implementeringsdetalje. Ikke bare matematik. Adfærd. Hvis den samme input kan producere et andet svar, når det flyttes til et andet understøttet miljø, tilhører den forskel nu produktet.
Deterministisk aritmetik er ikke altid nødvendig. Når det er nødvendigt, bør det designes ind i stedet for at blive tigget til eksistens senere. Vælg eksplicitte numeriske familier. Verificér mod en orakel. Test hjørnerne. Respektér implementeringsbegrænsninger. Hold afspilning i tankerne, før den første hændelsesrapport gør alle pludselig filosofiske.
Numerus er nyttigt, fordi det forvandler aritmetik til en kontrakt, resten af stakken kan stole på. Binær, ternær, heltal, fast, float, Decimal og AXIOM er ikke slogans. De er måder at forme tal på, så det samme svar kan optræde to gange, med vilje. AXIOM får sin egen dybere historie, fordi det er den del, hvor selve pointen begynder at bevæge sig, mens kontrakten forbliver deterministisk. Det er ikke prangende. Det er bedre end prangende. Det er den slags kedelighed, der lader seriøse systemer sove om natten.