 Bonsoir Montréal-Piton! Good evening Montreal-Piton and welcome to Montreal-Piton 89, Giant Totem. Bienvenue à Montréal-Piton 89, Totem géant. Notre programme pour ce soir va consister de... Si je vais pouvoir vous en parler, avant de parler du programme, bien sûr, je vais vous rappeler. Joignez-vous à nous sur Slack. Vous avez lu l'HRL ici, mtlpipoint.org, slash fyr slash slack in. On est dans le canal meeting. Please join us on Slack. We are in the meeting channel and the URL to join the Montreal-Piton Slack is there. If you do not join the Slack, you can always ask questions on the YouTube live stream comments and we will be sure to address those. And we have a code of conduct tonight on our code de conduct ce soir. And our code of conduct is pretty simple. It basically says that we want you to be all excellent between one another. If you see something that doesn't feel excellent, find me, Yannick, or edit, who is edit on Slack, and we will do our best to remedy the situation. Alors notre code de conduite est assez simple. Ça dit qu'on doit être excellent les uns envers les autres. Et puis si vous voyez quelque chose qui vous semble pas excellent, vous pouvez trouver moi, Yannick, ou edit sur Slack. Et dites-nous là, et on va se faire de notre mieux pour résoudre la situation. Notre programme pour ce soir, et il va constituer de deux présentations techniques. On va avoir Christian qui va nous parler de profilage de modèle TensorFlow qui roule sur le GPU. Et puis on va avoir André Roberge qui va nous parler de rendre les traces d'exception plus lisibles, plus user-friendly. J'en parle pas en français. Et puis ensuite, on va avoir un appareil virtuel sur GT, en vidéo conférence. Donc on vous invite tous à aller vous chercher un rafraîchissement et à vous rejoindre à nous pour une discussion plus informelle, peut-être plus technique, si ça vous tente, si on tombe dans le moins technique. Notre programme pour ce soir va être de deux présentations techniques. Tout d'abord, Christian va parler de modèles TensorFlow qui se tournent sur le GPU. Vous vous souvenez que Christian nous a dit de profiler le code Python quelques mois plus tard. Et maintenant, on va avoir une approche plus profilée. Et puis André Roberge va nous parler de comment faire des traces d'exception plus user-friendly en utilisant les traces d'exception. Après ça, on va avoir un appareil virtuel sur GT, en vidéo conférence. Et vous êtes tous invitées à nous rejoindre, aller y avoir votre rafraîchement préféré et on va avoir une discussion plus informale, peut-être plus technique, ou plus technique. C'est tout pour vous. Nos futurs événements pour Monterall Python. D'abord, demain, on va avoir le second evening of programming focusing on AI and machine learning. Jules est going to invite us to join him and do a little bit of live coding to use... What is he going to use? I forget. He's going to use a Python machine learning library to see if we can find a pattern, a correlation between the external temperature and the energy consumption of one of our Monterall Python organizers. Very interesting stuff. Monterall Python 90 is going to be in January. So we're going to take a break for December, do holidays with families and things like that. It's going to be on, yes, January 17 and Nicolas Christian is going to be there to tell us about the world of visualization in Python. As usual, follow us on Facebook, on LinkedIn and on Meetup. And we have our calendar of events here that is kind of outdated because you see it's saying 2021. Now we don't have a calendar for events yet for 2022 and that's why I'm talking to you because you can help us make that calendar. We're always looking for volunteers if you want to run events with us. It can be our monthly meetings, do technical presentations, it can be programming sprints, it can be translation sprints like we just did last month and it is just going to tell us about that or anything else that you have in mind that would be interesting to do as a group that is Python related. Please join our team, help us flesh up this 2022 calendar. I think we're going to have a lot of fun together next year. Alors, comme je disais, nos événements à venir. On va avoir une soirée de pratique de programmation demain avec Jules et on va parler d'apprentissage automatique ou d'intelligence artificielle et il va utiliser, je pense que c'est CycoteLearn ou une librairie d'apprentissage machine similaire pour voir s'il y a une corrélation entre la température extérieure et puis la consommation hydroélectrique d'un de nos organisateurs à Montréal-Piton. Fantastique. Problem à résoudre. Le Montréal-Piton 90, Uranium-Floral, va être le 17 janvier, donc on prend un break pour décembre. Et à Montréal-Piton 90, on va avoir Nicolas Christian, le CEO de Plotli, qui va venir nous parler de l'environnement des librairies de visualisation en Python. Comme toujours, suivez-nous sur Facebook, sur LinkedIn, sur Meetup pour voir nos événements en futur. Et puis vous avez le lien ici vers notre calendrier 2021. C'est pas vraiment un jour, on devrait parler du calendrier 2022. Et puis c'est pour ça que je vous parle ce soir parce qu'on a besoin de vos bras pour nous aider à faire des événements. Donc si ça vous intéresse de faire des rencontres techniques mensuelles comme on fait ce soir, de parler, de faire des sprints de programmation, de traduction, quoi que ce soit, joignez-vous à nous, vous avez le signe ou un petit message sur Slack ou par courriel et puis on va voir quel genre d'événement on peut faire ensemble en 2022. Et donc, comme je parlais de sprints de programme, de sprints de traduction et qu'on vient juste d'en faire un, je vais inviter Edith à nous parler de comment ça s'est passé. Bonsoir, Edith. Bonsoir, Nick. Ça va bien? Ça va super bien. Donc pour le 3, c'est le printemps de traduction de la documentation officielle d'hôpitaux de l'anglais vers le français. C'est le 3ème, déjà. Ça passe bien? Oui. Et le 2ème de cette année, même. On a traduit What's New. On a traduit Auto-Up. On a traduit Functions qui n'est pas un module mais qui est dans la section librairie, quand même. Library. Et on a aussi traduit XML E3 une partie. Super. Et puis, on s'est amusé. On a appris du piton. On s'est posé plein de questions sur la terminologie. Et on a fait connaissance. C'est excellent. Excellent. Et bien, il semble que ça a été un événement fructifiant. Ça se dit de fructifiant, je sais pas. Mais mon... Productif, peut-être? Productif. Ah! On voit qu'il fait de la vraie traduction. Donc on doit mettre un événement productif. Et les gens qui se disent ah! Mais ça a changé. J'ai manqué ça. Ça me semblait être époustouflant. Comment? Est-ce que je pourrais participer aux prochains sprints de traduction? Est-ce qu'on a un prochain sprint d'annoncer, déjà? Je pense pas, non. Ben non. On va tenter justement de travailler sur le calendrier 2022. Dans tous les cas, ça va probablement être annoncé soit on a aussi une chaîne spécifique qui s'appelle A4-DUX-PITON-FR sur le Slack. Ou tout le monde est bienvenu de poser des questions au fur et à mesure. Je veux dire, même en dehors des sprints, c'est ce que je veux dire par au fur et à mesure. Et puis sinon, les prochains sprints ont été annoncés probablement sur le blog sur le site de Montréal-Piton. Ou sur mes top et ou sur mes top. Espérons-le les deux. C'est super, ça. Ben merci beaucoup, Edith. Ça fait plaisir. Excellent. Et puis avant qu'on passe à nos présentations techniques, je dois dire un gros merci à nos partenaires. Il y a FGNR qui nous aide en hébergeant nos systèmes de vidéoconférence qu'on a utilisés pour le Sprint de Traduction. Donc merci beaucoup FGNR. Et puis qu'on va utiliser encore ce soir pour notre apéro virtuel. Ben merci beaucoup FGNR. Et cette photo-là aussi du serpent qui semble hypnotisant qui a été pris par Edith par mon casse. Je m'excuse, Edith, de prononcer ton nom probablement incorrectement mais ton oeil de photographe est catapultant. Merci à nos partenaires FGNR qui a hosté notre système de vidéoconférence que nous avons utilisé pour le Sprint de Traduction et que nous allons utiliser aujourd'hui pour notre heureuse Python picture. C'est suffisant pour moi. Maintenant, on va commencer avec Christian. Christian a appris à programmer quand il était un enfant. Je ne sais pas comment il était mais il avait utilisé un TRS-80 et puis un Commodore 64. Je ne sais pas si vous avez utilisé le Commodore 64 mais c'était un un. Mais c'était un bon computers. Et puis il a découvert à service now and he's going to tell us about how to profile machine learning models that are running in the GPU. Christian, je te passe la parole. Merci Yannick. Thank you. It's a small correction actually but on the previous title. So I'll be talking more about PyTorch than TensorFlow but I mean everything applies to any of these frameworks and I'm also joined last minute by my cat so there's an interruption I apologize for this in advance but let me just share my slides. There you go. That's great. And let me get the present interview also useful. Great. So yeah, let's get started. So one of the main uses of Python these days is machine learning for AI. So this tends to run on GPUs and as soon as you get your first like complex deep learning AI model working you'll probably wish it would train faster or run faster in some ways. So the goal of this talk is to help you with that. So in the talk we'll talk we'll talk about general principles. Some of these will overlap with my previous profiling talks so that might be recommended not necessarily prerequisite but recommended watching if you want to learn more about profiling in general we'll discuss the NVIDIA system profiler all the GPUs is still means pretty much NVIDIA so like we would be discussing NVIDIA tooling the relevant one for this kind of work and then we'll demonstrate common sources of slowness so you can benefit from my experience doing this in AI models and how they would show up in these profiles we'll focus mostly on training time because that's usually what takes the longest but we'll yeah the learnings will also apply to prediction time if you want to speed that up and to even non AI workloads on GPUs if you're running some of those as I mentioned the examples will be in PyTorch but all of these will be applicable to other libraries like TensorFlow or whatever your favorite library is I'd yeah if possible unless there's something that's preventing you from understanding something right now I'd prefer the questions would be at the end and by the way also we'll have code examples and you might might go over so some of these quickly but the last slide will include a link to the whole slides and I'll stay there stay there for a little bit for the questions so it would be a good slide to take a snapshot of and I'll upload the slides are not uploaded now but there will be uploaded within a couple days and also a small note so if you have been trying to buy like a new PC and you've been trying to buy a gaming GPUs you know that's kind of complicated so it's also complicated and also expensive for like even the AI GPUs but my suggestion would be to you if you're not working at a place that has like GPUs available for you to try this all the cloud providers can rent you a GPU like and you can even grab like one of the older ones and they'll be fine for like smaller models or to try these things out rent a GPU don't buy one or like even I think some of the cloud providers have like free notebook usage where you can get the GPU for a couple of hours that would be a good way to try this and a lot easier than finding a GPU these days so first how do we go about this what do we do what kind of thinking should we be doing before we start doing so this is a similar pitch to what I made in my other talk but like if you get just one thing from this talk or my previous one or both of them and this encourages you to learn to use a profiler like that would be already an excellent start like I if you re-enter programming people usually it's usually taken for granted that you know like tools like a version control system probably an ID et cetera but somehow profilers haven't made that cut and tool like learn this but I'm telling you like if you're concerned about speed like learn a profiler it'll make things a lot easier and so we'll be there are two kinds of profilers useful for this we're concerned about GPU code so the right tool for this one of the main tools is NVIDIA inside systems so actually NVIDIA offers three kinds of profilers there's inside systems here inside compute and inside graphics inside graphics is if you're using a GPU as its original purpose which was to translate little 3D models of polygons into a screen very fast that's not our concern here and then NVIDIA compute would be useful if you're writing your own NVIDIA like CUDA kernel to run on GPU so if you're writing CUDA code and you want to optimize that kernel that's the tool for you but most of the time in ML AI on GPUs you'll be using higher level libraries like PyTorch or TensorFlow that have all the kernels you would possibly want to use to run these models so like you probably won't need inside compute either and then inside system is the whole system profiler so you can launch it on a system and it'll tell you it'll sample the running of all the CPUs and all the GPUs and then we'll be able to dig in into the sources of slowness there's another tool you might come across if you search on the internet called nvproff and you should use nvproff because it's deprecated by NVIDIA the last supported architecture is Volta which is now four years old and so inside system started with 2016 and up architecture so unless you're using a really old architecture now there's no reason to learn that one and the other difference between this current tool and nvproff is that this one scales to much bigger workload so if you're sampling for filers so every microsecond or millisecond they'll figure out what stopped the system very briefly to see what's happening and so create a bunch of evans and so there's a with the visualisation tool this one is made to work with 50 million plus events like 2 gigabytes of streaming data which the other one was limitation and then Python profilers are still also useful like if you want to learn more about that c'est le premier spring sur Montréal Python. Ouais, et ça s'occupe de ces trois profilers, des autres, les fréquences et les fréquences. Ces sont utiles pour ce genre de travail, parce que certains de ces codes seront toujours en Python, et vous voulez probablement faire un profiler Python pour voir si le code Python pop-up est un botnec. Et puis, si ça pop-up, ça vous donnera une compréhension d'où est-ce que le code Python est super bref, comme ces trois profilers relevant, le code Python est celui que j'ai commencé avec. Il donne des reportages html, et qu'il peut aussi être utilisé comme décorateur. Donc si vous voulez profiler, comme flask, request code, ce genre de choses. Scaling donne l'infos profilé de l'info. Et donc, en tout cas, cette fonction est en train de prendre autant de temps. Ça vous donnera une ligne par ligne, ce qui peut être utile. Et ça aussi supporte l'info de l'info de l'info. Donc si vous avez des problèmes de l'info, dans votre code Python, ça vous montre où la consommation de l'info est incroyable. Et puis Python, la cool chose de Python c'est que vous pouvez le faire sur un programme existant. Donc si vous avez une production, vous pouvez, c'est un peu comme le top, ou quelque chose comme ça, mais comme pour votre programme Python. Et puis, avant de profiler, nous devons aussi prendre soin de préparer les choses. Donc, vous voulez pouvoir l'interagir rapidement, parce que vous, basiquement, vous formez une hypothèse sur ce qu'il y a, confirmez-vous avec l'info, et puis, changez le code, et vous voyez, ensuite, roulez une autre fois l'info, pour voir si l'info est fixé, et le plus rapide, le plus rapide, vous allez faire progresser. Et aussi, une autre raison, pourquoi vous voulez speed-up votre iteration, c'est parce que vous utilisez un profiler de sample, donc, à un moment, ces outils vont aller de la mémoire, ou on va être en train d'attirer, avec les weight de les traces, qu'ils accumulent, comme le nombre d'évents. Donc, la suggestion avec NVIDIA Insight Systems, est d'avoir environ 5 minutes de run, ou moins. Et si vous avez fait de l'AIML, vous savez que votre temps de train n'est probablement pas 5 minutes, donc, je vous recommande, avant de commencer, à speed-up votre speed d'attiration, vous... Lorsque vous resterez à un petit subset de votre set de date, et puis, peut-être, un train d'époche aussi, quelque chose pour que l'attiration soit plus rapide, et puis, en même temps, que le temps d'attiration dans l'époche est multiplié par un 1000, quelque chose comme ça, si vous vous rendez le nombre d'époches et le nombre d'évents de dates. Et aussi, vous voulez probablement simplifier votre code, donc, si vous avez hyperparameter, surge, autres, comme intermachine, paralysme, comme si vous pouvez mettre des choses dans quelque chose d'étranges, dans une seule machine, ça va être plus facile de travailler avec la trace profite. Et autre chose que vous voulez, si vous voulez des mesures répétables, surtout si vous êtes en train de rouler sur un système de cloud, votre workload peut avoir un patch de différents types de GPU ou de CPU, pour un peu de temps. Donc, toutes ces choses vont avoir un moyen de configurer, comme, généralement, vous demandez pour le nombre de souvenirs, le nombre de GPUs et de GPUs. Donc, évidemment, tout ça devrait être fixé, mais même la architecture de GPU et la architecture de CPU vont avoir un impact sur le profil. Donc, vous voulez faire un point de vue dans le système et comment fixez-vous pour obtenir les mêmes mesures comme possible d'une fois à l'autre. Et le point de vue bonus, autre potentiellement utile d'idée, si vous allez changer votre code, peut-être que vous voulez un petit test d'exemples à l'end, pour faire que votre modèle n'a pas changé, dans un moyen que les outils de votre modèle n'ont pas changé quand vous faites des changements sur le code, parce que les changements doivent être à la vitesse du code et de ne pas changer l'outil. Et la dernière chose super utile, vous voulez ajouter des annotations sur votre code. Nvidia vous aide. Il y a un library nvtx qui est fait pour ce genre de choses. Donc, il est fait pour être rapide, donc vous pouvez potentiellement le laisser dans le prod. Et donc, avec PyTorch, tous les libraries vont tenter de la surface en quelque façon. Avec PyTorch, il y a un package nvtx d'important Torch CUDA et puis avec PyTorch 1.8+, vous pouvez utiliser simplement le standard Python. Vous pouvez l'utiliser comme un décorateur ou, bien sûr, l'application de l'application mais avec le statement. Et puis, vous vous donnez un nom et ce nom je vais vous montrer dans le profil. Donc, des choses intéressantes pour annoter, c'est le modèle d'initialisation sur le modèle d'initialisation, chaque mini-batch quand vous processer pour envoyer le modèle et puis sur chaque mini-batch votre pass forward quand vous vous faites le modèle d'initialisation pour obtenir l'initialisation et puis le pass en arrière quand vous competez le modèle d'initialisation. Et donc, et puis le test à la fin, généralement, à la fin, quand vous trainez le modèle, vous l'étiez sur un test-set. Et donc, tous ces dans le profil vont aider, vont faire un profil beaucoup plus utile pour vous à l'avant. Et c'est super. C'est facile de faire. Super, rapidement. Also, word to focus. I talk about this in my other talk too, but like you need to think you need to focus your efforts where it matters, like if you're focusing your effort on a 5% of the code and the runtime, then if even if you put infinite it for it and you make it that that that code run with zero seconds. And let's say you had a runtime 100 seconds and you're focusing on that 5 seconds. So you can only get something that's like 95 seconds and to the run which is not what you want. So like go with the biggest chunk and then you can figure out OK, if I make this twice as fast, three times as fast with the impact and that help you focus on the interesting parts. Then in my previous talk, I mentioned the importance of building a model of the system to allow you to formulate hypothesis on why things are slow. And basically, yeah, the model can be very complicated. These things, the modern CPUs are complicated GPUs also. But this is kind of the good enough model where you'll have basically something very slow to medium if you have you're lucky to have SSD but you have data set storage feeding to CPU for usually pre processing and then feeding to the GPU for the actual model part. And the key thing to notice about this is that you're going to something that's slow to something that's faster to something that's much faster. And so it doesn't matter if you speed up your GPU code, if you work all the time on your GPU code, if the bottleneck is like Python code on the CPU or dataset loading, all your efforts will be wasted. And so the first thing you should do when you have a profile is to check where the bottleneck is with that model in mind. And so the first lesson that I got, like profiling code at work was to keep up with the GPU. So talking about bottlenecks the GPU is super fast at lots of cores. The CPU is slower. We'll have fewer cores that do more general things. But like it's very possible, especially if you never looked at a profile that your GPU is struggling to be fed data. And then this is the time where I'll switch to actually show you the tool and example profiles. Just give me a couple of seconds to stop sharing my screen, pop my already existing inside systems and share again. Yes, this is the right one. So this is what the tool looks like when you have a profile loaded into it. Actually, I'll zoom out. We will filter. So this is my whole training run. I trim the training time to take about 90 seconds. You can see here all the single GPUs. You can see all the compute kernels running. So you'll have like GEMM is general matrix multiply some matrix multiplication kernels. You'll see also all the memory accesses. So memset, if you don't know, will set memory to a constant. And then these are memory copies between NVIDIA lingo host and device host will be the CPU's memory. Device will be the GPU memory. So already, this gives you an overhead of you of what your GPU is doing or not doing. And then you have similarly for the fighting code, you have a view of the CPU being used. Christian, please allow me to interrupt here. Yes, this is fantastic. But the resolution of your monitor is obviously much greater than what goes on the live stream. So the labels and the graphics themselves are very small. Do you think you could lower the resolution of your screen? If it's hard about it, it's easy. I think that would really help to convey the information you're trying to convey. Yes. But actually, I was planning on zooming in. So it will probably be a lot easier to read. Let me know if it's still the case. I'll zoom in to like one one very small slice of this. Perfect. Let's so you can highlight here. Right click and then say zoom into selection. Is this better? That is better. That is better. I will let people comment on YouTube if that is not sufficient. But now we can definitely see that we I still cannot really read the labels. But since you're explaining it well, I think. Yes, I'll go. Yeah, I'll go over the the labels. Basically, you have the thank you. Yeah, it's all the things that I mentioned to labels. So the huge label here is all the training time. Il y a un label de la fin qui est testé. C'est le model de train sur le set de la date. Et vous pouvez voir qu'à l'intérieur de tous ces labels est la duration en secondes. Et donc je zoom. Dans le début de la temps de la training. Donc comme vous voyez ici, j'ai envoyé le model sur le devise, qui a pris 6 secondes. Et vous devez garder en compte que toutes ces choses avant la route de la training sera faite seulement une fois pendant la route de la training sera faite 100, 500, 1000 fois sur le set de la date. Donc, en tant que pas de minutes ou heures, c'est bien. Et ensuite, vous voyez que j'ai labelé toutes les étapes de la training. J'ai fait plusieurs étapes parce que j'ai appris le set de la date beaucoup. Donc vous voyez que la training est 0 à 100. Et le couvercle est un peu plus grand. Donc j'espère que ça fonctionne. Et ensuite, vous voyez la computation de la prochaine batch. La passée de la prochaine qui est très vite et la passée de la prochaine. Et ensuite, donc, de cet profil, comme une chose intéressante, vous pouvez voir que sur le GPU ici, il y a beaucoup de espace blanc en-delà de... Donc c'est ce que j'ai fait c'est le GPU en trainant sur une mini batch, sur un petit subset de la date. Et ensuite, il y a un grand nombre de espace blanc ici. Et puis, likewise, sur la prochaine. Donc ça signifie que la CPU ne peut pas délivrer le data fast enough pour le GPU pour le garder. Et je vais vous montrer l'autre exemple juste pour montrer le contexte switch. Et donc, comme pour celui-ci, en fait, ce que vous voulez faire c'est que vous regardez votre code de code qui peut avoir un Python. Et une chose commune, au moins, avec le load de l'enseignement de PyTorch, c'est un concept de data loader. Donc, une chose très facile pour vérifier est que le load de data va avoir un nombre de things de CPU. Parfois, c'est peut-être une ou ce n'est pas assez grand. Et donc, vous pouvez utiliser plusieurs CPUs pour speeder ça avec de la multiprocessing, au moins, en case de PyTorch. Ce serait vraiment un fixe très facile. Et si vous n'avez pas regardé ce numéro pour votre load de data, peut-être que votre CPU est le bottleneck et vous ne le savez pas. Ça peut être un win très facile. Et ensuite, je vais régler les slides après pour sauver une screen switch. Mais l'une des autres outils est d'être compte sur le transfert de data pour les GPUs et m'aider à présenter un petit peu plus de l'outil. Et je vais déjà zoomer, je vais zoomer juste un petit peu. Et puis je vais zoomer en bas. Alors vous pouvez voir comme tous les kernels sont en train et puis tous les transferts. Et vous pouvez voir dans celui-ci, le test est en train de prendre un très long temps. Donc, et vous pouvez vouloir zoomer dans celui-ci. Et donc, je vais zoomer dans un petit peu. Et donc, vous pouvez voir le réquest du couple de memoriaire ici. Et puis vous voyez la memoriaire qui est copiée ici. Et donc, si vous vous demandez pour... c'est déjà fait. Je pense que je vais vous montrer dans un autre. Si vous fais une pièce, alors ça va vous présenter ici. Et donc, nous le verrons tous les copies de memoriaire. Et je ne sais pas on sait pourquoi ce n'est pas... Oh oui, c'est la troupette. Donc, si vous... Si vous zoomez sur celui-là, oui. Donc, vous pouvez voir la troupette pour ce transfert. Vous pouvez voir le temps début de transfert, la troupette à la fin de transfert. La taille, donc, c'est 2 kilobytes qui sont transférés. Et puis la troupette, donc 1 gigabyte par seconde. Et donc, c'est plus rapide que les USB 2 flash drives. Et donc, probablement, ça veut dire que vous êtes transférés. Je vais vous montrer dans le slide. Mais oui, comme ça, la troupette à la fin de transfert est clairement une troupette à la fin de transfert. Et c'est comme juste, comme avec simple, comme le tour et l'utilisation simple de l'utilisation. Vous pouvez déjà trouver ces troupettes à la fin de transfert très rapidement. Et je n'ai pas d'expert dans les outils par le sens, mais comme juste un outil très simple, vous pouvez trouver toutes ces choses. Réparer les outils qui peuvent vous prendre un moment pour trouver. Je vais remercier ma présentation, pour parler un peu plus sur ça. Je vais partager mon écran. Oui. S'il vous plaît, s'il vous plaît, je suis dans la mode présenter. J'espère que je ne vais pas. Vous n'êtes pas dans la mode présenter, c'est parfait. Merci. Donc, oui, c'est l'autre take-away que j'ai fait. Si vous n'avez pas de transfert de données de la CPU à la GPU en grandes chansons, c'est aussi un outil basé qui peut être facile à fixer. C'est un graphe que j'ai construit ensemble, et je vais expliquer la histoire très rapidement après-midi. Mais c'est comme si vous trouviez l'appareil de la mémoire avec ce que je pense que c'était un BOLTA device, comme en termes de transfert de la taille. Vous pouvez voir que si vous êtes transférant un petit nombre de bytes ou kilobytes, ce truc va être très lent, et il faut être transféré, à la fois, comme 100 kilobytes ou un megabyte, pour atteindre la vitesse complète. Donc, si vous faites plusieurs petits transferts, ça va faire un grand impact, pour les batcher dans un petit nombre de plus grands transferts. Et, en fait, juste super rapidement, c'est le mot pour chercher des choses et essayer de faire des choses. Donc, j'ai construit ce graphe comme je l'avais demandé. OK, donc, comme mon transfert de la mémoire, comment beaucoup de problèmes c'est, c'est bien de savoir. Et juste cherchez rapidement, et j'ai trouvé un sample de CUDA qui actually provides a bandwidth test. Je compile ça, j'ai mis les numéros en spreadsheet, et puis je savais que le transfert de la taille était un problème, en tout cas, et je savais que c'était nécessaire pour aller au moins vite. Et puis, la dernière chose, une chose d'amélioration facile est que si le Python s'occupe dans votre profil, c'est probablement aussi un problème, car le GPU est très rapide. Donc, c'était un exemple du code de pi sur le code. Et vous pouvez voir que le temps de rentage était 58 secondes. Et puis, 31 secondes était le call d'under iter qui était comme l'interator pour charger le dataset. Donc, si vous avez déjà paralysé votre data loader et que vous avez toujours Python en montrant un portion signifique de votre profil, c'est à dire que c'est le temps de profiler votre code Python. Je vous invite à mon autre parler encore pour plus de ça. Et puis, ces trois pourront se couvrir à la plupart des bases, et je vais rapidement faire ça plus vite, comme si vous avez fait ça. Il y a encore des outils que vous pouvez atteindre. Donc, si vous avez fait sûr que le CPU n'a pas été battu par quelque chose d'autre, et que vous avez encore vu des outils dans votre profil, vous pouvez faire plus de CPU plus bizarre par faire plus de paralyses. Donc, un moyen de faire ça c'est d'établir le data transfert avec le processage. Donc, c'est un exemple dans PyTorch, mais une idée similaire dans le temps de flow, etc. Donc, vous pouvez, oui, pour exemple, si vous avez un usage commun pour le data loader, c'est juste le data loader avec le data set et le batch size, mais si vous demandez de pinner la mémoire dans la mémoire de la CPU, donc la mémoire ne physically ne bouge. Vous pouvez demander à Kuda pour faire le transfert dans un façon non bloquant. Donc, vous pouvez commencer à faire un transfert dans la mémoire pendant que c'est décomputé et un deuxième transfert. Et puis, si vous n'avez pas assez de GPU, vous pouvez même overlapre plusieurs processings. Donc, peut-être que vous puissiez une mini-batch pendant que vous puissiez la passée en arrière de 1 mini-batch. Oui, ça ne fonctionne pas, en fait. Mais vous pouvez couler dans plusieurs mini-batches et couler en processant avec des streams. Et c'est un exemple de comment faire ça. Donc, par défaut, il y a Kuda et NVIDIA qui ont des détails de vous et il y a un stream. Et toutes les opérations attendent à la fin d'un stream avant de commencer le prochain. Et c'est un modèle très facile à travailler avec. Mais si vous voulez faire quelque chose de plus avancé, vous pouvez échanger pour les streams. Ils doivent être exposés dans toutes les libraries. Donc, vous pouvez définir différents streams. Et puis, vous pouvez manualement les synchronisation entre ces streams. Et donc, faire différents streams en parallèle pour garder votre visite de GPU. Donc, pour les further études, comme si vous... Oui, il y a d'autres outils. Vous pouvez échanger pour le toolbox. Donc, pour PyTorch, par contre, il y a un profilé de PyTorch en 1.8.1 et mieux. Donc, ce n'est pas le plus puissant d'un NVIDIA Insight System. Mais si vous avez besoin de quelque chose, c'est quelque chose que vous pouvez échanger pour. Et aussi, d'autres outils sur PyTorch, comme, par exemple, PyTorch Lightning. Donc, si vous n'êtes pas heureux avec la performance que vous avez avec un GPU, outils comme PyTorFlighting font que c'est super facile de faire des trainings multi-GPU, des trainings distributaires, et aussi, de faire des tests sur Flot16, plutôt qu'à Flot34, sur Flot64, avec des numéros plus petits de FlotingPoint, le computateur se débrouille plus vite en mémoire. Et aussi, il y a des outils comme PyTorch, qui permettent de prendre le Python de l'équation de votre modèle, ce n'est pas trop dynamique, et de faire les mêmes blocs de compute sous la coude. Vous pouvez aussi faire plus sur le GPU. Donc, si vous êtes préprocessant comme le bottleneck, il y a beaucoup de libraries maintenant qui travaillent sur le GPU. Donc, c'est intéressant de chercher les rapides.ai, rapides.ai. Donc, c'est NVIDIA, un appareil supporté de l'appareil d'open source comme Pandas-compatible, DataFrame, NumPy-compatible, Arrays, dont vous n'aurez pas besoin si vous utilisez PyTorch. Il y a aussi des choses de machine-learning. Si vous faites vision de computer, il y a des libraries pour faire préprocessing sur le GPU, etc. Comme si vous cherchez pour NVIDIA CudaX, vous allez trouver une page web ou cliquer sur le lien. Quand vous avez les slides, vous allez trouver une page web qui liste tous ces. Et aussi, si votre Python est un bottleneck, vous pouvez faire un faster Python avec NumBaJet. Donc, il y a un NumBaJet décorateur et il y a aussi NumBa nowadays qui supporte Cuda. Donc, il y a un NumBa.Cuda.Jet décorateur si vous pouvez même rouler à droite. Vous voulez convertir un code simple, un code numérique dans Cuda sans apprendre à programmer Cuda dans C++. Donc, merci. Un couple de slides seront disponibles ici. Et d'ailleurs, service.now, ma compagnie est aussi sur le lien. Donc, si vous allez sur ce lien, vous allez voir une liste de toutes les positions disponibles qui incluent des positions en matériel et des positions remote. Donc, je serai heureux de prendre des questions. Merci, Christian. Et je vais vous remercier qui va être notre moderator pour les questions pour aujourd'hui. Et je vous remercie à tous. Vous pouvez vous poser vos questions dans le chat YouTube livestream ou sur Slack si vous êtes sur Slack. Je pense que t'es muté, Edith. Merci. Merci. Je me dis que merci pour le grand chat. Je ne vois pas des questions pour maintenant. Donc, je veux juste remercier les gens que si vous avez des questions, s'il vous plaît, s'il vous plaît sur les commentaires YouTube ou en général ou en meeting sur Slack. Si vous avez des questions ou des commentaires, vous pouvez les écrire soit dans les commentaires sur YouTube, dans les chaînes générales et meetings sur le Slack de Montréal-Piton. Et puis, et puis, c'est ça. Donc, je vais attendre un peu. Et on va voir si on a des questions. Mais peut-être que c'était très clair ce qui est toujours un avantage. Je pense que ça va être ça, Yannick. Est-ce que, Christia, est-ce que tu restes avec nous pour l'apéro virtuel après? Oui, je reste un petit peu. OK. Donc, si vous avez des questions plus tard. Oui, exactement. On va voir tes poses à ce moment-là. Super. Super. Bien, merci beaucoup, Christian. Merci beaucoup, Edith. Et c'est le temps de passer à notre prochaine présentation. Donc, notre prochain présentateur est André Robertge. André, qui a passé presque 30 ans, ou au-dessus de 30 ans. Mes notes me font défaut ici dans le milieu universitaire. Il a appris à programmer en Python comme un passe-temps en 2004. Et puis, depuis ce temps-là, c'est son passe-temps principal. Il travaille surtout en Python sur des outils pour aider les novices à mieux comprendre ce qu'est-ce qui se passe ou à mieux se lancer dans la programmation au Python. Et aujourd'hui, il va nous parler de Friendly Traceback, qui est un outil pour mieux voir, mieux comprendre ce qu'il se passe dans ces traces d'exception-là. Et bien, André, je te passe la parole. Merci beaucoup. Alors, je vais partager mon écran. J'ai l'écran. Alors, je vais surtout preceder par des démonstrations. Je vais voir un peu de mots en anglais et là-bas. Mais attention à l'interview des codes, pas les détails. Surtout les détails sont pas nécessairement importants. C'est vraiment pour vous donner une saveur de ce qu'est Friendly et Friendly Traceback. Et j'ai décidé de vivre dangereusement en précédent avec des démonstrations. Alors, première démonstration, je suis utilisé ici Python 3.9. Je vais faire mon introduction. Et ça va mal parce que j'ai déjà une première erreur comme ceci. Alors, je suis débutant. C'est quoi cette chose-là? Ce que je vais faire, je vais utiliser Friendly en monétaire actif. Alors, Tire I, monétaire actif. M pour Friendly. Et je vais exécuter un programme. Et voilà, ça me donne un traceback. Et on voit ici en bas. Did you mean to use a normal quote? Either single quote or double quote. Et ça souligne ici dans le traceback qu'on voit des couleurs, les caractères qui sont problématiques. Alors, ce que je peux faire, je suis débutant, je ne sais même pas c'est quoi, c'est ici. C'est une taxe erreur. Qu'est-ce que c'est? Alors, ça me dit, si c'est taxe erreur occurs, on va de Python, cannot understand your code. OK, c'est bien ça. D'autres exemples. Alors, ça, ça va dire celui qui est arrivé. Mais supposons que j'avais lu à quelque part, comme, par exemple, Unbound Local Error. Alors, ça, ça m'expliquerait ce que c'est que Unbound Local Error et des possibilités de résolution. Alors, c'est bien le texte en anglais. Je fais une présentation présentement en français. Alors, je vais changer juste pour voir et répéter. Et voilà, j'ai mon explication en français. Ceci étant dit, si je reviens au début, j'ai encore ce problème-ci. Alors, chez, c'est quoi qu'une erreur de syntaxe? Pourquoi est-ce que j'ai eu ça? Pourquoi? Alors, si ça me ment si j'utilisais le copier-coller, ça te indique que j'ai étudié un caractère unicode qui n'était pas permis. Je vais changer la langue rapidement en anglais et répéter. Pourquoi? Did you use copy-paste? Oui, effectivement, j'ai copié d'un document word, des caractères unicodes qui n'étaient pas les guillemets habituels. Alors, ça, c'est un exemple. Je vais quitter ici de Printed Raceback. Je vais faire un autre exemple avec... Je vais procéder avec Python encore une fois. Je vais faire l'exemple, un. Alors, si j'ai une erreur, syntaxe-er, ça me dit pas grand-chose avec Python 3.9, vous avez peut-être tendance de parler que Python 3.10 a des améliorations au point de vue des erreurs. Alors, je vais... J'utilise Python 3.10 ici. On va aller à exemple un. Et ça me dit, maybe you want to use double equal or colon equal instead of equal. Alors, j'ai un indice qui m'est donné par Python. Je peux peut-être demander à Printed Raceback de faire la même chose. Et ça me donne un indice ici formulé différemment. Je l'ai pu faire en français. En fait, je peux et de poser la question. Oui, et ça va me dire l'explication ici. J'ai utilisé un opérateur d'effections peut-être que je voulais utiliser opérateur d'égalité ou l'opérateur d'effections augmentées. Alors, ça, c'est avec 3.10. Maintenant, ces indices-là de Python ici, ce qui est rejetant 3.10, c'est bien, mais c'est pas tout le monde qui travaille avec 3.10. Il y en a qui sont limités à avoir Python 3.6. Alors, qu'est-ce qu'il arrive si j'utilise friendly avec 3.10? Avec 3.6, pardon. Il y a la même information. Sauf que ici, ça me suggère d'utiliser l'opérateur d'égalité et non pas l'opérateur de... ce qu'on appelle en anglais de Walrus operator. Et... Pourquoi est-ce que ça ne me l'a pas suggéré? Si je sais de faire ça, par exemple. Ah! C'est-à-dire, the augmented assignment operator is not allowed in Python version 3.6. Why? Et ça va me dire que l'opérateur de requiert l'utilisation de Python 3.8 ou plus récent plus que j'utilise la version de 3.6. Alors, ça, c'est un exemple d'utiliser pour des erreurs de syntaxe. Je vais quitter ici. Je vais faire un autre exemple. Attendez, un instant. Je vais... OK, je vais aller avec 3.10 ici. Et je vais faire l'exemple 2. Les erreurs sont beaucoup améliorées en 3.10. Ça me dit syntaxe. Closing parenthesis does not match open parenthesis on line 1. Alors ici, j'ai une erreur à la ligne 14 de mon programme puis quelque chose à la ligne 1. Ce qui est bien, alors je pourrais aller lire dans mon programme pour voir ce qui se passe. Je pourrais le faire avec 3.10 pour friendly. Mais en fait, je vais aller ici à 3.6 pour le faire juste pour montrer. Alors ça, c'est l'exemple 2. Alors, l'erreur à 3.6, un texte invalid, mais je peux demander qu'est-ce qui s'est passé. Et ça me dit, the closing parenthesis does not match the opening square bracket on line 1. Alors, j'ai l'information sur la ligne 14, ligne 1, et j'ai ici le code qui me montre exactement ce lequel, lequel qui n'était pas équipement un à l'autre. Je pourrais demander what ici. J'ai fait une erreur de frappe ici. What avec deux T. Did you mean what? Oui, je voulais dire what. Alors, je demande what. Oh, ça c'est a name error. Alors, j'ai fait une erreur de frappe. Qu'est-ce que je vais faire? Ben, friendly enregistre une petite histoire. Alors, je peux voir history. Et je peux voir les deux dernières erreurs ici. Je peux retourner en arrière. On peut voir maintenant que l'histoire a seulement l'erreur de syntaxe. Et là, je pourrais me reprendre et poser la question what et d'avoir la réponse ici. Donc, travailler à une console comme ceci c'est pas toujours convivial en raison des erreurs de frappe. Mais on a des opportunités de se rattraper ici quand même. Alors, je vais faire un troisième exemple. Un petit peu différent. Je vais aller avec ton 3.10. Je vais prendre l'exemple 3. Alors, si j'ai un trace back que je vais souligner ici, de la façon traditionnelle, j'ai des lignes de code ici et lignes de code ici. Alors, ça c'est 3.10. Il y a une nouvelle version qui est en version alpha 2, 3.11 de Python que je vais mettre ici. Alors, je vais refaire Python. C'était l'exemple 3. Et 3.10, 3.11 est un développement souligne les endroits où ils pourraient, où les erreurs sont concentrés. Donc, ce n'est pas le more return, ce n'est pas le print. C'est vraiment cet endroit-ci. Alors, je peux faire la même chose avec Friendly. Alors, Friendly a pas du tout adapté, utilisé tout ce qui est disponible de Python 3.11. Mais, déjà de lui-même, alors, je vais montrer ce bac ici. Je pourrais poser la question where et il souligne les endroits où il y a des problèmes et ça me permet d'identifier ici. J'ai Sequence, qui est une liste avec trois éléments. J'ai Last Index 3, qui est ici. Et je vois qu'il y a peut-être un problème ici. Alors, je pourrais demander, je vais faire le ça en français, Y. Et ça me dit que j'essaie d'obtenir l'élément avec l'indice 3 de Sequence, qui est une liste de longueur 3. Les indices valibles sont seulement les entiers de moins 3 à 2. Alors, ça me permet d'identifier ce problème ici. Comme vous voyez, ici, j'ai seulement Execution Stopped Online 6. Je pourrais traduire ça en français. En fait, je pourrais le Db de Vrem. Non, c'est juste que je vais faire where. Alors, l'exécution, c'est arrêté à la ligne 6 du fichier ici puis l'exception de level à ligne 4. Et, si j'ai vraiment un long trace back que j'ai plusieurs j'ai des pages, j'ai des pages, et le programme, c'est arrêté et l'endroit où l'exécution est élevée parce que c'est vraiment les deux endroits qui sont importants pour quelqu'un qui écrit un programme pour identifier c'est quoi la cause de l'erreur. Sauf, pour les choses plus détaillées, ça peut être quelque chose d'intermédiaire, mais généralement pour les débutants, c'est les deux endroits importants. Alors, ça c'est avec 3.11. Je peux refaire la même chose que pour import Exemple 3. Alors, je suis à piton 3.6 ici et même à piton 3.6 juste pour confirmer que c'est le 3.6 c'est piton 3.6.8 Alors, même avec ça je peux avoir la même information avec les endroits ici. J'ai importé ici un peu un problème. Alors, ça me dit où était le problème. Alors, l'innocé de n'importe le programme et où l'exception a été soulevée. Un autre exemple, je vais prendre piton 3.9 ici. Les débutants apprennent la programmation souvent en utilisant le module turtle et je vais faire ici une erreur qui est très commune. J'ai essayé d'exécuter c'est peut-être passé clair, on va juste se limiter à ça. J'ai essayé d'exécuter une programme par là. Partie initialise module turtle n'a pas été most likely due to circular import. Un débutant qui voit ça est probablement très intimidé. Voyons comment Franley pourrait aider. Alors, j'ai encore le trace back avec le message intimidant donné par piton mais il y a un indice ici qui m'est donné je l'ai fait en a de la Did you give your programme turtle.py Voyons un peu plus de détails. Je soupçonne que vous avez utilisé le nom turtle.py pour votre programme et que vous vouliez aussi importer un module du même nom de la bibliothèque standard de piton. Si c'est le cas, vous devriez utiliser un nom différent pour votre programme. Je pourrais faire cette correction et voir ce qui arrive. Peut-être que ce message n'est pas assez de l'air pour moi. Alors j'ai besoin de plus d'aide. Je vais consulter le web. Excusez. W3 et non pas W4. Je vais consulter le web et ce qui se passe c'est j'ai mon navigateur 6 ouvert. Je vais ouvrir tout grand. J'ai été dans le moteur de recherche DocDocGo. Le message d'erreur a été copié. C'était le dernier message que j'avais eu, que j'avais mal écrit et ça fait une recherche là-dessus. Je devrais vraiment me reprendre ici. Je vais refaire W3 et d'avoir ici partially mon tutoriel as no attribute FD. Ça me permettrait de trouver l'information que je désire. Ça peut être bien. Non. Une chose qui peut être utile vous utilisez Friendly et vous avez trouvé un petit bug. Ça vous amène à la page avec ici Friendly Trace Pack où vous pouvez entrer votre titre et donner les commentaires et me dire qu'est-ce qui devrait être réparé parce qu'il y a un problème. Vous avez également l'opportunité de vous prendre W2V avec l'argument email plutôt que bug et je vous laisse ce que vous pourrez donner. Je vais quitter ça et revenir simplement à la console Friendly ici. Alors je suis à Friendly ici. Je vais commencer c'est-à-dire type Friendly for help on special module methods. En fait, ce qu'il va faire, je vais quitter ici. Je vais montrer que je peux démarrer en français. Tapper Friendly pour obtenir de l'aide. Alors si je tape Friendly, il y a plusieurs fonctions avec une brève explication des clés disponibles. Je pourrai changer l'angle à l'anglais, la voir. Je pourrai aussi changer et ça c'est tout nouveau. It's only from last week que c'est en espagnol. Spanish is now supported partly. Le dernier s'est pas été traduit. Alors ça c'est une possibilité. Maintenant j'ai commencé j'ai fait aucune erreur à venir jusqu'à date. Alors n'ayant fait aucune erreur, si j'utilise W3, ce que ça va me faire, ça va m'amener à la page de documentation de Friendly que je peux explorer. Alors vous avez comment utiliser Friendly avec. En fait, je vais essayer d'agrandir un peu ici about idle, comment utiliser avec idle, avec l'éditeur MU, avec d'autres consoles, avec vous avez la possibilité d'avoir des raiseback de base, des erreurs de syntaxe en espagnol, en français, en italien, les traditions à commencer, différentes versions de piton. Alors juste pour voir aller explorer ceci, je vais aller je vais prendre un ordre. Friendly traceback Python 3.9. Alors vous avez ici je vais le réduire un peu ici, revenir à la base pour voir. Vous avez ici des erreurs comme par exemple attribute error. Alors des examens d'attributes erreurs il y en a ici plusieurs, j'apprends generic instance. Alors vous avez des exemples qui ont été fait ici. Je vous encourage à aller voir et à corriger. If you find something that's poorly explained you think file a bug and tell me how I should explain it better. Vous avez attribute error, file not found error, import error, name error etc. Il y en a plusieurs comme ceci. Alors ça c'est pour les erreurs de base, il y a également pour les erreurs de syntaxe using an import statement. Ici j'avais écrit from math import sin and cos. La solution c'est from import sin, comma cos. Alors il y a je crois c'est 236 exemples différents pour l'instant de démonstration qui sont là. Alors ça c'est la documentation. Maintenant ce que je vais faire je pourrais faire Hi Python ma faite je vais aller directement à jupiterre. J'ai un exemple ici où j'utilise jupiterre. Alors je vais commencer je vais créer une erreur dans jupiterre. Alors j'exécute un code. Alors voilà il y a une erreur. J'aurais pu importer friendly en premier. J'ai l'erreur je vais utiliser friendly maintenant je peux l'importer maintenant et une version spéciale pour jupiterre. From friendly.jupiterre import star. Ça ici ça prend présentement mon ordinateur et surcharger avec avec tout ça. Normalement c'est instantané. Namer name cost is not defined more. Ça me donne la trace back. Je peux dire what qui me donne ici je peux cacher what why qui me donne l'explication alors cost n'existe pas mais peut-être que j'avais cost ou cost parce que j'ai importé le module math et ça me dit également where où est-ce que c'était. Je peux évidemment utiliser les fonctions habituelles why ou je peux utiliser explain qui montre un peu tout en même temps. Alors Sam done the trace back Sam done a un petit indice ici Sam dise qu'une name error ce que c'est on dit l'endroit l'explication no object with a name cost exist vocal scope there's cost and cost defined etc. Ça me donne toute cette information là maintenant ici c'est assez large à l'écran ce que je peux faire à la place si j'avais vraiment j'aurais pu prendre y je peux limiter la largeur et là je prends y ici la largeur a été limitée ici c'est à ça que si j'avais pris explain j'aurais pu avoir quelque chose qui fait mieux à l'intérieur de mon écran et bien sûr ici je peux également poser friendly et voir l'information et à la place de mettre double y j'aurais pu simplement importer un seul object pour importer friendly et là je pourrais faire friendly y et ça me donnera la même explication ou friendly et bien comme ça ou alors comme ça c'est ah c'est il fonctionnera pas ici je vais faire il montre celui qui est déjà en haut et ça me donne l'explication alors ceci vous donne un aperçu de ce que friendly et friendly trace back sont friendly juste pour revenir ici vous avez friendly trace back c'est vraiment tout ce qui fait les explications et tout et c'est ici friendly prend l'information et rajoute du formatage des couleurs selon les environnements où on se trouve et dans la documentation si vous n'aimez pas le fond blanc vous pouvez aller échanger en fond noir alors c'est tout ce que j'avais à présenter merci beaucoup André et je ramène pour modérer nos questions moi je trouvais que c'est une présentation fabuleuse j'ai j'ai personnellement des questions je récris de savoir comment les gens se débrouillent à utiliser friendly pour apprendre à programmer honnêtement je le sais pas moi-même parce que je travaille pas les étudiants je les rends disponibles je sais que le site hackinscience.org qui est développé en principal principalement par Julien Palard qui est impliqué dans la traduction française et puis donc utilise friendly trace pack et Julien m'envoie le courage on dit il y a un cas qui n'a pas été expliqué alors je le rajoute à ma banque c'est lui qui m'a fait la première suggestion de dire quand il y a des erreurs de quelqu'un qui a mal éplié un mot comme j'ai montré alors si c'est lui qui a fait la suggestion de dire j'ai implanté ça alors lui utilise ça alors j'ai pas vraiment de contact avec beaucoup de personnes qui l'utilisent mais je sais que ce site-là c'est futurequarter.io également qui utilise friendly trace pack ok je vous espère pertinence d'avoir ajouté les notebooks Jupyter c'est souvent utilisé nous autres on les ai utilisé entre autres pour les ateliers qu'on a donnés dans les traductions et puis et puis ça l'aide ma question suivante mais je vois qu'il y a des questions dans le chat est-ce que friendly peut fournir des messages d'erreur pour pandas par exemple présentement non j'ai présentement juste pour revenir je suis à la version 0.4.87 mon but à la version 1 c'est d'avoir toutes les erreurs les exceptions les standards de dépitons qui sont couverts présentement ne sont pas toutes couvertes et les erreurs des fonctions de base dans la libérée les standards de dépitons qui sont couverts présentement ne sont pas toutes couvertes et les erreurs des fonctions de base dans la libérée les standards de dépitons toutes les build-ins j'ai simplement commencé quelques-unes pour les value error et type error j'ai pas encore fini alors en premier je me concentre là-dessus et après je vais aller dans pandas ça progresse beaucoup mais il y a beaucoup plus de choses à couvrir que je pensais oui c'est compréhensible bien merci j'ai pas d'autres questions sur Slack n'hésitez pas si vous avez d'autres questions à l'époster soit dans le général meeting sur le Slack de Montréal-Piton ou dans les commentaires sur Youtube et puis il y a plusieurs commentaires d'appréciation pour ce genre d'outil comme quoi c'est utile quand on apprend à programmer d'avoir des erreurs des messages d'erreur plus précisément qui sont informatifs et précis et qui suggèrent moi j'ai j'ai hâte de voir l'évolution Bluetooth je veux dire il y a déjà beaucoup de choses qui étaient faites j'ai l'impression même si on est encore au avant la version 1 oui c'est pas exactement le début-début mais en fait je pourrais l'appeler version 1 parce qu'il est préutilisé il est préutilisé depuis longtemps mais j'ai décidé je me suis dit je vais appeler la version 1 lorsque j'aurai soit dix utilisateurs comme présentement il y a Hack & Science il y a Future Quarter il y a également un autre projet d'edibog qui l'utilise soit ce que j'ai j'ai une dizaine d'utilisateurs puis l'assement là que je sais que le comment dire la LEPI application programmer interface permet aux autres utilisateurs de prendre l'information que ça était bien rodé ou que j'aurais couvert toutes les exceptions que je vais avoir toutes les fonctions built-in de la bibliothèque Python soit un ou l'autre pour la version 1.0 OK, excellent gardez-nous tenez-nous au courant de l'évolution de friendly et puis peut-être qu'il va avoir une autre présentation future à Montréal Python qui sait peut-être si jamais Python, Montréal si jamais il y a une conférence canadienne qui se retrouve à Montréal comme j'ai été la dernière fois je me suis sûr de me déplacer de la Nouvelle-Écosse pour aller faire un tour puis j'espère que j'aurai une présentation qui sera acceptée j'espère que les gens sont à l'écoute de cette de cette bon, il m'en manque désolé oui, suggestion allons-y pour suggestion merci beaucoup est-ce que tu vas être des notes pour la péro virtuelle oui, je vais rester ici un peu plus tôt OK, parfait mais à tout de suite d'accord mais merci beaucoup encore, Edith et André je pense que j'aimerais prendre un 30 secondes pour mettre un point d'enfance sur qu'est-ce que André a mentionné à propos de Python 3.10 qui a vraiment des meilleurs messages d'erreurs surtout pour les erreurs de syntaxe je rentrerai pas dans le détail mais dans Python avant 3.10 vous avez peut-être remarqué que la ligne qui est suggérée quand il y a un message d'erreurs de syntaxe sans rien avoir avec où le compilateur s'est rendu compte qu'il comprenait plus qu'est-ce qu'il se passe c'est vraiment mieux dans 3.10 je vous invite à aller voir peut-être dans le what's new de 3.10 qui est traduit en français comment ça se passe donc merci beaucoup André merci beaucoup Edith j'ai juste 2-3 petites choses à mentionner avant qu'on passe à la péro virtuelle premièrement je veux encore remercier FGNR qui héberge notre péro virtuelle merci beaucoup FGNR deuxièmement qu'est-ce qu'il se passe il y a une soirée de programmation où on va faire de l'apprentissage automatique de l'intelligence artificielle demain soir vous avez toutes les détails sur Meetup si vous allez voir la description du vidéo sur YouTube que vous êtes en train de regarder vous allez avoir toutes les liens sur les événements de Montréal-Piton et autres et vous avez le lien sur Meetup pour joindre la soirée et troisièmement on cherche des gens pour se joindre notre équipe pour faire notre calendrier 2022 si ça vous intéresse de faire des événements de Piton avec nous laissez-nous une petite note soit par courriel soit sur Slack ou pendant la péro virtuelle quand vous allez chercher votre rafraîchissement favori moi ici c'est une bière au chili hatch et c'est tout ce que j'avais mentionné je répète demain on a une soirée programmée pour faire des événements artificiels dans le Piton les détails sont dans la description de cette vidéo sur Meetup et un couple d'autres choses Wow peut-être je serai fermé parce que ma main est totalement mélangée je suis trop inquiétant sur la heure virtuelle mais si vous voulez faire d'autres événements alors laissez-nous une note par email ou sur Slack et sur cette note je vous souhaite une bonne evening et souvenez-vous dans la phase de l'indégrité résistez l'attention d'un guess Bonne soirée tout le monde