Bitsletter #10: Alertes ML, Cookies Web sécurisés et concurrent de C++ de Google

Bitsletter #10: Alertes ML, Cookies Web sécurisés et concurrent de C++ de Google

🧠 Astuce ML : Utilisez des outils d'alerte simples (Slack, Telegram, ...)

L'apprentissage automatique est un processus d'essai et d'erreur. Vous effectuez de nombreuses expériences avec différents paramètres (prétraitement, modèles, post-traitement, hyperparamètres, ...) pour trouver la meilleure solution à votre problème.

La formation est au cœur de chaque expérience : vous devez ajuster un modèle avant de l'évaluer en fonction d'une métrique. Cependant, lorsque nous utilisons des ensembles de données de plus en plus grands avec des modèles plus complexes, le processus de formation prend un temps considérable pour se terminer, même avec des accélérateurs modernes tels que les GPU.

Il peut être frustrant si vos scripts de formation échouent au milieu d'une expérience longue, et que vous vous en rendez compte potentiellement plusieurs heures plus tard. Plus vous identifiez rapidement un problème, moins de temps vous perdrez : vous pouvez le corriger rapidement, relancer le script ou approfondir une grave problème. De nos jours, nous avons tous des smartphones et des applications de messagerie avec des notifications en temps réel. Par exemple, Telegram, Slack, Discord, ...

Ces applications disposent de kits de développement, vous permettant d'envoyer des messages dans un canal de manière programmatique. Vous pouvez surveiller l'état de votre formation en envoyant simplement des messages à vous-même ou à un canal de groupe s'il se passe quelque chose de mal, ou espérons-le, notifier si votre expérience est terminée avec succès. Utilisez des bibliothèques telles que telegram_send ou le kit de développement Slack Python pour vous apporter la tranquillité d'esprit, à vous et à votre équipe.

🌐 Astuce Web : Utilisation de cookies réservés à HTTP, comment déterminer si un utilisateur est connecté côté client ?

Pour authentifier et autoriser les utilisateurs sur vos applications Web, vous devez les identifier à chaque requête qu'ils envoient à vos serveurs back-end. Pour cela, vous avez besoin d'un jeton associé à chaque requête. Les méthodes courantes pour procéder sont les sessions ou les JWT (JSON Web Tokens).

Un flux de travail typique est le suivant :
👉🏽 Quelqu'un accède à l'endpoint de connexion de votre API. 👉🏽 Vous vérifiez les informations d'identification et, si elles sont correctes, vous renvoyez un jeton identifiant de manière unique l'utilisateur.
👉🏽 Le client reçoit le jeton et le stocke dans le stockage local. Ensuite, à chaque requête future, le client attache le jeton aux en-têtes de la requête afin que le back-end puisse déterminer qui est l'utilisateur effectuant la requête.

🚨 Cependant, cela présente des inconvénients, car le stockage local peut subir des attaques JavaScript.

Une alternative consiste à utiliser des cookies réservés à HTTP pour stocker en toute sécurité le jeton côté client, sans qu'il soit accessible par JavaScript. Le navigateur envoie le cookie à chaque requête future et interdit à tout code d'y accéder. C'est excellent pour la sécurité, mais puisque vous ne pouvez pas accéder au cookie dans le code, comment déterminez-vous si l'utilisateur est connecté côté client ?

La solution la plus simple est d'exposer une route dans votre API qui renvoie le profil de l'utilisateur lorsqu'il est interrogé par un utilisateur authentifié. Quelque chose comme /me. Ensuite, lorsque votre application se charge, interrogez la route /me ; si vous recevez le profil, vous êtes connecté. Maintenant, interceptez toute erreur 401 (non authentifiée) provenant de vos requêtes client et définissez l'état de votre application sur non authentifié. Et voilà ! Vous disposez désormais d'un système d'authentification complet basé sur des cookies réservés à HTTP.

👩‍🔬 Article de recherche : Élaguez une fois pour toutes : Des modèles de langage pré-entraînés épars

Les modèles basés sur des transformateurs ont montré des résultats impressionnants dans les tâches de traitement du langage naturel. Cependant, ils sont inefficaces sur le plan informatique et difficiles à déployer en production. Une façon d'atténuer ce problème est d'utiliser des techniques de compression pour rendre le modèle plus petit et réduire la complexité du calcul.

Il existe plusieurs façons de le faire. Distillation des connaissances : cela consiste à former un réseau étudiant (généralement plus petit que le professeur) pour reproduire le comportement d'un modèle enseignant. Pour reproduire les prédictions du modèle enseignant, on utilise la perte d'entropie croisée douce entre les probabilités de sortie de l'étudiant et de l'enseignant.

Élagage des poids : il s'agit d'un processus qui force certains poids d'un réseau neuronal à être nuls. Il peut être non structuré, où les poids individuels sont élagués, ou structurés, où des groupes de poids (canaux, blocs, ...) sont mis à zéro. L'élagage des poids rend le réseau épars, réduisant le temps de calcul et les besoins en espace.

Quantification : nous utilisons des nombres flottants pour les réseaux de neurones, généralement précisés sur 32 bits. La quantification réduit la précision (16 bits, 8 bits, ...) tout en préservant autant que possible l'exactitude : le réseau résultant peut être considérablement plus petit.

Les modèles de langage pré-entraînés épars utilisent ces différentes techniques pour atteindre un niveau de compression surprenant tout en maintenant la plupart de l'exactitude sur un large éventail de tâches. De plus, ils montrent comment compresser les poids des modèles épars à une précision de 8 bits en utilisant un apprentissage spécifique à la quantification.

Le résultat est un modèle BERT-Large pré-entraîné épars, affiné sur SQuADv1.1 et quantifié sur 8 bits. Il atteint un taux de compression de 40X pour l'encodeur avec moins de 1% de perte d'exactitude. 🚀 C'est un résultat incroyable. L'article est court et bien expliqué, cela vaut certainement la peine d'être lu.

🛠 Outil : Utilisez Insomnia pour déboguer et tester facilement votre API

Insomnia est un outil pour optimiser votre processus de développement d'API, allant des tests avec un client d'interface utilisateur riche en fonctionnalités au test et même à la construction de pipelines d'API. Vous pouvez même enregistrer la configuration du client et la partager avec d'autres développeurs, afin que chacun puisse utiliser des requêtes de tests prédéfinies pour invoquer l'API.

Je l'ai récemment utilisé dans un projet où j'ai créé une API avec Cloudflare Workers. Cela m'a fait gagner du temps et je le recommande si vous travaillez sur des APIs. 🚀

Essayez-le.

Insomnia Insomnia

📰 Actualités

Précision de BERT-Large (346M paramètres) avec une inférence plus rapide que celle de DistilBERT (66M paramètres)

Est-ce même possible ?

Oui, c'est le cas 🤯.

Des chercheurs ont collaboré avec Intel Labs pour utiliser des techniques de sparisation et de quantification de pointe du document "Élaguez une fois pour toutes : Des modèles de langage pré-entraînés épars". Ils ont également utilisé le moteur DeepSparse, un moteur d'inférence exploitant la sparsité pour obtenir des performances équivalentes à celles des GPU sur les CPU.

Google travaille sur un remplacement de C++ : Carbon

Google travaille sur un remplacement de C++, le langage Carbon. Il vise à être 100% interopérable avec les programmes C++ existants, tout en offrant des fonctionnalités de langage modernes mieux adaptées aux besoins des développeurs. Il est basé sur LLVM.





Bitsletter #10: Alertes ML, Cookies Web sécurisés et concurrent de C++ de Google

Bitsletter #10: Alertes ML, Cookies Web sécurisés et concurrent de C++ de Google

🧠 Astuce ML : Utilisez des outils d'alerte simples (Slack, Telegram, ...)

L'apprentissage automatique est un processus d'essai et d'erreur. Vous effectuez de nombreuses expériences avec différents paramètres (prétraitement, modèles, post-traitement, hyperparamètres, ...) pour trouver la meilleure solution à votre problème.

La formation est au cœur de chaque expérience : vous devez ajuster un modèle avant de l'évaluer en fonction d'une métrique. Cependant, lorsque nous utilisons des ensembles de données de plus en plus grands avec des modèles plus complexes, le processus de formation prend un temps considérable pour se terminer, même avec des accélérateurs modernes tels que les GPU.

Il peut être frustrant si vos scripts de formation échouent au milieu d'une expérience longue, et que vous vous en rendez compte potentiellement plusieurs heures plus tard. Plus vous identifiez rapidement un problème, moins de temps vous perdrez : vous pouvez le corriger rapidement, relancer le script ou approfondir une grave problème. De nos jours, nous avons tous des smartphones et des applications de messagerie avec des notifications en temps réel. Par exemple, Telegram, Slack, Discord, ...

Ces applications disposent de kits de développement, vous permettant d'envoyer des messages dans un canal de manière programmatique. Vous pouvez surveiller l'état de votre formation en envoyant simplement des messages à vous-même ou à un canal de groupe s'il se passe quelque chose de mal, ou espérons-le, notifier si votre expérience est terminée avec succès. Utilisez des bibliothèques telles que telegram_send ou le kit de développement Slack Python pour vous apporter la tranquillité d'esprit, à vous et à votre équipe.

🌐 Astuce Web : Utilisation de cookies réservés à HTTP, comment déterminer si un utilisateur est connecté côté client ?

Pour authentifier et autoriser les utilisateurs sur vos applications Web, vous devez les identifier à chaque requête qu'ils envoient à vos serveurs back-end. Pour cela, vous avez besoin d'un jeton associé à chaque requête. Les méthodes courantes pour procéder sont les sessions ou les JWT (JSON Web Tokens).

Un flux de travail typique est le suivant :
👉🏽 Quelqu'un accède à l'endpoint de connexion de votre API. 👉🏽 Vous vérifiez les informations d'identification et, si elles sont correctes, vous renvoyez un jeton identifiant de manière unique l'utilisateur.
👉🏽 Le client reçoit le jeton et le stocke dans le stockage local. Ensuite, à chaque requête future, le client attache le jeton aux en-têtes de la requête afin que le back-end puisse déterminer qui est l'utilisateur effectuant la requête.

🚨 Cependant, cela présente des inconvénients, car le stockage local peut subir des attaques JavaScript.

Une alternative consiste à utiliser des cookies réservés à HTTP pour stocker en toute sécurité le jeton côté client, sans qu'il soit accessible par JavaScript. Le navigateur envoie le cookie à chaque requête future et interdit à tout code d'y accéder. C'est excellent pour la sécurité, mais puisque vous ne pouvez pas accéder au cookie dans le code, comment déterminez-vous si l'utilisateur est connecté côté client ?

La solution la plus simple est d'exposer une route dans votre API qui renvoie le profil de l'utilisateur lorsqu'il est interrogé par un utilisateur authentifié. Quelque chose comme /me. Ensuite, lorsque votre application se charge, interrogez la route /me ; si vous recevez le profil, vous êtes connecté. Maintenant, interceptez toute erreur 401 (non authentifiée) provenant de vos requêtes client et définissez l'état de votre application sur non authentifié. Et voilà ! Vous disposez désormais d'un système d'authentification complet basé sur des cookies réservés à HTTP.

👩‍🔬 Article de recherche : Élaguez une fois pour toutes : Des modèles de langage pré-entraînés épars

Les modèles basés sur des transformateurs ont montré des résultats impressionnants dans les tâches de traitement du langage naturel. Cependant, ils sont inefficaces sur le plan informatique et difficiles à déployer en production. Une façon d'atténuer ce problème est d'utiliser des techniques de compression pour rendre le modèle plus petit et réduire la complexité du calcul.

Il existe plusieurs façons de le faire. Distillation des connaissances : cela consiste à former un réseau étudiant (généralement plus petit que le professeur) pour reproduire le comportement d'un modèle enseignant. Pour reproduire les prédictions du modèle enseignant, on utilise la perte d'entropie croisée douce entre les probabilités de sortie de l'étudiant et de l'enseignant.

Élagage des poids : il s'agit d'un processus qui force certains poids d'un réseau neuronal à être nuls. Il peut être non structuré, où les poids individuels sont élagués, ou structurés, où des groupes de poids (canaux, blocs, ...) sont mis à zéro. L'élagage des poids rend le réseau épars, réduisant le temps de calcul et les besoins en espace.

Quantification : nous utilisons des nombres flottants pour les réseaux de neurones, généralement précisés sur 32 bits. La quantification réduit la précision (16 bits, 8 bits, ...) tout en préservant autant que possible l'exactitude : le réseau résultant peut être considérablement plus petit.

Les modèles de langage pré-entraînés épars utilisent ces différentes techniques pour atteindre un niveau de compression surprenant tout en maintenant la plupart de l'exactitude sur un large éventail de tâches. De plus, ils montrent comment compresser les poids des modèles épars à une précision de 8 bits en utilisant un apprentissage spécifique à la quantification.

Le résultat est un modèle BERT-Large pré-entraîné épars, affiné sur SQuADv1.1 et quantifié sur 8 bits. Il atteint un taux de compression de 40X pour l'encodeur avec moins de 1% de perte d'exactitude. 🚀 C'est un résultat incroyable. L'article est court et bien expliqué, cela vaut certainement la peine d'être lu.

🛠 Outil : Utilisez Insomnia pour déboguer et tester facilement votre API

Insomnia est un outil pour optimiser votre processus de développement d'API, allant des tests avec un client d'interface utilisateur riche en fonctionnalités au test et même à la construction de pipelines d'API. Vous pouvez même enregistrer la configuration du client et la partager avec d'autres développeurs, afin que chacun puisse utiliser des requêtes de tests prédéfinies pour invoquer l'API.

Je l'ai récemment utilisé dans un projet où j'ai créé une API avec Cloudflare Workers. Cela m'a fait gagner du temps et je le recommande si vous travaillez sur des APIs. 🚀

Essayez-le.

Insomnia Insomnia

📰 Actualités

Précision de BERT-Large (346M paramètres) avec une inférence plus rapide que celle de DistilBERT (66M paramètres)

Est-ce même possible ?

Oui, c'est le cas 🤯.

Des chercheurs ont collaboré avec Intel Labs pour utiliser des techniques de sparisation et de quantification de pointe du document "Élaguez une fois pour toutes : Des modèles de langage pré-entraînés épars". Ils ont également utilisé le moteur DeepSparse, un moteur d'inférence exploitant la sparsité pour obtenir des performances équivalentes à celles des GPU sur les CPU.

Google travaille sur un remplacement de C++ : Carbon

Google travaille sur un remplacement de C++, le langage Carbon. Il vise à être 100% interopérable avec les programmes C++ existants, tout en offrant des fonctionnalités de langage modernes mieux adaptées aux besoins des développeurs. Il est basé sur LLVM.