{"id":19484,"date":"2021-03-09T16:01:44","date_gmt":"2021-03-09T21:01:44","guid":{"rendered":"https:\/\/canarie.machinedev.ca\/?page_id=19484"},"modified":"2024-10-30T09:50:09","modified_gmt":"2024-10-30T13:50:09","slug":"solution-type-recommandeur-de-films","status":"publish","type":"page","link":"https:\/\/www.canarie.ca\/fr\/catalogue\/plan-de-vol-lapprentissage-machine-applique-a-un-systeme-de-recommandation-automatique\/solution-type-recommandeur-de-films\/","title":{"rendered":"Solution type : Recommandeur de films"},"content":{"rendered":"\n<section class=\"section section--banner simple-fade light-blue alignfull\">\n  <div class=\"grid-container text-center\">\n  \t\t  \t\t  \t  <div class=\"large\"><p><span class=\"TextRun SCXW20856404 BCX0\" lang=\"EN-CA\" xml:lang=\"EN-CA\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW20856404 BCX0\">Bien que le programme ATIR <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW20856404 BCX0\">n\u2019accepte<\/span><span class=\"NormalTextRun SCXW20856404 BCX0\"> plus les <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW20856404 BCX0\">demandes<\/span><span class=\"NormalTextRun SCXW20856404 BCX0\"> pour les <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW20856404 BCX0\">ressources<\/span> <span class=\"NormalTextRun SpellingErrorV2Themed SCXW20856404 BCX0\">en<\/span> <span class=\"NormalTextRun SpellingErrorV2Themed SCXW20856404 BCX0\">nuage<\/span><span class=\"NormalTextRun SCXW20856404 BCX0\">, <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW20856404 BCX0\">vous<\/span> <span class=\"NormalTextRun SpellingErrorV2Themed SCXW20856404 BCX0\">avez<\/span> <span class=\"NormalTextRun SpellingErrorV2Themed SCXW20856404 BCX0\">toujours<\/span> <span class=\"NormalTextRun SpellingErrorV2Themed SCXW20856404 BCX0\">acc\u00e8s<\/span><span class=\"NormalTextRun SCXW20856404 BCX0\"> aux <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW20856404 BCX0\">Propulseurs<\/span><span class=\"NormalTextRun SCXW20856404 BCX0\"> et \u00e0 <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW20856404 BCX0\">leur<\/span><span class=\"NormalTextRun SCXW20856404 BCX0\"> documentation, qui <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW20856404 BCX0\">seront<\/span> <span class=\"NormalTextRun SpellingErrorV2Themed SCXW20856404 BCX0\">pr\u00e9serv\u00e9s<\/span><span class=\"NormalTextRun SCXW20856404 BCX0\"> et <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW20856404 BCX0\">b\u00e9n\u00e9ficieront<\/span><span class=\"NormalTextRun SCXW20856404 BCX0\"> d\u2019un <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW20856404 BCX0\">soutien<\/span> <span class=\"NormalTextRun SpellingErrorV2Themed SCXW20856404 BCX0\">jusqu\u2019au<\/span><strong><span class=\"NormalTextRun SCXW20856404 BCX0\"> 17 <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW20856404 BCX0\">janvier<\/span><span class=\"NormalTextRun SCXW20856404 BCX0\"> 2025.<\/span><\/strong><\/span><strong><span class=\"EOP SCXW20856404 BCX0\" data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/strong><\/p>\n<\/div>\n\t  \t  \t\t  <\/div>\n<\/section>\n\n\n\n<section class=\"section section--text-columns no-background\">\n    <div class=\"grid-container\">\n      <div class=\"grid-x grid-padding-x\">\n        <div class=\"cell\">\n                  \t<h3>Apr\u00e8s le 17 janvier 2025:\u00a0<\/h3>\n                    <ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"4\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">Les saisies d\u2019\u00e9cran devraient rester fid\u00e8les, mais au lieu de vous connecter \u00e0 votre compte ATIR dans AWS quand on vous le demande, vous devrez vous connecter \u00e0 un compte AWS personnel.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"4\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">Les liens vers les scripts CloudFormation d\u2019AWS permettant le d\u00e9ploiement automatique de l\u2019application type devraient rester les m\u00eames et \u00eatre fonctionnels.<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"4\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559683&quot;:0,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">Les liens vers les d\u00e9p\u00f4ts GitHub permettant de t\u00e9l\u00e9charger le code source du Propulseur resteront valables puisque c\u2019est le cr\u00e9ateur du Propulseur (celui qui a \u00e9labor\u00e9 les applications de source ouverte servant d\u2019exemple) qui en est le propri\u00e9taire et en assure le maintien.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/li>\n<\/ul>\n                  <\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n\n<h1 class=\"wp-block-heading\"><strong>Solution type : Recommandeur de films<\/strong><\/h1>\n\n\n\n<p>Si ce n\u2019est d\u00e9j\u00e0 fait, lisez le Plan de vol du Propulseur,&nbsp;<a href=\"https:\/\/www.canarie.ca\/fr\/nuage\/propulseurs\/catalogue\/plan-de-vol-lapprentissage-machine-applique-a-un-systeme-de-recommandation-automatique\/\">L\u2019apprentissage machine appliqu\u00e9 \u00e0 un syst\u00e8me de recommandation automatique<\/a>, avant de tester la solution type.<\/p>\n\n\n\n<section class=\"section section--text-columns no-background\">\n    <div class=\"grid-container\">\n      <div class=\"grid-x grid-padding-x\">\n        <div class=\"cell\">\n                  \t<h3>Introduction<\/h3>\n                    <p>Le propulseur \u00ab\u00a0Recommandeur de films\u00a0\u00bb est une solution ex\u00e9cutable avec laquelle l\u2019utilisateur pourra observer et \u00e9tudier le fonctionnement d\u2019un mod\u00e8le \u00e0\u00a0<em>filtrage collaboratif\u00a0<\/em>formulant des recommandations en fonction de comportements pass\u00e9s<em>.\u00a0<\/em>Ce document d\u00e9crit la solution et les technologies de pointe qu\u2019elle met en application.<\/p>\n<p>On trouvera la d\u00e9finition des abr\u00e9viations et des expressions en italique dans le\u00a0glossaire.<\/p>\n<h2>\u00c9nonc\u00e9 du probl\u00e8me<\/h2>\n<p>Peu importe la nature de l\u2019entreprise avec laquelle l\u2019utilisateur fait affaire en ligne, les possibilit\u00e9s abondent dans le monde contemporain, qu\u2019on souhaite choisir un livre, une \u00e9mission de t\u00e9l\u00e9vision, un film, un nouvel appareil \u00e9lectronique, voire des articles d\u2019\u00e9picerie. Lorsque le consommateur est confront\u00e9 \u00e0 des choix par milliers, centaines sinon dizaines, l\u2019entreprise doit absolument disposer d\u2019outils qui l\u2019aideront \u00e0 \u00e9tablir rapidement ce qui l\u2019int\u00e9resse ou pas.<\/p>\n<p>Les\u00a0<em>syst\u00e8mes de recommandation<\/em>\u00a0automatiques recourent \u00e0 l\u2019apprentissage machine pour r\u00e9soudre le probl\u00e8me et les fournisseurs de contenu ainsi que les d\u00e9taillants ne peuvent d\u00e9sormais plus s\u2019en passer. Ces syst\u00e8mes recourent \u00e0 diverses informations comme les renseignements d\u00e9mographiques sur l\u2019utilisateur, ses habitudes, la description du produit ou la note que le consommateur lui attribue pour pr\u00e9voir ce qui est le plus susceptible de l\u2019int\u00e9resser \u00e0 un moment donn\u00e9. Sans recommandations, l\u2019utilisateur vivra une exp\u00e9rience douloureuse, car il gaspillera \u00e9norm\u00e9ment de temps \u00e0 chercher ce qui l\u2019int\u00e9resse pour sans doute finir par abandonner au bout du compte.<\/p>\n                  <\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n\n<h2 class=\"wp-block-heading\">Solution type<\/h2>\n\n\n\n<p>La solution type montre comment utiliser TensorFlow et TensorRT pour cr\u00e9er un mod\u00e8le de filtrage collaboratif fonctionnant sur GPU qui recommandera les films \u00e0 regarder.<\/p>\n\n\n\n<section class=\"section section--text-columns no-background\">\n    <div class=\"grid-container\">\n      <div class=\"grid-x grid-padding-x\">\n        <div class=\"cell\">\n                  \t<h3>Aper\u00e7u<\/h3>\n                    <p>La solution propose un syst\u00e8me complet de recommandation reposant sur un mod\u00e8le de filtrage collaboratif form\u00e9 par apprentissage profond \u00e0 partir des donn\u00e9es sur l\u2019utilisateur.<\/p>\n<p>Le\u00a0<em>filtrage collaboratif\u00a0<\/em>est une approche \u00e0 laquelle on recourt abondamment pour mettre en place un syst\u00e8me de recommandation. Cette technique de filtrage repose sur les habitudes, les activit\u00e9s ou les go\u00fbts de l\u2019utilisateur, et pr\u00e9voit ce qui lui plaira d\u2019apr\u00e8s ses ressemblances avec d\u2019autres utilisateurs. Un des principaux avantages du filtrage collaboratif est qu\u2019il s\u2019appuie uniquement sur le comportement de l\u2019utilisateur, sans lui r\u00e9clamer d\u2019autres informations sur lui ou le produit, de sorte qu\u2019on peut l\u2019appliquer indiff\u00e9remment \u00e0 une multitude d\u2019entreprises qui n\u2019auraient peut-\u00eatre pas acc\u00e8s \u00e0 des informations de ce genre.<\/p>\n<p>La solution suppose la cr\u00e9ation d\u2019un mod\u00e8le d\u2019<em>apprentissage profond<\/em>\u00a0avec Python et TensorFlow, puis son d\u00e9ploiement dans un environnement de production utilisant la biblioth\u00e8que TensorRT de NVIDIA et son serveur d\u2019inf\u00e9rence. Les d\u00e9butants comme les d\u00e9veloppeurs aguerris utilisent souvent la biblioth\u00e8que Python dans leurs projets d\u2019apprentissage machine. TensorFlow et TensorRT figurent dans les ressources en nuage de l\u2019ATIR, ce qui facilitera le d\u00e9veloppement de mod\u00e8les d\u2019apprentissage profond de moyenne \u00e0 grande envergure.<\/p>\n<p>Le mod\u00e8le d\u2019<em>apprentissage profond<\/em>\u00a0est un\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Multilayer_perceptron\" target=\"_blank\" rel=\"noopener noreferrer\">perceptron multicouche<\/a>\u00a0similaire \u00e0 celui propos\u00e9 dans l\u2019article\u00a0<a href=\"https:\/\/dl.acm.org\/citation.cfm?id=3052569\" target=\"_blank\" rel=\"noopener noreferrer\"><em>Neural Collaborative Filtering<\/em>\u00a0(He et coll. 2017)<\/a>. Le probl\u00e8me en est un de classification et on forme le r\u00e9seau neuronal en attribuant une valeur positive aux films qui ont \u00e9t\u00e9 regard\u00e9s et cot\u00e9s par d\u2019autres utilisateurs et une valeur n\u00e9gative \u00e0 ceux qui n\u2019ont pas \u00e9t\u00e9 visionn\u00e9s.<\/p>\n<p>Pour former le mod\u00e8le, on recourt \u00e0 la banque de donn\u00e9es publique\u00a0<a href=\"https:\/\/grouplens.org\/datasets\/movielens\" target=\"_blank\" rel=\"noopener noreferrer\">Movielens<\/a>, qui rassemble des informations sur les longs m\u00e9trages et la cote que leur ont attribu\u00e9e les cin\u00e9philes. Cette banque est disponible \u00e0 des fins non commerciales et on s\u2019en sert souvent dans les tutoriels et les projets de recherche.<\/p>\n<h3>Diagramme de la solution<\/h3>\n<p>Le diagramme que voici illustre comment la solution est structur\u00e9e.<\/p>\n                  <\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"691\" height=\"1024\" src=\"https:\/\/www.canarie.ca\/wp-content\/uploads\/2021\/03\/1-MovieRecommender-691x1024.png\" alt=\"\" class=\"wp-image-19525\" srcset=\"https:\/\/www.canarie.ca\/wp-content\/uploads\/2021\/03\/1-MovieRecommender-691x1024.png 691w, https:\/\/www.canarie.ca\/wp-content\/uploads\/2021\/03\/1-MovieRecommender-202x300.png 202w, https:\/\/www.canarie.ca\/wp-content\/uploads\/2021\/03\/1-MovieRecommender.png 699w\" sizes=\"auto, (max-width: 691px) 100vw, 691px\" \/><figcaption class=\"wp-element-caption\">Recommandeur de films<\/figcaption><\/figure>\n<\/div>\n\n\n<p>La solution comprend un orchestrateur qui coordonne les d\u00e9ploiements sur la plateforme d\u2019infonuagique de l\u2019ATIR et deux sous-syst\u00e8mes Python dans le nuage&nbsp;: un pipeline hors ligne et un service en ligne. Le composant hors ligne actionne la phase exp\u00e9rimentale du projet d\u2019apprentissage machine. Autrement dit, il produit un mod\u00e8le en fonction des donn\u00e9es obtenues par l\u2019apprentissage machine; le sous-syst\u00e8me en ligne est le service qui recommande des films \u00e0 l\u2019utilisateur en s\u2019appuyant sur les pr\u00e9visions du mod\u00e8le. L\u2019utilisateur n\u2019exploite pas ou ne consulte pas le composant hors ligne en temps r\u00e9el. Ce dernier a \u00e9t\u00e9 utilis\u00e9 (sans doute plusieurs fois) avant le lancement du service et le sera p\u00e9riodiquement par la suite de mani\u00e8re \u00e0 perfectionner le mod\u00e8le, quand de nouvelles donn\u00e9es ou de nouveaux mod\u00e8les deviennent disponibles. Le composant en ligne comprend une application cliente qui relaye les demandes au service de pr\u00e9vision. Il est ais\u00e9 de voir comment un syst\u00e8me de plus grande envergure pourrait int\u00e9grer la solution type.<\/p>\n\n\n\n<section class=\"section section--text-columns no-background\">\n    <div class=\"grid-container\">\n      <div class=\"grid-x grid-padding-x\">\n        <div class=\"cell\">\n                  \t<h3>Description<\/h3>\n                    <p>Le tableau ci-dessous expose bri\u00e8vement les principaux \u00e9l\u00e9ments de la solution.<\/p>\n<table border=\"1\">\n<tbody>\n<tr>\n<td><strong>Composant<\/strong><\/td>\n<td><strong>R\u00e9sum\u00e9<\/strong><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/DAIR-ATIR-Code\/Carla-Margalef-Bentabol---MovieRecommender\/tree\/master\/dair-artifacts\"><strong>Orchestrateur<\/strong><\/a><\/td>\n<td>Jeu de scripts qui coordonne le d\u00e9ploiement des autres composants sur la plateforme de l\u2019ATIR.<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/DAIR-ATIR-Code\/Carla-Margalef-Bentabol---MovieRecommender\/blob\/master\/movierec\/data_pipeline.py\"><strong>Pipeline de traitement<\/strong><\/a><\/td>\n<td>Recueille les donn\u00e9es d\u2019une source externe et les traite pour que le module de formation du mod\u00e8le puisse s\u2019en servir (\u00e9puration, formatage, etc.).<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/DAIR-ATIR-Code\/Carla-Margalef-Bentabol---MovieRecommender\/blob\/master\/movierec\/trainer.py\"><strong>Module de formation 1<\/strong><\/a><\/p>\n<p><a href=\"https:\/\/github.com\/DAIR-ATIR-Code\/Carla-Margalef-Bentabol---MovieRecommender\/blob\/master\/movierec\/model.py\"><strong>Module de formation 2<\/strong><\/a><\/td>\n<td>Scripts TensorFlow qui cr\u00e9ent, forment et \u00e9valuent le mod\u00e8le d\u2019apprentissage machine avec les donn\u00e9es trait\u00e9es. En d\u00e9coule le fichier du mod\u00e8le et des rapports sur la performance de ce dernier.<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/DAIR-ATIR-Code\/Carla-Margalef-Bentabol---MovieRecommender\/blob\/master\/movierec\/trt_exporter.py\"><strong>Exportateur<\/strong><\/a><\/td>\n<td>Adapte et exporte le mod\u00e8le produit par le module de formation pour fournir un mod\u00e8le TensorRT.<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/DAIR-ATIR-Code\/Carla-Margalef-Bentabol---MovieRecommender\/blob\/master\/dair-artifacts\/movierec-run-server.sh#L28-L42\"><strong>Serveur d\u2019inf\u00e9rence \u00e0 GPU<\/strong><\/a><\/td>\n<td>Serveur TensorRT en ligne effectuant des pr\u00e9visions d\u2019apr\u00e8s les donn\u00e9es saisies avec le mod\u00e8le avec interface graphique.<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/DAIR-ATIR-Code\/Carla-Margalef-Bentabol---MovieRecommender\/blob\/master\/movierec\/trt_exporter.py\"><strong>Client l\u00e9ger<\/strong><\/a><\/td>\n<td>Script sous forme de ligne de commande faisant office d\u2019application cliente qui formule une demande au serveur d\u2019inf\u00e9rence \u00e0 interface graphique. L\u2019utilisateur s\u2019en sert pour acc\u00e9der au syst\u00e8me de recommandation.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>D\u00e9monstration de la technologie<\/h3>\n<p>La partie qui suit montre comment fonctionne le syst\u00e8me de recommandation. Y recourir est tentant pour le consommateur, car cela lui permet de r\u00e9tr\u00e9cir son champ de recherche \u00e0 ce qui l\u2019int\u00e9resse le plus.<\/p>\n<p>Dans la d\u00e9monstration, le mod\u00e8le recommande des longs m\u00e9trages d\u2019apr\u00e8s les films que d\u2019autres cin\u00e9philes ont aim\u00e9s et cot\u00e9s<em>.<\/em><\/p>\n<h3>D\u00e9ploiement et configuration<\/h3>\n<p>Si vous \u00eates un participant de l\u2019ATIR et avez acc\u00e8s \u00e0 une unit\u00e9 de traitement graphique (GPU), suivez les instructions ci-dessous pour d\u00e9ployer la Solution type. Pour cela, vous devrez toutefois d\u2019abord avoir ouvert un compte dans le nuage OpenStack de l\u2019ATIR ou avoir formul\u00e9 une demande en ce sens, et avoir acc\u00e8s \u00e0 une GPU.<\/p>\n<ol>\n<li>Ouvrez une s\u00e9ance sur la plateforme en nuage OpenStack de l\u2019ATIR.<\/li>\n<li>Allez \u00e0 <strong>Projects &gt; Orchestration &gt; Stacks<\/strong> et cliquez le bouton + <strong>Launch Stack<\/strong><strong>.<\/strong><\/li>\n<\/ol>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-39839\" src=\"https:\/\/www.canarie.ca\/wp-content\/uploads\/2023\/08\/movie01.png\" alt=\"\" width=\"936\" height=\"422\" srcset=\"https:\/\/www.canarie.ca\/wp-content\/uploads\/2023\/08\/movie01.png 936w, https:\/\/www.canarie.ca\/wp-content\/uploads\/2023\/08\/movie01-300x135.png 300w, https:\/\/www.canarie.ca\/wp-content\/uploads\/2023\/08\/movie01-768x346.png 768w\" sizes=\"auto, (max-width: 936px) 100vw, 936px\" \/><\/p>\n<p><strong>3.<\/strong> Dans la bo\u00eete de dialogue <strong>Select Template<\/strong>, s\u00e9lectionnez URL comme source du mod\u00e8le et collez l\u2019URL:<\/p>\n<p><strong>https:\/\/gpu-boosterpack-heat-templates.s3.ca-central-1.amazonaws.com\/movierec.yaml <\/strong><\/p>\n<p>dans le champ <strong>Template URL<\/strong>, puis cliquez <strong>Next<\/strong>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-39841\" src=\"https:\/\/www.canarie.ca\/wp-content\/uploads\/2023\/08\/movie02.png\" alt=\"\" width=\"953\" height=\"560\" srcset=\"https:\/\/www.canarie.ca\/wp-content\/uploads\/2023\/08\/movie02.png 953w, https:\/\/www.canarie.ca\/wp-content\/uploads\/2023\/08\/movie02-300x176.png 300w, https:\/\/www.canarie.ca\/wp-content\/uploads\/2023\/08\/movie02-768x451.png 768w\" sizes=\"auto, (max-width: 953px) 100vw, 953px\" \/><\/p>\n<p>Dans la bo\u00eete de dialogue <strong>Launch Stack<\/strong>, configurez l\u2019application de la fa\u00e7on indiqu\u00e9e sur l\u2019illustration ci-dessous, comme suit\u00a0:<\/p>\n<ol>\n<li>donnez un nom \u00e0 la pile (<strong>Stack Name<\/strong>);<\/li>\n<li>donnez un mot de passe (<strong>Password<\/strong>) \u00e0 l\u2019utilisateur (n\u2019importe quoi sauf des espaces);<\/li>\n<li>inscrivez \u00ab\u00a0v3.medium\u00a0\u00bb pour le type d\u2019instance (<strong>Flavor\/Instance Type<\/strong>);<\/li>\n<li>inscrivez \u00ab\u00a0Ubuntu 22.04 \u2013 vGPU \u2013 525\u00a0\u00bb pour l\u2019image (<strong>Image<\/strong>).<\/li>\n<\/ol>\n<p>Ensuite, cliquez <strong>Launch.<\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-39843\" src=\"https:\/\/www.canarie.ca\/wp-content\/uploads\/2023\/08\/movie03.png\" alt=\"\" width=\"953\" height=\"710\" srcset=\"https:\/\/www.canarie.ca\/wp-content\/uploads\/2023\/08\/movie03.png 953w, https:\/\/www.canarie.ca\/wp-content\/uploads\/2023\/08\/movie03-300x224.png 300w, https:\/\/www.canarie.ca\/wp-content\/uploads\/2023\/08\/movie03-768x572.png 768w\" sizes=\"auto, (max-width: 953px) 100vw, 953px\" \/><\/p>\n<p><strong>4.<\/strong> Le d\u00e9ploiement de l\u2019application dure cinq \u00e0 dix minutes. Les scripts post\u00e9rieurs au provisionnement s\u2019ex\u00e9cutent automatiquement et configurent la plateforme en fonction de la Solution type.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-39845\" src=\"https:\/\/www.canarie.ca\/wp-content\/uploads\/2023\/08\/movie04.png\" alt=\"\" width=\"953\" height=\"437\" srcset=\"https:\/\/www.canarie.ca\/wp-content\/uploads\/2023\/08\/movie04.png 953w, https:\/\/www.canarie.ca\/wp-content\/uploads\/2023\/08\/movie04-300x138.png 300w, https:\/\/www.canarie.ca\/wp-content\/uploads\/2023\/08\/movie04-768x352.png 768w\" sizes=\"auto, (max-width: 953px) 100vw, 953px\" \/><\/p>\n<p>Le d\u00e9ploiement termin\u00e9, vous devrez copier la cl\u00e9 priv\u00e9e pour pouvoir ouvrir une console (SSH) sur la nouvelle instance de la GPU qui vient d\u2019\u00eatre cr\u00e9\u00e9e.<\/p>\n<p><strong>5.<\/strong> Pour obtenir la cl\u00e9 priv\u00e9e, cliquez le nom de la pile (<strong>Stack Name<\/strong>) et parcourez la liste jusqu\u2019au champ <strong>private.key<\/strong>. Copiez-en le contenu, dont vous vous servirez pour votre client SSH.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-39848\" src=\"https:\/\/www.canarie.ca\/wp-content\/uploads\/2023\/08\/movie05.png\" alt=\"\" width=\"878\" height=\"774\" srcset=\"https:\/\/www.canarie.ca\/wp-content\/uploads\/2023\/08\/movie05.png 878w, https:\/\/www.canarie.ca\/wp-content\/uploads\/2023\/08\/movie05-300x264.png 300w, https:\/\/www.canarie.ca\/wp-content\/uploads\/2023\/08\/movie05-768x677.png 768w\" sizes=\"auto, (max-width: 878px) 100vw, 878px\" \/><\/p>\n<p><strong>Configuration et lancement de l\u2019application<\/strong><\/p>\n<p>Apr\u00e8s le d\u00e9ploiement de l\u2019application, amorcez une console pour l\u2019instance de la GPU avec SSH en utilisant l\u2019adresse IP externe que vous trouverez \u00e0 <strong>Project &gt; Compute &gt; Instances<\/strong>, tel qu\u2019indiqu\u00e9 ci-dessous.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-39850\" src=\"https:\/\/www.canarie.ca\/wp-content\/uploads\/2023\/08\/movie06.png\" alt=\"\" width=\"936\" height=\"452\" srcset=\"https:\/\/www.canarie.ca\/wp-content\/uploads\/2023\/08\/movie06.png 936w, https:\/\/www.canarie.ca\/wp-content\/uploads\/2023\/08\/movie06-300x145.png 300w, https:\/\/www.canarie.ca\/wp-content\/uploads\/2023\/08\/movie06-768x371.png 768w\" sizes=\"auto, (max-width: 936px) 100vw, 936px\" \/><\/p>\n<p>Ouvrez une s\u00e9ance SSH avec l\u2019adresse IP et l\u2019identifiant \u00ab\u00a0ubuntu\u00a0\u00bb, sans mot de passe.<\/p>\n                  <\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n\n<section class=\"section section--text-columns no-background\">\n    <div class=\"grid-container\">\n      <div class=\"grid-x grid-padding-x\">\n        <div class=\"cell\">\n                  \t<h3>Lancement de l\u2019application<\/h3>\n                    <p>L\u2019application est pr\u00eate \u00e0 \u00eatre utilis\u00e9e d\u00e8s que le d\u00e9ploiement est termin\u00e9. Pour cela, vous aurez besoin de son adresse IP, qui se trouve sur la page d\u00e9taillant l\u2019instance, tel qu\u2019indiqu\u00e9 \u00e0 la derni\u00e8re \u00e9tape de la partie pr\u00e9c\u00e9dente.<\/p>\n<p>Tout d\u2019abord, connectez-vous \u00e0 l\u2019instance par SSH. Si vous avez besoin d\u2019aide, consultez le\u00a0<a href=\"https:\/\/www.canarie.ca\/wpdm-package\/technical-guide-dair-how-to-guide-linux\/\" target=\"_blank\" rel=\"noopener noreferrer\">guide technique de l\u2019ATIR sur Linux<\/a>.<\/p>\n<p>Apr\u00e8s ouverture de la s\u00e9ance, attachez le contenant Docker intitul\u00e9\u00a0trtclient\u00a0en ex\u00e9cutant la commande suivante\u00a0:<br \/>\n<code>sudo docker attach trtclient<\/code><\/p>\n<p>Une fois le contenant annex\u00e9, cliquez Entr\u00e9e de nouveau. Vous \u00eates maintenant \u00e0 l\u2019int\u00e9rieur du contenant Docker renfermant la ligne de commande de l\u2019application cliente. Pour lancer celle-ci, ex\u00e9cutez ce qui suit\u00a0:<br \/>\n<code>python3 \/workspace\/movierec\/trt_client.py<\/code><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-19505\" src=\"https:\/\/www.canarie.ca\/wp-content\/uploads\/2021\/03\/movirec-client-1.png\" alt=\"\" width=\"706\" height=\"504\" srcset=\"https:\/\/www.canarie.ca\/wp-content\/uploads\/2021\/03\/movirec-client-1.png 706w, https:\/\/www.canarie.ca\/wp-content\/uploads\/2021\/03\/movirec-client-1-300x214.png 300w\" sizes=\"auto, (max-width: 706px) 100vw, 706px\" \/><\/p>\n<p>Des instructions expliquent comment se servir de l\u2019application. Inscrivez un chiffre (0, par exemple) puis enfoncez la touche <strong>Entr\u00e9e<\/strong> pour voir les films recommand\u00e9s. Au lieu d\u2019afficher les informations sur l\u2019utilisateur, le programme propose quelques longs m\u00e9trages que celui-ci a regard\u00e9s et not\u00e9s ant\u00e9rieurement.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-19507\" src=\"https:\/\/www.canarie.ca\/wp-content\/uploads\/2021\/03\/movirec-client-example-1.png\" alt=\"\" width=\"972\" height=\"912\" srcset=\"https:\/\/www.canarie.ca\/wp-content\/uploads\/2021\/03\/movirec-client-example-1.png 972w, https:\/\/www.canarie.ca\/wp-content\/uploads\/2021\/03\/movirec-client-example-1-300x281.png 300w, https:\/\/www.canarie.ca\/wp-content\/uploads\/2021\/03\/movirec-client-example-1-768x721.png 768w\" sizes=\"auto, (max-width: 972px) 100vw, 972px\" \/><\/p>\n<p>Pour sortir du contenant trtclient sans le fermer, enfoncez les touches\u00a0CTRL-p CTRL-q. Il demeurera ouvert afin que vous puissiez vous en resservir plus tard.<\/p>\n                  <\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n\n<section class=\"section section--text-columns no-background\">\n    <div class=\"grid-container\">\n      <div class=\"grid-x grid-padding-x\">\n        <div class=\"cell\">\n                  \t<h3>Cl\u00f4ture<\/h3>\n                    <p>Quand vous aurez fini d\u2019explorer la Solution type, fermez l\u2019application pour lib\u00e9rer les ressources de la GPU afin que les autres participants de l\u2019ATIR puissent s\u2019en servir.<\/p>\n<p>Allez \u00e0 <strong>Projects &gt; Orchestration &gt; Stacks<\/strong>, s\u00e9lectionnez la pile correspondante et cliquez <strong>Delete Stacks<\/strong>, en haut (voir la figure ci-dessou). De cette fa\u00e7on, vous supprimerez la pile et l\u2019instance de la GPU qui y est associ\u00e9e. Cela devrait vous prendre moins d\u2019une minute.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-39852\" src=\"https:\/\/www.canarie.ca\/wp-content\/uploads\/2023\/08\/movie07.png\" alt=\"\" width=\"936\" height=\"496\" srcset=\"https:\/\/www.canarie.ca\/wp-content\/uploads\/2023\/08\/movie07.png 936w, https:\/\/www.canarie.ca\/wp-content\/uploads\/2023\/08\/movie07-300x159.png 300w, https:\/\/www.canarie.ca\/wp-content\/uploads\/2023\/08\/movie07-768x407.png 768w\" sizes=\"auto, (max-width: 936px) 100vw, 936px\" \/><\/p>\n                  <\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n\n<section class=\"section section--text-columns no-background\">\n    <div class=\"grid-container\">\n      <div class=\"grid-x grid-padding-x\">\n        <div class=\"cell\">\n                  \t<h3>Consid\u00e9rations d&rsquo;ordre technique<\/h3>\n                    <p>Cette partie d\u00e9crit ce qu\u2019il faut prendre en compte quand on utilise ou adapte la Solution type.<\/p>\n<h3>D\u00e9ploiement<\/h3>\n<p>La Solution type est d\u00e9ploy\u00e9e sur un serveur d\u2019inf\u00e9rence TensorRT, mais le mod\u00e8le TensorFlow pourrait \u00eatre employ\u00e9 directement dans un environnement de production sans exportation du mod\u00e8le ni exploitation d\u2019un tel serveur. TensorRT est g\u00e9n\u00e9ralement plus efficace avec une unit\u00e9 de traitement graphique (GPU) et \u00e9tablit des pr\u00e9visions plus vite que les solutions de rechange.<\/p>\n<p>Dans la Solution type, l\u2019application cliente et le serveur d\u2019inf\u00e9rence se trouvent sur le m\u00eame h\u00f4te, pour plus de simplicit\u00e9. Cependant, il est plus courant d\u2019utiliser des h\u00f4tes diff\u00e9rents, ce qui n\u00e9cessitera l\u2019ouverture des ports correspondants afin qu\u2019ils communiquent entre eux.<\/p>\n<h3>Solutions de rechange<\/h3>\n<p>Plut\u00f4t que TensorFlow, on pourrait b\u00e2tir et former le mod\u00e8le avec\u00a0<a href=\"https:\/\/pytorch.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">PyTorch<\/a>, autre cadre populaire d\u2019apprentissage machine reposant sur Python et compatible avec le serveur d\u2019inf\u00e9rence TensorRT. Vous trouverez sur Internet de nombreuses analyses comparant l\u2019un et l\u2019autre. En voici quelques-unes\u00a0:\u00a0<a href=\"https:\/\/awni.github.io\/pytorch-tensorflow\/\" target=\"_blank\" rel=\"noopener noreferrer\">Awni Hannin: PyTorch or TensorFlow?<\/a>,\u00a0<a href=\"https:\/\/medium.com\/@UdacityINDIA\/tensorflow-or-pytorch-the-force-is-strong-with-which-one-68226bb7dab4\" target=\"_blank\" rel=\"noopener noreferrer\">TensorFlow or PyTorch: The Force is Strong with Which One?<\/a>,\u00a0<a href=\"https:\/\/towardsdatascience.com\/pytorch-vs-tensorflow-spotting-the-difference-25c75777377b\" target=\"_blank\" rel=\"noopener noreferrer\">PyTorch vs. TensorFlow \u2014 Spotting the Difference<\/a>\u00a0et\u00a0<a href=\"https:\/\/www.developereconomics.com\/tensorflow-vs-pytorch\" target=\"_blank\" rel=\"noopener noreferrer\">The Battle: TensorFlow vs Pytorch<\/a>.<\/p>\n<h3>Architecture des donn\u00e9es<\/h3>\n<p>La Solution type repose sur un jeu de donn\u00e9es constitu\u00e9, dans ce cas, d\u2019un simple fichier texte. Plusieurs points doivent \u00eatre pris en consid\u00e9ration eu \u00e9gard aux donn\u00e9es, aux \u00e9l\u00e9ments du code qui en d\u00e9pendent, \u00e0 la fa\u00e7on de l\u2019\u00e9largir et aux pratiques exemplaires.<\/p>\n<p>Les deux composants principaux qui exploitent directement le jeu de donn\u00e9es sont le pipeline qui met derni\u00e8res en m\u00e9moire pour former le mod\u00e8le et l\u2019application cliente qui formule les pr\u00e9visions (titres de films). Ces composants devront \u00eatre modifi\u00e9s si on change l\u2019architecture des donn\u00e9es. Par exemple, on pourrait stocker les informations dans une base de donn\u00e9es qui, soit serait vers\u00e9e dans un fichier avant que le pipeline actuel le traite, soit \u00e0 laquelle le code puiserait directement. Le code de l\u2019application cliente, par exemple, pourrait verser les donn\u00e9es d\u2019un fichier ou d\u2019une base de donn\u00e9es dans un tableau de hachage ou consulter la base de donn\u00e9es \u00e0 chaque demande.<\/p>\n<p>Pour enrichir les donn\u00e9es avec de nouveaux utilisateurs ou longs m\u00e9trage, on devra former le mod\u00e8le \u00e0 nouveau. Dans un environnement de production, la solution pr\u00e9voirait un recyclage p\u00e9riodique du mod\u00e8le et ne proposerait de recommandations personnalis\u00e9es qu\u2019apr\u00e8s fois que l\u2019utilisateur aura recouru assez souvent au syst\u00e8me pour que celui-ci ait accumul\u00e9 les donn\u00e9es requises. Habituellement, les projets de ce genre proposent des recommandations g\u00e9n\u00e9rales sur des th\u00e8mes populaires avant de passer \u00e0 des recommandations plus personnalis\u00e9es.<\/p>\n<p>Enfin, puisque les donn\u00e9es pourraient incorporer des renseignements personnels sur l\u2019utilisateur, le d\u00e9veloppeur qui cr\u00e9e une solution similaire devra respecter les pratiques en usage sur la gestion des donn\u00e9es sensibles. Le module de formation, par exemple, n\u2019a besoin que de l\u2019identifiant, pas du nom de l\u2019utilisateur ni d\u2019autres renseignements. Cependant, pour formuler les pr\u00e9visions, l\u2019application devra pouvoir d\u00e9terminer de quel utilisateur il s\u2019agit (ouverture d\u2019une s\u00e9ance, par exemple), lui attribuer une identit\u00e9 et en faire de m\u00eame avec les longs m\u00e9trages. On appliquera donc les pratiques reconnues par l\u2019industrie aux composants qui recueillent les donn\u00e9es des utilisateurs, les emmagasinent, s\u2019en servent pour former le mod\u00e8le et puisent dans les donn\u00e9es pour convertir l\u2019identifiant en texte ordinaire.<\/p>\n<h3>S\u00e9curit\u00e9<\/h3>\n<p>Apr\u00e8s d\u00e9ploiement, il existe un l\u00e9ger risque que des gens mal intentionn\u00e9s acc\u00e8dent \u00e0 l\u2019environnement de la Solution type pour la modifier et organiser une cyberattaque (par d\u00e9ni de service notamment). On att\u00e9nuera ce risque en \u00e9pousant les pratiques exemplaires de l\u2019ATIR concernant le d\u00e9ploiement de scripts, c\u2019est-\u00e0-dire\u00a0:<\/p>\n<ul>\n<li>\u00e9tablir des r\u00e8gles qui interdisent l\u2019acc\u00e8s \u00e0 tous les ports, sauf le port 22 du SSH de l\u2019instance qui a \u00e9t\u00e9 d\u00e9ploy\u00e9e, dans le pare-feu;<\/li>\n<li>contr\u00f4ler les acc\u00e8s afin que seuls les participants de l\u2019ATIR puissent d\u00e9ployer et utiliser une instance de la Solution type apr\u00e8s authentification.<\/li>\n<\/ul>\n<p>Pour diminuer encore plus les risques, on suivra les recommandations que voici :<\/p>\n<ul>\n<li>utiliser les contr\u00f4les de s\u00e9curit\u00e9 qui ont \u00e9t\u00e9 d\u00e9ploy\u00e9s sans les modifier;<\/li>\n<li>une fois qu\u2019on en a fini avec la solution de r\u00e9f\u00e9rence, la supprimer comme on l\u2019a expliqu\u00e9 plus haut (section \u00ab cl\u00f4ture \u00bb).<\/li>\n<\/ul>\n<p>Employ\u00e9e de fa\u00e7on autonome, la Solution type ne consomme pas directement les ressources du r\u00e9seau ni des installations de stockage en cours d\u2019ex\u00e9cution. Aucune proc\u00e9dure n\u2019est donc n\u00e9cessaire pour r\u00e9guler ces ressources.<\/p>\n<h3>R\u00e9seau<\/h3>\n<p>Les clients peuvent consulter le serveur d\u2019inf\u00e9rence au moyen des protocoles HTTP ou gRPC (Google Remote Procedure Call). Il n\u2019y a aucune autre consid\u00e9ration sp\u00e9cifique au r\u00e9seau.<\/p>\n<h3>Mise \u00e0 l\u2019\u00e9chelle<\/h3>\n<p>La Solution type utilise un mod\u00e8le passif. En d\u2019autres termes, le m\u00eame mod\u00e8le peut \u00eatre d\u00e9ploy\u00e9 sur de nombreux serveurs d\u2019inf\u00e9rence, ce qui permet d\u2019implanter une architecture standard tr\u00e8s \u00e9volutive qui acceptera de multiples demandes parall\u00e8les et un \u00e9quilibreur qui r\u00e9partira la charge entre les serveurs.<\/p>\n<h3>Disponibilit\u00e9<\/h3>\n<p>Le serveur d\u2019inf\u00e9rence TensorRT incorpore une API qui veille \u00e0 ce que le serveur puisse r\u00e9pondre aux demandes d\u2019inf\u00e9rence. Il est donc possible d\u2019ajouter le serveur comme un h\u00f4te ordinaire dans une architecture ax\u00e9e sur une forte disponibilit\u00e9 et de pointer l\u2019\u00e9quilibreur sur l\u2019API du serveur pour qu\u2019il bloque les demandes, change d\u2019h\u00f4te ou en d\u00e9marre un nouveau quand l\u2019intensit\u00e9 des activit\u00e9s sur le serveur le justifie.<\/p>\n<h3><span lang=\"EN-CA\">Interface utilisateur (IU)<\/span><\/h3>\n<p>L\u2019interface de la Solution type se r\u00e9sume \u00e0 une ligne de commande qui met en relief le programme en arri\u00e8re-plan. L\u2019IU variera en fonction de l\u2019usage qu\u2019on en fait, mais cela d\u00e9borde du propos de notre exemple.<\/p>\n<h3>API<\/h3>\n<p>L\u2019interface du protocole d\u2019application est en code Python ordinaire. Elle est structur\u00e9e de fa\u00e7on modulaire et est accompagn\u00e9e de commentaires explicites. Le d\u00e9veloppeur pourra s\u2019en inspirer pour cr\u00e9er une solution sur mesure.<\/p>\n<h3>Co\u00fbt<\/h3>\n<p>La solution n\u2019exige qu\u2019une instance de GPU dans l\u2019ATIR, ce qui \u00e9quivaut \u00e0 environ 100 $ par mois dans un nuage public.<\/p>\n<h3>Licence d\u2019exploitation<\/h3>\n<p>Toutes les biblioth\u00e8ques utilis\u00e9es par la Solution type sont de source ouverte. Il en va autant pour le code du Recommandeur de films. Le jeu de donn\u00e9es MovieLens peut \u00eatre utilis\u00e9 \u00e0 des fins non lucratives sous certaines conditions. Voir les informations concernant les licences d\u2019exploitation ci-dessous. Vous devrez vous conformer aux dispositions des diff\u00e9rentes licences avant d\u2019exploiter, de modifier, d\u2019\u00e9largir ou de diffuser l\u2019un ou l\u2019autre composant de la Solution type.<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/tensorflow\/tensorflow\/blob\/master\/LICENSE\" target=\"_blank\" rel=\"noopener noreferrer\">Licence de TensorFlow<\/a><\/li>\n<li><a href=\"https:\/\/docs.nvidia.com\/cuda\/eula\/index.html#abstract\" target=\"_blank\" rel=\"noopener noreferrer\">Licence de CUDA<\/a><\/li>\n<li><a href=\"https:\/\/docs.nvidia.com\/deeplearning\/sdk\/inference-bsd\/index.html#license\" target=\"_blank\" rel=\"noopener noreferrer\">Licence du serveur d\u2019inf\u00e9rence TensorRT<\/a><\/li>\n<li><a href=\"https:\/\/code.cloud.canarie.ca:3000\/carlamb\/MovieRecommender\/src\/master\/LICENSE\" target=\"_blank\" rel=\"noopener noreferrer\">Licence du Recommandeur de films de la Solution type<\/a><\/li>\n<li><a href=\"http:\/\/files.grouplens.org\/datasets\/movielens\/ml-100k-README.txt\" target=\"_blank\" rel=\"noopener noreferrer\">Licence de MovieLens 100k<\/a><\/li>\n<li><a href=\"http:\/\/files.grouplens.org\/datasets\/movielens\/ml-1m-README.txt\" target=\"_blank\" rel=\"noopener noreferrer\">Licence de MovieLens 1M<\/a><\/li>\n<li><a href=\"http:\/\/files.grouplens.org\/datasets\/movielens\/ml-20m-README.html\" target=\"_blank\" rel=\"noopener noreferrer\">Licence de MovieLens 20M<\/a><\/li>\n<\/ul>\n<h3>CODE SOURCE<\/h3>\n<p>On trouvera le code source de la Solution type <a href=\"https:\/\/github.com\/DAIR-ATIR-Code\/Carla-Margalef-Bentabol---MovieRecommender\">ici<\/a>. Veuillez lire le fichier <a href=\"https:\/\/github.com\/DAIR-ATIR-Code\/Carla-Margalef-Bentabol---MovieRecommender\/blob\/master\/README.md\" target=\"_blank\" rel=\"noopener noreferrer\">README.md<\/a>\u00a0pour savoir comment le cloner et utiliser le d\u00e9p\u00f4t de donn\u00e9es.<\/p>\n<h2>Glossaire<\/h2>\n<table border=\"1\">\n<tbody>\n<tr>\n<td><strong>Expression<\/strong><\/td>\n<td><strong>Description<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>API<\/strong><\/td>\n<td>Interface de protocole d\u2019application<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/fr.wikipedia.org\/wiki\/Apprentissage_profond\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>Apprentissage profond<\/strong><\/a><\/td>\n<td>M\u00e9thode d\u2019apprentissage machine faisant appel aux r\u00e9seaux neuronaux<\/td>\n<\/tr>\n<tr>\n<td><b><strong>ATIR<\/strong><\/b><\/td>\n<td>Acc\u00e9l\u00e9rateur technologique pour la recherche et l\u2019innovation. Se rapporte au projet pilote lanc\u00e9 \u00e0 l\u2019automne 2019.<\/td>\n<\/tr>\n<tr>\n<td><strong>CUDA<\/strong><\/td>\n<td><em>Compute Unified Device Architecture<\/em>.\u00a0<a href=\"https:\/\/developer.nvidia.com\/about-cuda\" target=\"_blank\" rel=\"noopener\">Mod\u00e8le de programmation et plateforme de calcul en parall\u00e8le de NVIDIA<\/a><\/td>\n<\/tr>\n<tr>\n<td><b><a href=\"https:\/\/fr.wikipedia.org\/wiki\/Filtrage_collaboratif\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>Filtrage collaboratif<\/strong><\/a><\/b><\/td>\n<td>Technique employ\u00e9e par les\u00a0<em>syst\u00e8mes de recommandation\u00a0<\/em>pour pr\u00e9voir automatiquement ce qui pourrait int\u00e9resser l\u2019utilisateur apr\u00e8s avoir recueilli des donn\u00e9es sur les go\u00fbts ou les pr\u00e9f\u00e9rences d\u2019autres utilisateurs (collaborateurs).<\/td>\n<\/tr>\n<tr>\n<td><b>GPU<\/b><\/td>\n<td>Unit\u00e9 de traitement graphique. Dispositif autorisant un traitement ultra performant des donn\u00e9es en parall\u00e8le<\/td>\n<\/tr>\n<tr>\n<td><b>IU<br \/>\n<\/b><\/td>\n<td>Interface utilisateur<\/td>\n<\/tr>\n<tr>\n<td><strong>Syst\u00e8me de recommandation ou recommandeur<\/strong><\/td>\n<td>Mod\u00e8le d\u2019apprentissage machine qui pr\u00e9voit la \u00ab\u00a0note\u00a0\u00bb qu\u2019un utilisateur attribuera \u00e0 un article ou ses \u00ab\u00a0pr\u00e9f\u00e9rences\u00a0\u00bb. Il sugg\u00e8re des articles pertinents \u00e0 l\u2019utilisateur.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n                    <div class=\"button-group\">\n              \t\t\t\t  \t<a class=\"button-border-blue\" href=\"https:\/\/www.canarie.ca\/fr\/nuage\/propulseurs\/catalogue\/plan-de-vol-lapprentissage-machine-applique-a-un-systeme-de-recommandation-automatique\/\" target=\"_self\">Plan de vol <\/a>\n    \t\t\t    \t\t\t    \t\t\t<\/div>\n    \t\t\t        <\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Solution type : Recommandeur de films Si ce n\u2019est d\u00e9j\u00e0 fait, lisez le Plan de vol du Propulseur,&nbsp;L\u2019apprentissage machine appliqu\u00e9 [&hellip;]<\/p>\n","protected":false},"author":19,"featured_media":0,"parent":19466,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-19484","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Solution type : Recommandeur de films - CANARIE<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.canarie.ca\/fr\/nuage\/catalogue\/plan-de-vol-lapprentissage-machine-applique-a-un-systeme-de-recommandation-automatique\/solution-type-recommandeur-de-films\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Solution type : Recommandeur de films - CANARIE\" \/>\n<meta property=\"og:description\" content=\"Solution type : Recommandeur de films Si ce n\u2019est d\u00e9j\u00e0 fait, lisez le Plan de vol du Propulseur,&nbsp;L\u2019apprentissage machine appliqu\u00e9 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.canarie.ca\/fr\/nuage\/catalogue\/plan-de-vol-lapprentissage-machine-applique-a-un-systeme-de-recommandation-automatique\/solution-type-recommandeur-de-films\/\" \/>\n<meta property=\"og:site_name\" content=\"CANARIE\" \/>\n<meta property=\"article:modified_time\" content=\"2024-10-30T13:50:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.canarie.ca\/wp-content\/uploads\/2021\/03\/1-MovieRecommender-691x1024.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.canarie.ca\\\/fr\\\/nuage\\\/catalogue\\\/plan-de-vol-lapprentissage-machine-applique-a-un-systeme-de-recommandation-automatique\\\/solution-type-recommandeur-de-films\\\/\",\"url\":\"https:\\\/\\\/www.canarie.ca\\\/fr\\\/nuage\\\/catalogue\\\/plan-de-vol-lapprentissage-machine-applique-a-un-systeme-de-recommandation-automatique\\\/solution-type-recommandeur-de-films\\\/\",\"name\":\"Solution type : Recommandeur de films - CANARIE\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.canarie.ca\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.canarie.ca\\\/fr\\\/nuage\\\/catalogue\\\/plan-de-vol-lapprentissage-machine-applique-a-un-systeme-de-recommandation-automatique\\\/solution-type-recommandeur-de-films\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.canarie.ca\\\/fr\\\/nuage\\\/catalogue\\\/plan-de-vol-lapprentissage-machine-applique-a-un-systeme-de-recommandation-automatique\\\/solution-type-recommandeur-de-films\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.canarie.ca\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/1-MovieRecommender-691x1024.png\",\"datePublished\":\"2021-03-09T21:01:44+00:00\",\"dateModified\":\"2024-10-30T13:50:09+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.canarie.ca\\\/fr\\\/nuage\\\/catalogue\\\/plan-de-vol-lapprentissage-machine-applique-a-un-systeme-de-recommandation-automatique\\\/solution-type-recommandeur-de-films\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.canarie.ca\\\/fr\\\/nuage\\\/catalogue\\\/plan-de-vol-lapprentissage-machine-applique-a-un-systeme-de-recommandation-automatique\\\/solution-type-recommandeur-de-films\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.canarie.ca\\\/fr\\\/nuage\\\/catalogue\\\/plan-de-vol-lapprentissage-machine-applique-a-un-systeme-de-recommandation-automatique\\\/solution-type-recommandeur-de-films\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.canarie.ca\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/1-MovieRecommender-691x1024.png\",\"contentUrl\":\"https:\\\/\\\/www.canarie.ca\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/1-MovieRecommender-691x1024.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.canarie.ca\\\/fr\\\/nuage\\\/catalogue\\\/plan-de-vol-lapprentissage-machine-applique-a-un-systeme-de-recommandation-automatique\\\/solution-type-recommandeur-de-films\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.canarie.ca\\\/fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Le nuage de l&#8217;ATIR\",\"item\":\"https:\\\/\\\/www.canarie.ca\\\/fr\\\/?page_id=44361\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Catalogue des Propulseurs de l\u2019ATIR\",\"item\":\"https:\\\/\\\/www.canarie.ca\\\/fr\\\/?page_id=6557\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Plan de vol : l\u2019apprentissage machine appliqu\u00e9 \u00e0 un syst\u00e8me de recommandation automatique\",\"item\":\"https:\\\/\\\/www.canarie.ca\\\/fr\\\/nuage\\\/catalogue\\\/plan-de-vol-lapprentissage-machine-applique-a-un-systeme-de-recommandation-automatique\\\/\"},{\"@type\":\"ListItem\",\"position\":5,\"name\":\"Solution type : Recommandeur de films\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.canarie.ca\\\/#website\",\"url\":\"https:\\\/\\\/www.canarie.ca\\\/\",\"name\":\"CANARIE\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.canarie.ca\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Solution type : Recommandeur de films - CANARIE","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.canarie.ca\/fr\/nuage\/catalogue\/plan-de-vol-lapprentissage-machine-applique-a-un-systeme-de-recommandation-automatique\/solution-type-recommandeur-de-films\/","og_locale":"fr_FR","og_type":"article","og_title":"Solution type : Recommandeur de films - CANARIE","og_description":"Solution type : Recommandeur de films Si ce n\u2019est d\u00e9j\u00e0 fait, lisez le Plan de vol du Propulseur,&nbsp;L\u2019apprentissage machine appliqu\u00e9 [&hellip;]","og_url":"https:\/\/www.canarie.ca\/fr\/nuage\/catalogue\/plan-de-vol-lapprentissage-machine-applique-a-un-systeme-de-recommandation-automatique\/solution-type-recommandeur-de-films\/","og_site_name":"CANARIE","article_modified_time":"2024-10-30T13:50:09+00:00","og_image":[{"url":"https:\/\/www.canarie.ca\/wp-content\/uploads\/2021\/03\/1-MovieRecommender-691x1024.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.canarie.ca\/fr\/nuage\/catalogue\/plan-de-vol-lapprentissage-machine-applique-a-un-systeme-de-recommandation-automatique\/solution-type-recommandeur-de-films\/","url":"https:\/\/www.canarie.ca\/fr\/nuage\/catalogue\/plan-de-vol-lapprentissage-machine-applique-a-un-systeme-de-recommandation-automatique\/solution-type-recommandeur-de-films\/","name":"Solution type : Recommandeur de films - CANARIE","isPartOf":{"@id":"https:\/\/www.canarie.ca\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.canarie.ca\/fr\/nuage\/catalogue\/plan-de-vol-lapprentissage-machine-applique-a-un-systeme-de-recommandation-automatique\/solution-type-recommandeur-de-films\/#primaryimage"},"image":{"@id":"https:\/\/www.canarie.ca\/fr\/nuage\/catalogue\/plan-de-vol-lapprentissage-machine-applique-a-un-systeme-de-recommandation-automatique\/solution-type-recommandeur-de-films\/#primaryimage"},"thumbnailUrl":"https:\/\/www.canarie.ca\/wp-content\/uploads\/2021\/03\/1-MovieRecommender-691x1024.png","datePublished":"2021-03-09T21:01:44+00:00","dateModified":"2024-10-30T13:50:09+00:00","breadcrumb":{"@id":"https:\/\/www.canarie.ca\/fr\/nuage\/catalogue\/plan-de-vol-lapprentissage-machine-applique-a-un-systeme-de-recommandation-automatique\/solution-type-recommandeur-de-films\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.canarie.ca\/fr\/nuage\/catalogue\/plan-de-vol-lapprentissage-machine-applique-a-un-systeme-de-recommandation-automatique\/solution-type-recommandeur-de-films\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.canarie.ca\/fr\/nuage\/catalogue\/plan-de-vol-lapprentissage-machine-applique-a-un-systeme-de-recommandation-automatique\/solution-type-recommandeur-de-films\/#primaryimage","url":"https:\/\/www.canarie.ca\/wp-content\/uploads\/2021\/03\/1-MovieRecommender-691x1024.png","contentUrl":"https:\/\/www.canarie.ca\/wp-content\/uploads\/2021\/03\/1-MovieRecommender-691x1024.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.canarie.ca\/fr\/nuage\/catalogue\/plan-de-vol-lapprentissage-machine-applique-a-un-systeme-de-recommandation-automatique\/solution-type-recommandeur-de-films\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.canarie.ca\/fr\/"},{"@type":"ListItem","position":2,"name":"Le nuage de l&#8217;ATIR","item":"https:\/\/www.canarie.ca\/fr\/?page_id=44361"},{"@type":"ListItem","position":3,"name":"Catalogue des Propulseurs de l\u2019ATIR","item":"https:\/\/www.canarie.ca\/fr\/?page_id=6557"},{"@type":"ListItem","position":4,"name":"Plan de vol : l\u2019apprentissage machine appliqu\u00e9 \u00e0 un syst\u00e8me de recommandation automatique","item":"https:\/\/www.canarie.ca\/fr\/nuage\/catalogue\/plan-de-vol-lapprentissage-machine-applique-a-un-systeme-de-recommandation-automatique\/"},{"@type":"ListItem","position":5,"name":"Solution type : Recommandeur de films"}]},{"@type":"WebSite","@id":"https:\/\/www.canarie.ca\/#website","url":"https:\/\/www.canarie.ca\/","name":"CANARIE","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.canarie.ca\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"}]}},"_links":{"self":[{"href":"https:\/\/www.canarie.ca\/fr\/wp-json\/wp\/v2\/pages\/19484","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.canarie.ca\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.canarie.ca\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.canarie.ca\/fr\/wp-json\/wp\/v2\/users\/19"}],"replies":[{"embeddable":true,"href":"https:\/\/www.canarie.ca\/fr\/wp-json\/wp\/v2\/comments?post=19484"}],"version-history":[{"count":4,"href":"https:\/\/www.canarie.ca\/fr\/wp-json\/wp\/v2\/pages\/19484\/revisions"}],"predecessor-version":[{"id":44507,"href":"https:\/\/www.canarie.ca\/fr\/wp-json\/wp\/v2\/pages\/19484\/revisions\/44507"}],"up":[{"embeddable":true,"href":"https:\/\/www.canarie.ca\/fr\/wp-json\/wp\/v2\/pages\/19466"}],"wp:attachment":[{"href":"https:\/\/www.canarie.ca\/fr\/wp-json\/wp\/v2\/media?parent=19484"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}