球児たちの暑い夏を。
すぐ熱くなるのだ。
実装しているからな。。。
CPUの温度に応じた冷却をやってみようではないか。
ヒートシンクが搭載されているので放熱はされますが、連続して使用するとかなりなるのです。
今回の記事で使用した冷却FANはこちら
ヒートシンクの上に冷却ファンが鎮座する形になります。直接風を送るのでよく冷えるますね。
# sudo sh -c 'echo 125 > /sys/devices/pwm-fan/target_pwm'
いつでもクールになれる仕組みを作る
さて、どのような仕組みが良いでしょうか。
以下の機能を実装したいと思います。
- Jetson NanoのCPU/GPU/A0の温度を取得する
CPU,GPU,A0の一番高いものを以降で使用する - 以下の条件で冷却ファンの回転速度を決定する
<動作例>
~30℃ :40
31℃~40℃ :90
41℃~50℃ :140
51℃~60℃ :190
61℃~ :240(※設定可能上限は255ですが、余裕を持たせ若干低く設定) - 冷却ファンの回転速度を設定する。
※今回の回転速度の設定には、PWM(Pulse Width Modulation)というものを使っています。PWMの仕組みは以下の記事でご紹介しているので興味のある方はご覧ください。
この記事では、M5StickCと冷却ファンを使って回転速度制御をしていきます。 M5StickCから冷却ファンの回転を制御できれば、扇風機のように、自由に風量を変えることができます! 今回の冷却ファンは次のものを使います。パソコン用[…]
CPUの状態を取得してみる
では最初にJetson NanoのCPU状態を取得してみましょう。
取得すためのコマンドは以下を使います。
# cat /sys/devices/virtual/thermal/thermal_zone[0-2]/temp
30000 #A0の温度
23000 #CPUの温度
22000 #GPUの温度
ということは、Pythonから確認する際には、「/sys/devices/virtual/thermal/」にある「thermal_zone0」から「にある「thermal_zone2」にある「temp」ファイルをReadで開けば、温度値を取得できますよね。
path = "/sys/devices/virtual/thermal/thermal_zone0/temp" with open(path, "r") as fs: for line in fs: print(line)
のような感じでしょうか。
冷却ファンの回転数を設定する
また、冷却ファンの回転数を設定するには、前述した以下のコマンドが使えます。
# sudo sh -c 'echo 125 > /sys/devices/pwm-fan/target_pwm'
ということは、Pythonから設定を行う際には、この「target_pwm」ファイルを更新すれば設定を変更できます。
pwm = str(125)
cmd = "sudo sh -c \'echo " + pwm + "> /sys/devices/pwm-fan/target_pwm\'"
res = subprocess.run(cmd,
shell=True,
check=False,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True )
のような感じです。
※上記の例は、コマンドをPythonから実行するsubprocessというものを使っています。
sudo shでルートシェルを起動していますので、パスワードを求められそうですが、subprocessは親を継承するのでcrontabで権限を与えれば実行できます。
Jetson Nano 温度監視&空冷制御プログラムを作る
それではPythonを使ってプログラムを作ってみましょう。
先ほど考えた仕組みを含め、以下のようにプログラミングします。
- 1分ごとにJetson Nanoボードの温度を確認します
- 温度に応じて冷却ファンの回転数を変化させます。
- 温度とファンの回転制御値の推移データを、再利用性を考慮してCSV形式で出力します。
- ツールの動作設定値(温度条件と回転制御値[5段階]、ログの保存最大数など)は
JSON形式ファイルで作成します。 - ツール実行時ログは、実行単位ごとに出力され、ログファイル数は初期設定では
10ファイルまで保存されるようにします。 - Jetson Nano OS(Ubuntu)にてcrontabにスクリプト実行文を追加して1分おきに
実行されるようにします。
※root権限用のcrontabに登録して使うことを想定します。
Jetson Nano 温度監視&空冷制御プログラム
(Ubuntu 18.04.5 LTS)
※プログラムはGitHubにて公開しています。
GitHub公開情報
プログラムはGitHubにて公開しています。以下からご利用くださいね!
Contribute to karakuri-musha/JetCoolerMon development by cre…
利用方法
1.ツール配置用のディレクトリをJetson Nano OS上に作成します。
sudo mkdir /opt/JetCoolerMon
2.作成したディレクトリにツールをコピーします。
cd /opt/JetCoolerMon
sudo git clone https://github.com/karakuri-musha/JetCoolerMon.git
3.「JetCoolerMon.py」を実行するシェルを記載します。
sudo vi /usr/local/bin/JetCooler_mon.sh
シェルの内容
#!/bin/sh
python3 /opt/JetCoolerMon/JetCoolerMon/JetCoolerMon.py -o output.csv -j JetCoolerMonSetting.json
4.シェルに実行権限を付与します。
sudo chmod +x /usr/local/bin/JetCooler_mon.sh
5.「crontab」をエディタモードで開いてスケジュールを追加します。
sudo crontab -e
ファイルの最後に以下のスケジュールを記述し、保存します。(例は1分間隔で実行する)
* * * * * sh /usr/local/bin/JetCooler_mon.sh
6.「cron」を再起動します。
sudo /etc/init.d/cron restart
プログラム実行結果
一分間隔で以下のようなログが作成されます。
2021-08-27 13:51:01,471@ __main__ [INFO] <module>: Start the Jetson Nano Cooler Monitor (JetCoolerMon) tool. 2021-08-27 13:51:01,475@ __main__ [INFO] <module>: Input file is [output.csv] I checked the name. The process will start. 2021-08-27 13:51:01,475@ __main__ [INFO] <module>: Input file is [JetCoolerMonSetting.json] I checked the configuration file. The process will start. 2021-08-27 13:51:01,475@ __main__ [INFO] <module>: System Enviroment Check Process Begin 2021-08-27 13:51:01,480@ __main__ [INFO] <module>: The operating system is [Linux] 2021-08-27 13:51:01,485@ __main__ [INFO] <module>: The model name is [NVIDIA Jetson Nano Developer Kit] 2021-08-27 13:51:01,485@ __main__ [INFO] <module>: Jetson Nano temperature measurement started. 2021-08-27 13:51:01,486@ __main__ [INFO] <module>: Zone0: 33.5 2021-08-27 13:51:01,486@ __main__ [INFO] <module>: Zone1: 27.0 2021-08-27 13:51:01,486@ __main__ [INFO] <module>: Zone2: 28.5 2021-08-27 13:51:01,486@ __main__ [INFO] <module>: avarage temp: 29.7 2021-08-27 13:51:01,487@ __main__ [INFO] <module>: PWM Set Value : 40 2021-08-27 13:51:01,487@ __main__ [INFO] update_file: ---- Update file ---- 2021-08-27 13:51:01,487@ __main__ [INFO] update_file: ---- Success update file ---- 2021-08-27 13:51:01,487@ __main__ [INFO] <module>: Exit the Jetson Nano Cooler Monitor (JetCoolerMon) tool.
Idle時の温度を測定してみよう!!
アイドル状態の温度変化をCSVからグラフにしてみました。
こうやって見える化すると面白いですね。
Jetson Nano Developer Kitに負荷をかけてみよう!!
次に、代表的な機械学習のモデルの計算をしてみました。
空冷ファンのおかげか、50℃以下に抑えた形で実行できていますね。よし、よし。
計算するモデルによって温度の上昇タイミングが違っていて面白いと思います。
各も出る計算時のFPSもNVIDIA社が公開されているJetson Nano Developer Kitの基準値に近似しているため問題ないありません。
Model Name | FPS |
inception_v4 | 10.7 |
vgg19_N2 | 10.2 |
super_resolution_bsd500 | 15.4 |
unet-segmentation | 16.9 |
pose_estimation | 14.7 |
yolov3-tiny-416 | 48 |
ResNet50_224x224 | 36.9 |
ssd-mobilenet-v1 | 42.9 |
結果的にcron使って1分単位でOK!!
作成を考えていたころはサービス化してもっと短い時間でファン制御を入れようかと考えていましたが、試してみるとcronで1分単位で都度実行しても十分に効果が実感できました。現在のほうが、サービス化してリソース消費を増やすよりもリソースの節約ができているでしょう。
編集後記
いかがだったでしょうか。
一度設定したらあまり意識することなく運用いただけるので、ぜひご活用ください。(CSV出力は無効にしてくださいね!)
Jetson Nano Developer Kit上で高負荷の処理を実行する際の、温度データ取得ツールとしても使えます。
今回実際に取得してグラフ化しましたが、いい感じで出力できているのでこちらもご活用くださいね!
記事は以上になります。(※機械学習モデルの実行については別記事にする予定です。ご期待ください。)
こちらの記事もあわせてどうぞ!!
Raspberry Piと同様に最低限のキットしか本体には付属していないため、追加購入が必要になってきます。特に通信モジュールの購入は注意が必要です。
最低限必要な購入品については、以下の記事でご紹介しています。参考にしてくださいね!
今回の記事で使用した冷却FANはこちら
Jetson Nano Developer Kitを始めるためのお買い物リストをまとめました!ぜひご覧ください。
こんな悩みありませんか? 「Jetson Nano はじめたいけど、何があれば遊べるの? いくらかかるの?」 そんなご質問に答えるべく、購入品リストをまとめてみました。 本記事は以下の記事「【Jetson Nano】まずや[…]
すけろく Raspberry PiやJetsonのシングルボードコンピュータを使っていると 必要になるmicroSDカード。 何を買えばよいのやら。。。 げんろく microSDカードには意外といろ[…]
Jetson の他の記事はこちらからどうぞ!
すけろく なに!いつのまに入った!? 曲者じゃ~ げんろく 何事かえ? 曲者なんぞ、どこにもおらんぞ。 今度はなにがあったのだ? すけろく いつの間にか、知らぬパッケージが入っておるのだ! 曲者がこっそりやったに違いない! げんろく どれどれ。昨日、このパッケージを入れてなかったか? 知らぬというパッケージは「依存パッケージ」に含まれておるぞ。 すけろく わしが、わしが、やったのか・・・ この手で […]
すけろく あつい。あついぞ! げんろく どうした、甲子園見ているのか? 球児たちの暑い夏を。 すけろく いや、この前買ったJetson Nanoがちょっと使うだけで すぐ熱くなるのだ。 げんろく まあ、あれだけのCPU、GPUを小さい面積に 実装しているからな。。。 げんろく Jetson Nanoなら回転制御可能なFAN端子がついているから CPUの温度に応じた冷却をやってみようではないか。 J […]
すけろく 買ったぞ!ついに手に入れた。 これでAIの実装ができるぞ。 すけろく どれどれ・・・ ん!?Wi-Fiがないではないか・・・ということは Bluetoothも・・・ないっ!!!! げんろく どうした。もしかしてラズベリーパイの感覚で NVIDIA Jetsonに手を出したのか?? 仕方がない。Jetsonの基本を押さえていこうではないか。 最近、グラフィックボード(ビデオボード)が枯渇し […]
すけろく Raspberry PiやJetsonのシングルボードコンピュータを使っていると 必要になるmicroSDカード。 何を買えばよいのやら。。。 げんろく microSDカードには意外といろんな規格があるんだよな。 しかも安価なものは信頼性が低かったりするし。 すけろく 価格で選んで、結果動かなかったり、動作が遅かったりする。 悩みどころだな。 げんろく ここいらで、一度microSDカー […]