Vous êtes prêt à déployer le modèle d'unicorne qui prédit les apparitions d'unicornes. Lors du déploiement, votre pipeline de machine learning (ML) doit s'exécuter, se mettre à jour et être diffusé sans problème. Si seulement le déploiement d'un modèle était aussi simple que d'appuyer sur un grand bouton Déployer. Malheureusement, un système de machine learning complet nécessite des tests pour:
- Valider les données d'entrée
- Valider l'ingénierie des caractéristiques
- Valider la qualité des nouvelles versions de modèles
- Valider l'infrastructure de diffusion
- Tests de l'intégration entre les composants du pipeline.
De nombreux ingénieurs logiciels privilégient le développement piloté par les tests (TDD). Dans le TDD, les ingénieurs logiciels écrivent des tests avant d'écrire le code source "réel". Toutefois, le TDD peut s'avérer délicat en machine learning. Par exemple, avant d'entraîner votre modèle, vous ne pouvez pas écrire de test pour valider la perte. Vous devez d'abord découvrir la perte réalisable lors du développement du modèle, puis tester les nouvelles versions du modèle par rapport à la perte réalisable.
À propos du modèle licorne
Cette section fait référence au modèle licorne. Voici les informations à retenir :
Vous utilisez le machine learning pour créer un modèle de classification qui prédit l'apparition de licornes. Votre ensemble de données détaille 10 000 apparitions d'une licorne et 10 000 non-apparitions. L'ensemble de données contient l'emplacement, l'heure, l'altitude, la température, l'humidité, le couvert arborescent, la présence d'un arc-en-ciel et plusieurs autres caractéristiques.
Tester les mises à jour du modèle avec un entraînement reproductible
Vous souhaitez peut-être continuer à améliorer votre modèle de licorne. Par exemple, supposons que vous effectuiez une ingénierie des caractéristiques supplémentaire sur une caractéristique spécifique, puis que vous réentraînez le modèle, dans l'espoir d'obtenir de meilleurs résultats (ou au moins les mêmes). Malheureusement, il est parfois difficile de reproduire l'entraînement du modèle. Pour améliorer la reproductibilité, suivez ces recommandations:
Déterminer de manière deterministe la valeur source du générateur de nombres aléatoires. Pour en savoir plus, consultez la section Randomisation dans la génération de données.
Initialisez les composants du modèle dans un ordre fixe pour vous assurer qu'ils obtiennent le même nombre aléatoire du générateur de nombres aléatoires à chaque exécution. Les bibliothèques ML gèrent généralement cette exigence automatiquement.
Calculez la moyenne de plusieurs exécutions du modèle.
Utilisez le contrôle des versions, même pour les itérations préliminaires, afin de pouvoir identifier le code et les paramètres lorsque vous étudiez votre modèle ou votre pipeline.
Même si vous suivez ces consignes, d'autres sources de non-déterminisme peuvent toujours exister.
Tester les appels à l'API de machine learning
Comment tester les mises à jour des appels d'API ? Vous pouvez réentraîner votre modèle, mais cela prend du temps. Écrivez plutôt un test unitaire pour générer des données d'entrée aléatoires et exécuter une seule étape de descente du gradient. Si cette étape se termine sans erreur, cela signifie que les mises à jour de l'API n'ont probablement pas endommagé votre modèle.
Écrire des tests d'intégration pour les composants du pipeline
Dans un pipeline ML, les modifications apportées à un composant peuvent entraîner des erreurs dans d'autres composants. Vérifiez que les composants fonctionnent ensemble en écrivant un test d'intégration qui exécute l'ensemble du pipeline de bout en bout.
En plus d'exécuter des tests d'intégration en continu, vous devez les exécuter lorsque vous déployez de nouveaux modèles et de nouvelles versions logicielles. La lenteur de l'exécution de l'ensemble du pipeline rend les tests d'intégration continue plus difficiles. Pour exécuter des tests d'intégration plus rapidement, entraînez-vous sur un sous-ensemble de données ou avec un modèle plus simple. Les détails dépendent de votre modèle et de vos données. Pour obtenir une couverture continue, vous devez ajuster vos tests plus rapides afin qu'ils s'exécutent avec chaque nouvelle version de modèle ou de logiciel. Pendant ce temps, vos tests lents s'exécutent en continu en arrière-plan.
Valider la qualité du modèle avant de l'exécuter
Avant de déployer une nouvelle version de modèle en production, vérifiez les deux types de dégradations de qualité suivants:
Dégradation soudaine. Un bug dans la nouvelle version pourrait entraîner une qualité nettement inférieure. Validez les nouvelles versions en comparant leur qualité à celle de la version précédente.
Dégradation lente. Votre test de dégradation soudaine peut ne pas détecter une dégradation lente de la qualité du modèle sur plusieurs versions. Assurez-vous plutôt que les prédictions de votre modèle sur un ensemble de données de validation atteignent un seuil fixe. Si votre ensemble de données de validation diffère des données en direct, mettez-le à jour et assurez-vous que votre modèle répond toujours au même seuil de qualité.
Valider la compatibilité du modèle avec l'infrastructure avant de diffuser
Si votre modèle est mis à jour plus rapidement que votre serveur, il peut avoir des dépendances logicielles différentes de celles de votre serveur, ce qui peut entraîner des incompatibilités. Assurez-vous que les opérations utilisées par le modèle sont présentes sur le serveur en mettant le modèle en préproduction dans une version de bac à sable du serveur.