データサイエンティスト(仮)

元素粒子論博士。今はデータサイエンティスト(仮)。

PytorchでDeep Learning : CPU onlyでインストールする際のメモ

Deep Learningフレームワークの一つにPytorchがあります。

f:id:tekenuko:20180126093727p:plain

Facebookを始めとして、様々な企業や大学が開発に携わっているようです。
f:id:tekenuko:20180126093854p:plain


PytorchはPython上でDeep Learningを行うためのフレームワークです。Preferred Networksが開発しているChainerからforkされた(らしい)ため、書き方や、ニューラルネットワークの構築をデータを流しながら行う*1といったChainerの特徴が引き継がれたものになっています。2017年の初頭に公開されたあとはどんどん人気を博していき、Tensorflow, Keras, Caffeに続くフレームワークとなっています。

Pytorchに興味をもったきっかけは、研究者の利用が多いことです。例えば、以下の柏野さんの資料などにそのような記載があります。

www.slideshare.net

研究者の利用が多いということで、研究段階でPytorchを使ったり、調査の際にPytorchを使って実験するといった機会が多くなり、結果、Pytorch実装が早めに世に出やすくなると期待されます。ビジネス側でDeep Learningのキャッチアップを行っていきたいと考えたときに、Pytorchを知っておくと情報をいち早く得られるようになるのでは、と考えています。

というわけで、Pytorchについて調べてみようと思っています。

インストール

以下の例は、MacOS SierraでPython3.6(Anaconda利用)の場合です。Linuxで最初からGPUを利用できる環境を整えている場合はまた別の挙動になるのではと思います(未検証、GPU欲しい)。

雑にやりすぎで失敗した例

Pythonフレームワークということで、pipなどでコマンドを叩けばインストールできるだろうと考え、以下のコマンドを打ってみます。

$ pip install pytorch

そうすると、私の環境では、以下のようなエラーが出たあと、Pytorchのページに飛ばされました

f:id:tekenuko:20180126100901p:plain

そして、Get Startedの項目を見ると
f:id:tekenuko:20180126101143p:plain
のように、OSやGPUあり/なしでコマンドを適宜変えないといけないらしいことがわかります。

環境に合わせてインストール

自分の環境に合わせてどうなるか見てみます。
f:id:tekenuko:20180126101321p:plain

Anaconda入っているので、condaでも良い気がしますが、ここは好みで。CUDAとはNVIDIAが開発・提供している、GPU向けの汎用並列コンピューティングプラットフォームのことで、これが適切にインストール済みでないとNVDIAのGPUを使って計算することができません。自分の環境は、GPUに対応していないので、CPU onlyで使うためにCUDAの欄はNoneにしています。
(pip3とか推奨されているけど、pipでいいんじゃん?)

次に、推奨されたコマンド(pip3はpipに変えた)を打ってみます。

$ pip install http://download.pytorch.org/whl/torch-0.3.0.post4-cp36-cp36m-macosx_10_7_x86_64.whl 
$ pip install torchvision 

結果、以下のようになり、インストールが成功します。
f:id:tekenuko:20180126102009p:plain

インストールした時期によってバージョンは多少変化すると思いますが、pip listで

torch (0.3.0.post4)
torchvision (0.2.0)

というものが見れていればPythonでPytorchが使える状況になっていると思います。実際、ipythonあたりを雑に起動してみて
f:id:tekenuko:20180126102359p:plain
という感じで、問題なくimportできています。

Next Step

今回は、Pytorchのインストールについてのメモを紹介しました。雑にpip使っていきなりサイトに飛ばされてびっくりしたのですが、普通はサイトにいってインストール方法を読んでから実行しますよね。。単に自分のアホさを露呈しただけでした。

割りと趣味的な感じなので、ちまちまとやっていく感じにはなると思いますが、Pytorchを使って色々と試していきたいと思っています。仕事でDeep Learningをやる機会があったらPytorchを使ってみたいんですけどね。そういう機会があればいいなあ。

*1:Define by runという考え方です。このような設計にすると、ミニバッチごとに異なるネットワークを準備するなどが可能になります。