Qual è in realtà l'architettura
Un vision transformer, convertito in ONNX e compresso a circa 40 MB, suddiviso in due parti affinché ciascuna rimanga al di sotto del limite di dimensione file della piattaforma di hosting. Viene riassemblato nel browser e il suo checksum viene verificato prima dell'esecuzione di qualsiasi operazione.
L'inferenza avviene tramite WebAssembly, che consente a un runtime compilato di essere eseguito a una velocità vicina a quella nativa all'interno di una scheda del browser. Il runtime stesso è un binario WASM compresso caricato insieme ai pesi.
Nulla di tutto ciò è ormai esotico. Quella che nel 2021 era una dimostrazione di ricerca è ora un modo normale di distribuire un modello, e i browser hanno fatto la parte del leone.
Cosa si ottiene
| Immobile | Nel browser | Su un server |
|---|---|---|
| L'immagine lascia il tuo dispositivo | No impossibile | Yes richiesto |
| Costo per verifica | Yes zero | No calcolo reale |
| Accordo di elaborazione dati necessario | No | Yes |
| Funziona senza rete dopo il caricamento | Yes | No |
| Il modello può essere mantenuto privato | No viene scaricato | Yes |
| La prima verifica è istantanea | No il modello viene scaricato una volta | Yes |
La prima riga è il motivo per cui esistono le altre. Poiché non esiste un endpoint di caricamento, non c'è alcun archivio di fotografie di altre persone, nessuna policy di conservazione da scrivere, nessuna violazione da comunicare e nulla da consegnare su richiesta.
La seconda riga spiega perché può essere gratuito senza un contatore di utilizzo. Una verifica non costa nulla da erogare, quindi non vi è alcun costo per immagine da recuperare, il che cambia l'aspetto che deve avere il prezzo.
Cosa costa
Tre compromessi reali, dichiarati chiaramente, perché una pagina che elenca solo i vantaggi sta facendo pubblicità.
- La prima verifica è lenta. Quaranta megabyte devono arrivare prima che accada qualsiasi cosa. Su una connessione veloce sono pochi secondi; su una scarsa ci vuole più tempo. Le verifiche successive riutilizzano il modello memorizzato nella cache e si avviano immediatamente.
- I dispositivi meno recenti faticano. L'inferenza richiede memoria e capacità di calcolo che un telefono di cinque anni fa potrebbe non avere comodamente a disposizione. A un server non importerebbe quale dispositivo hai in mano.
- Il modello è pubblico. Qualsiasi elemento scaricato su un browser può essere conservato. Un modello lato server può essere proprietario; questo no, e i pesi costituiscono comunque un checkpoint di ricerca aperto.
Sul terzo punto vale la pena essere diretti. Distribuire un modello al client significa regalarlo. Qui è un compromesso accettabile perché i pesi sono già stati pubblicati e il lavoro che rende utile lo strumento è la calibrazione, la suddivisione in riquadri e l'interpretazione costruite attorno ad essi.
I problemi di ingegneria di cui vale la pena essere a conoscenza
Suddivisione di un file di grandi dimensioni
Le piattaforme di hosting statico pongono limiti alle dimensioni dei singoli file. Un modello da 40 MB superava il limite, quindi viene distribuito in due parti deterministiche che vengono riassemblate nel browser e verificate rispetto a un hash del manifesto prima dell'uso. Una parte corrotta o sostituita fallisce in modo evidente anziché produrre silenziosamente punteggi errati.
Non caricare nulla finché non è necessario
Il modello, il runtime e il lettore di credenziali non vengono recuperati al caricamento della pagina. Arrivano alla prima interazione, così chi legge un articolo non ne scarica alcuna parte. Questo mantiene le pagine veloci per la grande maggioranza dei visitatori che non eseguono mai una verifica.
Decodifica di formati complessi
HEIC da iPhone, AVIF, TIFF e JPEG XL richiedono tutti la decodifica prima del punteggio. I browser ora gestiscono la maggior parte di questi formati in modo nativo, il che rimuove quella che un tempo era la parte più consistente del lavoro lato client in uno strumento come questo.
Quando questa architettura è la scelta sbagliata
Non è universalmente migliore. Un server ha più senso quando il modello è proprietario e merita di essere protetto, quando è troppo grande per essere distribuito, quando hai bisogno di risultati in una pipeline di backend anziché di fronte a una persona, o quando hai bisogno di un tempo di risposta garantito indipendentemente dal dispositivo.
Per uno strumento che qualcuno apre per controllare un'immagine sospetta, nessuna di queste condizioni si applica e la proprietà della privacy vale più di tutto ciò che un server aggiungerebbe.
Cosa viene escluso da questo approccio
La scelta del client comporta conseguenze che vanno oltre la privacy, e alcune di esse sono limitazioni che vale la pena nominare piuttosto che funzionalità.
Non esiste una cronologia. Un risultato esiste solo nella scheda che lo ha prodotto, quindi non è possibile consultarlo in seguito a meno che non sia stato esportato. Questo è il costo diretto del fatto di non avere un account ed è la richiesta più frequente che l'architettura rende difficile da gestire.
Non esiste uno stato condiviso. Due persone non possono vedere la stessa coda e un team non può esaminare le verifiche degli altri. Un link condiviso trasporta un singolo risultato, che copre una conversazione e non un flusso di lavoro.
Non esiste un'API. Qualsiasi cosa venga eseguita in una scheda del browser non può essere chiamata da una pipeline di backend, il che esclude del tutto gli utilizzi a volumi più elevati. Queste sono lacune reali, e la posizione onesta è che rappresentano il prezzo da pagare per la proprietà che conta di più.