2017年1月17日 星期二

CPU性能調校(Profiling)工具 - Intel VTune Amplifier XE 簡易介紹 與 使用方法

Intel CPU Profiling Tool

Intel 官方出了一個專門 Profiling 自家產品的工具叫做 VTune Amplifier XE

(口頭上習慣稱呼VTune)

圖一、使用畫面


能夠呈現 CPU 的使用率

看看程式中的什麼函式被呼叫比率佔的最高

想辦法來修改程式中使用率最高的部份

看看如何能夠讓使用率最高的函式執行速度更快

以達成效能提昇的目的

安裝


按照步驟安裝完成之後

接下來,就可以來試玩VTune了

使用


如果要在 Linux 上面開啟 VTune 的 gui

按照Intel官方的 How to Start Intel® VTune™ Amplifier from Ubuntu* Launcher 文章

當以 ssh protocol 遠端連線到其他台電腦的時候

請這樣輸入

$ ssh -X <ip address>

-X 是讓我們能夠以 gui 開啟被遠端的電腦中安裝的程式[1]

然後才在命令視窗中輸入

$ source <install_dir>/vtune_amplifier_2017/amplxe-vars.sh
$ amplxe-gui&


&是讓程式在背景執行的意思,輸入完之後,按下enter之後就可以繼續輸入其他命令[2]

(補充資料:
  以 source 執行腳本:在父程序中執行; 以 sh 執行腳本:在子程序中執行;
  - 12.2.2 script 的執行方式差異 (source, sh script, ./script))

就可以將 VTune 的 GUI 開啟

圖二、Intel VTune Amplifier XE 起始畫面

當然,也可以在 bashrc 或是 zshrc 設定環境變數,設定

export VTUNE_AMPLIFIER_XE_2017_DIR=/opt/intel/vtune_amplifier_xe_2017.1.0.486011

PATH="/opt/intel/vtune_amplifier_xe_2017.1.0.486011/bin64:$PATH";export PATH

這樣以後就可以直接在命令列視窗輸入

amplxe-gui&

附上之前遇到的問題,在 root 環境底下不能執行 Tensorflow

libcudart.so.7.5: cannot open shared object file: No such file or directory-----but it exists in the path

Also, you shouldn't be running the library as root. The better solution is to fix your permissions and then not use sudo.

要小心的是,如果把命令列視窗關閉的話,vtune也會被關閉


開始 Profiling


若我想要分析這支程式[3]

於是,依據情況 Analysis Target 中 

如果選的是 Launch Application[4]

Application欄裡面需要是可執行的2進位檔

例如,要profiling python程式[5]的話,路徑需要是python可執行的路徑位置:

 /usr/bin/python

然後參數項才是該支程式的所在位置

### case 1 ###

Application欄 

點選所要執行的程式:
/home/username/tensorflow-models/inception/bazel-bin/inception/flowers_train
(本例中flowers_train為bin檔,username 是自己的使用者帳號名稱)

Application parameters欄 

填入執行程式的參數:
--train_dir=/home/username/flowerData/data/flowers/train --data_dir=/home/username/flowerData/data/flowers/data --pretrained_model_checkpoint_path=/home/username/inception-v3/model.ckpt-157585 --fine_tune=True --initial_learning_rate=0.001 -input_queue_memory_factor=1 --max_steps=500 --num_gpus 1 --batch_size=1
(username 說明同上)

### case 2 ###

Application欄 

/usr/bin/python

Application parameters欄 

home/paslab/yihong/benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py --local_parameter_device=cpu --num_gpus=2 \ --batch_size=32 --model=resnet50 --variable_update=parameter_server --use_nccl=False

在 Analysis Type 中,有一整排的分析方式可供選擇(ex. Algorithm Analysis、Compute-Intensive  Application Analysis etc.)

點選你需要的分析類別之後

按下開始,就能開始進行該程式CPU的使用情況進行分析

圖三、Profiling 完後Buttom Up分頁的畫面

分析結果


上面的這份投影片中有提到profiling python code之後的結果要怎麽進行簡易分析

1. 程式碼與CPU花費時間

點選Bottom up選項之後

可以看到使用的函式所佔的時間多少

點選該函式之後,還可以看見原始的程式碼以及所花的時間分別是多少,如下圖四所示

圖四、profiling之後的結果

2. CPU使用率

Profiling 完之後,會分別顯示不同顏色的CPU使用率資訊

官網CPU使用率當中的四種 Utilization Type ,其說明[7] 如下圖五所示

圖五、CPU Utilization Type

若想知道Spin Time[8]與 Overhead time[9]  的意義,可以閱讀文章最下方的參考文獻

以指令方式運行 VTune


身為Windows的多年使用者,我本人習慣以視覺化的GUI介面進行操作

但是在Linux的世界中,大家習慣以指令完成任務

畢竟早些年的時候,在電腦上面運行GUI的速度可能會讓使用者慢到咋舌

因此VTune團隊也為Linux設計指令式的操作

使用的語法可以參考下方連結中的官方教學


------------------------------------------------------------------------------------------------
參考文獻

[1] ssh(1) - Linux man page

提及 -X' Enables X11 forwarding. This can also be specified on a per-host basis in a configuration file.

X11 forwarding是指:
由於在Linux的環境下,圖形介面是以X Server為基礎來進行顯示的,所以當我們以一般command-line模式連入時將會無法看到圖形介面,需要另外在本機啟動X Server,讓主機能將圖形介面送過來。 而X11的資料傳輸是採明碼傳輸的方式,因此比較沒那麼安全,透過SSH進行X11 forwarding的主要目的就是將主機要送過來的圖形介面加密後,透過SSH這通訊協定加密再傳到使用者端並顯示在使用者端的 X Server上,以達到保護資料的作用(這也稱為SSH Tunneling) --- SSH X11 Forwarding
[2] 鳥哥的linux私房菜 - 直接將指令丟到背景中『執行』的 &

[3] SPEED UP TRAINING WITH GPU-ACCELERATED TENSORFLOW

[4] 修正選項名稱Launch a process 為 Launch Application

[5] Python* Code Analysis

[6] Analyzing Python Performance with Intel® VTune™ Amplifier XE

[7] CPU Usage

[8] Spin Time - Spin time is Wait Time during which the CPU is busy

[9] Overhead time - Overhead time is the time the system takes to deliver a shared resource from a releasing owner to an acquiring owner. Ideally, the Overhead time should be close to zero because it means the resource is not being wasted through idleness. However, not all CPU time in a parallel application may be spent on doing real payload work.

沒有留言:

張貼留言

/* 載入prettify的autoloader */ /* 載入JQuery */