====== Jetson TK1 (Tegra-Board) ====== ===== Alternativen zum Booten des TK1 ===== 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@ 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@ 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. (tof) alt: ==== via Ethernet (NFS) ==== Geignete Stichworte: PXE https://devtalk.nvidia.com/default/topic/744908/jetson-tk1-boot-over-nfs/?offset=2 ==== via SATA ==== 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-/ ==== via USB ==== https://demotomohiro.github.io/hardware/jetson_tk1/setup/external_storage.html https://devtalk.nvidia.com/default/topic/747933/is-it-possible-to-boot-from-sd-or-usb-hdd-and-how-jetson-tk1-/ (uboot) http://demotomohiro.github.io/hardware/jetson_tk1/setup/sdcard.html (recovery mode) https://demotomohiro.github.io/hardware/jetson_tk1/setup/recovery_mode.html http://developer.download.nvidia.com/embedded/L4T/r21_Release_v5.0/l4t_quick_start_guide.txt?autho=1469187153_19e21052ec3e54440769c65fc640e1b3&file=l4t_quick_start_guide.txt ===== Cluster im RZ ===== 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) ==== Status der Boards ==== === tegra01 === cpp interface === tegra02 === python interface === tegra03 === for testing === tegra04 === for testing ===== Rezept für ein neues Board ===== Dauer ca. 2,5-3h (incl. Zeiten fürs Compilieren) * Board via USB mit dem R21.3 flashen sudo apt-add-repository universe sudo apt-get update * Pakete installieren sudo apt-get install ssh lm-sensors htop curl python-pip cmake * authorized_keys nach .ssh/ * cuda und openCV für L4T von nvidia installieren {{/dokuwiki/lib/images/smileys/fixme.gif|FIXME}} (Daten noch für uns auf Server kopieren) 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 * Pakete installieren 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 * glog installieren 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 * Pakete für Python installieren (sudo pip install) Cython scipy scikit-image scikit-learn ipython h5py leveldb nose pyyaml pandas python-dateutil protobuf python-gflags * cuDNN von nvidia installieren (caffe compiliert aktuell nur mit dem cudnn-6.5-linux-armv7-R1) - Die libs nach /usr/lib/ , die header nach /usr/include/ * caffeHomeMade kopieren dev01.picalike.corpex-kunden.de:/home/picalike-dev/pvt-dev/picalikeCaffe/caffeHomeMade * tee Repository clonen git clone ssh://picalike-dev@dev01.picalike.corpex-kunden.de/home/picalike-dev/pvt-dev/tee.git * caffe bauen (Makefile.config anpassen wegen CPU_ONLY, USE_CUDNN, CUSTOM_CXX) 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 * tee bauen (CMakeList.txt anpassen z.B. CPU/GPU) cmake . make * Installation testen ===== Performance Mode ===== 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 ===== Feature-Extraction testen ===== (siehe auch [[caffe_zur_feat.extraktion|Features mit caffe für Bilder bekommen]]) {{/dokuwiki/lib/images/smileys/fixme.gif|FIXME}} wird schrittweise hierher überführt und aktuallisiert export LD_LIBRARY_PATH=../caffeHomeMade/caffe/.build_release/lib:/usr/local/cuda/lib ==== cpp Dienst ==== * Dienst starten (im Verzeichnis tee/) ./feat_from_img models/bvlc_reference_caffenet.caffemodel settings/imagenet_val.prototxt ./socket 1 GPU python scripts/featServer.py ./socket ==== python Dienst ==== * Dienst starten (im Verzeichnis tee/) export PYTHONPATH=/home/ubuntu/caffeHomeMade/caffe/python python ./scripts/pyFeatServer.py ==== Testen ==== * Testbild abfragen curl localhost:3141/?url=http://petattack.com/wp-content/uploads/2014/07/little_cute_cat_1920x1080.jpg\&blobNames=fc7 ==== Globale Konfiguration für CUDA ==== 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.