gangliaでGPUの情報を監視しようとしてえらい苦労した話
gangliaでGPGPUサーバのデータを監視しようとしたのですが、はまりポイントが多数あって苦労しました
Gangliaのインストール
1. Master server
### install packages sudo apt-get install ganglia-monitor rrdtool gmetad ganglia-webfrontend ps -eaf | egrep "gmon|gmeta" ganglia 14057 1 0 06:05 ? 00:00:00 /usr/sbin/gmond --pid-file=/var/run/ganglia-monitor.pid nobody 14071 1 0 06:05 ? 00:00:00 /usr/sbin/gmetad --pid-file=/var/run/gmetad.pid ss -lntp | egrep "86[0-9]{2}" LISTEN 0 5 *:8649 *:* LISTEN 0 10 *:8651 *:* LISTEN 0 10 *:8652 *:* ### setting configuration(gmetad) sudo cp -ip /etc/ganglia-webfrontend/apache.conf /etc/apache2/sites-enabled/ganglia.conf sudo cp -ip /etc/ganglia/gmetad.conf{,.org} sudo vi /etc/ganglia/gmetad.conf ================================================= 44 #data_source "my cluster" localhost 45 data_source "好きなクラスター名" 60 localhost ================================================= ### setting configuration(gmond) sudo cp -ip /etc/ganglia/gmond.conf{,.org} sudo vi /etc/ganglia/gmond.conf ================================================= 20 cluster { 21 name = "設定したクラスター名" 22 owner = "unspecified" 23 latlong = "unspecified" 24 url = "unspecified" 25 } ・ ・ 34 udp_send_channel { 35 #mcast_join = 239.2.11.71 # => commentout 36 host = localhost # => add 37 port = 8649 38 ttl = 1 39 } . . 42 udp_recv_channel { 43 #mcast_join = 239.2.11.71 # => commentout 44 port = 8649 45 #bind = 239.2.11.71 # => commentout 46 } ================================================= ### gmond & gmetad & apache restart sudo service ganglia-monitor restart sudo service gmetad restart sudo service apache2 restart
- はまりポイント1:スクリプトで全部同時に起動しようとしたらうまく起動しなかった
- 手動でやったりsleepをかませたらうまくいった
2. Client server
### install package sudo apt-get install ganglia-monitor ps -eaf | grep gmond ganglia 1952 1 99 04:26 ? 00:02:21 /usr/sbin/gmond --pid-file=/var/run/ganglia-monitor.p ### setting configuration(gmond) sudo cp -ip /etc/ganglia/gmond.conf{,.org} sudo vi /etc/ganglia/gmond.conf =============================================================================== . . 10 deaf = yes # => change to yes . . 20 cluster { 21 name = "設定したクラスター名" # => Change name 22 owner = "unspecified" 23 latlong = "unspecified" 24 url = "unspecified" 25 } . . 34 udp_send_channel { 35 # mcast_join = 239.2.11.71 # commment out 36 host = 192.168.33.11 # add(master serverIP) 37 port = 8649 38 ttl = 1 39 } . . 41 /* You can specify as many udp_recv_channels as you like as well. */ 42 #udp_recv_channel { # comment out 43 # mcast_join = 239.2.11.71 # comment out 44 # port = 8649 # comment out 45 # bind = 239.2.11.71 # comment out 46 #} # comment out =============================================================================== ### ganglia monitor restart sudo /etc/init.d/ganglia-monitor restart
この時点でGangliaのViewが表示されて、基本的な情報の取得ができるようになる
GPUのMetricsの設定
1. Client server
### modify gmond.conf sudo vi /etc/ganglia/gmond.conf ====================================================================== 59 modules {・ ・ ・ 91 module { # add 92 name = "python_module" # add 93 path = "/usr/lib/ganglia/modpython.so" # add 94 params = "/usr/lib/ganglia/python_modules/" # add 95 } # add 96 } 97 98 include ('/etc/ganglia/conf.d/*.conf') 99 include ('/etc/ganglia/conf.d/*.pyconf') # add ====================================================================== ### make dir sudo mkdir /etc/ganglia/conf.d sudo mkdir /usr/lib/ganglia/python_modules ### prepare python module cd /usr/local/src git clone https://github.com/ganglia/gmond_python_modules.git cd ${download directory}/gpu/nvidia wget https://pypi.python.org/packages/72/31/378ca145e919ca415641a0f17f2669fa98c482a81f1f8fdfb72b1f9dbb37/nvidia-ml-py-7.352.0.tar.gz tar xvfpz nvidia-ml-py-7.352.0.tar.gz ls -l drwxr-xr-x 2 root root 4096 May 10 16:26 conf.d -rw-r--r-- 1 root root 5093 May 10 16:26 ganglia_web.patch drwxr-xr-x 2 root root 4096 May 10 16:26 graph.d drwxr-xr-x 3 root root 4096 May 10 16:26 nvidia-ml-py-3.295.00 drwxrwxr-x 3 root root 4096 May 10 16:27 nvidia-ml-py-7.352.0 -rw-r--r-- 1 root root 20524 Apr 23 23:13 nvidia-ml-py-7.352.0.tar.gz drwxr-xr-x 2 root root 4096 May 10 16:26 python_modules -rw-r--r-- 1 root root 1661 May 10 16:26 README cd nvidia-ml-py-7.352.0 sudo python setup.py install cd ../ sudo cp -ip python_modules/nvidia.py /usr/lib/ganglia/python_modules/. sudo cp -ip conf.d/nvidia.pyconf /etc/ganglia/conf.d/. ### restart sudo service ganglia-monitor restart
- はまりポイント2:python_moduleの設定でpathは相対でいいって書いてあるドキュメントがあったけど絶対パスじゃないと動かなかった
- はまりポイント3:git cloneで取得できるgmond_python_modules内のnvidiaパッケージは古くて(nvida-ml-py3.295.00)、setup.pyを実行すると使えないパッケージがinstallされてしまう
- 対応としてnvidia-ml-py-7.352.0を直接取得する
- はまりポイント4:しかし逆にnvidia-ml-py-7.352.0の方のpython_moduleファイルは使用できず、confファイルは存在すらしないため、この二つはnvida-ml-py3.295.00の方のものを使用しなければいけない
- はまりポイント5:一度nvida-ml-py3.295.00の方のsetupスクリプトを使用すると手動で関連ファイルを削除したりPythonのload_pathを戻さなければならない
2. master server
cd /usr/local/src git clone https://github.com/ganglia/gmond_python_modules.git cd ${download directory} cd gpu/nvidia/graph.d ls -l total 24 -rw-r--r-- 1 root root 596 Mar 18 09:12 gpu_common.php -rw-r--r-- 1 root root 2139 Mar 18 09:12 gpu_graphics_clock_report.php -rw-r--r-- 1 root root 2143 Mar 18 09:12 gpu_mem_clock_report.php -rw-r--r-- 1 root root 1526 Mar 18 09:12 gpu_power_usage_report.php -rw-r--r-- 1 root root 1586 Mar 18 09:12 gpu_power_violation_report.php -rw-r--r-- 1 root root 2169 Mar 18 09:12 gpu_sm_clock_report.php sudo cp -ip * /usr/share/ganglia-webfrontend/graph.d sudo service apache2 restart
Make view system
1. master server
cd /var/lib/ganglia-web/conf/ vi view_gpu1.json =========================================================== ### 環境にあわせて作成 ===========================================================
- このviewファイルの作成の仕方のドキュメントがとても少ない
他はまったポイント
nvidia.pyがデータを取得できない
Failed to build descriptor : gpu0_ecc_db_error : Not Supported Failed to build descriptor : gpu0_ecc_sb_error : Not Supported Failed to build descriptor : gpu0_power_violation_report : global name 'nvmlDeviceGetViolationStatus' is not defined Failed to build descriptor : gpu0_bar1_memory : global name 'nvmlDeviceGetBAR1MemoryInfo' is not defined Failed to build descriptor : gpu0_bar1_max_memory : global name 'nvmlDeviceGetBAR1MemoryInfo' is not defined Failed to build descriptor : gpu0_shutdown_temp : global name 'nvmlDeviceGetTemperatureThreshold' is not defined Failed to build descriptor : gpu0_slowdown_temp : global name 'nvmlDeviceGetTemperatureThreshold' is not defined Failed to build descriptor : gpu0_encoder_util : global name 'nvmlDeviceGetEncoderUtilization' is not defined Failed to build descriptor : gpu0_decoder_util : global name 'nvmlDeviceGetDecoderUtilization' is not defined
これは最新版使うことで解決
tpl file
$ sudo patch -p0 < /usr/local/src/gmond_python_modules/gpu/nvidia/ganglia_web.patch patching file host_view.php Hunk #1 FAILED at 17. Hunk #2 FAILED at 37. Hunk #3 FAILED at 144. Hunk #4 FAILED at 153. Hunk #5 FAILED at 169. 5 out of 5 hunks FAILED -- saving rejects to file host_view.php.rej patching file templates/default/host_view.tpl Hunk #1 FAILED at 80. Hunk #2 FAILED at 89. 2 out of 2 hunks FAILED -- saving rejects to file templates/default/host_view.tpl.rej
動かない
現在のversionのgangliaでは不要とのコメントもあったのでそもそもいらないTool?
view ファイルのhost指定
1 { 2 "view_name": "GPU1", 3 "view_type": "standard", 4 "items": [ 5 { 6 "aggregate_graph": "true", 7 "host_regex": [ { "regex":"192.168.33.11" } ],
7行目のように監視対象のHostをIPで指定していたのだが、いつからのversionかHost名で指定しないと動かなくなった
host名で指定したら問題なく動くように戻った