Da der Flashspeicher von tegra03 nach ca. 500 Dienststunden den Status Eichhörnchen hat, hier ein Rezept um die Boards von SD-Karte zu booten und den fest verlöteten Speicher zu schonen. Der Speicher auf dem Bord wird trotzdem für Bootloader und Boot-Config benötigt, aber nicht mehr so stark beansprucht.
Auf picalike@sg01:/mnt/storage/var/jetson-tk1 befinden sich die Dateien:
Tegra124_Linux_R21.5.0_armhf.tbz2 Tegra_Linux_Sample-Root-Filesystem_R21.5.0_armhf.tbz2 remove_desktop [sg01:/mnt/storage/var/jetson-tk1]
lade diese auf deinen Rechner.
Jetzt die Dateien entpacken und das flashen des Boards vorbereiten:
sudo tar xpf Tegra124_Linux_R21.5.0_armhf.tbz2 cd Linux_for_Tegra/rootfs/ sudo tar xpf ../../Tegra_Linux_Sample-Root-Filesystem_R21.5.0_armhf.tbz2 cd ../ sudo ./apply_binaries.sh
Das Board an die Stromversorgung anschließen und via USB-Kabel mit dem Rechner verbinden. Den Knopf “force recovery” gedrückt halten, “reset” drücken und “force recovery” wieder loslassen. Das Board flashen (dauert ein paar Minuten) mit:
sudo ./flash.sh jetson-tk1 mmcblk0p1
Das Board startet anschließend neu. Per ssh mit ubuntu@<ip> und pw(ubuntu) einloggen. In /etc/hostname einen sinnigen Hostnamen eintragen und eine sd-Karte einsetzen. Indem man das remove_desktop Skript auf das Board kopiert und dort ausführt wird man den Ubuntu-Desktop wieder los. Das System startet ohne Desktop neu.
Per ssh mit ubuntu@<hostname> einloggen und die Dateien von picalike@sg01:/mnt/storage/var/jetson-tk1 auf das Board laden. Als nächstes wird die sd-Karte für das Booten vorbereitet.
sudo mkfs.ext4 /dev/mmcblk1p1 sudo tar xpf Tegra124_Linux_R21.5.0_armhf.tbz2 cd Linux_for_Tegra/rootfs/ sudo tar xpf ../../Tegra_Linux_Sample-Root-Filesystem_R21.5.0_armhf.tbz2 cd ../ sudo ./apply_binaries.sh
Die sd-Karte mounten und das rootfs schreiben (dauert ein paar Minuten):
sudo mkdir /mnt/sd sudo mount /dev/mmcblk1p1 /mnt/sd cd Linux_for_Tegra/rootfs/ sudo cp -a * /mnt/sd
Dem Bootloader sagen das er von sd-Karte booten soll:
cd /boot/extlinux/ sudo cp jetson-tk1_extlinux.conf.sdcard extlinux.conf
Das tk1 neu starten:
sudo reboot
Danach wieder den Hostnamen anpassen und den Ubuntu-Desktop entfernen mit dem remove_desktop Skript.
Das tk1 bootet jetzt von sd-Karte und kann eingerichtet werden.
SD-Karte von Image erzeugen
dd if=sdcard.image of=/dev/<> bs=1M status=progress
Nach dem dd-Befehl unbedingt prüfen, ob man die Karte mounten kann. Wenn es einen Fehler der Form “EXT4-fs (mmcblk0p1): bad geometry: block count 3947264 exceeds size of device (3888512 blocks)” gibt, könnten die folgenden zwei Befehle helfen:
e2fsck -f /dev/mmcblk0p1 # ggf. device anpassen resize2fs /dev/mmcblk0p1 # ggf. device anpassen
Danach noch den Hostnamen in /etc/hostname ändern. (t<gpuBoard>of<Cluster>)
alt:
Geignete Stichworte: PXE https://devtalk.nvidia.com/default/topic/744908/jetson-tk1-boot-over-nfs/?offset=2
https://devtalk.nvidia.com/default/topic/774120/jetson-tk1-sata3-support/
https://devtalk.nvidia.com/default/topic/750678/jetson-tk1/jetson-tk1-boot-from-sata-/
https://demotomohiro.github.io/hardware/jetson_tk1/setup/external_storage.html
(uboot) http://demotomohiro.github.io/hardware/jetson_tk1/setup/sdcard.html
(recovery mode) https://demotomohiro.github.io/hardware/jetson_tk1/setup/recovery_mode.html
In der Süderstrasse steht ein Cluster aus 4 Tegraboards
tegra{01..04}.picalike.corpex-kunden.de
Diese sind nur im VPN zu erreichen, dürfen aber selbst aufs Web zugreifen (wg. Download der Bilder von Urls)
cpp interface
python interface
for testing
for testing
Dauer ca. 2,5-3h (incl. Zeiten fürs Compilieren)
sudo apt-add-repository universe sudo apt-get update
sudo apt-get install ssh lm-sensors htop curl python-pip cmake
sudo dpkg -i cuda-repo-l4t-r21.3-6-5-prod_6.5-42_armhf.deb sudo dpkg -i libopencv4tegra-repo_l4t-r21_2.4.10.1_armhf.deb sudo apt-get update sudo apt-get install cuda-toolkit-6-5 sudo apt-get install libopencv4tegra libopencv4tegra-dev
sudo apt-get install libboost-all-dev libblas-dev protobuf-compiler g++-4.7 libprotobuf-dev libgflags-dev libhdf5-dev libleveldb-dev libsnappy-dev liblmdb-dev libatlas-dev liblapack-dev libatlas-base-dev libjsoncpp-dev gfortran python-numpy python-matplotlib python-networkx
wget https://google-glog.googlecode.com/files/glog-0.3.3.tar.gz tar zxvf glog-0.3.3.tar.gz ./configure make sudo make install
Cython scipy scikit-image scikit-learn ipython h5py leveldb nose pyyaml pandas python-dateutil protobuf python-gflags
dev01.picalike.corpex-kunden.de:/home/picalike-dev/pvt-dev/picalikeCaffe/caffeHomeMade
git clone ssh://picalike-dev@dev01.picalike.corpex-kunden.de/home/picalike-dev/pvt-dev/tee.git
make all -j 4 export LD_LIBRARY_PATH=../caffeHomeMade/caffe/.build_release/lib:/usr/local/cuda/lib make test -j 4 make runtest make pycaffe
cmake . make
Der arm-Prozessor hat unterschiedliche Betriebsmodi. Abfrage des aktuellen Modus via:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
Als default ist 'interactive' eingestellt, sehr ähnlich zu 'ondemand'. Optimale Laufzeiten für ConvNets erhält man mit 'performance'. Wechsel in den Performance Mode via:
$ sudo su $ tee/scripts/maxCPU.sh
Alternativ direkt den governor einstellen:
$ echo "interactive" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
(siehe auch Features mit caffe für Bilder bekommen) wird schrittweise hierher überführt und aktuallisiert
export LD_LIBRARY_PATH=../caffeHomeMade/caffe/.build_release/lib:/usr/local/cuda/lib
./feat_from_img models/bvlc_reference_caffenet.caffemodel settings/imagenet_val.prototxt ./socket 1 GPU python scripts/featServer.py ./socket
export PYTHONPATH=/home/ubuntu/caffeHomeMade/caffe/python python ./scripts/pyFeatServer.py
curl localhost:3141/?url=http://petattack.com/wp-content/uploads/2014/07/little_cute_cat_1920x1080.jpg\&blobNames=fc7
Für cuDNN ist sicherzustellen, dass symbolische Links für die cuDNN Bibliothek in /usr/lib/ verwendet wurden:
libcudnn.so -> libcudnn.so.6.5.19* libcudnn.so.6.5 -> libcudnn.so.6.5.19* libcudnn.so.6.5.19*
Falls die ersten beiden Dateien keine Links sind, bitte anpassen.
Eine Datei cuda.conf in /etc/ld.so.conf.d mit folgendem Inhalt:
/usr/local/cuda-6.5/targets/armv7-linux-gnueabihf/lib/
Damit werden die Bibliotheken von CUDA global für gcc sichtbar. Zur Sicherheit nochmal
$ ldconfig
als root ausführen. Und dann sicherstellen, dass die richtige Theano-Version lokal installiert ist
pip install --user --upgrade --no-deps --ignore-installed Theano==0.7.0rc2
Für Theano sind noch weitere Anpassungen notwendig (.bashrc)
export PATH="$PATH:/usr/local/cuda/bin/" export C_INCLUDE_PATH="$C_INCLUDE_PATH:/usr/local/cuda/include/" export CPATH="$C_INCLUDE_PATH:/usr/local/cuda/include/"
Um sicherzustellen, dass cuDNN mit Theano verwendet wird, folgenden Export setzen:
export THEANO_FLAGS=mode=FAST_RUN,device=gpu,floatX=float32,optimizer_including=cudnn
Als abschließenden Test, mit ipython prüfen, ob alles funktioniert hat
$ ipython # import theano # from theano.sandbox.cuda import dnn
Dauert etwas länger, sollte aber keine Fehler werfen.