清明・エアコン増設・JAX / 2022年4月5日
4月5日は清明、という言葉をニュース等で何度も見る。Wikipediaによると、「万物が清々しく明るく美しいころ」。たしかに日が伸びたなぁと実感するし、植物も生物も清く新しい姿をよく目にする。清明、良い言葉ではないか。二十四節気(知らなかった)の一つで、春分・夏至・秋分・夏至なども二十四節気らしい。
西日が強く、夏には冷房がないと厳しそうなことがわかったので、エアコンを追加購入。ちょうど4月中旬に新年度の最新エアコンが発売されるため、今の時期は前年度のものが最安値で買えることが多いようだ。今回はエアコンは単体で購入し、取り付けはくらしのマーケットのC2Cマーケットで見つけた隣町の電気工事会社にお願いする。レビュー評価が良かったところだったのだけど、迅速丁寧明朗会計で頼んでよかったなぁ。エアコン用の壁コンセント増設では、NINJAのように屋根裏を這って配線をしてくれた。屋根裏への入り口があんな場所にあったなんてと驚く。
芝桜の花(たぶん)。
腕痛6日目。徐々に良くなってきた気がする。本日の湯治は近所の皆幸乃湯で。距離的な近さと、夕方以降なら500円で温泉に入れるという値段が良い。
ベクトル・行列からはじめる最適化数学読み進めは12章の最小二乗法のnotebookをやる。途中で計算量周りを考えるところで、JAXに寄り道する。
jaxは高速、ぐらいの知識しかなかったのでちょっと調べてみたのだけど、CPU/GPU/TPUとバックエンドを選んで同一のインターフェイスで計算でき、jax.numpyを使うことでnumpy互換のインターフェイスで操作もできる(CuPyぽい)、ただし副作用がある計算はできない。自動微分も使える。jax.nnでニューラルネットワーク処理に必要な最低限の基礎的な関数ある。XLAでの最適化にJIT通せる。scipyの互換インターフェイスも、関数の数は少ないがある。というかこんな私の説明を読まずjaxのquickstart~の一連のドキュメントを読んだほうが理解しやすい。
- https://jax.readthedocs.io/en/latest/notebooks/quickstart.html
- https://jax.readthedocs.io/en/latest/notebooks/thinking_in_jax.html
なるほど、NNに限らず高速な行列演算をしたいときは便利そう。NNなフレームワークは行列や値はTensorオブジェクトとしてラップする必要があり、それらに合わせた実装を書くため、そのへんをjaxならあまり気をしなくてよいケースが多いのは良さそうだ。numpyでの行列計算の高速化が必要な場合は、TFやpytorchでやるより、jaxのほうが断然使い勝手良いであろう。TFもpytorchも巨大すぎるしね。
じゃあnumpyじゃなくて基本jax使ってもいいのでは?と思ってしまうのだけど、非破壊的な操作ができなかったりrandomのインターフェイスが異なったり、sklearnにママ渡せないであろうであったり、またnumpyの強みの一つがpandasとメモリ空間を共有して使える、つまりnumpy.ndarray <-> pandas.DataFrame の相互の変換コストが大抵の場合ほぼ無視できる程度で行えるので、がつがつデータ探索しているときや雑な操作(破壊的操作がカジュアルにできる)はnumpyのほうがやっぱり便利なのだよなぁ。そもそもjaxはそういう用途には使わないのだろうけど。