2022年3月30日水曜日

Google Colab ってパッケージ開発者にとっていい環境かもしれない

Python プログラムの勉強をするときに Google Colab って便利だなぁ、と思ったりしている。

いろんなパッケージなどが入っていることもそうだけど、やはり一番の理由は「環境構築が必要ない」というところ。pipenv や venv あるいは conda と pip などの「複数ある手法のうちのどれを使えばいいの?」ということがないのが、かなり良いのではないかと思う。

特にパッケージ開発者の場合は「Google Colab でテストして問題ありませんでした」だけにできれば、pipenv, venv, conda などの複数の環境でテストする必要もなくて、効率的にはなりそう。

ちなみに、Julia の場合は Google Colab を使ってもいいけど、Julia の環境構築は簡単なのでローカルにインストールするのも大変ではないかな、と思う。

2022年2月18日金曜日

Julia のベクトル計算高速化

 Julia についての本ということで「1から始める Julia プログラミング」を読んでみた。タイトルから見ると初心者向けのようにも見えるけど、Julia で基本的なプログラミングができる段階から読んでみると多くの勉強になるかと思う。

 例えば、ベクトル x = [5; 3] に対して, a = 7, b = 4 のスカラーのときに
a*x .+ b
とすれば、数式で言うa*x+b*[1; 1] が計算できるわけだけど、これは
a.*x .+b あるいは @.(a*x+b)
の方が良い。

これがなぜ良いのか、という理由が分かりやすく書いてある。上の例だと小規模なのであまり影響が出ないが、最急降下法などで反復回数が増えるとパフォーマンスに違いが出そうにも思う。(この違いをコンパイラが最適化で吸収すると、パフォーマンスの違いはなくなるかもしれないけど。)

他にも、コードを関数の中に入れるだけで Julia は高速化されやすくなるのか、など、高速化の理由が書いてあり勉強になる。

あと、パッケージ管理や仮想環境などについても触れていたりなどなど、勉強になる点が多い。

2021年12月24日金曜日

Python が難しすぎる

数理最適化のアルゴリズムを実装するにあたって、たまに Python を使うことがあるが、だいぶ Julia に慣れてしまうと Python は難易度が高いように感じる。

個人的に難しいと思うのは主に3点で

1. conda と pip が混ざると環境が壊れることがある

2. python のバージョンが上がったときに対応できないライブラリがあって、複数の python を維持しないといけない

3. インデントでループ範囲を特定するため、コピー&ペーストが簡単にできない

 

2番については Julia でも他のライブラリで同じことは起きるので本質的な解決はできないことは同じだが、Pythonのほうがバージョン管理をきちんと行わないといけないような印象がある。

3番については、どこか別のプログラムで書いた一部分をコピー&ペーストしたときに、ループ範囲のインデントのスペース数が異なるとややこしいことになってしまう。このあたりは、for~end などで特定できると整形はエディタにお任せできるので、だいぶ楽ではある。


ただ、Julia が完璧かというとそういうわけでもなくて、例えば using の遅さなどはそのうちに改善されていくのではないかと思っている。Python もパッケージ管理や仮想環境管理は、もっといいものが出てくるのではないかと思っている。

 



2021年8月31日火曜日

SIAM Optimization 2021 と IFORS 2021

SIAM Optimization と IFORS 2021 に参加してみた。

2つともに元々は2020年に開催予定だったものが、延期でオンライン開催になったものだ。

SIAM Optimization はアメリカ東海岸の時間に合わせて、基本的にはリアルタイムでの参加、IFORS は開催国の韓国の時間に合わせてビデオ上映+リアルタイムでの質疑応答、というスタイルになっていた。

IFORS については、開催前に発表ビデオをアップロードしておくスタイルだったので「質疑応答をリアルタイムでする意味あるのかな?」と疑問ではあったけど、やってみるとSIAM Optimization のように全部をリアルタイムで行うよりも良いスタイルのように感じた。

やっぱり発表するというのは、それなりに体力を使うので、そのあとの質疑応答まで続けると、発表者にも疲れが出ていることがあるけど、先に発表の部分をビデオ撮りしているからか質疑応答もテキパキと進んでいる感じがあった。あと、質疑応答の時間だけなら時差があっても何とか乗り越えられる、という印象も多かった。

開催する側にとってはビデオのアップロードをサポートしたり、それをちゃんと発表時間に合わせて再生したり、などなど手間暇もかかると思うだろうけど、個人的には結構な好印象だった。

まぁ、IFORSは日本との時差が0時間で体力的に楽だったというのは、あるかもしれない。

 

いまのところ、2つの学会で収集した論文などの情報を整理しているところで、どの内容が面白いかも、少しずつ確認していきたいところ。

2021年4月3日土曜日

SDPA with different compilers and linear algebra libraries

 2014年とかなり以前の記事だけど、

 SDPA with different compilers and linear algebra libraries

https://peterwittek.com/2014/08/sdpa-with-different-compilers-and-linear-algebra-libraries/ 

という記事を見つけた。

gcc, icc, pgi というコンパイラでSDPAをコンパイルしたときにどれくらいの差が出るか、というのをまとめてあって、結構コンパイラによっても性能に差が出るのが面白い。


 

2021年3月31日水曜日

ダークモードを止めてみた

 いろんなエディタなどでダークモードがあるので、ダークモードも使ってみたけど、結局はやめることにした。

一番の理由として「目が疲れる」があった。

論文を読みながらプログラムを作ったりするわけだけど、論文はPDFなのでフォントを自由に変更することができない。論文のフォントはダークモードを前提にしているものではないので、ダークモードだと読みづらい。結果的にPDFはライトモードでエディタがダークモードだと明暗の差に目を合わせるのが頻繁になってしまって、目が疲れてしまう。

やはり、PDFはフォントを変えることができないのが長時間読む場合でも辛いので、なんとかならないものかな、と思ったりしている。



2021年3月20日土曜日

RictyやMigu 1Mを試してみたけど

 それなりにプログラミングをしている時間もあるので、フォントを変更したらもっと便利かもしれない、と思ってやってみたけど、結局ダメだった。

 Ricty Dimished や Migu 1M などが良さそうなので、それを試してみた。(個人的には0は中にドットが入っているものよりもスラッシュが入っているほうが見やすいので、そういうので選んでみた。)

 確かに見やすくはなったのだけど、これらのフォントでは自分の環境では

 εが正常に表示できなかった。 

自分のプログラムでは0とOやIとlと1を見間違えることはほぼないので、それらの差が見た目で分からなくても対して困らないのだけど、さすがに \epsilon が \cdot になってしまうのは致命的なので、結局フォントはデフォルトに戻した。

たぶん自分の環境で上手くいかないだけで他の環境では上手く表示できているんだろうけど、逆にどうやって解決したらいいのかが情報収集できず断念。

個人的には Migu 1Mは見やすいと思う。