[LINUX] Faisons un spacon avec xCAT

Beowulf avec xCAT

Le monde est le cloud. Cependant, en fonction de l'application, vous souhaiterez peut-être exécuter l'ordinateur qui martèle à portée de main. Il s'agit plutôt de supercalcul uniquement en laissant l'ordinateur grogner devant vous. Le cluster de calcul haute performance [HPC] est utilisé à cette fin. Une des méthodes pour réaliser un cluster HPC (un terme que je n'ai pas beaucoup entendu récemment) est Beowulf. Beowulf signifie "cluster HPC réalisé en connectant un groupe de nœuds préparés exclusivement pour le calcul avec un réseau haut débit basé sur Unix libre", et avec cette définition, "Spacon" dans le domaine de la bioinformatique que je connais bien. La plupart d'entre eux seront Beowulf.

Voici un peu plus de détails sur les raisons pour lesquelles l'industrie de la bioinformatique a (toujours) besoin d'un environnement HPC sur site.

Tout d'abord, je parlais du travail lié aux données de séquenceur de nouvelle génération, mais il existe de nombreux calculs prétendument parallèles [^ 1]. Vous pouvez vous attendre à ce que le temps de calcul soit de 1/10 simplement en divisant l'entrée en 10 parties égales sans penser à rien. Par conséquent, il est facile de bénéficier des clusters HPC de type Beowulf. Deuxièmement, bien que la vitesse de calcul soit tolérante et qu'il y ait de nombreuses tâches à attendre même si la puissance du processeur est faible, la taille des données d'entrée est énorme, de sorte que la quantité de stockage et de transfert réseau a tendance à être importante. Ceci est totalement incompatible avec un environnement cloud qui se compose d'un faible prix du processeur et d'un volume de stockage / transfert réseau élevé. Et, en raison de la caractéristique qu'il est uniquement nécessaire de recalculer à partir des pires données brutes, ne nécessite pas de fiabilité absolue ou de performances d'accès à haut débit à partir du stockage. Vous avez besoin d'un grand stockage bon marché. Troisièmement, les problèmes liés à la vie privée dans la recherche humaine. La situation évolue, mais la conservation des données en dehors de l'organisation ou à l'étranger reste un défi. Pour cette raison, le choix d'avoir un cluster HPC sur site (et dans certains cas de créer le vôtre) dans l'industrie de la bioinformatique ne sera pas si mal en 2020.

[^ 1]: Il semble y avoir une traduction telle que parallèle évident, parallèle étonnant, parallèle stupide ……. Selon Wikipedia anglais, un embarras de richesse est une «propriété riche» et une «richesse». Cela vient d'une phrase ironique telle que «j'en ai marre». Bien sûr, tout en disant parallèlement embarrassant, en réalité, je suis reconnaissant pour la facilité de parallélisation.

À propos, il existe des logiciels pour réaliser la construction d'un cluster HPC homebrew de type Beowulf sur site, mais il s'agit d'un produit open source avec un haut degré de liberté basé sur la distribution Linux relativement récente, et il est toujours activement développé. Le plus célèbre d'entre eux est le projet eXtreme Cloud Administration Kit (xCAT) parrainé par IBM https://xcat.org/.

L'auteur avait créé son propre HPC avec xCAT il y a quelques années, mais récemment, il est devenu nécessaire de faire revivre l'ancien Scyld (le système HPC propriétaire de Penguin Computing) avec le nouveau xCAT, donc au lieu d'un mémo à nouveau J'ai décidé d'écrire cet article. La documentation xCAT est meilleure qu'avant, mais reste difficile. J'ai l'impression que la configuration a tendance à créer une dépendance à moins que vous ne lisiez et compreniez tout avant de commencer l'installation. Ce n'est pas simple parce que les informations nécessaires sont distribuées et que les commandes de haut niveau qui définissent implicitement et les commandes de bas niveau se heurtent les unes aux autres. Étant donné que cet article est le résultat d'essais et d'erreurs luttant avec le document, il est probable qu'il y ait des mensonges et des malentendus. Cependant, ces notes auraient du sens si elles n'étaient que des références.

xCAT est libre de choisir entre RedHat / CentOS et Linux basé sur PowerPC (si pris en charge). Pour mon travail lié à la bioinformatique, j'ai décidé d'utiliser un Ubuntu relativement nouveau car il est nécessaire de construire des logiciels open source à partir de sources qui nécessitent parfois un environnement relativement nouveau même s'il s'agit d'un "serveur". Si votre objectif principal est les outils propriétaires, CentOS peut être plus approprié.

Installez xCAT

URI de référence

--http: //xcat.org/ Page officielle du projet xCAT --https: //xcat-docs.readthedocs.io/en/stable/ Document officiel

Matériel et réseau

Configurer le nœud de gestion

Puisqu'il s'agit de la dernière version d'Ubuntu prise en charge par xCAT, j'ai installé Ubuntu 18.04-4 LTS conformément à la loi. Cependant, j'ai en fait installé la version dérivée Lubuntu 18.04-4 dans le but de l'interface utilisateur la plus légère. Comme cela sera décrit plus tard, Ubuntu Server 18.04 - ** 2 ** a dû être utilisé pour le groupe de nœuds de calcul.

Dans le cas de la machine cible cette fois, le symptôme que seul le curseur de la souris n'est pas affiché sur l'installateur Lubuntu peut être évité en spécifiant nomodeset dans l'option du noyau. Il semble que la fonction graphique Intel soit désactivée. Après l'installation, terminer le réglage du nom d'hôte (scyld.cluster), l'attribution d'une adresse IP fixe côté WAN, le réglage NTP, la mise à niveau apt, le réglage minimum de l'utilisateur / groupe, etc.

N'oubliez pas de configurer le transfert entre le réseau à l'intérieur du cluster et le réseau côté WAN. L'article Créer un serveur NAT avec ufw sur Ubuntu est utile.

Installez la version stable de xCAT

Commencez à travailler après sudo su-. Utilisez la dernière version stable xCAT 2.15.1 (publiée le 6 mars 2020) au moment de la rédaction.

# mkdir /root/xCATsetup #Sauf indication contraire, je travaillerai ici pour tout
# cd /root/xCATsetup
# wget \
  https://raw.githubusercontent.com/xcat2/xcat-core/master/xCAT-server/share/xcat/tools/go-xcat \
  -O - > /tmp/go-xcat
# chmod +x /tmp/go-xcat
# /tmp/go-xcat install            #Cette fois, installez la version stable de xcat

L'emplacement d'installation par défaut du système xCAT est / opt / xcat.

Vérification de l'installation

# source /etc/profile.d/xcat.sh #Paramètre PATH
# lsxcatd -a #Affichage de la version xCAT
Version 2.15.1 (git commit ab6295bdc1deb1827922d47755bfc68adec12389, built Wed Mar  4 16:45:39 EST 2020)
This is a Management Node
dbengine=SQLite

# tabdump site #Afficher la table des sites de la base de données interne xCAT
#key,value,comments,disable
"blademaxp","64",,
"fsptimeout","0",,
"installdir","/install",,
(Omis ci-dessous)

Les paramètres xCAT sont gérés par l'objet xCAT et la base de données xCAT gérée par deux concepts. Le premier est exploité par des commandes telles que mkdef, lsdef, chdef et rmdef. Ce dernier est exploité par des commandes telles que tabdump, tabedit et chtab. La base de données xCAT est en fait une table gérée par RDB (SQLite par défaut), et il semble que les objets et les tables aient une association plusieurs-à-plusieurs. Il semble que le premier ou le second fonctionne de manière pratique en fonction de la situation de réglage.

paramètres d'objet de site

Procédez aux réglages en fonction de Définir les attributs dans la table du site.

# chdef -t site domain="cluster"          #Nom de domaine des nœuds scyld.Pour cluster etc.
# chdef -t site forwarders="10.54.0.1"    #Passerelle par défaut vue depuis le groupe Compute Node
# chdef -t site master="10.54.0.1"        #Adresse IP du nœud de gestion vue depuis le groupe de nœuds de calcul
# chdef -t site nameservers="10.54.0.1"  #Adresse IP du groupe DNS séparée par des virgules comme vue depuis le groupe Compute Node
# makedns -s                #Initialisation du DNS exécuté sur le nœud de gestion. Un avertissement lié à IPv6 apparaît mais est ignoré.
# nslookup scyld.cluster    #Vérification du fonctionnement DNS

paramètres de la table des réseaux

Procédez aux paramètres réseau conformément à Définir les attributs dans le tableau des réseaux. Commencez par vérifier le réglage automatique.

# tabdump networks
#netname,net,mask,mgtifname,gateway,dhcpserver,tftpserver,nameservers,ntpservers,logservers,dynamicrange,staticrange,staticrangeincrement,nodehostname,ddnsdomain,vlanid,domain,mtu,comments,disable
"10_0_0_0-255_255_0_0","10.0.0.0","255.255.0.0","bond0","<xcatmaster>",,"<xcatmaster>",,,,,,,,,,,"1500",,
"192_168_0_0-255_255_0_0","192.168.0.0","255.255.0.0","enp1s0f1","192.168.0.1",,"<xcatmaster>",,,,,,,,,,,"1500",,

Cette fois, je voudrais utiliser DHCP pour allouer les nœuds de l'ordinateur immédiatement après le démarrage dans la plage allant de «10.54.3.1» à «10.54.3.254» sur le réseau interne. Le réseau interne est également connecté au preset bond0 (en utilisant la liaison / agrégation Ethernet). Par conséquent, définissez comme suit + démarrez le service DHCP.

Tout d'abord, le nom de réseau (nom de l'objet) de la table des réseaux est trop long, donc modifiez-le comme suit sur l'éditeur qui démarre tabedit network.

# tabdump networks
#netname,net,mask,mgtifname,gateway,dhcpserver,tftpserver,nameservers,ntpservers,logservers,dynamicrange,staticrange,staticrangeincrement,nodehostname,ddnsdomain,vlanid,domain,mtu,comments,disable
"clusternet","10.54.0.0","255.255.0.0","bond0","<xcatmaster>",,"<xcatmaster>",,,,,,,,,,,"1500",,
"wan","192.168.0.0","255.255.0.0","enp1s0f1","192.168.0.1",,"<xcatmaster>",,,,,,,,,,,"1500",,

# makehosts -n

Vous pouvez maintenant faire référence au nom de l'objet avec clusternet et wan. Modifiez ensuite le type d'objet réseau et le nom d'objet clusternet. Configurez DHCP pour distribuer 10.54.3.1 à 10.54.3.254.

# chdef -t network -o clusternet dynamicrange="10.54.3.1-10.54.3.254"
# makedhcp -n

paramètres de table passwd

Définir le mot de passe du compte root

# tabdump passwd
# chtab key=system passwd.username=root passwd.password=root
# chtab ip

Reconnaissance et paramétrage des nœuds de calcul

Docs »Guide d'administration» Gérer les clusters »IBM POWER LE / OpenPOWER Suivez les instructions ci-dessous Travailler sur. En raison du support d'IBM, le projet xCAT est décrit à l'aide d'une machine IBM basée sur PowerPC dans le document, mais le travail est presque le même dans l'environnement Linux sur x86_64, qui est l'environnement de la plupart des utilisateurs.

Tout d'abord, consultez Hardware Discovery & Define Node. Les choix de la méthode sont le réglage manuel, la reconnaissance par MTMS (Type de Machine et Série MAchene) comme réglage automatique, la reconnaissance par le numéro de port de connexion au concentrateur de commutation et la reconnaissance en fonction de l'ordre.

Le nombre de nœuds de calcul étant cette fois-ci de 10, suivez les instructions du document et suivez les instructions dans [Authentification by MTMS](https://xcat-docs.readthedocs.io/en/stable/guides/admin-guides/manage_clusters/ppc64le/discovery/mtms /index.html) est sélectionné. La méthode recommandée est «Pour l'adresse IP BMC / IPMI, commencez par recevoir l'allocation DCHP, puis définissez l'adresse IP statique d'un autre sous-réseau». En général, BMC / IPMI peut souvent obtenir une adresse IP de manière dynamique à partir de DHCP. Cependant, dans mon environnement, l'adresse IP statique de BMC / IPMI a été définie à l'avance sur 10.54.0.1-10, je vais donc l'utiliser telle quelle, bien qu'elle soit un peu différente du document.

# bmcdiscover --range 10.54.0.1-254 -u ADMIN -p ADMIN -z -w
# bmcdiscover --range 10.54.0.1-254 -u adimn -p admin -z -w
Writing node-0025901d9c29 (10.54.150.10,Winbond,,admin,admin,mp,bmc,0025901d9c29,,) to database...
node-0025901d9c29:
        objtype=node
        groups=all
        bmc=10.54.150.10
        cons=ipmi
        mgt=ipmi
        mtm=Winbond
        bmcusername=admin
        bmcpassword=admin
(Omis)
# lsdef /node-.*
Object name: node-0025901d8c1e
    bmc=10.54.150.3
    bmcpassword=admin
    bmcusername=admin
(Omis)

Par défaut, bmcdiscover fait référence à key = ipmi dans la table passwd, mais sur certaines machines, il y avait différentes ou plusieurs combinaisons utilisateur / mot de passe (machines après 2020). Il semble que cela varie d'un individu à l'autre), et bmcdiscover a été publié deux fois dans des combinaisons différentes. Quoi qu'il en soit, il semble qu'il pourrait reconnaître le BMC / IPMI de toutes les machines et écrire dans la base de données interne xCAT. Créez un fichier de configuration statique pour chaque machine en fonction des informations ainsi créées.

# bmcdiscover --range 10.54.0.1-254 -u ADMIN -p ADMIN -z > predefined.stanza
# bmcdiscover --range 10.54.0.1-254 -u adimn -p admin -z >> predefined.stanza

Modifiez predefined.stanza dans l'éditeur.

node-0025901d9e23:
        objtype=node
        groups=all
        bmc=10.54.150.1
        cons=ipmi
        mgt=ipmi
        mtm=Winbond
        bmcusername=admin
        bmcpassword=admin

À

cn02:
        ip=10.54.2.2
        netboot=xnba
        mac=XX:YY:ZZ:XX:YY:ZZ
        objtype=node
        groups=compute2,all
        chain="runcmd=bmcsetup"
        bmc=10.54.150.1
        cons=ipmi
        mgt=ipmi
        mtm=Winbond
        bmcusername=admin
        bmcpassword=admin

Changez pour chaque nœud de calcul, comme dans. ʻIp = 10.54.2.2est l'adresse IP statique de ce nœud de calcul. Écrivez-les ensemble comme une base de données interne. Cependant, dans le cas de l'auteur, les informations relatives au numéro de série n'ont pas pu être correctement saisies. J'ai également écrit manuellement l'adresse MAC du NIC (pas l'IPMI). Ajout degroups = compute2, all et chain =" runcmd = bmcsetup ". Vous pouvez maintenant faire référence à tout le nœud de calcul avec compute2`. Puisque l'auteur utilise un autre xCAT, "2" est ajouté ici.

# cat predefined.stanzas | mkdef -z

Lorsqu'il y a un changement, vous pouvez écraser le paramètre avec mkdef -f -z.

Ce n'est pas grave si l'état d'alimentation de tous les nœuds de calcul peut être affiché avec rpower compute2 status.

# tabedit hosts #Modifier avec l'éditeur comme ci-dessous
# tabdump hosts
#node,ip,hostnames,otherinterfaces,comments,disable
"compute2","|\D+(\d+)|10.54.2.($1+0)|",,"|\D+(\d+)|cn($1)-ipmi:10.54.150.($1+0)|",,

Choix d'une méthode de démarrage du système d'exploitation pour les nœuds de calcul

Pour envoyer le système d'exploitation aux nœuds de calcul

  1. Diskful Installation
  2. Diskless Installation (Stateless Installation) Il existe deux méthodes. Le premier est une méthode d'installation du système d'exploitation dans le stockage local de chaque nœud de calcul et de démarrage à partir de là. Ce dernier envoie une image OS (osimage "netboot") aux nœuds de calcul à chaque démarrage, puis démarre. Même dans ce dernier cas, il est possible d'accéder au stockage local connecté à chaque nœud de calcul (par exemple, en plaçant un répertoire temporaire ou un fichier d'accès fréquent). En ce sens, apatride peut être plus correct.

Si la configuration réseau dispose de suffisamment de bande passante et que chaque nœud de calcul dispose de suffisamment de mémoire, l'installation sans fil, qui peut tout gérer à partir du nœud de gestion en même temps, est le premier choix.

Créer une image du système d'exploitation

Il semble que le système d'exploitation pris en charge par la version actuelle de xCAT doit être inclus dans la liste des packages qui apparaît dans ls -L / opt / xcat / netboot / * / *. Pkglist. Pour Ubuntu, en regardant ls -L / opt / xcat / netboot / ubuntu / *. Pkglist, il semble que 18.04 et 18.04-2 soient pris en charge. De plus, il semble que le fichier iso de Lubuntu ne soit pas bien reconnu, alors ici je télécharge doucement unbuntu-18.04.2-server.amd64.iso, puis je crée une osimage.

# mkdir -p /install/iso
# cd /install/iso
# wget http://releases.ubuntu.com/18.04.2/ubuntu-18.04.2-server-amd64.iso
# copycds ubuntu-18.04.2-server-amd64.iso
# lsdef -t osimage
ubuntu18.04.2-x86_64-install-compute  (osimage)
ubuntu18.04.2-x86_64-install-service  (osimage)
ubuntu18.04.2-x86_64-netboot-compute  (osimage)

ʻUbuntu18.04.2-x86_64-netboot-compute` est l'image du système d'exploitation pour l'installation sans disque. Des modifications telles que l'ajout de packages en fonction de l'objectif peuvent être ajoutées à cette image du système d'exploitation. Cette fois, j'ai décidé de faire ces changements nécessaires dans le script shell (postscript) après le démarrage du système d'exploitation et de continuer.

# genimage ubuntu18.04.2-x86_64-netboot-compute #Ça prend du temps
# packimage ubuntu18.04.2-x86_64-netboot-compute
# mknb x86_64

La dernière commande mknb peut être lue comme si vous n'aviez pas besoin de la démarrer manuellement, mais si vous ne le faites pas, le nœud de calcul sera lu en premier après le démarrage/ tftpboot / xcat / xnba / nets / 10.54.0.0_16(Et * .elilo, * .uefi) ne semble pas être bien généré.

Définir l'image du système d'exploitation dans le groupe de nœuds de calcul

# chdef compute2 -p chain="bmcsetup,osimage=ubuntu18.04.2-x86_64-netboot-compute"
# makehosts -n compute2
# makedns -s ; makedhcp -n ; makedhcp -a
# rpower compute2 boot

Il est plus sûr de réexécuter makedns -s; makedhcp -n; makedhcp -a avant de démarrer le nœud de calcul. Eh bien, si vous pouvez vous connecter avec ssh cn01 avec cela, il n'y a pas de problème, mais cela n'a pas fonctionné dans mon environnement.

dépannage

Rendez la console distante du groupe de nœuds de calcul disponible à des fins de débogage. Définissez avec makegocons et commencez par rcons <node>. La fin de rcons est «c.» après «ctrl-e».

# makegocons 
Starting goconserver service ...
cn10: Created
cn01: Created
(Omis)
cn06: Created
 
# rcons cn01
[Enter `^Ec?' for help]
goconserver(2020-06-19T09:47:14+09:00): Hello 192.168.0.21:41898, welcome to the session of cn01

Si le nœud de calcul reste bloqué dans getdestiny, par exemple dans syslog

Jun 18 17:10:50 10.54.3.2 [localhost] xcat.genesis.doxcat: Getting initial certificate --> 10.54.0.1:3001
Jun 18 17:11:00 10.54.3.2 [localhost] xcat.genesis.doxcat: Running getdestiny --> 10.54.0.1:3001
Jun 18 17:11:10 10.54.3.2 [localhost] xcat.genesis.doxcat: Received destiny=
Jun 18 17:11:10 10.54.3.2 [localhost] xcat.genesis.doxcat: The destiny=, destiny parameters=
Jun 18 17:11:10 10.54.3.2 [localhost] xcat.genesis.doxcat: Unrecognized directive (dest=)
Jun 18 17:11:19 10.54.3.2 [localhost] xcat.genesis.doxcat: ... Will retry xCAT in 70 seconds

Si vous ne pouvez pas continuer pour de telles raisons, reconfirmer qu'il n'y a pas d'erreurs de configuration dhcp ou dns peut résoudre le problème. Vérifiez les fautes de frappe sur tabedit site etc. makedns -s; makedhcp -n; makedhcp -a; rpower compute2 boot.

De plus, Compute Node utilise l'adresse IP attribuée par DHCP au lieu d'utiliser l'adresse IP spécifiée pour la carte réseau principale (pas BMC / IPMI) définie par cat predefined.stanza | mkdef -z.

Jun 19 10:20:10 10.54.3.21 [localhost] xcat.genesis.dodiscovery: Beginning echo information to discovery packet file...
Jun 19 10:20:11 10.54.3.21 [localhost] xcat.genesis.dodiscovery: Discovery packet file is ready.
Jun 19 10:20:11 10.54.3.21 [localhost] xcat.genesis.dodiscovery: Sending the discovery packet to xCAT (10.54.0.1:3001)...
Jun 19 10:20:11 10.54.3.21 [localhost] xcat.genesis.dodiscovery: Sleeping 5 seconds...
Jun 19 10:20:11 10.54.3.21 [localhost] xcat.genesis.minixcatd: The request is processing by xCAT master...
Jun 19 10:20:12 scyld xcat[17879]: xcatd: Processing discovery request from 10.54.3.21
Jun 19 10:20:12 scyld xcat[17879]: xcat.discovery.aaadiscovery: (00:25:90:1d:6e:ae) Got a discovery request, attempting to d
Jun 19 10:20:12 scyld xcat[17879]: xcat.discovery.blade: (00:25:90:1d:6e:ae) Warning: Could not find any nodes using blade-b
Jun 19 10:20:12 scyld xcat[17879]: xcat.discovery.switch: (00:25:90:1d:6e:ae) Warning: Could not find any nodes using switch
Jun 19 10:20:12 scyld xcat[17879]: xcat.discovery.mtms: (00:25:90:1d:6e:ae) Warning: Could not find any node for Super Micro
Jun 19 10:20:12 scyld xcat[17879]: xcat.discovery.zzzdiscovery: (00:25:90:1d:6e:ae) Failed for node discovery.
Jun 19 10:20:12 scyld xcat[17879]: xcat.discovery.zzzdiscovery: Notify 10.54.3.21 that its findme request has been processed
Jun 19 10:20:11 10.54.3.21 [localhost] xcat.genesis.minixcatd: The request is already processed by xCAT master, but not matc

Dans les situations où un nœud de calcul demande au serveur de gestion de se découvrir mais est rejeté car son adresse IP n'est pas celle d'un nœud de calcul connu

# chtab -t node -o cn01 mac="00:11:22:DD:EE:FF"
# makedns -s ; makedhcp -n ; makedhcp -a
# rinstall compute2 runcmd=bmcsetup,osimage=ubuntu18.04.2-x86_64-netboot-compute
# rpower cn01 boot

Spécifiez à nouveau l'adresse MAC pour que DHCP trouve cn01 et son adresse MAC et attribue la bonne adresse IP. Ensuite, j'ai appliqué rpower compute2 boot et cela a fonctionné.

à suivre

Avec cela, j'ai pu mettre en place le cluster HPC pour le moment. xCAT prend en charge le contrôle des nœuds de calcul par BMC / IPMI, le déploiement du système d'exploitation, la gestion du réseau, la gestion des nœuds de calcul, y compris la gestion des comptes utilisateurs, etc. Après cela, il y a diverses choses qui doivent être préparées et définies, telles que Ganglia qui affiche l'état de fonctionnement du cluster et le planificateur de travaux SGE, je vais donc l'écrire dans un article séparé. De plus, si vous avez des erreurs ou des points peu clairs dans cet article, je vous serais reconnaissant de bien vouloir les signaler.

Recommended Posts

Faisons un spacon avec xCAT
Faisons une interface graphique avec python.
Faisons une rupture de bloc avec wxPython
Faisons un graphe avec python! !!
Faisons un jeu de shiritori avec Python
Faisons la voix lentement avec Python
Faisons un langage simple avec PLY 1
Créez un framework Web avec Python! (1)
Faisons une IA à trois yeux avec Pylearn 2
Faisons un bot Twitter avec Python!
Créez un framework Web avec Python! (2)
Remplaçons UWSC par Python (5) Faisons un robot
Faisons un robot Discord.
Faisons Othello avec wxPython
Faites une loterie avec Python
Faire un feu avec kdeplot
Essayez de créer un jeu simple avec Python 3 et iPhone
Facilitons un peu la gestion des dépendances avec pip
Créons une application Mac avec Tkinter et py2app
Essayez de créer une grille sphérique avec Rhinoceros / Grasshopper / GHPython
[Super facile] Faisons un LINE BOT avec Python.
Créons un client de socket Web avec Python. (Authentification par jeton d'accès)
Faisons une rumba distante [Matériel]
Faisons une rumba distante [Logiciel]
Faites un son avec le notebook Jupyter
Faisons un service de vente au comptant 2
Faisons un service de vente au comptant 1
Faisons l'IA d'Othello avec Chainer-Part 1-
Créer un système de recommandation avec python
Créer un filtre avec un modèle django
Faisons l'IA d'Othello avec Chainer-Part 2-
Créer un itérateur de modèle avec PySide
Faire un joli graphique avec plotly
Faisons un diagramme sur lequel on peut cliquer avec IPython
Faisons un service de vente au comptant 3
Faisons une application WEB pour l'annuaire téléphonique avec flacon Partie 1
Faisons un ordinateur de vélo avec Raspberry Pi Zero (W, WH)
Faisons une application WEB pour l'annuaire téléphonique avec flacon Partie 3
Faisons une application WEB pour l'annuaire téléphonique avec flacon Partie 4
Faisons une discussion WEB en utilisant WebSocket avec AWS sans serveur (Python)!
Créons un groupe gratuit avec Python
Créez un simulateur de gacha rare avec Flask
Créez un pipeline de notebook avec Kedro + Papermill
Faire une figure partiellement zoomée avec matplotlib
Raclons un site dynamique avec Docker
Créez un quiz de dessin avec kivy + PyTorch
[Python] Rendons matplotlib compatible avec le japonais
Faire un circuit logique avec Perceptron (Perceptron multicouche)
Faire Oui Non Popup avec Kivy
Faisons un site multilingue en utilisant flask-babel
Faire une minuterie de lavage-séchage avec Raspberry Pi
Créer une animation GIF avec surveillance des dossiers
Faisons un calcul de combinaison avec Python
Créez une application de bureau avec Python avec Electron
Faisons un plug-in backend pour Errbot
[Ev3dev] Faisons un programme de contrôle à distance par Python avec le protocole RPyC
Un mémorandum pour faire WebDAV uniquement avec nginx
[Piyopiyokai # 1] Jouons avec Lambda: création d'une fonction Lambda