環境情報学概論2022〜コンピュータと地球温暖化は決して無縁ではない
オムニバス授業「環境情報学概論」のソフトウェアの回を2022年度にリニューアルしました.更新した部分について,Advent Calendar 2022の機会にQiita記事として連載したので,本記事ではそれらを紹介します.
- 地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜序論 (2022年版)
- 地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜FAQ3.1「人間が気候変動を引き起こしていることはどのようにしてわかるか?」 (2022年版)
- 地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜FAQ4.1「今後20年間で気候はどのように変化するか?」 (2022年版)
- 地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜FAQ4.2「二酸化炭素の排出削減の効果はどれだけ早く確認されるだろうか?」 (2022年版)
- 地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜FAQ9.1「グリーンランド及び南極域の氷床の継続的な融解は逆転しうるか?氷床が元に戻るのにどの程度の時間がかかるだろうか?」 (2022年版)
- 地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜FAQ9.2「海面水位は今後数十年間でどの程度上昇するか?」 (2022年版)
- 地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜「コンピュータと地球温暖化は決して無縁ではない(2022年版)」
- 地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜機械学習の消費電力あたり性能の改善に向けて
なお,授業で扱ったそのほかの論点については,下記の記事に書いています.
Nerves の可能性は IoT だけじゃない(前編)〜ElixirとPelemayで世界の消費電力を抑える
それぞれの記事の最後に考察として書いたことをまとめておきます.
地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜FAQ3.1「人間が気候変動を引き起こしていることはどのようにしてわかるか?」 (2022年版)
さて,このFAQ3.1の論拠を突きつけられると,もはや,「気候変動の問題は人為的なものではなく自然現象である」と言い逃れすることはできないと考えられます.したがって,人類が責任をもって,気候変動を起こしている要因である,温室効果ガスとエーロゾルの大気中濃度を抑制する必要があると言えます.
地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜FAQ4.1「今後20年間で気候はどのように変化するか?」 (2022年版)
さて,このFAQ4.1の論拠からは,2040年ごろまでの大きなトレンドとしては世界気温上昇,海氷面積の減少となるものの,自然変動のために変動幅は大きく,局所的には気温低下,海氷面積の保持という結果にもなりえるとのことでした.このことから,恣意的な局所的統計分析を行うことで,さも「地球温暖化が食い止められた」「地球が寒冷化に向かっている」というような言説を導き出すことは容易である可能性があります.しかし,それは誤った見方であると言えます.FAQ3.1でも論じたように,人間が気候変動を引き起こしているのは事実であり,その結果として生じる長期的なトレンドは世界気温上昇,海氷面積の減少,すなわち地球温暖化であるというのは間違いないことだと,様々なシナリオを検討したシミュレーション結果から結論づけられます.そのことを忘れないでください.
地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜FAQ4.2「二酸化炭素の排出削減の効果はどれだけ早く確認されるだろうか?」 (2022年版)
さて,FAQ4.2のこの論拠からは,二酸化炭素の排出削減の効果は遅れて現れるということと,コロナ禍等による短期的な排出削減の影響は現れないこと,数十年間にわたる持続的な排出削減によってのみ,二酸化炭素濃度や世界平均気温に現れるということが示されています.このことより,たとえ直ちに世界平均気温に現れなかったとしても,世界中の産業が粘り強く二酸化炭素の排出を抜本的に減らし続ける必要があるということを示しています.
地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜FAQ9.1「グリーンランド及び南極域の氷床の継続的な融解は逆転しうるか?氷床が元に戻るのにどの程度の時間がかかるだろうか?」 (2022年版)
さて,FAQ9.1のこの論拠からは,地球温暖化に伴う海面水位上昇の問題は数千年以上にわたり継続する,事実上不可逆の事象であるという,極めて絶望的な予測を突きつけていると言えます.海面水位上昇は直接的には,標高の低い土地が失われることのほか,砂浜や干潟も失われるため生態系に甚大な影響を及ぼします.人類がせめて抵抗できるのは,標高の低い土地が失われないように護岸整備することや,砂浜や干潟を保全して生態系を守ることくらいしかできないのかもしれません.氷床減退と海面水位上昇がもたらす間接的な影響まで考慮すると,もっと様々なことを対処していかないといけないことでしょう.しかもたとえ最善であっても,その対策を数千年にわたって続けていく必要があるのです.
地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜FAQ9.2「海面水位は今後数十年間でどの程度上昇するか?」 (2022年版)
さて,FAQ9.2のこの論拠からは,地球温暖化に伴う海面水位上昇は,今後20年間では,それまでの二酸化炭素排出量に依らないのですが,80年後の21世紀末となると大きな差が生まれるとしています.したがって,FAQ9.1の絶望的な結論にかかわらず,二酸化炭素排出量削減の不断の努力をすることで,海面水位の上昇度合いを抑制することができます.海面水位上昇は直接的には,標高の低い土地が失われることのほか,砂浜や干潟も失われるため生態系に甚大な影響を及ぼします.その不利益を少しでも抑えることができるのであれば,二酸化炭素排出量を削減することに大きな意義があると言えるのではないでしょうか.
地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜「コンピュータと地球温暖化は決して無縁ではない」(2022年版)〜コンピュータの消費電力を抑えるためにソフトウェアでできること
クロック周波数を抑えてもCPUの計算能力を維持・向上させるには,どのようにしたらいいでしょうか? ソフトウェアで解決するためには,大きく3つアプローチがあります.
- 目的を達成するのに必要なクロック数を削減する. このためには,無駄な命令を実行しないことが肝要です.コンパイル・最適化されたネイティブコードで実行する方が,最適化されていないインタプリタ実行よりも,同じことをするのに必要な電力消費を抑えられます.また,前述のような消費電力あたりの性能が高いCPUであるARMやRISC-Vの特性を活かしたネイティブコード生成をすることが重要になりますし,Apple Siliconのような場合だとGPU(Metal)やNeural Engine(CoreML)などを適宜活用するようにすると消費電力をさらに抑えられるようになるでしょう.
- 並列処理を最大限に生かして計算能力を高め,かつできるだけ同期・排他制御で計算が停止しないようにする. コアが複数ある場合,1つのコアだけに処理を集中させてクロック周波数を上げて処理するよりも,複数のコアに処理を分散させてクロック周波数を下げた方が,消費電力あたりの計算能力を向上させることが容易です.また前述のような消費電力あたりの性能が高いプロセッサを搭載したコンピュータ・ユニットからなるコンピュータ・クラスタを構成した時にも,性能を引き出すことができるようになります.
- 使わないモジュールのクロックを停止するなど電源コントロールをこまめに行うようにする. 使わないモジュールのクロックを停止すれば,理想的にはそのモジュールの消費電力を0にできます.実際には待機電力があるので,少し消費しますけどね.組込みソフトウェアではこの辺りをかなり頑張っていますね.また前述のようなコンピュータ・クラスタを構成した時に,待機しているコンピュータ・ユニットをシャットダウンしたり,計算量が必要になった時に再起動したりすることが容易にできれば,コンピュータ・クラスタ全体の消費電力を大きく削減することができます.
では具体的にどのようにするかについて,続きは次の記事で検討することとします.
地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜機械学習の消費電力あたり性能の改善に向けて
機械学習におけるElixirエコシステムで考察してみましょう.
目的を達成するのに必要なクロック数を削減する
現在,Nxをアクセラレートする仕組みとしてNxバックエンドという仕組みが提供されています.これは,機械学習においてGPUやTPUなどの利用をする処理系を定義し差し替えられるという仕組みです.現状では,XLAをElixirから活用するEXLA,PyTorchをElixirから活用するTorchXが標準提供されており,他にもいくつかのNxバックエンドの研究開発が進行しています.
EXLAとTorchXいずれも,2022年現在ではIntel/AMD CPUとNVIDIA GPUへの対応が主眼となっていて,ARM,RISC-V,Apple Siliconといった消費電力あたりの性能により優れたプロセッサへの対応が遅れています.これらにはCPUのみの対応となっており,かつCPUにおける最適化も十分ではない状況です.
EXLAとTorchXの中では.TorchXの方が先にApple SiliconのGPUを活用できるようになりそうです.TorchXが用いているPyTorchでMetalを使用してのGPU活用の取り組みが急速に進行中だからです.
しかし,私が調査した範囲では,Core MLを通してNeural Engineを,Nxバックエンドのインタフェースで有効活用するのは難しいのではないかという感触を得ています.Core MLで提供しているのは,画像識別,オブジェクトの検出といった,機械学習・ディープラーニングのアプリケーションに相当するレベルであり,ElixirエコシステムでいうとAxonのアプリケーションのレイヤーに相当すると考えられるのですが,現状ではAxonにはNxのようなバックエンドを提供するAPIを備えていません.この問題について,Erlang Ecosystem Foundationのmachine learning WGで議論したところ,今後,そのようなAxonのバックエンドを定義できるような仕組みを提供する意欲はあるということです.
いずれにせよ,この観点での活用をさらに促進するのには,技術的課題が山積している状況であると言えます.
並列処理を最大限に生かして計算能力を高め,かつできるだけ同期・排他制御で計算が停止しないようにする
並列プログラミングに強いElixirとしては,この点に特に期待したいです.前述のStable Diffusionについて,現在の実装を簡易的に評価したのですが,CPUコアの並列化と負荷分散がそれほどうまく機能していないように見受けられました.ElixirエコシステムにおけるStable Diffusionにおいて,CPUコアの並列化と負荷分散がどのくらい機能しているかを評価してみたいところです.
2022年現在では,NxやEXLA,TorchXに,並列処理する機能が備わっていますが,複数のコンピュータ・ユニットにまたがっての分散処理を行うようにはなっていません.ElixirにはNodeという分散処理を容易に行う仕組みがありますので,Nodeを活用して機械学習・ディープラーニングの分散並列処理を容易に行う仕組みを作ることもできると思います.そのような需要は大きいのではないかと考えられます.
使わないモジュールのクロックを停止するなど電源コントロールをこまめに行うようにする
Apple Siliconで言えば,電力消費の少ないEコアと性能の高いPコアを使い分けることを中心とした電源コントロールが有効であると考えられます.
現在,ElixirそのものはEコアとPコアの使いわけができるような機能を備えていません.しかし,Apple Silicon上でElixirで並列処理をさせた場合を観測すると,macOSが負荷分散機能を備えているようで,プロセスを最初Eコアで動作させて,計算負荷がかかっているプロセスを検出するとPコアに移動させて実行している様子が見て取れます.
そこで,タスクを細粒度に分割することで,macOSが備えている負荷分散機能をより有効に働かせることができるものと考えられます.
機械学習においても,Nxバックエンドや,将来定義されるであろうAxonバックエンドにおいて,機械学習タスクを適切に分割することで,EコアとPコアの適切な使い分けを促進するように設計・実装することが必要になってこようかと考えています.
また,前述のようなApple SIliconで構成されたコンピュータ・クラスタで分散処理を行うことを考えた時には,スリープ機能と「ネットワークアクセスによるスリープ解除」の機能を用いることで,コンピュータ・ユニット単位で積極的に電源コントロールすることができそうに思います.コンピュータ・クラスタ全体の計算負荷を管理し,負荷が小さい時には少数のコンピュータ・ユニットのみで計算させて残りはスリープするように,うまく負荷分散を図ることができれば,消費電力を大きく削減できそうです.
機械学習の消費電力あたりの性能の改善の研究開発プロジェクト
機械学習の消費電力あたりの性能の改善を研究しているプロジェクトが下記になります.
https://zacky1972.github.io/blog/2022/03/03/nx-accel.html
また,特に人工衛星のデータ活用において,消費電力あたりの性能の改善に取り組んでいるのが下記プロジェクトになります.
https://zacky1972.github.io/blog/2022/03/04/sar-data-processing-satellites.html