Hello, juste un petit journal rapide car je suis content:
j'ai réussi à faire fonctionner OpenCL dans LXC
en Espace utilisateur.
C'est pratique pour pouvoir expérimenter des librairies etc. sans casser son système !
Malheureusement je ne suis pas sur d'avoir tout noté, mais tout de même un petit récap.
Création du container
Je pars d'un LXC en Espace utilisateur.
Pour cela voir la doc officielle de lxc,
mais en résumé c'est (pour mon utilisateur nommé alex):
- édition de
/etc/lxc/lxc-usernet
pour dire que mon utilisateur à le droit de créer une interface réseau virtuelle lxcbr0 (man lxc-usernet)
alex veth lxcbr0 10
- édition /etc/subuid qui dit quels uid supplémentaire mon utilisateur peut utiliser (man subuid)
alex:165536:65536
- édition /etc/subgid pareil pour les groupes (man subgid)
alex:165536:65536
- copie de la template générale de lxc dans son dossier:
$ cp /etc/lxc/default.conf to ~/.config/lxc/default.conf
- Dans ce fichier, on ajoute des instruction de translation d'uid. Attention c'est un point important ! Pour que notre utilisateur ubuntu du container est accès au socket X11 de l'hôte, on va lui donner le même uid (cf. User identifier) que notre utilisateur sur l'hôte. Dans mon cas, le futur utilisateur ubuntu (dans le container) aura pour uid 1000, mais mon utilisateur alex a pour uid 1001.
# mapping uid before 1000 to 165536+ on host
lxc.id_map = u 0 165536 1000
lxc.id_map = g 0 165536 1000
# mapping uid 1000 to 1001 on host
lxc.id_map = u 1000 1001 1
lxc.id_map = g 1000 1001 1
# mapping uid above 1000 to 166537+
lxc.id_map = u 1001 166537 64535
lxc.id_map = g 1001 166537 64535
cette configuration est une adaptation de celle proposée dans ce billet de blog
mais c'est également bien pratique en général,
vu que l'utilisateur de l'hôte pourra ainsi voir les fichiers de l'utilisateur du container !
- enfin sur ubuntu zesty, pour des problématiques de sécurité liés à AppArmor, il me faut ajouter (toujours dans ce fichier):
lxc.aa_allow_incomplete = 1
De là on peut créer un container LXC, par exemple:
$ lxc-create -n opencl-test -t download -- -d ubuntu -r zesty -a amd64
Options spéciales
Maintenant pour que ce container puisse utiliser la carte graphique,
on doit encore monter /dev/dri
, l'accès à l'accélération graphique
et /tmp/.X11-unix
qui contient les sockets pour communiquer avec le serveur X11.
(comme indiqué par ce billet de blog cité précédemment).
Pour cela on édite la configuration de notre container,
normalement dans ~/.local/share/lxc/opencl-test/config
pour ajouter:
# access to resource for opencl
lxc.mount.entry = /dev/dri dev/dri none bind,optional,create=dir
lxc.mount.entry = /tmp/.X11-unix tmp/.X11-unix none bind,optional,create=dir
Attention ce partage du socket X11 ne fonctionne que parce-que l'on a donné à l'utilisateur ubuntu le même uid que alex (cf. ci-dessus). Sinon le fichier sera présent mais non accessible.
On peut démarrer notre container et entrer dedans (après avoir mis un mot de passe)
$ lxc-start -n opencl-test
$ lxc-attach -n opencl-test passwd ubuntu
$ lxc-console -n opencl-test
Test
Pour tester, ayant une Intel Skylake,
j'ai installé beignet
et clinfo:
(opencl-test)$ sudo apt update && sudo apt upgrade
(opencl-test)$ sudo apt install beignet-opencl-icd clinfo
(opencl-test)$ clinfo
Cette dernière commande devrait vous donner les infos sur votre carte graphique.
On peut également essayer une lib comme pyopencl:
(opencl-test)$ sudo apt install build-essential libffi-dev libblas-dev liblapack-dev
(opencl-test)$ sudo -H pip3 install Cython numpy
(opencl-test)$ sudo -H pip3 install pyopencl
Et après avoir copié l'exemple de la documentation dans test_pyopencl.py
:
(opencl-test)$ PYOPENCL_CTX='0' python3 test_pyopencl.py
Beignet: "unable to find good values for local_work_size[i], please provide\n" " local_work_size[] explicitly, you can find good values with\n" " trial-and-error method."
[ 0. 0. 0. ..., 0. 0. 0.]
0.0
Le warning n'est pas top, mais ne pose pas de problème.
Le résultat égal à 0 est ce qu'on attendait.
Bon j'ai essayé l'installation de theano et gpuarray, mais pour le moment c'est pas ça (segfault lors des tests) !
# et Docker aussi ?
Posté par Marc Quinton . Évalué à 4.
manifestement, ca devrait aussi passer avec Docker : https://github.com/chihchun/opencl-docker
[^] # Re: et Docker aussi ?
Posté par Alex G. . Évalué à 2.
Oui, en vérité, j'ai oublié de le citer, mais c'est de voir ce projet qui m'a incité à essayer avec LXC (et fait trouver l'article sur lxc).
# Commentaire supprimé
Posté par Anonyme . Évalué à 3.
Ce commentaire a été supprimé par l’équipe de modération.
[^] # Re: LXC utilisateur
Posté par Alex G. . Évalué à 2.
Oui ubuntu 17.04.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.