Rechnerbetriebsgruppe Informatik

Tensorflow und CUDA 11

In dem Blog-Beitrag „TensorFlow selbst gebastelt“ wurde die Kompilierung und Installation von Tensorflow 1.15 mit CUDA-Unterstützung für CUDA-10 beschrieben. Mittlerweile ist CUDA in der Version 11 angekommen und Tensorflow gibt es in der Version 2.3.0: Ein Update ist also nötig!

Das Vorgehen ist relativ ähnlich zum vorherigen Beitrag. Die erste große Hürde ist Bazel. Zum Einsatz kam eine vorkompilierte Version (3.2.0) von github:

cd ~ ; wget https://github.com/bazelbuild/bazel/releases/download/3.2.0/bazel-3.2.0-linux-x86_64

Danach wurde tensorflow von github herruntergeladen:

  1. git clone https://github.com/tensorflow/tensorflow.git
  2. cd tensorflow/
  3. git tag
  4. git checkout tags/v2.3.0 -b v2.3.0-branch
  5. ./configure

Nun wird die gewünschte Konfiguration abgefragt:

  1. /usr/bin/python3 (Default-Wert)
  2. /usr/lib/python3.6/site-packages (Default-Wert)
  3. n (OpenCL SYCL)
  4. n (ROCm)
  5. y (CUDA)
  6. n (TensorRT)
  7. 11 (CUDA-Version)
  8. 8 (cuDNN-Version)
  9. (leere Eingabe) (ncc)
  10. /usr/,/usr/include/,/usr/local/cuda-11.0/,/usr/local/cuda-11.0/include/,/opt/cuda/include/,/opt/cuda/lib64
  11. 7.0 (compute cap)
  12. n
  13. /usr/bin/gcc (Default-Wert)
  14. -D_GLIBCXX_USE_CXX11_ABI=0 -O3 -Wformat -Wformat-security -fstack-protector -fPIC -march=native -Wno-sign-compare
  15. n

Die Konfiguration ist fertig – jetzt das Bauen mit dem Bazel von github:

../bazel-3.2.0-linux-x86_64 build –config=opt –config=numa –config=cuda –config=mkl –config=monolithic –config=v2 //tensorflow/tools/pip_package:build_pip_package

Jetzt lange Warten ….. und dann das Paket schnüren:

bazel-bin/tensorflow/tools/pip_package/build_pip_package tensorflow_pkg

Die fertige whl-Datei liegt nun unter tensorflow_pkg und kann nun installiert werden:

pip3 install -I tensorflow_pkg/tensorflow-2.3.0-cp36-cp36m-linux_x86_64.whl

pip3 list | grep tensorflow

Informationen für die NutzerInnen des Instituts für Informatik:

Auf gruenau9 und gruenau10 kann das pip-Paket wie folgt installiert werden:

pip3 install --force-reinstall /vol/pool-software/tensorflow/gruenau9_10/tensorflow-2.3.0-cp36-cp36m-linux_x86_64.whl

26. August 2020 | Veröffentlicht von sombrurx | Kein Kommentar »
Veröffentlicht unter Allgemein

CUDA 11 unter OpenSuse15.2

Um CUDA nutzen zu können, müssen die entsprechenden Treiber für die NVIDIA-GPU und die Bibliotheken installiert sein. Unter OpenSuse 15.2 kann man die entsprechenden Repositories hinzufügen:

  • NVIDIA-Treiber: https://download.nvidia.com/opensuse/leap/15.2
  • CUDA: http://developer.download.nvidia.com/compute/cuda/repos/opensuse15/x86_64

Danach müssen folgende Pakete installiert werden:

  • cuda-11-0
  • nvidia-computeG04 (Repo: cuda)
  • nvidia-computeG05 (Repo: NVIDIA)

Um ältere Binaries zu unterstützen, die gegen ältere CUDA-Bibliotheken gelinkt sind, können noch folgende Pakete installiert werden:

  • cuda-10-0
  • cuda-10-1
  • cuda-10-2

Nach der Installation und ggf. einem Neustart kann mit dem Kommando „nvidia-smi“ alles geprüft werden.

Zur GPU-Unterstützung für Deep Neural Networks sollte NVIDIA cuDNN installiert werden. Die Bibliothek kann von der NVIDIA-Webseite in verschiedenen Versionen heruntergeladen werden:

  • cudnn-7.4.2
  • cudnn-7.6.5
  • cudnn-8.0.x

Die verschiedenen Versionen sind ggf. nötig, falls vorkompilierte Bibliotheken zum Einsatz kommen, die gegen eine bestimmte Major o. Minor-Version gelinkt sind.

Linkliste:

[1]https://developer.nvidia.com/cudnn

26. August 2020 | Veröffentlicht von sombrurx | Kein Kommentar »
Veröffentlicht unter Allgemein

.xsession-errors deaktivieren

Bei fehlerhaften oder abgestürzten X-Anwendungen kommt es zu sehr vielen Eintragen in der Datei .xsession-errors – insbesondere wenn die Session lange läuft.

Damit die Nutzer nicht das Home-Verzeichnis bzw. das Netzwerk-/SAN-Laufwerk vollschreiben (2TB hatten wir schon), haben wir das Loggen deaktiviert. Unter OpenSuse war folgendes nötig:

Unter /etc/X11/xinit/xinitrc.d/ wurde die Datei 05-noerrfile mit folgendem Inhalt angelegt:

#!/bin/sh
# This is a -*- shell-script -*- fragment called by /etc/X11/Xsession

# Redirect all errors to /dev/null instead of $ERRFILE
# (~/.xsession-errors by default), to avoid filling up users home
# directory with error messages.  Allow the user to disable this by
# creating ~/.xsession-errors-enable

if [ ! -f "$HOME/.xsession-errors-enable" ] ; then

  rm -f $HOME/.xsession-errors
  ln -s /dev/null $HOME/.xsession-errors

  # Report the change to the log file before switching
  echo "info: Redirecting xsession messages to /dev/null."
  echo "info: touch '$HOME/.xsession-errors-enable' to disable this."
  exec >> /dev/null 2>&1
fi

Die Rechte der Datei müssen angepasst werden:

chmod 755 /etc/X11/xinit/xinitrc.d/05-noerrfile

Sobald sich der Nutzer nun einloggt, zeigt der Link .xsession-errors nach /dev/null.

6. Dezember 2019 | Veröffentlicht von sombrurx | Kein Kommentar »
Veröffentlicht unter Allgemein

TensorFlow selbst gebastelt

Auf den Server und PCs ist u.a. das TensorFlow-Paket für Python 2 & 3 installiert. Für GPU und MKL gibt es jeweils spezielle Pakete. Verschiedene Features (z.B. AVX512-Instruktionen von neueren Intel-CPUs) werden jedoch nicht unterstützt. Ich habe deshalb TensorFlow 1.15 (TF) für die einzelnen Systeme am Institut gebaut. TF gibt es mittlerweile auch in der Version 2.0 jedoch ist die API stark verändert worden, weshalb sie nicht genutzt wurde.

Ich habe die Systeme am Institut wie folgt gruppiert:

GruppeArchitekturCUDASyCLMKLNUMA
OptiPlex3060Coffee LakeNoNoYesNo
OptiPlex7040Skylake10.1NoYesNo
gruenauClovertownNoNoYesNo
gruenau1Sandy BridgeNoNoYesYes
gruenau[2-4]SkylakeNoNoYesYes
gruenau[5-8]Ivy BridgeNoNoYesYes
gruenau9Skylake10.1NoYesYes

Beim Bauen von TF aus den Quellen habe ich mich grob an [1] & [2] orientiert. Die Schritte sind dann mit Python 3, CUDA und MKL (z.B. gruenau9):

  1. git clone https://github.com/tensorflow/tensorflow.git
  2. cd tensorflow
  3. git fetch –all –tags –prune
  4. git checkout tags/v1.15.0-rc3 -b r1.15
  5. source /usr/local/lib/bazel/bin/bazel-complete.bash
  6. ./configure

Nun wird die gewünschte Konfiguration abgefragt. Meine Eingaben waren:

  1. /usr/bin/python3
  2. /usr/lib/python3.6/site-packages
  3. y
  4. n
  5. n
  6. y
  7. n
  8. 10.1
  9. 7.4.2
  10. (leere Eingabe)
  11. /usr/,/usr/include/,/usr/local/cuda-10.1/,/usr/local/cuda-10.1/include/,/opt/cuda/include/,/opt/cuda/lib64
  12. (leere Eingabe) -> Übernahme von Default-Wert
  13. n
  14. /usr/bin/gcc-6
  15. n
  16. -D_GLIBCXX_USE_CXX11_ABI=0 -O3 -Wformat -Wformat-security -fstack-protector -fPIC -march=native -Wno-sign-compare
  17. n

Die Konfiguration ist fertig – jetzt das Bauen:

bazel build --config=opt --config=numa --config=cuda --config=mkl --config=monolithic //tensorflow/tools/pip_package:build_pip_package

Jetzt lange Warten ….. und dann das Paket schnüren:

bazel-bin/tensorflow/tools/pip_package/build_pip_package tensorflow_pkg

Die fertige whl-Datei liegt nun unter tensorflow_pkg und kann nun installiert werden:

pip3 install -I tensorflow_pkg/tensorflow-1.15.0rc3-cp36-cp36m-linux_x86_64.whl

pip3 list | grep tensorflow

Für die einzelnen Gruppen waren sowohl die Angaben bei der Konfiguration anders (CUDA ja/nein?) als auch beim Bauen (–config=cuda & –config=numa den Maschinen entsprechend).

24. Oktober 2019 | Veröffentlicht von sombrurx | Kein Kommentar »
Veröffentlicht unter Allgemein

MDADM Raid1 wiederherstellen

Wenn Hardware-Raid-controller nicht vorhanden sind oder nicht ausreichend vom System unterstützt werden, sind Software-Raids eine gute Alternative. Ein Vorteil dabei ist, dass bei jedem System und bei jeder Raid-Variante, die gleichen Tools und Kommandos zum Einsatz kommen.

Hier soll es nun um die Wiederherstellung eines Raid1 aus 2 Platten nach einen Ausfall gehen. Los geht es meist mit Lesefehler.

#> dmesg
25704.754673 print_req_error: I/O error, dev sdc, sector 976912
25704.754885 md: super_written gets error=10
25704.755024 md/raid1:md0: Disk failure on sdc2, disabling device.
md/raid1:md0: Operation continuing on 1 devices.

Über das Proc-FS kann man nun mehr Details über den Zustand des Raids bekommen.

#> cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdb2[0] sdc2[1](F)
142748672 blocks super 1.2 [2/1] [U_]
bitmap: 1/2 pages [4KB], 65536KB chunk

Die Platte /dev/sdc2 ist als fehlerhaft markiert (F) und muss ersetzt werden. Dazu muss sie zunächst aus dem Raid genommen werden.

#> mdadm /dev/md0 --remove /dev/sdc2
mdadm: hot removed /dev/sdc2 from /dev/md0

#> cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdb2[0]
142748672 blocks super 1.2 [2/1] [U_]
bitmap: 1/2 pages [4KB], 65536KB chunk

Die defekte Platte kann nun entfernt werden und durch eine neue Platte mit gleicher Größe ersetzt werden. Diese muss nun erkannt werden (SCSI-Bus scannen und Partitionstabelle einlesen).

#> rescan-scsi-bus
#> partprobe

Falls die Partitionen der beiden Platten nicht übereinstimmen, kann man die Partitionstabelle von der bestehenden Platte kopieren. Danach muss diese wieder neu eingelesen werden.

#> sfdisk -d /dev/sdb | sfdisk /dev/sdc
#> partprobe

Nun kann die neue Platte (Partition) wieder zum Raid hinzugefügt werden.

#> mdadm /dev/md0 --manage --add /dev/sdc2
#> cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdc2[2] sdb2[0]
142748672 blocks super 1.2 [2/1] [U_]
[=================>...] recovery = 86.1% (123025920/142748672) finish=7.0min speed=46830K/sec
bitmap: 0/2 pages [0KB], 65536KB chunk

Und weiter geht’s!

20. Juni 2019 | Veröffentlicht von sombrurx | Kein Kommentar »
Veröffentlicht unter Allgemein

IT Workshop 2019 – Medientechnik an der HU Berlin

Das Programm zum Workshop findet man auf den Seiten des CMS. Ein Schwerpunkt ist „Räume, Ausstattung und Medientechnik“. Das CMS und die Technische Abteilung (TA) haben technische Richtlinien erarbeitet und eine Umfrage zu didaktischen Szenarien gemacht. Es entstand daraus der 3. AG DLI Report.

Herr Pirr ruft zum Mitwirken bei der AG DLI auf. Es gibt einen entsprechenden Moodle-Kurs. Man soll bei Interesse eine Mail an Herrn Pirr schicken.

Die wichtigsten Punkte des Workshops zusammengefasst:

  • AG DLI erarbeitet Richtlinien zur Medienausstattung von Lehrräumen
  • Zentrale Beschaffung, Wartung und Support in Bezug auf Medientechnik (MT) wird von einigen Teilnehmern gefordert
  • Vorschläge für einfachere Handhabung der MT, Information zu Ansprechpartnern und Anleitungen zur MT wurden diskutiert

21. Mai 2019 | Veröffentlicht von sombrurx | Kein Kommentar »
Veröffentlicht unter Allgemein

CUDA-10 unter OpenSuse 15

Nvidias CUDA bietet die Möglichkeit, GPU von Nvdia zu programmieren und zum Rechen zu nutzen. Darauf bauen viele weitere Technologien, Bibliotheken, Frameworks etc. auf. Dazu zählen u.a. OpenCL und Tensorflow.

Am Institut für Informatik sind zum Einen zwei PC-Pools (Berlin, Brandenburg) und ein Server (gruenau9) mit Nvidia-Karten ausgestattet (Geforce 750GTX bzw. TeslaV100).

13. Mai 2019 | Veröffentlicht von sombrurx | Kein Kommentar »
Veröffentlicht unter Allgemein

Record my desktop

Im Rahmen von Lehrveranstaltungen ist es durchaus sinnvoll kleine Videos zu erstellen, die bestimmte Abläufe zeigen: Bilder sagen mehr als 1000 Worte.

Das Tool recordmydesktop bietet diesbezüglich die Möglichkeit den gesamten Desktop, Teile davon oder einzelne Fenster als Video aufzunehmen.

Beispiel:

recordmydesktop --fps 6 --width 1120 --height 630

Um einzelne Fenster aufzunehmen, muss die Window-ID benutzt werden. Diese lässt sich bequem über xwininfo ermitteln.

WINDOW_ID=xwininfo -display $DISPLAY | grep 'id: 0x' | grep -Eo '0x[a-z0-9]+'

recordmydesktop --windowid $WINDOW_ID --on-the-fly-encoding --v_quality 50 --s_quality 10 -o outfile.ogv

Beides zusammen gibt es als Skript auf den Linux-Rechnern des Instituts:

record_window.sh [outfile-name]

Nach dem Aufruf muss man das gewünschte Fenster wählen und startet damit auch die Aufnahme. Durch Strg+C wird die Aufnahme beendet. Die Aufnahme wird unter record.ogv abgelegt. Der Dateinahme kann dem Skript mitgegeben werden.

Das dort erstellte Video:

9. Mai 2019 | Veröffentlicht von sombrurx | Kein Kommentar »
Veröffentlicht unter Allgemein

ffmpeg mit libx264

Das ffmpeg-Paket einiger Linux-Distributionen (u.a. OpenSuse) enthält keinen Support für x264. Das Programm ffmpeg kann Videos somit nicht ins h264-Format bringen (encoding). Um ffmpeg mit x264-Unterstützung zu haben, muss man beide Pakete selbst kompilieren.

x264

Zunächst muss man die Quellen herunterladen:

git clone https://code.videolan.org/videolan/x264.git

Danach muss x246 gebaut werden:

./configure --enable-shared; make; make install

Das Programm und die Bibliothek werden unter /usr/local installiert.

FFMpeg

Nun kann ffmpeg heruntergeladen, konfiguriert (inkl. x264-Support), gebaut und installiert werden:

  • git clone git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
  • ./configure --enable-gpl --enable-libx264
  • make
  • make install

Testen

Nach der Installation (unter /usr/local/) können die Unterstützten Codecs gelistet werden:

/usr/local/bin/ffmpeg -codecs

Dabei sollte h264 gelistet sein:

DEV.LS h264 H.264 ... (encoders: libx264 libx264rgb h264_v4l2m2m

Diese Version von ffmpeg enthält deutlich mehr Codecs als die OpenSuse-Version und kann auch deutlich mehr Codecs für das Encoding nutzen.

2. Mai 2019 | Veröffentlicht von sombrurx | Kein Kommentar »
Veröffentlicht unter Allgemein

DosBox, Windows 3.11 & Games

Mitunter soll ältere Software nochmal zum Laufen gebracht werden. Gründe gibt es mindestens zwei: man will ältere Dokumente lesen und benötigt den entsprechenden Reader oder … „Just4Fun“ …man will nochmal ein altes Spiel von früher Spielen. Ich habe letzteres mit „Mamba“ probiert.

Benötigt wurde dafür Windows 3.11 und ich hatte ein Ubuntu 18.04.

Die Schritte in der Übersicht:

  1. DosBox installieren
  2. Laufwerk anlegen und einbinden
  3. Windows 3.11 installieren
  4. Mamba auf das Laufwerk auf und starten

…und nun die Details…

DosBox installieren

Unter Ubuntu reicht hier ein apt-get install dosbox. Danach muss ein Ordner für evtl. Konfigurationen und das Laufwerk angelegt werden: mkdir ~/.dosbox.

Laufwerk anlegen und einbinden

Für das Laufwerk (c:) muss ein Unterverzeichnis in ~/.dosbox und ein Konfiguration (~/.dosbox/dosbox.conf bzw. ~/.dosbox/dosbox-VERSION.conf) angelegt werden:

mkdir ~/.dosbox/drive_c

Die Datei ~/.dosbox/dosbox.conf muss folgenden Inhalt haben:

[autoexec]
mount c ~/.dosbox/drive_c

Windows 3.11 installieren

Zunächst muss man sich die Windows 3.11-Disketten besorgen. Ich hatte 8 Disketten-Images. Diese habe ich einzeln gemounten und in einen Installationsordner kopiert:

mkdir ~/.dosbox/drive_c/install
for i in `seq 1 8`; do
  sudo mount -o loop Disk0$i.img /mnt
  cp /mnt/* ~/.dosbox/drive_c/install
  sudo umount /mnt
done

Nun „dosbox“ starten und dort ins Laufwerk „c:“ und in den Ordner „c:/install“ wechseln. Jetzt kann mit „setup.exe“ die Win3.11-Installation beginnen.

Mamba auf das Laufwerk auf und starten

Zum Schluss wird Mamba in das Verzeichnis ~/.dosbox/drive_c kopiert. Nun Windows hochfahren, den File Manager öffnen und Mamba starten.

Linkliste

  1. https://www.dosbox.com/
  2. DosBox unter Ubuntu: https://wiki.ubuntuusers.de/DOSBox/
  3. Mounten via Loop Device: https://de.wikipedia.org/wiki/Loop_device
  4. Windows 3.11 im Internet suchen
  5. Mamba
16. April 2019 | Veröffentlicht von sombrurx | Kein Kommentar »
Veröffentlicht unter Allgemein