User Tools

Site Tools


timos_spielplatz

Paper

AlexNet Skalieren

Was tun, falls AlexNet als Basis verwendet wird, aber weniger Kategorien verwendet werden? Beispiel Kategorien 1,000 auf 240

However, because the problem is of a much smaller magnitude than that of the 
ImageNet Challenge , we scaled down the number of kernel mappings in all of 
the convolutional layers to half

Caffe SM

Wir brauchen ja ggf. Zugriff auf die internen Netzparameter und da bietet sich das Python Interface an. Als Beispiel sei hier die Extraktion von fc8, also dem Softmax-Layer gegeben:

  • mittels fprop_tee wird PICA_NET geladen.
  • W,b = PICA_NET.net.params['fc8'], also Blobs extrahieren
  • Die numpy-Daten liegen in W.data, b.data
  • Obacht: ggf. ist der Shape etwas lustig, deshalb lieber nochmal manuell W = W.data.reshape1), b = b.data.reshape2)
  • W.shape, b.shape sollte jetzt normal aussehen
  • dann nur noch pickeln pickle.dump([W,b], open('softmax.weights', 'w'))

koffeinhaltige Weisheiten

  • während des Trainings wird ein Random Crop eines Bilds erzeugt. Dieser ist bei jeder forward-Phase eine andere. D.h. eine einfache Form der Augmentierung der Daten. Mit 'mirror' kann zusätzlich noch eine gespiegelte Variante für das Training genutzt werden.

ML 101

Zauberkasten für kleine Machine Learner.

Theano

da GPUs nur float32 können und float64 aber per Default auf modernen CPUs ist, sollte folgende Einstellung in der .theanorc gesetzt werden

[global] floatX = float32

Gegebenenfalls ist es deshalb notwendig, gespeicherte Dateien zu “casten”, also beispielsweise:

X = np.load('/some/path/data.npy').astype('float32')

D.h., da die GPU die Genauigkeit vorgibt, wird an keiner Stelle mehr von float64 profitiert und sollte generell vermieden werden, da ja potenziell alles auf der GPU laufen kann. Weiterhin spart float32 erheblichen Platz bei Daten und Modellen.

Theano 0.7

Enthält Millionen von Bugfixes und Support for cuDNN für die schnelle Faltung. Bei Tests mit mnist war der neue Code 50% schneller. Auf grapu ist cuDNN global installiert und wird von Theano automatisch verwendet. Soll dies nicht geschehen, bzw. explizit geschehen, kann man es wie folgt deaktivieren/aktivieren:

THEANO_FLAGS=mode=FAST_RUN,device=gpu,floatX=float32,optimizer_excluding=conv_dnn THEANO_FLAGS=mode=FAST_RUN,device=gpu,floatX=float32,optimizer_including=cudnn

Bei der neuen Version handelt es sich um RC2. Tests auf grapu laufen gerade. Bzgl. Stabilität war Theano bisher immer vorbildlich.

Zoo der Bibliotheken

  • DeCAF: Vorläufer von Caffe. Liefert Modelle für AlexNet und ist mit 0.5s auf der CPU die beste Lösung falls keine GPU verwendet werden kann.
  • Caffe: Bibliothek für DeepLearning und ConvNet. Extrem schnell auf der GPU, aber nicht flexibel, um beliebige Kostenfunktionen out-of-the-box zu trainieren. Beschreibt allerdings Modelle generisch mittels Protokolldateien, um den ForwardProp-Test zur Testzeit einfach zu gestalten.
  • Theano: Erlaubt es einfach, math. Ausdrücke zu optimieren. Enthält sym. Differentiation und kann somit beliebige Kostenfunktionen optimieren. Arbeitspferd für alle unsere Modelle. Sehr Low-Level, aber mächtig.
  • pylearn2: Aufsatz für Theano, um Aufgaben wie das Modelltraining zu vereinfachen. Ähnlich wie bei Caffe können ganze Modelle einfach als Protokolldatei spezifiert und trainiert werden.

Tanzen mit PIP

Ein lokales Paket upgraden, egal ob global das Paket installiert ist. Keine Abhängigkeiten und eine bestimmte Version:

$ pip install --user --upgrade --no-deps --ignore-installed Theano==0.7.0rc2

Wechsel der GPUs

Welche GPUs sind vorhanden?

$ nvidia-smi

Und dann die Theano-Flags entsprechend setzen:

$ export THEANO_FLAGS=mode=FAST_RUN,device=gpu0,floatX
$ export THEANO_FLAGS=mode=FAST_RUN,device=gpu1,floatX

Neuer Nutzer mit CUDA

Der junge Mann muss auf jeden Fall in die Gruppe “video”, sonst läuft da gar nichts.

S.M.A.R.T

Prüfung ob eine Festplatte einen Knacks hat:

$ sudo smartctl -a /dev/sda #status ausgeben

Steht da nicht PASSED, droht Datenverlust. Aber die Interpretation erfordert etwas mehr Aufwand, als das.

Nvidia Kernel-Modul

Nach einem neuen Kernel heißt es einmal den Display-Manager (Annahme: “lightdm”) killen und das neue Modul bauen. Auf grap* ist CUDA 7.5 installiert, da sehen die Aufrufe wie folgt aus:

$ sudo su
$ cd /root/cuda [ggf.]
$ /etc/init.d/lightdm stop [1. Variante]
$ service lightdm stop [2. Variante]
$ sh ./cuda_7.5.18_linux.run --driver --silent
$ modprobe nvidia
$ nvidia-smi

Sollte keine Fehler ausgeben.

1) 1000, 4096

2) 1, 1000

timos_spielplatz.txt · Last modified: 2024/04/11 14:23 by 127.0.0.1