Numerus i isti odgovor dvaput

Razliku u brojevima s pomičnim zarezom lako je zanemariti sve dok ne promijeni test, simulaciju, ponavljanje ili put donošenja odluke. Numerus tretira...

Numerus i isti odgovor dvaput

Bug koji postoji samo na drugom računalu

Najiritantniji numerički bug je onaj koji se odbija pojaviti tamo gdje ga tražite. Test pada na CI-ju, ali ne i lokalno. Simulacija odstupa nakon ažuriranja ovisnosti. Ugrađeni cilj daje nešto drugačiji rezultat od poslužitelja. Cjevovod modela izgleda dobro sve dok ponovna izvedba ne zatraži isti izračun dva puta i dobije dva odgovora koja su dovoljno blizu da započnu raspravu.

Blizu je ponekad dovoljno dobro. Blizu nije uvijek ugovor. Ako je izračun dio putanje ponovne izvedbe, sigurnosne provjere, simulacije, odluke o cijenama, digitalnog blizanca, revizijskog traga ili koraka kompresije modela, onda blizu može postati rizik za proizvod. Razlika može biti sićušna. Sićušne razlike su i dalje razlike. Softver je izgradio čitave karijere na tome što ga vrijeđaju sićušne razlike.

To je razlog zašto Numerus postoji u Dweve hrpi. Stranica Numerusa predstavlja ga kao otvoreni numerički temelj za determinističku aritmetiku: binarni i decimalni fiksni zarez, Dweve AXIOM adaptivnu matematiku promjenjivog zareza, operacije usmjerene na cijele brojeve, Rust, površine sposobne za no_std, provjeru prema visokopreciznim referencama gdje je to smisleno te determinističke profile namijenjene mirnijoj ponovnoj izvedbi na podržanim ciljevima. Zajednički numerički sloj ispod toga još je širi: binarne, ternarne, cjelobrojne, fiksne, plutajuće i adaptivne AXIOM obitelji pod jednim ugovorom u Element stilu. Točni detalji implementacije važni su inženjerima. Pouka za proizvod jednostavnija je: aritmetika nije pozadinska buka. Ona je infrastruktura.

Kada rezultat uđe u putanju ponovne izvedbe ili revizije, korisno pitanje nije jesu li dva odgovora blizu. Pitanje je može li sustav dva puta proizvesti isti odgovor.

To zvuči očito dok ne pratite kamo brojevi putuju. Simulacija hrani digitalnog blizanca. Blizanac hrani nadzornu ploču. Nadzorna ploča informira ljudsku odluku. Odluka se bilježi. Mjesec dana kasnije netko pita zašto. Ako numerički sloj ne može reproducirati izračun, ostatak lanca dokaza postaje klimav. Možda je i dalje obranjiv, ali sada tim mora objašnjavati izvor odstupanja koji se mogao izbjeći. To je loš hobi.

Plutajući zarez nije moralno pogrešan

Ovo nije propovijed o tome da je plutajući zarez zao. Plutajući zarez jedan je od razloga zašto moderno računalstvo funkcionira. Brz je, kompaktan, dobro podržan i savršeno prikladan za mnoga opterećenja. Problem počinje kada se timovi pretvaraju da je njegovo ponašanje univerzalni upravljački ugovor.

Plutajući zarez živi u svijetu načina zaokruživanja, razlika u hardveru, odabira prevoditelja, odabira instrukcija, spojenih operacija, vektorizacije, denormalnih vrijednosti, ponašanja biblioteka i pojedinosti specifičnih za cilj. Većinu vremena to je upravljivo. Ponekad je čak i nevidljivo. A onda vam treba bitno točna ponovna izvedba, ili jednakost na različitim ciljevima, ili deterministička simulacija, ili izgradnja koja bi se trebala ponašati jednako nakon što je premještena s poslužitelja na rub. Odjednom pojedinosti prestaju biti akademske. Postaju sastanak.

Numerus ide drugačijim putem za opterećenja gdje je ponovljivost važnija od pretvaranja da je svaka operacija mali vremenski sustav. Aritmetika samo s cijelim brojevima čini reprezentaciju eksplicitnom. Formati fiksnog zareza definiraju gdje decimalni zarez živi. Decimalne obitelji obrađuju vrijednosti gdje su točna mjesta važna. Dweve AXIOM pruža način prilagodbe oblika eksponenta po vrijednosti bez vraćanja kontrole neprozirnom plutajućem okruženju. Poanta nije jedan numerički oblik zauvijek. Poanta je odabir oblika s ugovorom.

To je važno jer sustavi proizvoda ne samo računaju. Oni pamte. Ponavljaju. Uspoređuju. Objašnjavaju. Ako isti izračun daje različite rezultate na podržanim površinama, ta razlika postaje dio proizvoda, htjeli to planirati ili ne.

Jedna numerička biblioteka zapravo je više obećanja

Numerički temelj nije jedna stvar. To je skup obećanja s različitim publikama. Inženjer ugrađenih sustava brine da ograničene ciljne platforme mogu pokretati relevantne profile usmjerene na cijele brojeve bez povlačenja udobnog poslužiteljskog okruženja. Inženjer simulacija brine da ponavljanje može reproducirati stanje. Osoba za reviziju brine da se put do odgovora može objasniti. Vlasnik proizvoda brine da se stvar ne ponaša poput nervoznog kalkulatora kada se premjesti iz jednog okruženja u drugo.

Javna stranica Numerus ističe obitelji o kojima ljudi najčešće prvo pitaju: fiksni zarez u Q-formatu, Decimal i AXIOM. Baza koda je šira. common/numeric nosi binarne XNOR i POPCNT oblike, ternarne vrijednosti, izvorne i pod-bajtne cijele brojeve, aliasi fiksnog zareza, male float formate i prilagodljivi AXIOM. Numerus fasada zatim dodaje proizvodne decimalne i aritmetičke površine oko tog temelja. Ta podjela je važna jer izbjegava lažnu eleganciju tjeranja svakog broja u jedan kostim.

Različita opterećenja zahtijevaju različite oblike brojeva. Zajedničko obećanje je determinističko ponašanje na široj numeričkoj površini, a ne jedan moderan prikaz za sve.

Ovo je vrlo europska vrsta inženjeringa u najboljem smislu. Manje drame, više ugovora. Izračun treba reći što jest. Raspon treba biti poznat. Decimalno ponašanje treba biti izričito. Ograničenja ciljne platforme treba poštivati. Rezultat treba biti ponovljiv. Nikome ne treba keynote za to. Treba im da radi.

AXIOM zaslužuje vlastiti članak jer nije samo još jedan alias na popisu. To je Dweveova prilagodljiva obitelj promjenjivog zareza: predznak, indeks eksponenta i mantisa upakirani u kompaktan prikaz, s popisima eksponenata odabranima za opće, guste, fino zrnate ili podatke oblika neuronske mreže. Ovaj post samo ga smješta na kartu Numerusa. Dublja priča je kako prilagodljivi odabir eksponenata daje promjenjivim veličinama više prostora bez ponovnog činjenja aritmetike nedeterminističkom.

To također sprječava pretjerivanje. Numerus ne čini svaki numerički problem lakim. Ne uklanja potrebu za odabirom mjerila, raspona, ponašanja zaokruživanja, popisa eksponenata, širina mantise ili domena provjere. Aritmetika s fiksnim i promjenjivim zarezom može se zlorabiti s velikim entuzijazmom. Vrijednost je u tome što zlouporaba postaje vidljivija. Izričit numerički ugovor daje vam nešto za pregled. Skrivena pretpostavka o pomičnom zarezu daje vam malog duha u produkciji.

Provjera nije značka

Svaka numerička biblioteka na kraju nauči da su riječi poput ispravan i precizan jeftine dok se ne pričvrste na okvir za testiranje. Ispravan gdje? Precizan u usporedbi s čime? Nad kojom domenom ulaza? S kojim ponašanjem zaokruživanja? Na kojem izdanju? Pod kojim testovima?

Numerus materijal stavlja provjeru u prvi plan: CORDIC samo s cijelim brojevima za transcendentne funkcije, usporedbu s visokopreciznim MPFR oracleom, testove svojstava i provjere izdanja. Točna tvrdnja ima smisla samo kada je vezana uz taj mehanizam. Značka koja kaže točan je ukras. Okvir koji uspoređuje, smanjuje i pada je inženjering.

Numerička pouzdanost treba proizlaziti iz oracle putanje i testova svojstava, a ne iz grafikona koji je zadovoljan samim sobom.

Ova razlika je važna jer se numeričke pogreške često skrivaju na rubovima. Sredina područja se ponaša kako treba. Demo se ponaša kako treba. Obične vrijednosti se ponašaju kako treba. A onda stigne rubna vrijednost s notesom u ruci. Negativni ulazi, vrijednosti blizu nule, granice preljeva, prijelazi skala, zaokruživanja na sredini, granice popisa eksponenata i ponovljene operacije mjesta su gdje numeričke biblioteke ili zaslužuju povjerenje ili počinju pisati fikciju.

Testiranje svojstava korisno je jer ljudi loše zamišljaju sve načine na koje broj može biti problematičan. Oracle visoke preciznosti koristan je jer implementacija treba referencu koja nije ona sama. Provjere izdanja korisne su jer provjerena tvrdnja od prošlog mjeseca nije jamstvo za ovaj mjesec. Softver ne ostaje ispravan iz pristojnosti.

Determinizam pripada arhitekturi, ne bilješci u fusnoti

Primamljivo je tretirati determinističku aritmetiku kao detalj niske razine biblioteke. Upravo tu mnogi timovi to izgube. Dok proizvod zatreba ponovljivost, numeričke pretpostavke već su raširene po servisima, bilježnicama, ugrađenim ciljnim platformama, alatima za modele i integracijskim testovima. Tada determinizam postaje naknadna ugradnja. Naknadne ugradnje mjesta su gdje proračuni razvijaju karakter.

Pravi trenutak za odluku o numeričkom stavu je rano. Treba li ovo opterećenje bitno stabilnu ponovljivost? Prelazi li preko strojeva? Prelazi li preko arhitektura? Podržava li reguliranu odluku? Hrani li simulaciju? Postaje li podacima za treniranje, ulazom za zaključivanje, izlazom kompresije modela ili stanjem digitalnog blizanca? Ako je odgovor da, aritmetika je arhitektonska.

Numerus stoji uz FMI i Twin upravo iz tog razloga. FMI brine o determinističkim simulacijskim jezgrama i razmjeni modela. Twin brine o ponovnoj reprodukciji operativnog ili fizičkog stanja tijekom vremena. Ledger bilježi operativne događaje. Trace nosi dokaze o ponovljivim izračunima. Ti slojevi postaju mirniji tek kad numerički sloj ispod njih ne luta poput kolica s jednim lošim kotačem.

U AI sustavima to postaje još konkretnije. Kvantizacija, bodovanje, rangiranje, simulacija, ograničenja, kalibracija, kompresija i ponovna reprodukcija svi koriste brojeve. Ako se ti brojevi ponašaju različito u različitim okruženjima, model možda nije kriva strana. On je jednostavno najvidljiviji osumnjičenik. Zgodno, ali ne uvijek točno.

Mali strojevi nisu građani drugog reda

Mnogo AI i simulacijske arhitekture tiho pretpostavlja udoban stroj. Bit će poslužitelj. Bit će GPU. Bit će dovoljno memorije. Bit će usluga u oblaku. Bit će račun zbog kojeg će netko izmisliti izraz strateško ulaganje.

Stvarni sustavi manje su uredni. Neki izračuni moraju se izvoditi na ugrađenim ciljnim platformama. Neki žive na rubu. Neki sjede unutar uređaja bez jedinice za pomični zarez. Neki trebaju no_std kompatibilnost. Neki moraju nastaviti raditi kad mreža nije pozvana. Ako se numerički temelj ponaša samo u udobnom slučaju, on nije temelj. On je namještaj.

Isti numerički ugovor mora preživjeti ograničenja implementacije, ne samo prijenosno računalo developera gdje je sve velikodušno i toplo.

Cjelobrojna aritmetika ovdje pomaže jer smanjuje ovisnost o specifičnom ponašanju brojeva s pomičnim zarezom na pojedinoj platformi, tamo gdje radno opterećenje može koristiti takve profile. Površine koje podržavaju no_std pomažu jer nema svako okruženje luksuz standardne biblioteke poput poslužiteljskog procesa. Poanta nije nostalgija za manjim strojevima. Poanta je kontrola nad time koji numerički ugovor putuje na ograničena odredišta.

Ovo nije nostalgija za manjim strojevima. Ovo je kontrola. Ako je izračun dio proizvoda, proizvod ne bi trebao zahtijevati najudobnije okruženje samo da bi bio pouzdan.

Dosadan primjer je onaj važan

Zamislite izračun doze, izračun tarife, korak simulacije, ponovno reproduciranu vrijednost senzora ili prag kompresije modela. Ništa od toga ne zvuči glamurozno. Dobro. Glamur je obično mjesto gdje počinje mljackanje rukama. Dosadni primjeri su mjesto gdje numerička determiniranost pokazuje svoju vrijednost.

Ako se rezultat koristi jednom i zaboravi, mala odstupanja možda neće biti važna. Ako se rezultat bilježi i ponovno reproducira, ona jesu. Ako se uspoređuje među okruženjima, jesu. Ako utječe na kasniju odluku, jesu. Ako kupac, revizor ili inženjer može pitati zašto se pojavila ova vrijednost, definitivno jesu. U tom trenutku izračun više nije interni detalj implementacije. On je dio priče koju proizvod priča.

Zato Numerus nije samo matematička biblioteka u apstraktnom smislu. On je komponenta u arhitekturi dokaza. Drugim sustavima daje mirniji numerički sloj na kojem mogu stajati. Reed može raščlaniti izvor s potvrdama. Ledger može bilježiti događaje. BitWeave može učiniti dohvat determiniranim. HEDL može učiniti strukturirane podatke manje rasipnima. Numerus čini aritmetiku manje skliskom. Svaki dio uklanja jedno mjesto gdje bi sustav inače slijegao ramenima.

Pouka

Pouka Numerusa je da su brojevi ponašanje proizvoda. Ne samo detalj implementacije. Ne samo matematika. Ponašanje. Ako isti ulaz može proizvesti drugačiji odgovor kada se premjesti u drugo podržano okruženje, ta razlika sada pripada proizvodu.

Deterministička aritmetika nije uvijek potrebna. Kada je potrebna, treba je dizajnirati unaprijed, a ne moljakati je u postojanje kasnije. Odaberite eksplicitne numeričke obitelji. Provjerite prema oracleu. Testirajte rubne slučajeve. Poštujte ograničenja implementacije. Imajte na umu ponovnu reprodukciju prije nego što prvo izvješće o incidentu sve učini odjednom filozofskima.

Numerus je koristan jer pretvara aritmetiku u ugovor na koji se ostatak stoga može osloniti. Binary, ternary, integer, fixed, float, Decimal i AXIOM nisu slogani. Oni su načini oblikovanja brojeva tako da se isti odgovor može pojaviti dvaput, namjerno. AXIOM dobiva vlastitu dublju priču jer je dio u kojem se sama poanta počinje pomicati dok ugovor ostaje determiniran. To nije blještavo. Bolje je od blještavog. To je vrsta dosadnosti koja ozbiljnim sustavima omogućuje miran san.