地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜機械学習の消費電力あたり性能の改善に向けて

この記事シリーズでは地球温暖化の問題について2022年現在の最新情報を紹介し，コンピュータと地球温暖化は決して無縁ではないことを示します．その上で，Elixirで地球温暖化の解決に貢献する方法について示します．私たちは持続可能な開発目標(SDGs)を支援しています．

この記事は次の記事のアップデートです．

https://qiita.com/zacky1972/items/2c82a593fbb2e4c949d2

シリーズ

* [地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜序論 (2022年版)](https://qiita.com/zacky1972/items/536e93af8404ed63b382)
* [地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜FAQ3.1「人間が気候変動を引き起こしていることはどのようにしてわかるか？」 (2022年版)](https://qiita.com/zacky1972/items/1d998a17ba63ac714342)
* [地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜FAQ4.1「今後20年間で気候はどのように変化するか？」 (2022年版)](https://qiita.com/zacky1972/items/0d0e1f1c2bf773c7557a)
* [地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜FAQ4.2「二酸化炭素の排出削減の効果はどれだけ早く確認されるだろうか？」 (2022年版)](https://qiita.com/zacky1972/items/d395c82938482c8962bd)
* [地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜FAQ9.1「グリーンランド及び南極域の氷床の継続的な融解は逆転しうるか？氷床が元に戻るのにどの程度の時間がかかるだろうか？」 (2022年版)](https://qiita.com/zacky1972/items/19194e55af677524d0ce)
* [地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜FAQ9.2「海面水位は今後数十年間でどの程度上昇するか？」 (2022年版)](https://qiita.com/zacky1972/items/f4ed1bb4dd45f7d1e326)
* [地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜「コンピュータと地球温暖化は 決して無縁ではない(2022年版)」](https://qiita.com/zacky1972/items/a67459bf36f7b369b946)
* [地球温暖化とコンピュータのエネルギー消費の問題にElixirで立ち向かう〜機械学習の消費電力あたり性能の改善に向けて](https://qiita.com/zacky1972/items/fc74503c33839b64d0a3)


# 機械学習の消費電力あたり性能の改善に向けて

## 機械学習の電力需要

再び，次の論文を見てみましょう．

[A. Andrae & T. Edler: On Global Electricity Usage of Communication Technology: Trends to 2030, Challenges 2015, 6(1), 117-157. available at https://www.mdpi.com/2078-1547/6/1/117](https://www.mdpi.com/2078-1547/6/1/117)

ここに書かれていた次の事実に注目します．

* 中でも固定網やデータセンターの電力消費量が伸びる可能性が高い 

論拠となる図は次のとおりでした．

[![Best and Expected case scenario CT electricity](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55223/c5c49b5d-c090-4962-03b6-5cd2021bf0d9.png)](https://www.mdpi.com/challenges/challenges-06-00117/article_deploy/html/images/challenges-06-00117-g009a.png)

[![Worst case scenario CT electricity](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55223/83da2a5d-6154-e6c2-4db0-a65972e63734.png)](https://www.mdpi.com/challenges/challenges-06-00117/article_deploy/html/images/challenges-06-00117-g009b.png)

5Gの普及，機械学習などの計算量の増大などにより，インフラストラクチャー側の負荷が急上昇するというシミュレーション結果が描かれていました．

ここで，機械学習に注目します．

機械学習の技術の発展は目覚ましく，たとえばテキストや画像から新たな画像を生成するMidjourneyやStable Diffusionなどの登場は記憶に新しいことと思います．

一方で，これらはものすごくコンピュータ資源を要求することも知られていると思います．定量的に評価する必要があるかと思いますが，MidjourneyやStable Diffusionなどの画像生成AIは，1枚の画像を生成するのに現状では大量の電力を消費しているものと思われます．世界中から膨大なリクエスト数も要求されていることでしょう．今後，このような技術が動画作成に活用されていくとなれば，必要な画像の枚数が急増するのは間違いないと考えられます．したがって，画像生成AIには膨大な電力需要が見込まれるものと考えられます．

このような問題を解決していく必要があると考えられます．

また，機械学習には環境問題に必要なシミュレーション研究やデータ解析に貢献できるということもあります．このようなシミュレーション研究やデータ解析に要する電力を削減することで，環境問題の研究自体をエコにしていくということも必要であるかと思います．


## Elixirエコシステムにおける機械学習の目覚ましい進展

一方，Elixirエコシステムは2020年のNxの発表から急速に機械学習を発展させてきました．

最新のニュースでは機械学習・ディープラーニング基盤であるNxとAxonにより，Stable Diffisionをサポートしています．

https://qiita.com/zacky1972/items/e0c1f8edb4117f61663f

Phoenix Frameworkから容易にStable Diffusionを使うこともできます．このことにより，ウェブアプリケーションからカジュアルに画像生成AIを含むAI技術を活用できるようになります．

## 機械学習におけるコンピュータの消費電力を抑えるためにElixirエコシステムでできること

下記の記事にて「コンピュータの消費電力を抑えるためにソフトウェアでできること」を紹介しました．

https://qiita.com/zacky1972/items/a67459bf36f7b369b946#コンピュータの消費電力を抑えるためにソフトウェアでできること

ここでは3つのアプローチがあるとしています．

* **目的を達成するのに必要なクロック数を削減する．**
* **並列処理を最大限に生かして計算能力を高め，かつできるだけ同期・排他制御で計算が停止しないようにする．**
* **使わないモジュールのクロックを停止するなど電源コントロールをこまめに行うようにする．**

なお，前提として，「消費電力あたりの性能の高いプロセッサを使用すること」をあげています．

https://qiita.com/zacky1972/items/a67459bf36f7b369b946#前提-消費電力あたりの性能の高いプロセッサを使用すること


機械学習における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