とある計算神経科学者のPython環境

English

もう大分前の話になりますが、仕事で使う言語をMatlabからPythonに変更しました。快適に作業ができるようになるまでセットアップに苦労したので、ここにどんなことをしたかを記しておこうと思います。

マシンの選択:Intel版Mac

Macを使う理由はコントロールキーとコマンドキーが分かれているからです。プラットフォームの選択について他にも色々と絡む要素があると思いますが、個人的に重要なのはこれくらいです。これら2つのキーが分かれていることの利点は、後述するエディタ、VS Codeを含む多くのアプリで使用感に一貫性が出ることです。とりわけ、Vim的な動作をアプリに求めるとコントロールとコマンドが分かれていない場合は多くのコマンドが干渉してしまうことになります。(例:ctrl-v はVimではページ送りですが、Mac以外のプラットフォームではペーストと干渉します。)

なぜインテルなのか。これはこの記事を書いた時点では、Apple Siliconへの多くのソフトの対応が遅れていたからで、今となってはApple Siliconで何ら問題ないと思います。Apple Siliconの優位性については過去の記事を参照してください。

個人的にはアップルのキーボードは好みではないので違うのを使っています。しばらくは東プレのRealForceを使っていたのですが、Ferris Sweep(キーレイアウトについてはこちら)を経てCorneに落ち着きそうです。RealForceをMacで使う場合はKarabiner-Elementsを使って一部のキーをリバインドするといいかもしれません。

エディタ:Visual Studio Code (VS Code)

VS Codeはマイクロソフトが出している(一応)オープンソースのエディタです。汎用性が高く、プラグインを使うことでPythonを含む様々な言語に対応できます。

特筆すべきはそのリモート支援機能です。この機能はリモートマシンにVSCodeをインストールしてサーバとして動かすことができます。そのサーバとローカルのVSCodeを通信させてファイルの読み書きができるので、リモートのマシンを使いながらもローカルな操作感(入力遅延なし)が実現できます。以下、私の環境の詳細を記しておきます。

使用中のプラグイン

Python plugin: VS CodeのPythonの基本的なサポート機能です。ほぼ必須です。

Pylance: Pythonのより進んだコード補完(他のファイルを参照して関数等のチェックも行う)や色付けができます。あると便利です。

Jupyter: 人とやりとりする時やデモの作成にノートブックを使うことがあると思いますので、あるといいでしょう。入力と出力がこんがらがるので個人的にはノートブックは好きではなく、Matlabのセルの方がいいと思うのですが、そういう人のために、インタラクティブモードも用意されています。

VS Code Neovim (Vimが好きな人用): Vimをメインエディタにしている人におすすめです。Vimプラグインもあるのですが、そちらはVimの機能を完全に再現しているわけではなく、一部の機能しかありません。一方こちらのNeoVimプラグインはシステムにインストールしてあるNeoVimをVSCode内部で直接動かすため、NeoVimの全ての機能が使えます。

Remote development extension pack (リモートのマシンを動かしたい場合): 現状私がVS Codeを使う最も大きな理由がこれです。リモートのマシンにssh接続するとそこに自動でサーバ用ソフトをインストールし、ローカルのVS Codeで操作できるようにしてくれます。離れた場所にある計算機にアクセスしたい時にも便利だし、MacでできないことをMacのインターフェイスでやりたい時(Linuxに載ってるNvidiaのGPUを使いたい等)にも便利です。どちらにしてもファイルをローカルで直接いじっている感覚で使えます。

その他のエディタの設定

フォーマッタ: Black
コードのフォーマットを綺麗にしておくことはメンテナンスのためにとても良いことですが、フォーマットのことまで考えながらコーディングするのは面倒ですし、書いちゃったらもう直すのは面倒です。ですが、Blackを使うとなんと自動的にコードをフォーマットしてくれます。最高です。Blackを使うことによる様々な利点については、こちらのブログを参照していただきたく存じます。VS Code側で”Editor: Format On Save”をチェックしておくと、保存する度に自動的にフォーマットしてくれます。

色のテーマ: Monokai
Pylanceを使うと、”semantic highlighting”という特殊な色付けが使えます。これは普通のハイライティングよりも一歩進んだやつで、コードを読んで、変数、クラス、メソッド、関数などを区別し、それぞれを別の色にしてくれる機能です。残念ながら、すべての色のテーマがこれに対応しているわけではないので、テーマによっては区別できるのにされない要素などがあったりします。Monokaiはそれぞれの要素のちゃんと別々の色が定義されているのでおすすめです。

その他の設定: 添付ファイルを参照
その他にも色々と変更した点があるので設定ファイルを添付しました。何かおかしいと思う所がある場合は参照してみてください。

デバッグ: “justMyCode” を “False” にしておく
デバッグの設定は launch.json で行うのですが、この中にある “justMyCode” を “False” にしておくといいかもしれません。デフォルトでは “True” になっていて、そのままにしておくとエラーが出た時にそのエラーが自分が書いた部分でない場合デバッガが起動しません。自分が書いた部分でなくても、ライブラリ関数への引数の与え方が違っていてエラーになる事などもしょっちゅうあるので、これは”False”にしておいた方がいいと思います。

一行実行するショートカット”Ctrl + .”の設定
何か試したい時に、セルを作らずに一行だけ実行したい時ってあると思います。そういう時のためにショートカットを用意しましょう。”Jupyter: Run Selection/Line in Interactive Window” を適当なキー(私の場合は “Ctrl + .”にしてあります)に割り当てておくと作業が捗ります。

プロファイリング: cProfile + pyprof2calltree (+ QCacheGrind)
ここはまだちょっと最適解を得たのかちょっと自信がない部分ではあります。こちらに詳しい解説があります。個人的には、Matlab付属のプロファイラの方が使い勝手はよさそうだなと感じます。もしよりよいツールがあればコメントでお教えいただけると有り難いです。

まとめ

短い記事で広範な内容をざっとカバーしました。デフォルトの状態でもよく機能するPyCharmなどとは違ってVS Codeは使い勝手がよくなるまでにセットアップを要する印象があります。しかし、根気よくセットアップをしてやればその豊富なプラグインで唯一無二のツールになってくれるでしょう。この記事がその一助になれば幸いです。

2020年の Apple Silicon Mac について

English

2020年11月10日、Apple Siliconを乗せた新しいMacのモデルが公開されました。

ラインナップは

  • Macbook Air (13インチ)
  • Macbook Pro (13インチ)
  • Mac mini

で、それぞれM1チップを積んでおり、他のプロセッサオプションはありません。

価格はそれぞれ最低値が

  • Air: $999
  • Pro: $1299
  • mini: $699

で、ベースモデルはメモリは8G、ストレージが256GBになります。

グラフィックス統合チップを使っているのでカスタマイズオプションは少なくメモリを16GBにするのに+$200、ストレージを増やすのに概ね$400/TB 程度となります。

スペックの解説は他のサイトに詳しいので、ここでは個人的な見解を書いていきます。

今回アップルが注力した点は、「ハード面でどれだけ手を抜けるか」ということだと思います。まずは作るチップの種類を最小限(1種類)に抑えた上で、可能な限り広い範囲に届く製品ラインアップ(エントリー向けの3種類)を組みました。Apple Siliconのデビュー作として効果を出すためには一番客層の厚いエントリー層に向けた製品を出すのは必然だったと思います。ハードウェアのデザインは昔のものをそのまま流用し、チップ統合やファンの撤去によって余ったスペースはおそらくバッテリーで埋めたものと思われます(一週間後にiFixitが分解したときにわかりますね)。ここ数年で出した製品はM1への移行がスムーズになるようにM1を意識した設計がほどこされていた可能性もあります。

ハード面で浮いたリソースはどこに回されたのでしょうか。これはおそらくx86ベースからARMベースのシステムにするために必要だった後方互換性をとるためのソフトウェア周りに、でしょう。私は異なるアーキテクチャでソフトウェアの互換性をとるための開発がどのくらい困難なものかはわからないのですが、発売からすぐにソフトウェア周りに多数の不具合が見つかるようでは評判が悪くなるのでこの部分のテストに注力するのは適切なように思われます。

どれを買えばいいかは人それぞれだと思いますが、Macbook AirとProが全く同じプロセッサで動いていることは注目すべきところだと思います。同じプロセッサだから同じパフォーマンスが出るかというとそういうものではなく、Airはファンレスで排熱が弱いので少しでも長い計算を行うと発熱で計算能力を落とすかもしれません。このあたりはベンチマークの結果を見たいところです。A14のTDP(Thermal Design Power)が6Wであることを考慮するとM1はおそらく10W程度だと思われるので、ファンレスでも十分な可能性はあります。それ以外では性能は同じだと思われるのでラップトップがいいかデスクトップがいいか、あるいはタッチバーが好きかどうかで決めていいのではないかと思います。

M1チップについてですが、A14との違いはハイパフォーマンスコアが2つから4つになったこと、GPUコアが4つから8つになったことで、あとは大体同じです。イベントの少し前にA14Xという(存在しない)チップの非公式のGeekbench 5スコアのリークがあったようで、スコアは7000程度とのことでした。A14がだいたい4000くらいなので、ハイパフォーマンスコアが2倍になり、高効率コアが4つのまま据置きであることを考えるとこれがM1でも納得できる数値だと思います。これは Ryzen 7 4800HS や Core-i7 10875Hと同程度で、モバイル用のハイエンドのものと肩を並べる程度のパフォーマンスになり、これ自体ラップトップとしてはそれほど驚異的な数字ではありません。しかし、消費電力がそれらハイエンドCPUの1/3から1/4になると予想されることも考慮に入れると驚くべき数字になります。ほとんど非合理とも言える効率で有名なRyzen 4800Uですら15Wでスコア6000程度なことを考えると、10W程度のプロセッサで7000を出すとなると、何かがおかしいようにも感じます。このあたりの数字は将来もっとコア数を増やした際にデータセンター等で使えるかどうか、というところに関わってくる可能性があるので適切な測定がなされる(あるいはデータが提供される)ことを期待します。

科学計算をするのに適切な計算機であるかという観点から見ると、ハードウェアの観点から言うと十分に使用に耐えうると思います。ただ、最初のうちはARMネイティブで動くソフトが少ないかもしれないので、ソフトウェアの移行が進んでから購入する方が賢いかもしれません。このままのスペックでもかなりの計算はできますし(中堅デスクトップ程度かと)、発熱やファンノイズの問題もほぼないと言えるでしょう。ハイエンドデスクトップを置き換えたいのであれば、来年以降のiMacかMac Proを待つ方がよさそうです。

もしニューラルエンジンがモデルのトレーニングで(Tensorflowなどで)簡単にできるようになった場合、購入することも考えています。本当はより高性能なプロセッサを積んだiMacを待ちたいところですが、どうするか少し決めかねています。長くなりましたが、以上です。