Pourquoi le modèle tourne sur une autre machine
Aucun modèle de langue ne tourne sur la machine qui sert ce site. Les résumés sont calculés sur un second appareil qui vient chercher les demandes, fait le travail et rapporte les phrases.
La raison est arithmétique. Un modèle 3B occupe plus d'un gigaoctet de mémoire et met des secondes par réponse. La requête la plus lourde de toute cette application prend 581 millisecondes. Mettre les deux sur la même carte, c'est faire attendre les images de compteur de 379 000 compteurs derrière un générateur de texte — alors que ce sont elles, le vrai produit.
Ce que cela coûte et ce que cela achète
Cela coûte une seconde machine et une file. Les demandes sortent par vingt au maximum ; la file a un plafond, et quand elle est pleine plus rien de neuf n'est créé — les phrases déjà écrites restent visibles. Un résumé vieux d'une semaine, c'est très bien. Un résumé absent, c'est très bien. Une page de statistiques lente parce qu'autre chose réfléchit sur la même carte, non.
Ce que cela achète, c'est que le chemin du comptage ne partage jamais sa machine avec quelque chose d'imprévisible. Dessiner une image de compteur est une quantité de travail petite et bornée. Générer du texte, non : l'écart mesuré ici pour une phrase va de 5,4 à 54,3 secondes, un facteur dix entre le cas rapide et le cas lent, et rien de tout cela n'est visible d'avance depuis le Pi.
Ce qui sort de la maison
C'est la partie qu'il fallait trancher avant de construire quoi que ce soit, parce que c'est celle qui ne se répare pas après coup.
La seconde machine ne reçoit que des chiffres déjà publics sur la page de statistiques du compteur, et uniquement de compteurs dont la page de statistiques est publique — ni privée, ni protégée par mot de passe. Le worker n'apprend rien qu'un visiteur de cette page ne pourrait lire en l'ouvrant.
Ce n'est pas un heureux effet de bord de la façon dont le code a tourné. La requête des candidats filtre là-dessus, et sans ce filtre la fonction entière serait la transmission des données d'autrui à un second appareil. Il n'existe aucune version de « nous ferons attention » aussi bonne que : ne pas l'envoyer.
La forme générale
Deux règles en sont sorties, qui valent plus que la fonction elle-même.
Le travail non borné n'a rien à faire sur le chemin borné. Tout ce dont vous ne pouvez pas prédire la durée à un ordre de grandeur près n'a pas sa place sur la machine qui doit répondre en millisecondes. Pas « ça passe en général » — c'est le cas lent qui compte, et il arrive toujours.
Décidez ce qui a le droit de sortir avant de décider ce que vous construisez. Si la réponse avait été « le worker a besoin aussi des compteurs privés », la bonne réaction n'aurait pas été de sécuriser le transfert. Elle aurait été que la fonction ne couvre pas les compteurs privés — ce qu'elle fait précisément.