SSN RunCommandを利用するLambdaのスクリプト
import json import boto3 import time instance = [{instanceID}] ssm = boto3.client('ssm') def lambda_handler(event, context): # TODO implement ##time.sleep(6) ssm.send_command( InstanceIds = instance, DocumentName = "AWS-RunPowerShellScript", Parameters = { "commands": [ "C:/Users/Administrator/Desktop/touch.bat", ], "executionTimeout": ["3600"] }, ) return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!') }
nvidia-smiについて調べた
目次
NVIDIA-SMIについて
NVIDIA公式
developer.nvidia.com (取得できるメトリクスは公式ペーシの画像の通り)
要約
- NVIDIA-SMIとは
nvidia-smiコマンドについて
NVIDIA公式のPDF
http://developer.download.nvidia.com/compute/DCGM/docs/nvidia-smi-367.38.pdf
抜粋翻訳
SYNOPSIS
nvidia-smi [OPTION1 [ARG1]] [OPTION2 [ARG2]] ...
DESCRIPTION
nvidia-smi(同じくNVSMI)は、Fermi以上のアーキテクチャファミリのNVIDIAのTesla、Quadro、GRID、およびGeForceデバイスに監視および管理機能を提供します。 GeForce Titanシリーズのデバイスはほとんどの機能をサポートされていますが、残りのGeforceブランドには非常に限られた情報しかありません。 NVSMIは、Windows Server 2008 R2以降の64ビットバージョンのWindowsと同様に、すべての標準NVIDIAドライバサポートLinuxディストリビューションをサポートするクロスプラットフォームツールです。メトリックは、標準出力を介してユーザーが直接使用することも、スクリプト目的でCSVおよびXML形式を介してファイルによって提供することもできます。 NVSMIの機能の多くは、基礎となるNVML Cベースのライブラリによって提供されています。 NVMLの詳細については、下記のNVIDIA開発者Webサイトのリンクを参照してください。 NVMLベースのPythonバインディングも利用可能です。 NVSMIの出力は後方互換性があるとは限りません。ただし、NVMLとPythonバインディングはどちらも下位互換性があるため、NVIDIAドライバのリリース間で維持する必要があるツールを作成するときには、最初の選択肢となるはずです
コマンド一部抜粋
option | description |
---|---|
-h | ヘルプ表示 |
-L | 接続されたGPUリストの表示 |
-u, --unit | ディスプレイ機器情報を表示。Tesla Sクラスのみ利用可 |
-i, --id=ID | 特定のGPUの情報を表示。IDは0以上の自然数で表されるGPUインデックス(GPUボードのシリアル番号、UUID、PCIバスIDなど)。 |
-f FILE, --filename==FILE | 出力を標準出力ではなくファイル出力する。指定ファイルは上書き。 |
-x, --xml-format | XMLフォーマットで出力する。 |
--dtd | -xと一緒に使用し、XML出力をDTDにする |
Nvidia-ml-py
公式ページ
- python2系
nvidia-ml-py · PyPI - python3系
nvidia-ml-py3 · PyPI
メトリクス
ml-py | 項目 |
---|---|
nvml.util.gpu | GPUの使用率 |
nvml.util.memory | メモリの使用率 |
nvml.mem.total | トータルメモリ |
nvml.mem.used | 使用中メモリ |
nvml.mem.free | 空きメモリ |
nvml.temp | 温度 |
nvml.process.used_gpu_memory | プロセス毎の使用メモリ |
zabbix
zabbix templateも作ってる人がいるので、比較的楽に監視ができる。
nonbiri-tereka.hatenablog.com
AWSとかだったら、メトリクスをcloud watch側で指定して監視したほうが取り回しは良さそう。
画像に使用されているRGBのピクセル数を確認したい
コード
画像に使われるRGBを確認したかったので、RGB数を棒グラフで表示するスクリプトを書いた。棒グラフはそのRGB色で、ピクセル数の多い順に表示。
import time from PIL import Image import pandas as pd import matplotlib import matplotlib.pyplot as plt #設定 first = 1 #上位何色からプロットするか num = 15 #上位何色までプロットするか # 画像読み込み img = Image.open("3.png") img_rgb = img.convert("RGB") width, height = img_rgb.size # RGB ピクセル数カウント num_rgb_px = {} for x1 in range(width): for y1 in range(height): r1,g1,b1 = img_rgb.getpixel((x1,y1)) key = "{:0=3}{:0=3}{:0=3}".format(r1,g1,b1) if key in num_rgb_px: num_rgb_px.update({key:num_rgb_px[key]+1}) else: num_rgb_px.update({key:1}) # Dataframe化 df = pd.DataFrame(list(num_rgb_px.items()),columns=['RGBkey','count']) df["R"] = None df["G"] = None df["B"] = None for index, item in df.iterrows(): r1 = item["RGBkey"][0:3] g1 = item["RGBkey"][3:6] b1 = item["RGBkey"][6:9] df.at[index,"R"] = r1 df.at[index,"G"] = g1 df.at[index,"B"] = b1 #ピクセル数順にソート df_s = df.sort_values("count",ascending=False) # プロットの為の整形 a=df_s[first:num]["count"] c=df_s[first:num][["R","G","B"]].values color_list=[] for row in c: color_list.append([int(num)/255 for num in row]) #プロット plt.figure() a.plot(kind="bar",figsize=(10,5) ,color=color_list ,width=1) plt.show()
結果
入力した画像
得られた結果
※x軸ラベルは、RGB値(R=255,G=111,B=0の場合、"255111000")。Y軸はピクセル数。
linuxコマンド覚えようね
Linuxコマンドなんてcdとlsくらいしか知らんかったのですが、さすがにそれだとWebサーバのデバッグなんかに支障をきたす。 今日デバッグしてて知った便利なコマンドだけメモ。
その1 watch
pythonで立ち上げたサーバにHttpリクエストが飛んできたときにCPUやメモリが動くか1秒毎に画面更新して見るのに使った。
watch -n 1 "ps -au | grep python"
その2 tail
サーバのlogファイルとかは、非常にサイズがでかい場合があって、そういうのをcatで見ようとすると爆発する。そんなときに、最終行から指定行だけみる為にtailを使う。 オプションで-Fをつければ画面表示したままファイルに更新があれば画面に反映されて便利。こちらもHttpリクエストの受付がちゃんとできてるかデバッグに使用。
tail -F hoge.txt
おわり