2017年3月16日 星期四

libVLC deadlock

VLC的問題困擾很久了,希望這個方法可以解決這個問題。

Sometimes the call libvlc_media_player_stop() function in GUI-thread leads to deadlocks. And it happens on an almost empty application. There is only the main form with control (like a panel), which carried the image output (assign through libvlc_media_player_set_hwnd()). Timer periodically (every 5 seconds) is called stop() and play(). No more functionality in that simple program. If the mouse to click on the associated control, then hang appears faster.

My solution is to call the stop() from the new thread and wait for its completion (via join ()). If the wait timeout set, before calling play(), you must ensure that the playing is done (check the return value of libvlc_media_player_get_state()). If you do call play() again, you will see a new window with video (as happens if you do not bind the output through libvlc_media_player_set_hwnd()).

Perhaps this message will be helpful.

2017年3月3日 星期五

安裝 Machine Learning 環境

Building a Machine Learning Env.

Hardware: GTX1070/8G, i5-7500 CPU, 32G memory
OS: Ubuntu 16.04 LTS 64bits


Install Driver

1. nVidia 1070 driver

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt-get install nvidia-378

2. Install CUDA

2.1 Download CUDA runfile: 

cuda_8.0.61_375.26_linux.run from https://developer.nvidia.com/cuda-release-candidate-download

2.2 Install

sudo sh cuda_8.0.27_linux.run
Note:
  • Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 361.62? (y)es/(n)o/(q)uit: n

2.3 Add export var in  ~/.bashrc

export PATH=/usr/local/cuda-8.0/bin\${PATH:+:\${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64\${LD_LIBRARY_PATH:+:\${LD_LIBRARY_PATH}}

2.4 Test1

nvidia-smi


+-----------------------------------------------------------------------------+
| NVIDIA-SMI 378.13                 Driver Version: 378.13                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 1070    Off  | 0000:01:00.0      On |                  N/A |
|  0%   29C    P8     6W / 151W |    266MiB /  8110MiB |      1%      Default |
+-------------------------------+----------------------+----------------------+
                                                                           
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|    0      1075    G   /usr/lib/xorg/Xorg                             135MiB |
|    0      1526    G   compiz                                          84MiB |
|    0     10323    G   /usr/lib/vmware/bin/vmware-vmx                  45MiB |
+-----------------------------------------------------------------------------+

2.5 Test2

cd 1_Utilities/deviceQuery
make
~/NVIDIA_CUDA-8.0_Samples/1_Utilities/deviceQuery/deviceQuery


./deviceQuery Starting...
CUDA Device Query (Runtime API) version (CUDART static linking)
Detected 1 CUDA Capable device(s)

Device 0: "GeForce GTX 1070"
  CUDA Driver Version / Runtime Version          8.0 / 8.0
  CUDA Capability Major/Minor version number:    6.1
  Total amount of global memory:                 8111 MBytes (8504868864 bytes)
  (15) Multiprocessors, (128) CUDA Cores/MP:     1920 CUDA Cores
  GPU Max Clock rate:                            1785 MHz (1.78 GHz)
  Memory Clock rate:                             4004 Mhz
  Memory Bus Width:                              256-bit
  L2 Cache Size:                                 2097152 bytes
  Maximum Texture Dimension Size (x,y,z)         1D=(131072), 2D=(131072, 65536), 3D=(16384, 16384, 16384)
  Maximum Layered 1D Texture Size, (num) layers  1D=(32768), 2048 layers
  Maximum Layered 2D Texture Size, (num) layers  2D=(32768, 32768), 2048 layers
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       49152 bytes
  Total number of registers available per block: 65536
  Warp size:                                     32
  Maximum number of threads per multiprocessor:  2048
  Maximum number of threads per block:           1024
  Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
  Max dimension size of a grid size    (x,y,z): (2147483647, 65535, 65535)
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             512 bytes
  Concurrent copy and kernel execution:          Yes with 2 copy engine(s)
  Run time limit on kernels:                     Yes
  Integrated GPU sharing Host Memory:            No
  Support host page-locked memory mapping:       Yes
  Alignment requirement for Surfaces:            Yes
  Device has ECC support:                        Disabled
  Device supports Unified Addressing (UVA):      Yes
  Device PCI Domain ID / Bus ID / location ID:   0 / 1 / 0

  Compute Mode:
     < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 8.0, CUDA Runtime Version = 8.0, NumDevs = 1, Device0 = GeForce GTX 1070
Result = PASS

3. Install CUDNN

3.1 download CUDNN: cudnn-8.0-linux-x64-v5.1.tgz
3.2
tar -xzvf cudnn-8.0-linux-x64-v5.1.tgz
cd cuda
sudo cp include/* /usr/local/cuda/include/
sudo cp lib64/* /usr/local/cuda/lib64/


Install Machine Learning Software


Install Anaconda3-4.3.0-Linux-x86_64.sh


Create virtual envir.

conda update conda
conda create -p YourEnvDir python=3.6 anaconda
source activate YourEnvDir
Note:
Deactivate your virtual environment.
> source deactivate
Delete a no longer needed virtual environment
>conda remove -n yourenvname -all


Installing TensorFlow

4.1 Make sure enter virtual env.

pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.0.0-cp36-cp36m-linux_x86_64.whl

4.2 Validate your installation

Enter python.
Then, enter the following short program inside the python interactive shell:

import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))

Install Caffe

ref: https://blog.kickview.com/building-a-digits-dev-machine-on-ubuntu-16-04/

1. Build VirtualEnv

conda create -p YourEnvDir python=2.7 anaconda
source activate YourEnvDir

2. Install OpenCV 3.1.0

conda install -c menpo opencv3=3.1.0

3. Install Caffe

3.1 Install caffe dependencies

sudo apt-get install --no-install-recommends build-essential cmake git gfortran libatlas-base-dev libboost-all-dev libgflags-dev libgoogle-glog-dev libhdf5-serial-dev libleveldb-dev liblmdb-dev libopencv-dev libprotobuf-dev libsnappy-dev protobuf-compiler python-all-dev python-dev python-h5py python-matplotlib python-numpy python-opencv python-pil python-pip python-protobuf python-scipy python-skimage python-sklearn

3.2 Setting the CAFFE_HOME environment variable will help DIGITS automatically detect your Caffe installation, but this is optional. Add this to your ~/.profile

export CAFFE_HOME=~/caffe

3.3 Download source

git clone https://github.com/NVIDIA/caffe.git $CAFFE_HOME

3.4 Install requirements into virtualenv

pip install -r $CAFFE_HOME/python/requirements.txt
cd caffe

3.5 Create a config file

cp Makefile.config.example Makefile.config

3.6 Make the following changes to the Makefile.configfile

Uncomment USE_CUDNN := 1
Uncomment OPENCV_VERSION := 3
Chane CUDA_DIR := /usr/local/cuda-8.0
Change PYTHON_INCLUDE := ~/caffe/include/python2.7 \
~/caffe/lib/python2.7/dist-packages/numpy/core/include
Change PYTHON_LIB := ~/caffe/lib/python2.7/config-x86_64-linux-gnu/libpython2.7.so

3.7 Add the following to your ~/.profile file

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

3.8 Build

mkdir build
cd build
make ..
make all -j8
make runtest -j8



Install DIGITS

1. Enter caffe virtual env. 2. Download dependencies

sudo apt-get install --no-install-recommends git graphviz gunicorn python-dev python-flask python-flaskext.wtf python-gevent python-h5py python-numpy python-pil python-protobuf python-scipy

3.Getting a DIGITS_HOME environment variable for tutorial purposed, this is completely optional. Add this to your ~/.profile

export DIGITS_HOME=~/digits

4. download DIGITS

git clone https://github.com/NVIDIA/DIGITS.git $DIGITS_HOME

5. Install the python dependencies

pip install --ignore-installed -U setuptools
pip install -r $DIGITS_HOME/requirements.txt

6. Run

From the digits directory run the following to fire up a Digits server running on port  5000
./digits-devserver
Note: if error try to do: conda install libgcc