カテゴリー「パソコン・インターネット」の158件の記事

2016年10月 5日 (水)

VirtualBox上のSAS University EditionサーバーにLAN経由でアクセス

昨日書いた記事で、SAS University EditionがサポートしているJupyter notebookサーバーをlocalhostからアクセスしてみました。

どうせなら、デスクトップでサーバーを走らせておいて、LAN経由でノートパソコンでアクセスできたらいいなぁとおもいやってみました。

試行錯誤しましたが、ブリッジモードにして、ポートフォワーディングをしてやればOKのようです。

Sas_bridge

ウィンドウズでVirtualBox Host-Only NetworkとPCの接続アダプター(Local Area ConnectionかWifi)を両方選択して、右クリックすると「ブリッジモードに追加」できます。ブリッジモードにするとNetwork Bridgeのアダプター用に新しいIPが振り分けられるので注意。

その後、

Sas_over_lan

ipconfigでLANのIPv4アドレスをしらべて、VirtualBoxのネットワークアダプター1をNATにしてポートフォワーディングをしてやります。

ぐぐるとHost-only adapterをつかえだの、Bridged adapterをつかえだのばかりあるのですが、私の場合NATで大丈夫でした。NATでもポートフォワーディングするまでだめだったし、ウィンドウズの方で設定したブリッジも外すとダメなので両方とも大事のようです。

同様にSAS Studioも10080をポートフォワーディングしてできるはずですね。

2016年10月 4日 (火)

SAS University EditionでJupyter Notebookしてみる。

昔は大学の研究室でも大金をはたかないと使えなかったSASが、今はSAS University Editionがあって、個人用なら基本部分はタダで使える時代になりました。RとかPythonとかがあるので、時代の流れですね。基本部分しかないのでオラクルとかのdbを直接アクセスとかはできませんが、データがcsvに変換できるならなんでも取ってこれるので、まあ結構使えます。

オフィシャルのアナウンスによると、SAS University Editionは2016年の7月以降のバージョンからはJupyter notebookがついてくるらしいですね。

普通は http://localhost:10080 としてSAS Studioに行きますが、jupyterのサーバーがポート8888を使っているので http://localhost:8888 でアクセスできるはずなんですが、ウィンドウズのVirtualBox上でSAS University Editionのサーバーを走らせるとなんかダメだった。

VirtualBoxのNATのネットワークドライバーのSettingを確認してみるとポートフォワーディングにHTTPとHTTPSしかないのが原因っぽいので追加してみる。

Sasunivnat

Sasportforwarding

一応自分でJupyterのサーバーを使ってPythonでなんかする可能性を考えると18888を8888へ送った方が良いかなと思ったのでそうしてみた。

Sasonjupyter

動いた!

別に特別なことはせずとも、SAS University Editionのサーバーが走っていればJupyterのサーバーもすでに走っているようだ。でもつかってみるとSASってログが冗長だしJupyterにはあんまり向いていない気がする。optionsでログ簡潔にすればいいのかな。

options nosource nonotes;

2016年8月20日 (土)

Xperia Z ポケモンGOにログインできない。対処法

私は初代のXperia ZでポケモンGOをがんばっているのですが、40分から最長でも2時間程度ゲームをすると画面がフリーズして、なにもできない状態になります。

アプリの切り替え画面にいってスワイプしてポケモンGOを終了し、再起動してみるとほぼ必ずログインに失敗します。

ポケモンGOのバージョンはv0.33.0で、Xperiaはソニーの最新のストックROM(Android 5.1.1)です。

ゲームサーバーへの負荷が高いのであれば、周りのプレーヤーも影響があるはずですが、確認すると私だけがログインできない。iPhoneやサムソンのギャラクシーで私のグーグルのアカウントでログインするとちゃんとできるので、私のアカウントになにか問題あるわけではない(Banとか食らっているわけではない)。

という訳でこれはどうもXperia端末の不具合。モバイルデータLTEを止めて、フリーのWiFiスポットに移動するなどして、WiFiでログインするとXperiaでもログインできてしまうので、データ通信モジュールのハードかドライバーの問題っぽい。

また、ちゃんとゲームからサインアウトして、再ログインしようとしてもモバイルデータだと高確率で失敗する。

ポケモンGO以外のアプリはXperiaでもちゃんと動くので、データ通信自体は動いている。ポケモンGOのログインだけどうやっても失敗する。でも2-3日に一度くらいは、モバイルデータ通信でもログインできる時がある。3Gに切り替えたり、Google Playのサービスを再起動したり、あらゆるキャッシュを消したり、なにやってもだめ。

結論から行くと、下記の④の端末をアンロックして、ちょっと前のROM(10.7.A.0.222 )に焼きなおすことでログインできるようになりました。

あまりググっても同様の症状の人を見かけないので私の端末が長いことつかって、OTAでROMをアップデートや、ソフトのインストール・アンインストールの繰り返しでAndroidが不安定になっていただけかもしれません。

対処法は4つ

私の場合は:

① フリーのWiFiスポット等に移動し、ポケモンGOを一度終了し、データ通信を切り、WiFiで一度ログインしてからデータ通信に切り替える。

② フリーのWiFiスポットなどがない場合、端末をもう一つ持ち歩いて、そっちのデータ通信を「Bluetoothでインターネットを共有」する設定をする。この状態で①同様にポケモンGOを一度終了し、再起動してログインし直す。成功したら自分のデータ通信に切り替える。

という対処法が有効。下に追記したようにCyanogenMODを入れるとモバイルでもログインできるようになる。

ログインできないとアクセス集中によりログイン失敗のメッセージがでることがあるが、これはWiFiもデータ通信も切った状態でログインしようとしても出ることがあるので、あまり信用していない。本来はインターネット接続がありませんというエラーがでなければ行けないが、このエラーをすっ飛ばしてサーバーアクセス集中のメッセージがでてくるのだ。

しょうが無いので、家から出る前にWiFiでログインし、家を出てすぐデータ通信に切り替え、ポケスポットをスキャンしたりして動作を確認して、ようやく出発。という流れ。

③ CyanogenMODにする。ソニーの純正ストックのROMに入っているドライバーの問題だとしたら、CyanogenMODにしたらドライバーが更新されてまともになるのかもしれないと、やってみたらログイン問題は解決した。

cm12でAndroid 5.1.1の最終リリース版にしてみたら、ログインの問題は解消し、スリープの設定を無視して、すぐスリープになってしまう問題も解消。しかし、発熱が余計にひどくなり、熱暴走しだすとゲームがもっさりいと遅くなる。GPSの失いやすさも相変わらず。バッテリーの持ちも余計悪くなった。

う~む、ログインの問題は大きいので、ポケモンGOを遊ぶ状況は改善したが、その他の用途では正規版の方が絶対いい。CyanogenMODを一番新しいNightly版にしてみても多分ダメそうだが・・。

新たな解決法を追記

④ Flash toolでちょっと前のROM(10.7.A.0.222 )に戻る。

下記のFlash toolでcm12.1からSonyのストックROMへと戻ってみた。すると発熱もcmより改善するのは当たり前として、なぜかログインの問題まで解決したようだ。ポケモンGOの0.35.0が出た日にやったので、ポケモンGOのバージョンアップのおかげという説も捨てられないが。

PC companionだと、0222から10.7.A.0.228へとバージョンアップできる。なぜかOTAはできない模様。ログインの問題は0228で起こっていたので、躊躇しているが、もしかしたら諸々の設定をワイプして再インストールしたのが良かったのかもしれないので、0228でも大丈夫かもしれない。

とりあえず、これですべての問題が解決した。

Sonyのカメラアプリ好きだったので戻ってこれてよかった。ポケモンGOのパフォーマンスもGPSの精度・安定度も前より向上している気がする。Androidもウィンドウズみたいに定期的な再インストールが大事だったりするのだろうか。Avast!をまだいれてないのでAvast!が干渉していた可能性を検証せねば。

Sonyの正規のROMに戻る

このビデオによると、CyanogenMODを入れたXperiaからSonyの正規のROMに戻るには、普通にSonyのFlash toolを使えばいいらしい。

cm12.1を入れた結果、ソニー独自のAndroidのチューニングによって、発熱がかなり抑えられていて、それがパフォーマンスの安定・向上につながっているのがわかったので、ポケモンGOを遊ばない限りはストックROMを使うのが一番いい良いようだ。

iPhoneとGalaxy Note との比較

Galaxy Note IIという初代Xperia Zよりも古いサムソンの端末と最新のiPhone 6でしばらくポケモンGOをやったところXperiaのクソさが目に余って悲しくなったので箇条書き。

値段的にもリリース時期もiPhone 6 > Xperia Z > ギャラクシー Note II だが、

1. ギャラクシーはGPSがかなりつながりやすく、正確・安定。Xperiaだとバスの窓側の席に座り、太陽光に直接あたるように気をつけなければGPS信号が見つかりませんとエラーになり復帰するのに1-2分待たされるが、ギャラクシーだと窓側席から一つ内側の席でも余裕で追跡される。iPhoneは更にGPSの追跡の滑らかさが上。

2. バッテリーの持ち、充電がよい。Xperiaだと画面の輝度を日陰に行かないと見えない程度でまで下げても2.1Aの急速充電器で充電しながらポケモンGOをプレイするとみるみる電池が減っていく。ギャラクシーだと同じ充電器につなげるとプレイ中でもみるみると充電されていく。iPhoneはギャラクシーより更に電池の減りが異常にすくない。

3. ポケモンGOのプレイ中は画面がスリープにならないはずだが、Xperiaではどう設定してもなぜも20秒程度でスリープになるので、常にタップして起こし続ける必要がある。ソニー独自のスタミナモードとかその辺のせいだろうか。ギャラクシーやiPhoneでは問題なし。

4. 上記のログインの問題はXperia(ストックROM)だけ。

5. 発熱がすごい(Sonyのストックでも、cm12.1は更に酷い)。Xperiaは背面上部が熱くなって持てなくなる。熱暴走してソフトが落ちることもある。ギャラクシーNote IIはでかいからか、まったく発熱を感じない。iPhone 6は小さいからかNote IIよりは発熱を感じるがまあ気にならない。

アップルやサムソンは販売台数が桁違いなので、製品をつくるとき良い部品を大量に発注して、買い占めてしまい、安くいい物を仕入れているが、世界市場を無視して、日本市場を食い合っている日本のメーカーにはおこぼれの部品しか回ってこないし足元を見られて高い。そういう光景が目に浮かぶ。

2016年8月 5日 (金)

古いGalaxy note IIでポケモンGo

手元にある古いけどまだまだ全然使えるサムソンのギャラクシーノート(GT-N7100)にポケモンGoを入れようとおもったが、Play Storeに表示されない。他のデバイスで表示させて、リンクを共有するからアプリへの直接リンクを調べて、

https://play.google.com/store/apps/details?id=com.nianticlabs.pokemongo

へ言ってみても、[インストール]ボタンが表示されない。。。

調べてみるとデバイスが公式にはサムソンがAndroid の4.4をサポートしていないので、Nianticの方でサポート外扱いにしてある模様で、CyanogenModでAndroid 4.4.4が走っているのに関わらずインストールさせてくれない。CM12にアップデートしてAndoroid 5.1.1にしても無駄だった。

という訳で更に調べると、build.propをいじってノート4の振りをしろとある。

CM12にはSuperuserがついてくるので、SettingsからAbout phoneへ行き、Build numberをクリックしまくって、Developper optionsを有効化して、そこからルートアクセスを有効化する(Apps onlyでおk)。

Solid Explorer File Managerをインストールして、左からスワイプして、メニューを出して、Rootをマウント。Root / Systemにあるbuild.propを開いて、編集。

build.propについてはこちら

ro.product.model GT-N7100
ro.product.name t03gxx
ro.product.device t03g

ro.product.model=SM-N910S
ro.product.name=SM-N910S
ro.product.device=SM-N910S

に変更。再起動。SettingsからAbout phoneに行き、デバイス名が変わっていれば成功。 Play Storeに行き、ポケモンGoを検索。インストール。

追記

これをやると、なぜか電話をかけると音声なしになる症状が発生するので、build.propを元に戻す。PokemonGoにアップデートがあったらまた編集するしかなさそう。

8月8日のアップデートで、実際にbuild.propを編集、ポケモンアップデート、build.propを戻すとやってみたら、build.propを戻したのに電話の声が聞こえない症状が続いてしまって困った。

今回、いろいろググったら同じような症状はかなりあるものの、解決策は諸説あるも決定的なものがなく、原因は特定されていないらしい。

いろいろGoogle Play ServiceやPhoneのアプリを止めたりキャッシュを消したりして、再起動してもだめで、Tex messageのアプリの設定をいろいろいじってから再起動したらなんか治ったけど実際なにが効いたのかは不明。

そんななかググッている最中に見つけたこのビデオが超ツボにハマってしまったので、自分用の忘備録として貼っておく。短いので全編みていただければわかると思うけど、ハイライトは1:50あたりから・・・。すごい・・。

延々と電話の音声がでない症状を説明して、あれやってもダメこれやってもだめ、いよいよ解決法の説明が始まる!と匂わせて、「もし解決法をしっていたらコメント欄によろしくね」とシレーっと言い放つ。そしてビデオを気に入ったらチャネルに登録しろだのいろいろテンプレなコメントしてビデオ終了。いやーすごいの見た。ものすごいエンタメ系として優秀なのでオススメです。

ビデオのタイトルの「at」の用法とか、ビデオ中のI not found no solutionとか、いろいろ文法間違っているのもポイント。

なんかこの人のホームページはスペイン語で個人でパソコン関係の事業をしているっぽいけど、英語のなまりがスペイン語ネイティブっぽくなくなんかインドっぽいとおもったら名前は中東系のフセインさんで、スペイン語もネイティブじゃないのかも。よく聴くとインドのアクセントとも違うから、名前通りにアラブ系なのかな。アラブ系とはあまり話したことがないが妙に納得した。

2016年7月14日 (木)

CaffeをWindows 7でcuDNN付きでビルド。

しばらくTheano/Lasagneでディープラーニングをしてましたが、Caffeのモデル動物園からImageNetのデータで学習済のモデルをLasagneに読み込んで動かしてみたらどうもCaffeよりかなり遅いっぽいので、Caffeを試してみようとおもったんですが、CaffeのPythonモジュールはVS2013で自分でC/C++ソースからビルドしないといけないのですね。これがもうめっちゃ大変でしたが、なんとか丸2日ほど格闘してできたので覚書。ビルドできたPythonモジュールは229MBあり巨大。公式にサポートされているUbuntuでも試したんだけどなぜかmakeできなかったのにウィンドウズでできた不思議。

速度の問題は、たぶん私のTheano/Lasagneの環境になにか問題があるだけで、この論文によるとCaffeとTheanoの速度はあまり違いがないはずなんですが、何が問題なのか未だにわかりません。それにしてもTensorFlowは家庭用PCでGPU一基だとまだCaffe・Theanoよりも遅いですね。

目安として「GPUでCUDAが使えるとCPUの大体10倍速い。CUDAにあわせてcuDNNが使えるとさらに10倍速い。」と言われますが、私の環境ではCaffeはCPUでもGPUでもTheanoの10倍くらい速いのでCUDA周りだけではなく、BLASとかも関係してそう。ふーむ。Theanoは汎用性高く、Caffeはコンピューターヴィジョンに割りと特化しているんで、ImageNetのモデルだとCaffeが有利?それにしても差が大きすぎ。

まあなんにせよ(私の環境では)Caffeは速い!素晴らしいです。CPUでもForwardパスだけなら使えそうな速度が出て満足。GPUでガンガントレーニング回して、デプロイメントはCPUでも行けるという感じ。

私は試してませんが、このブログCUDA付きでビルドしたWindows 7のCaffeがおいてありました。どうしてもビルドできない場合、試して見るんもありかもしれませんが、大丈夫ですかね。

ビルド方法

Caffeは公式にはLinuxしかサポートされていないので、ユーザーがボランティアで移植している状態だったようですが、マイクソソフトが最近CaffeをWindowsに移植しました。これが一番新しく安定してて、ビルドも簡単です。

ビルド方法はhttps://github.com/BVLC/caffe/tree/windowsのReadmeにある方法でだいたいそのままでオッケーです。

まず、マイクソソフトがメンテナンスしているブランチを取ってきます。gitでcloneしてwindowsブランチをcheckoutするか、単にzipをダウンロードするかします。zipの方が簡単。

このマイクソソフト版CaffeはVS2013に同梱されているNuGetというパッケージマネージメントツールをつかって勝手にOpenCVとかBoostとか必要なものを揃えてくれるのでビルドが楽ちんなんですが、それでもいろいろと落とし穴(下記参照)があってC/C++のコンパイルに慣れていない私の場合かなり苦労しました。

あとの手順は

CommonSettings.propsを変更。

CUDA Toolkit 7.5をインストール

cuDNN v4をインストール GPUが対応しているか確認。cuDNNありなしでは10倍くらい速度が違うらしいので最低でもCUDA Compute Capabilityが3.0くらいないと厳しい。今買うならGTX 1070ですかね。Compute Capability 6.2のはず。

玄人志向 ビデオカードGEFORCE GTX 1070搭載 コストダウンモデル GF-GTX1070-E8GB/BLF

Pythonは書いている通りMinicondaを使う。私の場合はMiniconda2ではなくMiniconda3だったので

conda create -n caffe python=2.7 numpy scipy matplotlib scikit-image pip
pip install protobuf

で作りました。

あとはVisual Studio 2013のコミュニティエディションをインストールして、caffe\windowsフォルダにあるソリューションファイルCaffe.slnを開いて、ビルドします。

Caffe_exe

ビルドしたcaffe.exeを起動して、メッセージが出るのを確認。

最後に

caffe\Build\x64\Release\pycaffeのcaffeフォルダをsite-packagesにコピー。

Anacondaのenvからimport caffeができたら終了。

注意点

落とし穴①

Python2.7でも3.5でもCUDA toolkitは7.5をインストールする。Theanoの公式サイトのインストールガイドにはPython2.7はVS2008が必要な関係でCUDAは5.5までしか使えないと書いている。しかし、実際は7.5あっさり使えた。AnacondaのPythonだから?GPUが新し目だとCUDA toolkit 5.5ではサポートないのではまった。

落とし穴②

CUDA関係のヘッダーファイルにUnicode文字があり、これが原因でビルドエラーになる。

対処法は、コンパネの「地域と言語」の設定からNon-Unicodeアプリの言語設定でEnglishを選択する。私はJapaneseにしていたのでこれが原因でエラーになりました。

落とし穴③

CommonSettings.propsをぬかりなく変更する。

7行目  CpuOnlyBuild を fasle か true に設定する。

8行目  UseCuDNN を fasle か true に設定する。 もちろんCpuOnlyBuildがtrueならfalseでないといけない。

9行目  CudaVersion は普通は7.5のままでいいでしょう。

13行目 PythonSupport はもちろん true にする。

21行目 CudaArchitectureはCUDA Compute Capability tableにあるCompute Capabilityの値にする。例えばGeForce GTX 960だと5.0なのでcompute_50,sm_50にして、それ以外を削除するとビルドがちょっと速くなる。初期値にcompute_35,sm_35;compute_52,sm_52とあるが3.0まで落としてもビルドできた。やっぱ3.5以上でないとダメみたい。2.1だとnvccがなぜか怒る。Theanoは2.1でも使えるのでなぜだろう?

公式サイトだと、3.0以上のGPUをLinux上でしかテストしてないので、それ以外の環境では使えるかわからないけどたぶんうごくんじゃない?みたいに書いている。Linuxなら古いGPUも行けるのかも。ウィンドウズではおそらく3.5以上が必須っぽい。

CUDA compute capability: devices with compute capability <= 2.0 may have to reduce CUDA thread numbers and batch sizes due to hardware constraints. Brew with caution; we recommend compute capability >= 3.0.

24行目 CuDnnPathは私の場合空のままで、cuDNNのcudnn64_4.dllやcudnn.lib、cudnn.hファイルはC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5以下の対応するフォルダにコピーした。

48行目 PythonDirをちゃんと設定する。初期値はC:\Miniconda2\になっているけど、私の場合Anacondaの64ビットの2.7のenvをつくったのでそのフォルダ(C:\Miniconda3\envs\caffe)を指定した。

落とし穴④

Visual Studioでビルドする前に色々と設定を確認する。

VS2013の使い方が全然判らないので、このブログのBefore compileとCompileの項目をかなり参考にしました。

とくに「ビルド」メニューのコンフィグレーションマネージャーからすべてのプロジェクトをReleaseとx64にするのを忘れないこと。

ソリューションエクスプローラーからcaffeなどのプロジェクトを右クリックして、プロパティをみて、コンフィグレーションプロパティの一般(General)にあるConfiguration typeをApplication (.exe)にするのを忘れない。

ビルド失敗したらCleanしてからビルドし直す。

などなど。いろいろもう忘れたけど確認することがあります。でかいのでまずはlibcaffeをビルドするのが吉かもしれません。一つを除いてぜんぶlibcaffeに依存しているのでlibcaffeがビルドできないと始まりませんし、これがビルドできれば残りはすんなり行くと思います。

2016年6月 8日 (水)

Noteflightの楽譜をPage Viewモードで貼り付ける

Noteflightの楽譜を普通に貼り付けるとStrip Viewモードで、延々と横スクロールしていくタイプで、これは省スペースでいいかもしれないが、自分のブログに貼るにはPage Viewが良い。

Noteflight Embed API を見てみるとdisplayModeというパラメータがあって、paginatedとstripを指定できるようだ。

というわけでiframeのscrの部分に

"https://www.noteflight.com/embed/e57548a6e569ef2b2c134b135d9e2e5c4386f407?scale=1&app=html5&displayMode=paginated"

という感じにdisplayMode=paginatedを足してやったらうまく表示された。

Noteflight楽しい。。。

2016年5月30日 (月)

Feedlyで自分のブログの登録人数を調べる

しばらく更新していませんが、いろいろ書きたいネタはあるんですが、長くなりそうで、なかなか時間が取れないので小ネタを放出しておきます。

おかげ様で当ブログも100人を超えるFeedlyの登録者があるようなのですが、Feedlyの仕様上、登録者数はけっこう調べるのが面倒くさい。

Feedlyで表示される登録者数は、Feedlyに登録した時点の数字が更新されることなくずっと残るので、最新の人数が知りたいときはFeedlyにブログを追加する手順で自分のブログのURLを検索すると、検索結果に登録者数付きで表示されるのでこれをメモっていたんですが、今日やってみると人数が表示されなくなっている。どうもFeedly Cloud APIの次期バージョンの公開が近いから、いろいろ中身をいじっているものと推定される。

困ったのでグーグル先生にお伺いを立てると、スタックオーバーフローによい回答があった。

http://blog.shonanshachu.com/というブログをやっている人が回答してるようで、例ではそのブログのフィードのURLになっていますが、これ多分FeedlyのCloud APIを叩いているみたいですが、要はhttp://cloud.feedly.com/v3/feeds/feed%2Fhttp%3A%2F%2Fの後の部分に自分のブログのRSSフィードが出てくるURLをちゃんとエスケープして入れてやればいいようです(つまりスラッシュを%2Fにする)。

これを当ブログ用に多少修正してみると、以下の様になりました。

http://cloud.feedly.com/v3/feeds/feed%2Fhttp%3A%2F%2Fhennohito.cocolog-nifty.com%2Fblog%2Findex.rdf

http://cloud.feedly.com/v3/feeds/feed%2Fhttp%3A%2F%2Fhennohito.cocolog-nifty.com%2Fblog%2Fatom.xml

2つあるのはRSSのフィードがRDF形式のものとATOMの物とあり、どちらで登録しているかはユーザー次第なので両方合わせた数が登録者の合計になるためです。

回答ではcurlコマンドしていますが、別にURLを直接Chromeで開いても、JSONかなんかのアウトプットが表示されて、subscribersの部分に登録者数がみれました。

という訳で、記事執筆時ではRDFが18人、ATOMが104人で合計122人の登録があるようです。ありがとうございます。更新できていないのに、登録が増えているので、ポチポチがんばって更新していきたいと思います・・。

2016年3月 5日 (土)

Theano用にCUDAができるお手ごろGPUを物色中。GTX-960が良さげ

追記。 NVIDIAの最新機種GTX-1080が発表になりましたね。だいぶ安くなったようですが、当方にはまだ高いです・・。でも性能と価格の兼ね合いは最高によさそう。

本当にGPUは必要なのか?

Theanoを使ってCPUのみでディープラーニングって現実的なのだろうか?というのは常々素朴な疑問だったけど、前記事にあるDaniel Nouri氏による有名なLasagne/nolearn/Theanoをつかった深層畳み込みニューラルネットワークのチュートリアルを実際にやってみたら現実的には必須と判明した。6000円くらいの中古GPUでも10-20倍はやいので買うべし。

私の環境(CORE i7-2600とGeForce 550Ti)では、コンボリューションのない、一層の潜れ層しかない単純なネット(チュートリアルのnet1)だと、CPUでも1エポックに0.3-0.4秒なので1000エポックしても400秒程度。十分待てる。GPUはさらに10倍くらい速いけども。でも単純なコンボリューションのないパーセプトロンネットワークでは精度悪くて使いものにならない。

そこでちょっと発展させて、2層のコンボリューション層のあるnet2にいくと1エポックがCPUで116秒になった。1000エポックくらいトレーニングすると20時間くらいかかる。これがGPUだと1エポックが6.4秒くらいになって2時間以内。チュートリアルのノーリさんのもっているGPU(おそらくGeForce GTX TITAN とか)だと20分で終了するそうな。

パラメータチューニング一回に2時間もかかるとなると、すでに大変なのに20時間だと一日一回しかできない。扱っている画像も96x96の小さなものですでにこんなの。

お買い得なGPUは?

じゃあ、CUDA用にいいGPUを買うとするとなにがよいのか?となるんだけど、前にツイートしたようにGTX 980もしくはGTX 980 Tiというのがハイエンド機の中でコスパがよいらしい。

それでもGTX-980はアメリカのebayで5万くらいか。高い。まあTitanの15万にくらべれば・・・。

日本のアマゾンではGTX-980(上)は6万ちょっと超えるくらいか。PCでゲームもする人ならついでにいいかもしれないけど、私の場合、嫁に怒られるだけ。。でも機械学習に本気の人にはこれが良さそうです。CUDA Capability 5.2とは現状最高バージョンがTitanの5.3なのですごい。

GTX680(CUDA Capability 3.0)の3GBモデルというのも予算がきつい人用にオススメされているが、アマゾンでは見当たらず。その代わり2GBのモデルがあった(下)。

それでも中古で3.7万かぁ。。

私の古いGeForce 550TiでもないよりマシというかCPUに比べると段違い。550Tiは米ebayで即決価格が60ドルというのを見たので、CUDA対応のGPUがない人は550-TiのようなCUDA Capabilityが2.1以上の古くて安いGPUを買うのが吉。

GTX-550-Tiの中古が日本のアマゾンで6000円代(上)というのを見つけた。とりあえずという人はこのクラスで十分と思います。

メモリに関しては上のツイートで紹介した記事によると、ニューロンの重み付けの更新に勾配を計算するときにGPUではフーリエ変換を使う場合が多くて、これがメモリを食うらしいので、ディープラーニングするには割りとメモリがいるらしい。とはいえ、6GBくらいあれば十分で、4GBでもまあ大抵の問題はメモリに収まるといっているので、4GBくらいが初心者にはいいかもしれないし、余裕があれば6GBにしておきたいところ。

あとはcuDNNというCUDAを使ったディープラーニング用のライブラリがあって、最近のバージョンでは畳み込みの計算がとても速くなる変更があったらしいが、あまり古いGPU(たとえばGTX 580)だと対象外になるので、注意。たぶんcompute capabilityが3.5以上ないとそもそもcuDNNを有効にできないという可能性が高い。 TheanoはcuDNN3をサポート。Theano公式ドキュメンテーションにはLinuxのみインストール方法がかいてある。ウィンドウズは・・。

ちなみに私のTheanoはcuDNNなしで使っているが、それでもGeForce 550TiはCPUより10-20倍速いです。

まとめるとCUDA compute capabilityが3.5以上でメモリが4-6GBのGPUが狙い目か。GTX-780とか780TiがCUDA compute capability 3.5以上の一番安いモデルだが、メモリが3GBという制限があるためか、上のレビューではまったく触れられていない。

ベンチマークみるとGTX-980 Tiが圧倒的だし、6 GBにできてCUDA compute capability 5.2は長く戦力になりそうで魅力。。でも5-6万はたかい・・。

そこでみつけた掘り出し物がこのGTX-960。

レビュー中にもちらっと触れられているが、このGTX-960はディープラーニング向きのGPUらしく、上であげたぎりぎりのラインをクリアしていて、CUDA compute capability 5.2で4 GBで新品が2.8万円程度。上の中古GTX-680の2GB版よりも新しいモデルなのに安いじゃないか。うむ。これなら手がだせそう!

2016年2月27日 (土)

ウィンドウズでLasagne/nolearn/Theanoで深層畳み込みニューラルネットワークしてみる

Lasagneの開発コアメンバーでもあり、nolearnという機械学習のPythonライブラリを作ったDaniel Nouri氏による有名なLasagne/nolearn/Theanoをつかった深層畳み込みニューラルネットワークのチュートリアルをやってみているが、インストールに苦労したので覚書。(ところで発音はダニエル・ノーリでいいのかな。モロッコ系の名前らしいが。ツイートはドイツ語と英語でくるのでドイツ人なのかな。)

Lasagne/nolearn/Theanoと、これらのライブラリの関係がややこしいが、Theanoは多次元配列の計算をMathematicaみたいにシンボリックな表記で記述して、それをCPUやGPUをつかって計算するCコードを生成するライブラリでニューロンの学習に必要な勾配の計算に特化している、LasagneはTheanoをつかってニューラルネットワークをやる時のライブラリ。nolearnはTheanoやLasagneなどをつかって深層畳み込みニューラルネットワーク学習ができるライブラリで、特にLasagneをよくサポートしている。Theanoだけでも深層畳み込みニューラルネットワーク学習はもちろんできるが、その場合数式をちゃんと書かないといけないと思うので、Lasagneを使うと楽。Lasagneはラザニアの複数形らしい。

一般的な機械学習用のScikit-learnとくらべるとTheanoはおもにニューラルネットに特化しているので、ちょっと別用途というかAPIも違って混じらない感じなのだけど、nolearn経由でLasagneを使うとScikit-learnのような感じでディープラーニングできるということらしい。

さて、最初はLinux Mint 17でチュートリアルどおりにCUDA tooklitいれてTheano/Lasagneのインストール進めて全く問題なくできたのでリナックス最高!とおもったが、(無謀にも)同じことをウィンドウズでやってみるとまずTheanoのインストールが大変だったのと、Lasagneとnolearnもバージョンも新しくないと行けないのでやっぱりハマった。あとで考えるとLinuxではチュートリアルどおりPython27で最新のCUDA toolkitいれて、Theanoはリリースの0.7でLasagneはチュートリアルのrequirement.txtにあるバージョンで、nolearnはLasagneの依存性として勝手に入ったので簡単だったが、ウィンドウズではPython27では最新のCUDA toolkitが使えない関係でPython 3.5にしたのが困難の始まりだった。

参考: ウィンドウズでCUDA付きでTheanoインストール!Python3.5でもできた。

結論から行くと

チュートリアルのコードが動いたライブラリのバージョンの組み合わせは

PythonはAnacondaのPython 3.5.1 |Continuum Analytics, Inc.| (default, Jan 29 2016, 15:01:46) [MSC v.1900 64 bit (AMD64)]上で

Theano==0.8.git

Lasagne==0.2.git

nolearn==0.6a0.dev0

だった。

インストールはふつうにTheanoをpip installすると現在は0.7のリリース版になり、Lasagneとnolearnもちょっと古いのを入れるとLasagneのインポート中にnolearnがmseというサブモジュールをインポートしようとしてエラーになる。

これはnolearnのバージョンが低いのが原因なので、最新のnolearnのインストール方法に従って新しいnolearnを入れようとするとまず、

pip install -r https://raw.githubusercontent.com/dnouri/nolearn/master/requirements.txt

で依存性パッケージいれてから、

pip install git+https://github.com/dnouri/nolearn.git@master#egg=nolearn==0.7.git

をしろとある。Linuxならこれでうまくいくのかもしれないが、ウィンドウズだと依存性パッケージのインストール中にすでに入っているscipyをビルドしようとしてエラー。

なので、requirements.txtの内容を確認して、手動でconda installしまくって依存性パッケージを入れる。condaにないLasagneは

pip install https://github.com/Lasagne/Lasagne/archive/master.zip

とすると0.2.dev1がはいる。

Theanoはgitで普通にcloneした最新ソースのmaster/HEADのままpython setup.py installすると0.8.0.dev0がインストールされた。

この状態でnolearnを入れる。

pip install git+https://github.com/dnouri/nolearn.git@master#egg=nolearn==0.7.git

すると0.7をリクエストしている割に0.6a0.dev0がインストールされたがチュートリアルのコード動いたので結果オーライ。

Linuxだとなぜかこの辺が全然問題なくチュートリアルどおりできてしまうのは、機械学習関連はやっぱり開発者もユーザーも圧倒的にLinuxが多いからだろうなぁ。

2016年2月18日 (木)

ウィンドウズでCUDA付きでTheanoインストール!Python3.5でもできた。

Cpuandgpu1

前書き

TheanoはPythonでディープラーニングするときに人気なライブラリで、CUDAをサポートしているのでそれなりなGPUがあるPCではCPUより10倍くらい速くなります。私のちょっと古いGeForce 550Tiで7-20倍くらい。ハイエンドなGPUならもっともっと速いでしょう。Theano公式サイトは最大140倍とも。

ディープラーニングをバリバリやっている人はみんなLinuxを使っているようですが、それはCUDAをまともに使うのがウィンドウズではめんどいのが一因と思われます。下に触れますが、特にPython3ではなくPython2系を使いたい場合はいろいろ面倒で制約もあります。

でもウィンドウズでもTheanoからCUDAをつかってDeep Learningするのは不可能ではなく、Theano公式サイトのウィンドウズでPython2.7向けのインストール方法を参考にそのままやれば、一応インストールできました。

公式サイトのガイドがPython27のままなので躊躇しますが、実はPython3系の方がインストールが簡単で、さらに最新版のCUDA Tookit 7.5もつかえるので、ウィンドウズでCUDA付きでTheanoを使う場合はPython3.4がオススメです。最新のPython 3.5はちょっと面倒です。

インストール方法をちょっとググると、GithubのWikiとかstackoverflowの回答とかが検索結果の上位にきて、どちらもPyCUDAをまず入れるとあるので、PyCUDAが必須のように錯覚しますが、実はそうではないのでまったく無視して構わないです。実際に、公式サイトのインストール方にはPyCUDAに触れてません。

TheanoはGPU用のArrayを自前で定義していて、普通はそっちを使います。ただしfloat32しかサポートしていないアレイなので、パフォーマンス上のチューニングの関係でfloat32以外のアレイを使いたい場合、すべてのCUDA APIを網羅しているPyCUDAを混ぜて使うようです。

さて、ウィンドウズでPython2.7系でTheanoとCUDAを使うときの最大の制限はCUDA Toolkitのバージョンを5.5まで落とさなければならないことです。執筆時の最新版は7.5なのでだいぶ古いですね。

これは公式のPython27がC++ Visual Studio 2008 (VS2008)でコンパイルされている関係上、VS2008をサポートしている最後のCUDA Toolkit 5.5を使う必要があるということが原因らしいです。ただし、困ったことにVS2008は古すぎて配布が終わっています。まあ回避方法がありますが。

また、インストール始める前にGPUがCUDA対応か?さらには古いGPUでCompute Capabilityが2.0以下の場合、Theanoが対応していない可能性があるので、初めにちゃんと確認するのをオススメします。私はQuadro FX 580でひどい目に会いました。

Using gpu device 0: Quadro FX 580
WARNING (theano.sandbox.cuda): You are probably using an old GPU, that Theano do
es not support. This means GPU code will most likely be slow AND may crash when
we try to use features that your GPU does not support.

CUDAが使えるGPUの表には、私のFX 580は古すぎてもはやのってないですが、本体にはCUDAのステッカーが貼ってあるし、FX 580のスペックみるとCUDA OKになっています。

しかし、問題はTheanoの方でTheanoは古いGPUはサポートしていないのでした。(´・ω・`)

TheanoがダメだったFX 580はCompute Capabilityが1.1でOKだったGeForce 550TiはCompute Capability 2.1なので、2.1以上のGPUなら多分Theanoも対応しているでしょう。

Python 3.4の場合

下に書くように最新のPython 3.5でも出来ましたが、ちょっと面倒です。3.4ならAnacondaで依存性ライブラリが全部揃うので簡単です。(追記、3.5でも同様にAnacondaで簡単にできるようになりました。)

インストール方法はこのブログを参考によくまとまっています。

私の場合は、Theano公式サイトのウィンドウズでのインストール方法のTDM-GCC-64がすでにあったので、MinGWは入れずにこれを使いました。要は、TDM-GCC-64のbinにあるg++.exeにパスを通しておけばTheanoのコンパイルが通るようです。

基本的には

1. CUDA Tooklit 7.5 64ビットをダウンロード。1 GB近い。インストール時にVS2013が必要なのでまだインストールしない。

2. 先にVisual Studio 2013のコミュニティエディションをインストール。C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\vcvarsall.batにパスを通しておくと楽。

3. VS2013のインストール完了後、再起動してからCUDA Toolkitをインストール。

4. C:\ProgramDataフォルダの下にあるCUDA ToolkitのdeviceQueryのサンプルを探して、同じフォルダにあるvs2013.slnを開く。

5. VS2013が開くのでこれをCTRL+F5でテスト。CMDが開いてメッセージの最後がPASSになっているのを確認。これでGPUのコンパイラnvccが使えるようになった。

6. MinGWかTDM-GCC-64をインストール。パスを汚したくない場合はパスに登録しないであとで起動スクリプト作成する。私はTDM-GCC-64でOpenMPにチェックして、C:\TDM-GCC-64にインストールした。OpenMPはマルチプロセスのライブラリなのでマルチコアのCPUでパフォーマンスの向上が期待できる。

7. ミニコンダもしくはアナコンダでconda create -n myTheanoEnv python=3.4 numpy, scipy, libpythonとして専用の環境を作成。必要に応じて activate myTheanoEnvしてconda install ipython matplotlib nose などを追加する。

8. Theanoをgit clone https://github.com/Theano/Theano.gitしてから、最新リリースの0.7をチェックアウト git checkout tags/rel-0.7

9. activate myTheanoEnvしてさっき作ったcondaの環境に切り替えてからtheanoのフォルダからpython setup.py installして、theanoをインストール

10. C:\Users\Usernameのユーザープロファイルにある.theanorcファイルを編集して、GPUを使うように設定する。

[global]
device = gpu
floatX = float32

[nvcc]
flags = --use-local-env  --cl-version=2013

11.theanoの初回インポートはコンパイラーががんばるので時間がかかる。VS2013とGCC(MinGWかTDM)にパスが通っていれば activate myTheanoEnv してからpython起動して、普通にimport theanoでよい。パスを汚したくない場合は起動スクリプトを作成する。

スクリプトの例

REM start script for anaconda python34

REM configure path for msvc compilers
CALL "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" amd64

REM activate conda env
CALL activate myTheanoEnv 

REM add tdm gcc stuff
set PATH=C:\TDM-GCC-64\bin;C:\TDM-GCC-64\x86_64-w64-mingw32\bin;%PATH%

REM return a shell
cmd.exe /k

このスクリプトを起動して出てきたCMDにはパスがいろいろと通っているので、このコマンドプロンプトからpythonを起動してTheanoを使う。

Python 3.5の場合

追記)Python3.4と同様にできるようになったっぽいです。python35.dllについてごちゃごちゃやらずlibpythonをconda installするだけでOKです。まあなんかのために残しておきます。

これもほぼ上の3.4と同じですが、libpythonについてはconda install libpythonが失敗するので、Theano公式サイトのインストール方法にあるとおり、自分でgendefとdlltoolをつかってpython35.DLLからpython.aをつくってlibsにおきます。

私の場合ミニコンダなので

conda create -n myTheanoEnv python=3.5 numpy, scipy

としてから、C:\TDM-GCC-64\x86_64-w64-mingw32\binにあるgendefをつかって

gendef C:\Miniconda3\envs\myTheanoEnv\python35.dll

とし、これでできた python35.def をつかって、

dlltool --dllname python35.dll --def python35.def --output-lib C:\Miniconda3\envs\myTheanoEnv\libs\libpython35.a

としてaファイルをPythonのlibsフォルダーに作成。これでlibpythonのTheanoが必要な部分がインストールされたはず。

このlibpythonが3.5でconda installできないの問題はAnacondaのサポートによるとMinGWの方の問題で、MinGWがVS2013との互換性をサポートするまで対応しないといっているので、時間かかるかも。

Python2.7の場合

上に書いたようにPython3系の方がインストール簡単で、最新のCUDA Toolkitが使えるので、Python2.7でないといけない理由がない限りPython3がオススメです。

CUDA Toolkit 5.5のインストールの過程でCUDA Toolkitが対応しているマイクソソフトのVisual Studio C++が必要ですが、これはVS2008が入手困難なので公式のインストール方法では、代わりにVS2010を使ってます。

ただし、VS2010のExpress版(製品版ではなくフリーの方)は64ビットのコンパイラを同梱していないという罠があり、CUDA Toolkitを64ビットのPCで使う場合(つまりほぼすべてのWindows 7/8マシン)、困ります。

これには対処法があって、Microsoft SDK 7.1という別の開発者向けのパッケージについてくる64ビットのコンパイラを取ってきてこれとVS2010がインストールされた状態でCUDA Toolkitのインストールをします。

ちなみにMicrosoft SDK 7.1のインストール時にRuntimeもインストールするをチェックするとインストールに失敗する可能性が高いです。Microsoft SDK 7.1はけっこう古いので、Windows Updateがより新しいRuntimeをインストールしたりするとインストール時のバージョンのチェックで想定外のエラーになってインストールが失敗するっぽいです。RuntimeをアンインストールするかRuntimeのインストールのチェックを外すかしないと解決しません。

CUDA ToolkitのインストールができたらC:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.5\Bin\win32\ReleaseにあるDeviceQuery.exeをCMDから実行して、GPUが認識できているかテストします。最後の方に”PASS”とあればおkです。これでCUDA Toolkitの方は一応おしまい。

ちなみにRemote Desktopで接続してきて、DeviceQueryするとインストールが正常でもGPUが見つからないと怒られるので、もしかしたらCUDAを使う場合、家から職場のPCに接続して仕事するみたいなことができないかもしれません。

Theanoは自分が吐いたCコードのコンパイルに主にg++.exeを使いますが、前述のとおりPython27の場合、Pythonとの互換性を保つためにPython27と同じコンパイラも必要なので、やっぱり配布終了したVS2008が必要になります。

しかし、マイクソソフトが「 Microsoft Visual C++ Compiler for Python 2.7」というツールを用意してあり、これでVS2008のPythonのビルドに必要な部分が取ってこれます。下のenv.batにあるように後でTheanoがこれを使うように環境設定してやります。

その後は、Theano公式サイトのインストール方法にあるようにTDM-GCCをとってきて、さらに、オススメされているWinPythonの2.7系をインストールします。私はせっかくなので64ビット版にしました。

WinPythonをインストールしたあとは、ガイドにしたがってenv.batを制作します。TDM-GCC-64へのパスや、WinPython-64bit-2.7.9.4のところは適当に自分の環境に合わせます。ガイド中でPython Shellといっているのはenv.batででてくるCMDのことです。

その下のgendef も上のPython3.5の場合にある要領でやってようやくTheanoのインストールです。 ガイドにしたがって0.7系をつかいます。普通にCloneすると0.8-devになって、nolearnとlasagneと使う場合、nolearnとlasagneも最新のdev版をつかわないとうまく行かなかったので、Theanoだけならリリース最新版の0.7にしたほうが無難です。

参考:「ウィンドウズでLasagne/nolearn/Theanoで深層畳み込みニューラルネットワークしてみる

.theanorcの部分もそのままやってうまくいきました。WinPythonの場合PROFILEフォルダではなくSettingsというWinPythonのサブディレクトリに.theanorcがあるので注意。

--use-local-env --cl-version=2008の部分は重要で、これがないとnvccがVSを見つけられずエラーになります。nvccはGPU用のNVIDIAのコンパイラです。

まあこんな状況でできないことはないですが、インストールはけっこう大変ですし、Python27の場合、最新版のCUDAは使えません。新しいCUDA Toolkitはより新しくてパワフルなGPUをサポートしてますので、ちゃんとパフォーマンスが欲しい人はPython3にするか、多くの人々がしているようにLinuxでやったほうが無難ですね。

私は、Linux Mintで最初家のマシンでTheanoのシステム構築しましたが、Linuxタコな初心者でも普通にできました。つーか、Linux Mintが快適なので家のメインPCはWindows 7からMintに乗り換えてしまいました。

さてめでたくウィンドウズでTheanoをCUDA付きで使えるようになりました。

Pythonディストリビューションについて

Theanoチームがこのガイド中に

We highly recommend the Pierre Raybaut’s WinPython distribution - it is compiled for both 32- and 64-bit systems, links against the fast MKL BLAS implementation, supports installation of auxiliary packages from Chris Gohlke and is free.

といってWinPythonをオススメしているのですが、私はWinPythonがGohlkeさんのパッケージと互換性があるのを知らなかったので、これをみて色々とあるウィンドウズのPythonディストリビューションの中、個人的にはWinPythonがもしかしたら最強なのではとおもいました。なぜかというと例えばAnacondaという人気なディストリビューションがありますが、これはPythonにしてもNumpyにしてもAnacondaがソースコードからビルドしたものを配布しています。なのでNumpyに強く依存しているライブラリ(つまりたくさんの科学分野用のライブラリ)はGohlkeさんのパッケージとは互換性があまりありません。AnacondaがウィンドウズでもOpenCVとかPyCUDAとかはをちゃんと用意してくれれば問題ないですが、私の場合OpenCVは超重要なので困ります。

追記) とおもったらAnacondaにひっそりとopencv_contrib付きと見られるビルドをみつけた。メインのレポジトリではなく、おそらくユーザーが提供しているビルドっぽいが、conda install -c https://conda.anaconda.org/menpo opencv3とするとopencv 3.1.0がインストールされる。しかも、opencv_contribにある実験的なモジュールもCUDAも付いているビルドで、ウィンドウズでもUbuntu/LinuxMintでもちゃんと使えたので、Anacondaをかなり見直しました。

AnacondaでもPython3系でTheanoの環境構築できたので、Anacondaで大抵は大丈夫かな。AnacondaでだめならWinPython+Gohlkeさんのパッケージというのを覚えておこう。

より以前の記事一覧

広告欄


やっつけタイムライン

広告欄

はてブ

人目の訪問です。

  • follow us in feedly

    かなり更新が不定期なため、RSSリーダーをオススメします。現在Feedlyに122人登録頂いています。多謝!RSSを表示

    ブログランキング用 にほんブログ村 IT技術ブログ Pythonへ ブログランキングならblogram






    Jenny Mayhem
2017年2月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28        

Amazon

IT技術注目記事

無料ブログはココログ