A certain engineer "COMPLEX"

開発メモ その165 gitで全ブランチをpullする

Introduction


備忘録。
UbuntuGit for Windowsで使えました。

How to


下記の方が教えてくれました。

すごく久々の投稿。 とりあえずコマンドを先に。 for branch in `git branch -r | grep -v HEAD | awk -F'/' '{print $2}'`; do git checkout ...

for branch in `git branch -r | grep -v HEAD | awk -F'/' '{print $2}'`; do git checkout $branch; git pull; done

Googleでgit 全ブランチで検索してトップに出てくるページのスクリプトは使えませんでした。

開発メモ その164 Ubuntu 18.04にCUDA 9.2をインストール

Introduction


CUDAのダウンロードページでCUDA 9.2にアクセスすると

Ubuntu 18.04に対応していないように見える。
そこはかとない不安を感じながら9.2をインストールしたのでメモ。

How to


17.10を選択し、runfile [local]を選択しダウンロードするだけです。
パッチもあるので忘れないこと。

インストール


sudo sh cuda_9.2.148_396.37_linux

でインストールを開始する。
最初にEULAの承諾を求められるので末尾に移動する。
Ctrl+Fで一気に末尾に。


Do you accept the previously read EULA?
accept/decline/quit:accept

EULAの承諾に対してはacceptと押下してENTER。
以降は、質問に答えていく形で、yまたはnEnterを駆使します。
途中でドライバーのインストールを聞かれますが、既に入っているなら無理してインストールする必要はないです。


You are attempting to install on an unsupported configuration. Do you wish to continue?
(y)es/(n)o [ default is no ]: y


Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 396.37?
(y)es/(n)o/(q)uit: n


Install the CUDA 9.2 Toolkit?
(y)es/(n)o/(q)uit: y


Enter Toolkit Location
[ default is /usr/local/cuda-9.2 ]:


Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: y


Install the CUDA 9.2 Samples?
(y)es/(n)o/(q)uit: y


Enter CUDA Samples Location
[ default is /home/takuya ]:


Installing the CUDA Toolkit in /usr/local/cuda-9.2 ...
Installing the CUDA Samples in /home/takuya ...
Copying samples to /home/takuya/NVIDIA_CUDA-9.2_Samples now...
Finished copying samples.


===========
= Summary =
===========


Driver: Not Selected
Toolkit: Installed in /usr/local/cuda-9.2
Samples: Installed in /home/takuya


Please make sure that
- PATH includes /usr/local/cuda-9.2/bin
- LD_LIBRARY_PATH includes /usr/local/cuda-9.2/lib64, or, add /usr/local/cuda-9.2/lib64 to /etc/ld.so.conf and run ldconfig as root


To uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-9.2/bin


Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-9.2/doc/pdf for detailed information on setting up CUDA.


***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 384.00 is required for CUDA 9.2 functionality to work.
To install the driver using this installer, run the following command, replacing with the name of this run file:
sudo .run -silent -driver


Logfile is /tmp/cuda_install_2992.log

パッチのインストール

こちらもEULAの承諾が必要です。


sudo sh cuda_9.2.148.1_linux

承諾方法は同様。
聞かれるのはインストール先のみ。


Enter CUDA Toolkit installation directory
[ default is /usr/local/cuda-9.2 ]:


Installation complete!
Installation directory: /usr/local/cuda-9.2

簡単ですね。
aptを使うインストールよりも、こちらのが簡単な気がしないでもないです。

開発メモ その163 Ubuntu 18.04 with CUDA 9.2でcaffeをビルドする

Introduction


Ubuntu 18.04でパッケージマネージャーからインストールできるgccのバージョンが7になっている。


$ gcc --version
gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

CUDA 9が6以降のgccでのビルドをサポートしていないため、caffeをビルドしようとするとエラーが起きてします。
が、openposeでビルドするときはこのエラーが起きないんですよね...
ちなみにこんなエラー。


$ cmake --build . --config Release
[ 1%] Running C++/Python protocol buffer compiler on /media/hdd/work/local/caffe/src/caffe/proto/caffe.proto
Scanning dependencies of target caffeproto
[ 1%] Building CXX object src/caffe/CMakeFiles/caffeproto.dir/__/__/include/caffe/proto/caffe.pb.cc.o
[ 1%] Linking CXX static library ../../lib/libcaffeproto.a
[ 1%] Built target caffeproto
[ 1%] Building NVCC (Device) object src/caffe/CMakeFiles/cuda_compile_1.dir/util/cuda_compile_1_generated_math_functions.cu.o
In file included from /usr/include/host_config.h:50:0,
from /usr/include/cuda_runtime.h:78,
from :0:
/usr/include/crt/host_config.h:121:2: error: #error -- unsupported GNU version! gcc versions later than 6 are not supported!
#error -- unsupported GNU version! gcc versions later than 6 are not supported!
^~~~~
CMake Error at cuda_compile_1_generated_math_functions.cu.o.Release.cmake:219 (message):
Error generating
/media/hdd/work/local/caffe/build/src/caffe/CMakeFiles/cuda_compile_1.dir/util/./cuda_compile_1_generated_math_functions.cu.o


src/caffe/CMakeFiles/caffe.dir/build.make:497: recipe for target 'src/caffe/CMakeFiles/cuda_compile_1.dir/util/cuda_compile_1_generated_math_functions.cu.o' failed
make[2]: *** [src/caffe/CMakeFiles/cuda_compile_1.dir/util/cuda_compile_1_generated_math_functions.cu.o] Error 1
CMakeFiles/Makefile2:235: recipe for target 'src/caffe/CMakeFiles/caffe.dir/all' failed
make[1]: *** [src/caffe/CMakeFiles/caffe.dir/all] Error 2
Makefile:129: recipe for target 'all' failed
make: *** [all] Error 2

とにかくこの対処方法。

How to


対処として、古いgccをインストールしてそっちに切り替える方法もありますが、面倒なのでこれはパス。
なので、CUDA側のgccバージョンチェックを無効化する方法を採用します。


$ sudo vi /usr/include/crt/host_config.h

で設定ファイルを開き、下記チェック個所をコメントアウトします。


#error -- unsupported GNU version! gcc versions later than 6 are not supported!
//#error -- unsupported GNU version! gcc versions later than 6 are not supported!

開発メモ その162 Ubuntu 18.04でVINOをコマンドラインから有効化する

Introduction


備忘録。
Ubuntu 16ならx11vnc一択なんですけど、Gnomeに変わったため、18ではこれができない。

How to


18からはネットワークに対してVinoの設定をON/OFFする仕組みに変わった模様。
Vinoインストール後、ネットワークマネージャーで接続一覧を表示、取得し、dconfで設定を有効化します。


$ sudo apt install vino
$ nmcli connection show
NAME UUID TYPE DEVICE
有線接続 1 ba688a1f-889f-30a0-b947-ed395181dc52 ethernet enp5s0
$ dconf write /org/gnome/settings-daemon/plugins/sharing/vino-server/enabled-connections "['ba688a1f-889f-30a0-b947-ed395181dc52']"
$ dconf read /org/gnome/settings-daemon/plugins/sharing/vino-server/enabled-connections
['ba688a1f-889f-30a0-b947-ed395181dc52']
$ ss -lnt | grep 5900
LISTEN 0 5 0.0.0.0:5900 0.0.0.0:*
LISTEN 0 5 [::]:5900 [::]:*

開発メモ その161 UbuntuでOpenPoseを動かす

Introduction


かなりはまったのでメモ。

How to


ビルドするだけなら簡単なのだが、動かすとどうしても動かない。
例えば下記のようなエラーが出る。


$ ./pose_1_extract_from_image.bin
Starting OpenPose demo...
F1219 20:52:30.150040 24594 upgrade_proto.cpp:97] Check failed: ReadProtoFromBinaryFile(param_file, param) Failed to parse NetParameter file: models/pose/body_25/pose_iter_584000.caffemodel
*** Check failure stack trace: ***
@ 0x7f91236e55cd google::LogMessage::Fail()
@ 0x7f91236e7433 google::LogMessage::SendToLog()
@ 0x7f91236e515b google::LogMessage::Flush()
@ 0x7f91236e7e1e google::LogMessageFatal::~LogMessageFatal()
@ 0x7f91230ac311 caffe::ReadNetParamsFromBinaryFileOrDie()
@ 0x7f912322351a caffe::Net<>::CopyTrainedLayersFromBinaryProto()
@ 0x7f912501ae17 op::NetCaffe::initializationOnThread()
@ 0x7f912503b48e op::addCaffeNetOnThread()
@ 0x7f912503bf7a op::PoseExtractorCaffe::netInitializationOnThread()
@ 0x7f9125040b80 op::PoseExtractorNet::initializationOnThread()
@ 0x404320 tutorialDeveloperPose1()
@ 0x403613 main
@ 0x7f9123f52830 __libc_start_main
@ 0x403649 _start
@ (nil) (unknown)
Aborted (core dumped)

この現象はissueとして登録されている。

Executed Command (if any) cd /path/to/openpose/build/examples/openpose/ ./openpose.bin --face --logging_level 0 OpenPose Output (if any) /path/to/openpose/in...

ただし、一部のUbuntuで発生しているようで、作者の環境では再現できていない模様。
解決策は、

  • OpenPoseに含まれているCaffeを使わずシステムに登録されているCaffeを使う
  • OpenPoseに含まれているCaffeのリビジョンを変更する

となる。

後者の解決策は

Executed Command (if any) cd /path/to/openpose/build/examples/openpose/ ./openpose.bin --face --logging_level 0 OpenPose Output (if any) /path/to/openpose/in...

で提示されていた。

まず


$ vi openpose/CMakeLists.txt

でファイルを開く。次に、caffeのソースを取得する箇所を修正する。
具体的な行数はリビジョンによって変わるため、下記の行番号は参考であるが、下記の記述はソース中に2つあるため、探せば必ず見つかる。


# Build Process
set(CAFFE_CPU_ONLY OFF)
if (${GPU_MODE} MATCHES "CUDA")
- execute_process(COMMAND git checkout master WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/3rdparty/caffe)
+ execute_process(COMMAND git checkout f019d0dfe86f49d1140961f8c7dec22130c83154 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/3rdparty/caffe)
elseif (${GPU_MODE} MATCHES "CPU_ONLY")
if (USE_MKL)
#execute_process(COMMAND git checkout intel WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/3rdparty/caffe)
@@ -682,7 +682,7 @@ if (UNIX OR APPLE)
"${CMAKE_BINARY_DIR}/caffe/lib/libmkldnn.so"
)
else (USE_MKL)
- execute_process(COMMAND git checkout master WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/3rdparty/caffe)
+ execute_process(COMMAND git checkout f019d0dfe86f49d1140961f8c7dec22130c83154 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/3rdparty/caffe)
endif (USE_MKL)
set(CAFFE_CPU_ONLY ON)
set(USE_CUDNN OFF)

この修正を完了後、


$ sudo apt install -y cmake libopencv-dev
$ sudo apt install -y libgflags-dev libgoogle-glog-dev libprotobuf-dev protobuf-compiler libhdf5-serial-dev
$ sudo apt install -y libatlas-base-dev
$ sudo apt install -y --no-install-recommends libboost-all-dev
$ mkdir build
$ cd build
$ cmake ..
$ cmake --build . --config Release

でビルドが可能になる。

また、利用するCUDAは9.2未満にすること。
これは、caffeがlibcublas_device.aを参照しているが、CUDA 9.2で削除されてためである。