<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>OpenAI on Zwindler's Reflection</title><link>https://blog.zwindler.fr/tags/openai/</link><description>Recent content in OpenAI on Zwindler's Reflection</description><generator>Hugo -- gohugo.io</generator><language>fr</language><copyright>Licensed under CC BY-SA 4.0</copyright><lastBuildDate>Tue, 03 Jan 2023 07:15:00 +0000</lastBuildDate><atom:link href="https://blog.zwindler.fr/tags/openai/index.xml" rel="self" type="application/rss+xml"/><item><title>Générer ses images Stable Diffusion sur Ubuntu 22.04</title><link>https://blog.zwindler.fr/2023/01/04/generer-ses-images-stable-diffusion-sur-ubuntu-22.04/</link><pubDate>Tue, 03 Jan 2023 07:15:00 +0000</pubDate><guid>https://blog.zwindler.fr/2023/01/04/generer-ses-images-stable-diffusion-sur-ubuntu-22.04/</guid><description>&lt;img src="https://blog.zwindler.fr/2023/01/stablediffusion.webp" alt="Featured image of post Générer ses images Stable Diffusion sur Ubuntu 22.04" /&gt;&lt;h2 id="lia-et-le-retour-de-la-vengeance"&gt;L&amp;rsquo;IA et le retour de la vengeance
&lt;/h2&gt;&lt;p&gt;Ce n&amp;rsquo;est pas la première fois que je parle de machine learning sur le blog. La première fois, j&amp;rsquo;avais testé pour le fun de selfhost &lt;a class="link" href="https://blog.zwindler.fr/2020/01/13/lancer-aidungeon-2-sur-ubuntu-18-04/" &gt;AIDungeon 2, un jeu de rôle où l&amp;rsquo;histoire est générée par l&amp;rsquo;&amp;ldquo;&amp;ldquo;&amp;ldquo;IA&amp;rdquo;&amp;rdquo;&amp;rdquo;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A l&amp;rsquo;époque, j&amp;rsquo;essayais de jouer à AIDungeon sur l&amp;rsquo;application web disponible en ligne mais le site était très souvent down, car, à cause de l&amp;rsquo;engouement pour le jeu et son côté hyper ludique / technophile, l&amp;rsquo;auteur avait reçu une facture cloud de quelques dizaines de milliers de dollars (et c&amp;rsquo;était pas trop prévu).&lt;/p&gt;
&lt;p&gt;Heureusement, le jeu étant (à l&amp;rsquo;époque) complètement open source, j&amp;rsquo;avais eu l&amp;rsquo;idée de faire un guide pour le lancer soi-même (enfin, fallait quand même un GPU avec 8 Go de VRAM)&amp;hellip;&lt;/p&gt;
&lt;p&gt;Et depuis l&amp;rsquo;an dernier, l&amp;rsquo;IA revient sur le devant de la scène.&lt;/p&gt;
&lt;p&gt;Non, je ne vais pas parler de ChatGPT mais de DALL-E 2. Il faut bien le reconnaitre, a bluffé plus d&amp;rsquo;une personne. Et Dall-e n&amp;rsquo;étant pas open source, il n&amp;rsquo;a pas fallu bien longtemps pour que des alternatives open source voient le jour (avec des résultats souvent moins impressionnant mais quand même).&lt;/p&gt;
&lt;p&gt;Sauf que&amp;hellip; rebelote, les serveurs en ligne sont leeeeeents. Ca serait cool si on pouvait lancer ça en local.&lt;/p&gt;
&lt;p&gt;Ca tombe bien, j&amp;rsquo;ai une machine avec Ubuntu 22.04 et une carte graphique NVidia RTX 3080 hors de prix sous mon bureau 😏😏😏.&lt;/p&gt;
&lt;p&gt;Note: vous avez besoin d&amp;rsquo;une machine avec un GPU avec au minimum 4 Go de VRAM (sinon ça sera en mode CPU et ça sera extrêmement lent), de minimum 20 Go d&amp;rsquo;espace disque pour le modèle et les dépendances et d&amp;rsquo;un compte sur HuggingFace.com pour récupérer le modèle Stable Diffusion.&lt;/p&gt;
&lt;h2 id="installer-les-mises-à-jour-et-les-prérequis"&gt;Installer les mises à jour et les prérequis
&lt;/h2&gt;&lt;p&gt;La première chose à faire dans tout bon guide est évidemment de tout mettre à jour.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get update
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get upgrade
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Normalement sur Ubuntu 22.04 vous devriez avoir Python 3 installé par défaut, il nous faut la version 3.9 ou 3.10 avec les venvs.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install python3.10 python3.10-venv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Si on veut profiter de notre GPU, il va falloir passer par les pilotes officiels nvidia (et pas &amp;ldquo;nouveau&amp;rdquo;).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get install --no-install-recommends nvidia-driver-525 xserver-xorg-video-nvidia-525
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et surtout, il faudra absolument rebooter ensuite (sinon le GPU ne sera pas détecté).&lt;/p&gt;
&lt;h2 id="galères-dinstallation"&gt;Galères d&amp;rsquo;installation
&lt;/h2&gt;&lt;p&gt;Sur AIDungeon j&amp;rsquo;avais pété un plomb, car les dépendances pour tout ce qui est GPU + machine learning et Python sont très capricieuses&amp;hellip;&lt;/p&gt;
&lt;p&gt;Pour ce qui est de Stable Diffusion, à l&amp;rsquo;époque de la sortie j&amp;rsquo;avais trouvé la documentation pas ouffissime et j&amp;rsquo;avais abandonné assez vite. Jusqu&amp;rsquo;à il y a peu il y avait très peu de guides pour l&amp;rsquo;installer facilement sur sa machine.&lt;/p&gt;
&lt;p&gt;La plupart des guides proposaient de le lancer sur des notebooks en ligne (donc hosté quelque part) et c&amp;rsquo;est pas du tout ce que je voulais.&lt;/p&gt;
&lt;p&gt;Heureusement, je suis tombé sur ce post &lt;a class="link" href="https://code.mendhak.com/run-stable-diffusion-on-ubuntu/" target="_blank" rel="noopener"
&gt;The simplest way to get started with Stable Diffusion on Ubuntu&lt;/a&gt;, qui parle d&amp;rsquo;un dépôt git &lt;a class="link" href="https://github.com/lstein/stable-diffusion.git" target="_blank" rel="noopener"
&gt;github.com/lstein/stable-diffusion&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Sauf que ce guide proposait d&amp;rsquo;installer toutes les dépendances avec Anaconda et ne marche plus aujourd&amp;rsquo;hui (problèmes de dépendances python, encore&amp;hellip;).&lt;/p&gt;
&lt;p&gt;Heureusement, rebondissant sur le dépôt mentionné juste avant, je me suis rendu compte que le dépôt avait changé de nom et beaucoup évolué depuis l&amp;rsquo;article sur mendhak.com.&lt;/p&gt;
&lt;p&gt;Le dépôt s&amp;rsquo;appelle maintenant &lt;a class="link" href="https://github.com/invoke-ai/InvokeAI" target="_blank" rel="noopener"
&gt;github.com/invoke-ai/InvokeAI&lt;/a&gt; et dispose de scripts d&amp;rsquo;installation assez poussés et multi plateformes.&lt;/p&gt;
&lt;h2 id="récupérer-linstalleur"&gt;Récupérer l&amp;rsquo;installeur
&lt;/h2&gt;&lt;p&gt;On peut faire l&amp;rsquo;installation via les sources soit même (je donne des infos plus loin) mais le plus simple est de suivre le script d&amp;rsquo;installation, &lt;a class="link" href="https://github.com/invoke-ai/InvokeAI/releases/tag/v2.2.4" target="_blank" rel="noopener"
&gt;disponible dans les &amp;ldquo;releases&amp;rdquo; dans Github&lt;/a&gt; :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;wget https://github.com/invoke-ai/InvokeAI/files/10254727/InvokeAI-installer-2.2.4-p5-linux.zip
unzip InvokeAI-installer-2.2.4-p5-linux.zip &amp;amp;&amp;amp; cd InvokeAI-Installer/
./install.sh
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Vous serez guidé lors du processus d&amp;rsquo;installation, c&amp;rsquo;est assez simple&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Welcome to InvokeAI. This script will &lt;span class="nb"&gt;help&lt;/span&gt; download the Stable Diffusion weight files and other large models that are needed &lt;span class="k"&gt;for&lt;/span&gt; text to image generation. At any point you may interrupt this program and resume later.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;** INITIALIZING INVOKEAI RUNTIME DIRECTORY **
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Select the default directory &lt;span class="k"&gt;for&lt;/span&gt; image outputs &lt;span class="o"&gt;[&lt;/span&gt;/home/zwindler/invokeai/outputs&lt;span class="o"&gt;]&lt;/span&gt;: /home/zwindler/invokeai/outputs
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;...&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A un moment on va vous demander de valider des licences (étape &amp;ldquo;3. Accept the license terms located here&amp;rdquo;). Il faut juste les lire sur le site et appuyer sur entrée pour continuer (j&amp;rsquo;avais pas compris au début&amp;hellip;).&lt;/p&gt;
&lt;p&gt;La dernière étape consiste à générer (&lt;a class="link" href="https://huggingface.co/settings/tokens" target="_blank" rel="noopener"
&gt;ici&lt;/a&gt;) et donner au script un token en &amp;ldquo;read&amp;rdquo; sur votre compte Hugging Face. C&amp;rsquo;est assez simple et ça permet de télécharger automatiquement le dernier modèle de Stable Diffusion.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/01/hugging_face_token.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="lancer-"&gt;Lancer !
&lt;/h2&gt;&lt;p&gt;Une fois installé, on peut lancer le script &lt;code&gt;invokeai/invoke.sh&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;important est que la ligne suivante apparaisse quand vous lancez le script (&amp;ldquo;cuda&amp;rdquo; et pas &amp;ldquo;cpu&amp;rdquo;)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt;&amp;gt; Using device_type cuda
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ce qui est assez cool avec InvokeAI, c&amp;rsquo;est l&amp;rsquo;ajout d&amp;rsquo;une interface web pour faciliter vos générations, même s&amp;rsquo;il existe toujours un prompt terminal si vous préférez :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Do you want to generate images using the
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. command-line
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. browser-based UI
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. open the developer console
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please enter 1, 2, or 3: &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/01/invokeAI_launch.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;A partir de là, vous pourrez générer autant de chats mignons que vous voudrez !&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/01/invokeAI_webui.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/01/invokeAI_cuda.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Have fun :D&lt;/p&gt;
&lt;h2 id="bonus--installation-manuelle"&gt;Bonus : installation manuelle
&lt;/h2&gt;&lt;p&gt;Lors de ma première installation, j&amp;rsquo;avais oublié qu&amp;rsquo;il fallait absolument les drivers officiels nvidia pour faire du cuda sous Ubuntu (alors que j&amp;rsquo;avais eu le même problème pour AIdungeon 🤦). Le script se lançait en mode &amp;ldquo;CPU&amp;rdquo; et la génération de la moindre image prenait 5 minutes&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;* Initialization done! Awaiting your command (-h for help, &amp;#39;q&amp;#39; to quit)
invoke&amp;gt; a cat
Generating: 0%| | 0/1 [00:00&amp;lt;?, ?it/s]&amp;gt;&amp;gt; Ksampler using model noise schedule (steps &amp;gt;= 30)
&amp;gt;&amp;gt; Sampling with k_lms starting at step 0 of 50 (50 new sampling steps)
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 50/50 [05:41&amp;lt;00:00, 6.82s/it]
Generating: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [05:49&amp;lt;00:00, 349.51s/it]
&amp;gt;&amp;gt; Usage stats:
&amp;gt;&amp;gt; 1 image(s) generated in 349.99s
Outputs:
[1] /home/zwindler/invokeai/outputs/000001.3257807215.png: a cat -s 50 -S 3257807215 -W 512 -H 512 -C 7.5 -A k_lms
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;J&amp;rsquo;ai donc tâtonné et essayé d&amp;rsquo;installer l&amp;rsquo;outil &amp;ldquo;à la main&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Si vous ne voulez pas utiliser l&amp;rsquo;installeur pour une raison ou pour une autre, vous pouvez donc aussi utiliser &lt;a class="link" href="https://invoke-ai.github.io/InvokeAI/installation/manual/" target="_blank" rel="noopener"
&gt;cette page de documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;ai essayé, ça marche (mais c&amp;rsquo;était pas mon problème).&lt;/p&gt;
&lt;h2 id="bonus--vérifier-que-votre-gpu-est-bien-détecté"&gt;Bonus : Vérifier que votre GPU est bien détecté
&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;Python 3.10.6 (main, Nov 14 2022, 16:10:14) [GCC 11.3.0] on linux
Type &amp;#34;help&amp;#34;, &amp;#34;copyright&amp;#34;, &amp;#34;credits&amp;#34; or &amp;#34;license&amp;#34; for more information.
&amp;gt;&amp;gt;&amp;gt; import torch
&amp;gt;&amp;gt;&amp;gt; torch.cuda.is_available()
True
&amp;gt;&amp;gt;&amp;gt; torch.cuda.device_count()
1
&amp;gt;&amp;gt;&amp;gt; torch.cuda.get_device_capability()
(8, 6)
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Lancer AIDungeon 2 sur Ubuntu 18.04</title><link>https://blog.zwindler.fr/2020/01/13/lancer-aidungeon-2-sur-ubuntu-18-04/</link><pubDate>Mon, 13 Jan 2020 07:15:00 +0000</pubDate><guid>https://blog.zwindler.fr/2020/01/13/lancer-aidungeon-2-sur-ubuntu-18-04/</guid><description>&lt;img src="https://blog.zwindler.fr/2020/01/aidungeon_screen.webp" alt="Featured image of post Lancer AIDungeon 2 sur Ubuntu 18.04" /&gt;&lt;h2 id="aidungeon-2"&gt;AIDungeon 2
&lt;/h2&gt;&lt;p&gt;Il y a quelques semaines, je suis tombé sur AIDungeon 2, un jeu hilarant qui mixe jeu d’aventure textuel, machine learning et de gros (GROS) GPUs NVidia.&lt;/p&gt;
&lt;p&gt;Note: English speakers, I’ve released &lt;a class="link" href="https://blog.zwindler.fr/2020/01/08/run-aidungeon-2-on-ubuntu-18-04/" &gt;an english version of this tutorial here&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;AIDungeon2 is a first of its kind AI generated text adventure. Using a 1.5B parameter machine learning model called GPT-2 AIDungeon2 generates the story and results of your actions as you play in this virtual world. Unlike virtually every other game in existence, you are not limited by the imagination of the developer in what you can do. Any thing you can express in language can be your action and the AI dungeon master will decide how the world responds to your actions.
&lt;a class="link" href="https://www.aidungeon.io/" target="_blank" rel="noopener"
&gt;https://www.aidungeon.io/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Si vous n’en avez pas encore entendu parler, il s’agit d’un projet de machine learning créé par Nick Walton. Il est basé sur &lt;a class="link" href="https://openai.com/blog/better-language-models/" target="_blank" rel="noopener"
&gt;le model GPT-2 d’OpenAI&lt;/a&gt; que vous avez peut être déjà croisé dans d’autre projets fun comme celui qui permet, à partir de quelques lignes de texte, d’écrire une suite : &lt;a class="link" href="https://talktotransformer.com/" target="_blank" rel="noopener"
&gt;TalkTotransformer by Adam D King&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="et-ça-fait-quoi-"&gt;Et ça fait quoi ?
&lt;/h2&gt;&lt;p&gt;C’est là où le fun commence. Comme TalkToTransformer, à partir d’un texte de départ semi aléatoire, le modèle de machine learning commence à construire une nouvelle histoire, différente à chaque fois. Et ce sont vos actions et votre imagination qui vont diriger l’histoire dans un sens ou dans l’autre.&lt;/p&gt;
&lt;p&gt;Je ne vais pas mentir, c’est encore loin d’être parfait. Le modèle a la fâcheuse tendance à tourner en rond, ou alors à oublier ce que les personnages viennent de faire, juste une ligne plus haut. Et ça peut un peu gâcher l’histoire.&lt;/p&gt;
&lt;p&gt;Mais&amp;hellip; si on met de côté ces petits soucis de jeunesse, ce qui est vraiment incroyable, ce sont les possibilités qui semblent vraiment illimités. C’est vraiment très impressionnant.&lt;/p&gt;
&lt;p&gt;Au final, ce n’est pas tellement surprenant. La seule limite du modèle, c’est le savoir et le style d’écriture d’OpenAI, qui se base sur 40 Go de texte provenant d’Internet. C’est colossal !&lt;/p&gt;
&lt;p&gt;Si jamais vous avez besoin d’exemples concrets, je vous invite à aller faire un tour sur le Twitter de Nick Walton ou alors sur le &lt;a class="link" href="https://www.reddit.com/r/AIDungeon/" target="_blank" rel="noopener"
&gt;subreddit dédié à AIDungeon&lt;/a&gt;. Vous y trouverez tout type d’aventures hilarantes compilées par les joueurs.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/01/story.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In this example, my inputs are the 2 lines preceded by the « &amp;gt; » symbol, the machine did the rest&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="ok-cest-cool--quel-est-le-problème-"&gt;Ok c’est cool ! Quel est le problème ?
&lt;/h2&gt;&lt;p&gt;En fait, j’en ai déjà parlé.&lt;/p&gt;
&lt;p&gt;Le jeu, qui n’est ni plus ni moins qu’un prompt et du texte qui s’affiche, est très probablement le jeu le plus gourmand en GPU que vous avez rencontré. Quelle délicieuse ironie ;).&lt;/p&gt;
&lt;p&gt;En réalité, le jeu nécessite actuellement près de 9 Go de VRAM GPU et un très grand nombre de coeurs CUDA pour fonctionner. Cela écarte d’office toutes les cartes AMD, ainsi que presque toutes les cartes graphiques NVidia (hormis les plus chère, à + de 1000€).&lt;/p&gt;
&lt;p&gt;Dommage.&lt;/p&gt;
&lt;h2 id="la-communauté"&gt;La communauté
&lt;/h2&gt;&lt;p&gt;Heureusement, l’enthousiasme de la communauté pour ce jeu a motivé Nick Walton et son frère à trouver des solutions. Pendant le mois de décembre, ils ont tout plaqué (dont des exams) pour proposer une infrastructure sous AWS, ainsi qu’une application iOS, Android, et une application web pour que tout le monde puisse en profiter.&lt;/p&gt;
&lt;p&gt;Seulement, vous vous en douter, faire tourner une infra aussi gourmande à un coût. Selon les dires de Nick, les instances AWS avec des cartes Tegra leur coûtent autour de 65000 dollars par mois. Malgré le Patreon qu’ils ont ouvert et qui a permis de récolté 15000$, on est loin du compte.&lt;/p&gt;
&lt;p&gt;Il est probable qu’à terme, le jeu ne soit plus gratuit. Du coup, si le jeu vous plait, &lt;a class="link" href="https://www.patreon.com/AIDungeon" target="_blank" rel="noopener"
&gt;je vous invite à aller voir leur Patreon !&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="et-maintenant-"&gt;Et maintenant ?
&lt;/h2&gt;&lt;p&gt;La troisième raison (au delà de la prouesse technique et du côté fun) pour laquelle je me suis intéressé au projet est que Nick l’a open sourcé, dès le début.&lt;/p&gt;
&lt;p&gt;On peut donc imaginer, si on a suffisamment de puissance sur sa machine, pouvoir le lancer soit même (et ça c’est cool).&lt;/p&gt;
&lt;p&gt;Les sources sont disponibles &lt;a class="link" href="https://github.com/AIDungeon/AIDungeon" target="_blank" rel="noopener"
&gt;sur le compte Github AIDungeons&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Mais à partir de là, je me suis dis que ça pourrait être sympa de lancer AIDungeon 2 sur une instance GPU d’un cloud provider lambda.&lt;/p&gt;
&lt;p&gt;Donc j’ai décidé d’essayer ;-p.&lt;/p&gt;
&lt;p&gt;Pour mon test, j’ai donc choisi de commander une instance virtuelle NC6 (6 vcpus, 56 GiB memory, Tegra K80) de chez Microsoft Azure avec un compte de test gratuit. Mais c’est évidemment applicable à n’importe quelle machine, physique ou chez un autre provider, que vous auriez à votre disposition. Il faut juste qu’elle soit équipée d’une GTX 1080 Ti, GTX 2080 Ti, GTX 2080ti super ou équivalent pro.&lt;/p&gt;
&lt;p&gt;Ce type de machine coute, selon les datacenters (mais ça nous importe peu ici) environ 43 centime d’euro de l’heure. On peut même descendre à 0,21€ en utilisant des VMs préemptibles. Du coup, même sans avoir un compte d’essai, ça ne reviendra pas très cher si vous ne faites que l’essayer.&lt;/p&gt;
&lt;p&gt;Sur ma NC6, j’ai déployé un basique Ubuntu 18.04 et c’est là que le tutoriel commence !&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/01/aidungeon.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Note: En suivant à la lettre le tuto et en partant d’une Ubuntu 18.04 fraichement installée, vous devriez en avoir tout de même pour 30 à 45 minutes d’installation de packages et de prérequis.&lt;/p&gt;
&lt;h2 id="installer-les-mises-à-jour-et-les-prérequis"&gt;Installer les mises à jour et les prérequis
&lt;/h2&gt;&lt;p&gt;La première chose à faire est évidemment de tout mettre à jour.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo apt-get update
sudo apt-get upgrade
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Une fois que c’est fait, on passe aux packages systèmes dont on a besoin pour la suite :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo apt-get install git aria2 unzip python3-pip
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="lenfer-des-dépendances"&gt;L’enfer des dépendances
&lt;/h2&gt;&lt;p&gt;Et c’est la que le vrai fun commence (ou pas). Cette partie justifie quasiment à elle seule le tuto. AIDungeon utilise TensorFlow (la lib de machine learning) et les drivers NVidia et CUDA pour fonctionner correctement. Cependant, la blague, c’est que toutes les versions de chaque composants ne fonctionneront pas ensemble.&lt;/p&gt;
&lt;p&gt;Pour démarrer AIDungeons, vous aller devoir explicitement installer tensorflow 1.15 (pas plus, pas moins). Et bien sûr tensorflow==1.15 nécessite spécifiquement cuda10.0 (pas cuda10.1 ni cuda10.2) et Python de la version 3.4 à la version 3.7!&lt;/p&gt;
&lt;p&gt;Horreur&amp;hellip;&lt;/p&gt;
&lt;h2 id="installer-les-drivers-nvidia-cuda-et-les-modules-de-machine-learning"&gt;Installer les drivers NVidia, Cuda et les modules de machine learning
&lt;/h2&gt;&lt;p&gt;Ajoutez les dépôts pour cuda10.0:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
sudo apt-get update
wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
sudo apt install ./nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
sudo apt-get update
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Maintenant, installer les drivers nvidia-driver, puis rebooter (c’est important) :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo apt-get install --no-install-recommends nvidia-driver-440 xserver-xorg-video-nvidia-440
sudo reboot
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Après reboot, installer les libs pour cuda10.0&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo apt-get install --no-install-recommends \
cuda-10-0 cuda-runtime-10-0 cuda-demo-suite-10-0 cuda-drivers \
libcudnn7=7.6.2.24-1+cuda10.0 libcudnn7-dev=7.6.2.24-1+cuda10.0
sudo apt-get install -y --no-install-recommends libnvinfer5=5.1.5-1+cuda10.0 \
libnvinfer-dev=5.1.5-1+cuda10.0
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="récupérer-les-sources"&gt;Récupérer les sources
&lt;/h2&gt;&lt;p&gt;Téléchargez les sources depuis Github :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;git clone https://github.com/AIDungeon/AIDungeon/
cd AIDungeon/
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="installer-python3-les-dépendances-via-pip3"&gt;Installer python3, les dépendances via pip3
&lt;/h2&gt;&lt;p&gt;Et non, ce n’est toujours pas terminé. Maintenant qu’on a récupéré les sources, il est nécessaire d’installer tous les modules Python3 nécessaire à l’exécution du jeu.&lt;/p&gt;
&lt;p&gt;Par défaut, Ubuntu 18.04 utilise toujours Python dans sa version 2 comme interpréteur Python par défaut. Or, vous le savez tous, Python 2 vient de tirer sa révérence ce 1er janvier.&lt;/p&gt;
&lt;p&gt;De plus, pip, le package manager de Python, installé est une vieille version. Elle ne propose tensorflow que jusqu’à la 1.14 (voir l’annexe). La misère.&lt;/p&gt;
&lt;p&gt;Et comme si ce n’était pas suffisant, ceux qui ont déjà essayé de mettre à jour pip depuis la version disponible dans le gestionnaire de paquet d’Ubuntu savent que c’est un bon moyen de tout casser.&lt;/p&gt;
&lt;p&gt;On se retrouve très souvent avec l’erreur &lt;code&gt;pip ImportError: cannot import name ’main’ after update&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Pour passer outre cette difficulté, le plus simple est d’utiliser le script &lt;a class="link" href="https://pip.pypa.io/en/stable/installing/#upgrading-pip" target="_blank" rel="noopener"
&gt;upgrading pip&lt;/a&gt; disponible sur la page officielle de pip.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
sudo python3 get-pip.py
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="installer-aidungeon-enfin-"&gt;Installer AIDungeon, enfin !
&lt;/h2&gt;&lt;p&gt;Entre le moment où j’ai écris le draft de l’article il y a quelques semaines et aujourd’hui, le script d’installation a été amélioré et fonctionne mieux (il manquait une dépendance entre autre). Du coup, cette partie devrait se limiter à simplement exécuter 2 scripts. Cependant, au cas où, j’ai laissé les commandes que MOI j’ai du utiliser pour débloquer la situation.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo ./install.sh
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Si ça ne fonctionne pas, vous pouvez installer les packages python comme ceci :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;python3 -m pip install -r requirements.txt --user
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Le script qui suit va télécharger le modèle de machine learning via un client torrent (au début, Nick s’est pris une facture bien salée à cause des coûts de téléchargement du modèle).&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;./download_model.sh
[...]
Status Legend:
(OK):download completed.
Download Complete!
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="lancer-aidungeon-2"&gt;Lancer AIDungeon 2
&lt;/h2&gt;&lt;p&gt;Bravo ! Vous pouvez enfin profiter du jeu&lt;/p&gt;
&lt;p&gt;Si vous avez utilisé le script officiel (qui utilisez des venv Python), lancez les commandes suivantes :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;source ./venv/bin/activate
./play.py
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Sinon, vous pouvez vous passer de la partie &lt;em&gt;venvs&lt;/em&gt;.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cd ~/AIDungeon/
python3 play.py
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/01/initializing.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;L’initialisation du jeu prennait quelques minutes mais c’est normal. A priori ce temps a été grandement réduit (on est passé de 5-10 minutes, c’était vraiment long, à 1 ou 2 max).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/01/aidungeon_screen.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="bonus-commandes-utiles-pour-surveiller-lusage-du-gpu"&gt;Bonus: Commandes utiles pour surveiller l’usage du GPU
&lt;/h2&gt;&lt;p&gt;Vous pouvez installer l’utilitaire gpustat pour vérifier que le GPU est bien utilisé par l’application&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;pip3 install gpustat --user
gpustat
gpustat -cp
aidungeon2 Mon Dec 9 13:22:24 2019 430.50
[0] Tesla K80 | 69&amp;#39;C, 17 % | 0 / 11441 MB |
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Dans un genre plus simple, moins sexy, vous pouvez aussi tout simplement utiliser l’outil intégré avec le driver NVidia (mais c’est moche).&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;nvidia-smi --loop=1
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="bonus-vérifier-que-tensorflow-trouve-bien-le-gpu"&gt;Bonus: Vérifier que tensorflow trouve bien le GPU
&lt;/h2&gt;&lt;p&gt;Un des problèmes que j’ai eu au début était que je n’avais pas les bonnes libs. Les commandes qui suivent permettent de vérifier que tout fonctionne correctement côté tensorflow, et le cas échéant, vous afficher le message d’erreur :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;python3
from __future__ import absolute_import, division, print_function, unicode_literals
import tensorflow as tf
print(&amp;#34;Num GPUs Available: &amp;#34;, len(tf.config.experimental.list_physical_devices(&amp;#39;GPU&amp;#39;)))
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Exemple d’une install qui marche&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;2019-12-10 16:25:39.714605: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcuda.so.1
2019-12-10 16:25:39.743758: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1618] Found device 0 with properties:
name: Tesla K80 major: 3 minor: 7 memoryClockRate(GHz): 0.8235
pciBusID: 81c7:00:00.0
2019-12-10 16:25:39.744001: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.0
[...]
2019-12-10 16:25:39.754396: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1746] Adding visible gpu devices: 0
Num GPUs Available: 1
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Exemple d’une install qui ne marche pas :-(&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[...]
Num GPUs Available: 0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Note : si vous n’avez pas de GPU (ou que les libs ou drivers sont mal installés) vous pourrez quand meme jouer au jeu, mais il sera extrêmement lent (1-2 minutes entre chaque réponse de votre part et le temps que le texte suivant s’affiche).&lt;/p&gt;
&lt;h2 id="bonus-erreurs-gsutil-et-tensorflow"&gt;Bonus: Erreurs gsutil et tensorflow
&lt;/h2&gt;&lt;p&gt;Si vous avez oublié de mettre à jour pip, vous aurez cette erreur :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Collecting tensorflow==1.15 (from -r requirements.txt (line 6))
Could not find a version that satisfies the requirement tensorflow==1.15 (from -r requirements.txt (line 6)) (from versions: 0.12.1, 1.0.0, 1.0.1, 1.1.0rc0, 1.1.0rc1, 1.1.0rc2, 1.1.0, 1.2.0rc0, 1.2.0rc1, 1.2.0rc2, 1.2.0, 1.2.1, 1.3.0rc0, 1.3.0rc1, 1.3.0rc2, 1.3.0, 1.4.0rc0, 1.4.0rc1, 1.4.0, 1.4.1, 1.5.0rc0, 1.5.0rc1, 1.5.0, 1.5.1, 1.6.0rc0, 1.6.0rc1, 1.6.0, 1.7.0rc0, 1.7.0rc1, 1.7.0, 1.7.1, 1.8.0rc0, 1.8.0rc1, 1.8.0, 1.9.0rc0, 1.9.0rc1, 1.9.0rc2, 1.9.0, 1.10.0rc0, 1.10.0rc1, 1.10.0, 1.10.1, 1.11.0rc0, 1.11.0rc1, 1.11.0rc2, 1.11.0, 1.12.0rc0, 1.12.0rc1, 1.12.0rc2, 1.12.0, 1.12.2, 1.12.3, 1.13.0rc0, 1.13.0rc1, 1.13.0rc2, 1.13.1, 1.13.2, 1.14.0rc0, 1.14.0rc1, 1.14.0, 2.0.0a0, 2.0.0b0, 2.0.0b1)
No matching distribution found for tensorflow==1.15 (from -r requirements.txt (line 6))
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Cette erreur ne devrait plus apparaitre maintenant, mais si vous n’avez pas le module gsutil, voici la stacktrace que vous aurez en quittant le jeu (sans conséquence) :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;gt; ^C
Traceback (most recent call last):
File &amp;#34;play.py&amp;#34;, line 211, in &amp;lt;module&amp;gt;
play_aidungeon_2()
File &amp;#34;play.py&amp;#34;, line 97, in play_aidungeon_2
action = input(&amp;#34;&amp;gt; &amp;#34;)
KeyboardInterrupt
Exception ignored in: &amp;lt;bound method Story.__del__ of &amp;lt;story.story_manager.Story object at 0x7f797f4af0f0&amp;gt;&amp;gt;
Traceback (most recent call last):
File &amp;#34;/home/zwindler/AIDungeon/story/story_manager.py&amp;#34;, line 35, in __del__
self.save_to_storage()
File &amp;#34;/home/zwindler/AIDungeon/story/story_manager.py&amp;#34;, line 131, in save_to_storage
p = Popen([&amp;#39;gsutil&amp;#39;, &amp;#39;cp&amp;#39;, file_name, &amp;#39;gs://aidungeonstories&amp;#39;], stdout=FNULL, stderr=subprocess.STDOUT)
File &amp;#34;/usr/lib/python3.6/subprocess.py&amp;#34;, line 729, in __init__
restore_signals, start_new_session)
File &amp;#34;/usr/lib/python3.6/subprocess.py&amp;#34;, line 1364, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: &amp;#39;gsutil&amp;#39;: &amp;#39;gsutil&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="sources"&gt;Sources
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.tensorflow.org/install/gpu" target="_blank" rel="noopener"
&gt;Tensorflow installation guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/tensorflow/tensorflow/issues/26182" target="_blank" rel="noopener"
&gt;Tensorflow install issues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.tensorflow.org/guide/gpu" target="_blank" rel="noopener"
&gt;Tensorflow GPU guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>