【感想】Cython - Cとの融合によるPythonの高速化 -
- 作者: Kurt W. Smith,中田秀基,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/06/19
- メディア: 大型本
- この商品を含むブログ (3件) を見る
感想
ブログを始めて第一回目の感想です。 Pythonを本格的に学ばねばと思ったので、Python本を買い漁ったのですがそのうちの一冊です。 pandasやscikits-learnでも使われているPythonを高速化するツール?Cythonに関する本です。
Cythonについて学んだこと
用途
Cythonには主に以下の用途がありその説明が主です。
Cython利用の流れ
基本的にCythonのコードはPythonのコードをそのまま使うことが出きるんですが、 静的な型の指定など高速化のために拡張されたシンタックスが提供されています。 そのためPythonコードを任意のレベルでC流に書き換えることができます。
Cythonコードを実際に利用する流れとしては以下の通りです。
- .pyxという拡張子を持つファイルにCythonコードを保存(分割コンパイルの場合はヘッダーファイル的な役割をする.pxdファイルも用意します)
- それをCに変換、コンパイルし共有ライブラリ(.soファイル)を生成
- 共有ライブラリをpythonからモジュールとして読み込める場所に配置し、読み込んでCythonコード内に定義した関数を利用
とことんCレベルで高速な処理を行いたい場合はPython/C APIの関数(PyObject_Callとか)が、CythonコードをCに変換した後のコードに出ないように、 定義している全ての変数に対して静的な型を指定することが大事のようです。 (ただボトルネックでないところまでCythonで書くのは労力的によろしくないようです。)
色々できる
Cythonはnumpyと共存できたり、Cレベルでの拡張クラスを実装できたり、C++のSTLもラップできたり、Cレベルで書いたコードから呼び出されるコールバック関数に通常のPython関数を指定できたりと、かゆいところに手が届く汎用性があるようです。
あと、この本で始めて知ったんですがPythonはGIL(Global Interpreter Lock)というものを持っているらしく、 マルチスレッドにしても、ある一時において実行できるPythonコードはGILにより一つに限られてしまい、スレッドによる並列化の意味があまりないんですね。。 これを乗り越えるためにCythonではGILの制限を外してCレベルでマルチスレッドを扱えるようで、 その例としてOpenMPを使った例が示されていました。 (OpenMPってC/C++のマルチスレッドプログラミングの中で今主流なんですかね。C/C++とかだとpthreadでのプログラミングしかしたことないんですが。。)
個人的に思うこと
いろいろとかゆい所に手が届くCythonですが、 Pythonライブラリを作りたい人、もしくはPythonライブラリをコードリーディングしたい人向けのような気がします。
PythonによるWebサービスとかに使うにはすこし運用しづらいと思います。 コードを変更する度に本番のwebサーバと同じ環境のサーバ上でコンパイルして共有ライブラリを作って本番にデプロイしてモジュールを再読み込みさせたりとか考えたくないです。 (Webサービスの場合はおそらくCythonを使うよりもPyPyを使った方がいい気がするので、Webサービスだけの用途でPythonを使っている場合はPythonに関する教養を身につけるくらいのスタンスでこの本を読んだ方がいいかもしれません。もしくわこの辺のうまい運用の仕方などが書かれているとうれしかったです。)
なので、Webサービス以外の例えば機械学習やデータ分析系のライブラリを出したい、もしくわそういったライブラリにプルリクを投げたいみたいな人は この本はとても価値がある思います(どちらかといえば私は機械学習やデータ分析に興味があるのでこの本を読んでよかったと思います)。
2016/01/02現在 個人的に読んでいる/読みたい技術本一覧
はじめに
ここでは現在読んでいる/読みたい本を一覧で紹介します。 (ついでになんで読みたいかも簡単に書きます)
読んでいる最中
大体2、3冊を並行で読んでいます。
- 作者: Micha Gorelick,Ian Ozsvald,相川愛三
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/11/20
- メディア: 大型本
- この商品を含むブログ (3件) を見る
- Pythonはいままで軽く触った程度だったんですが、自分が思うに機械学習の分野は現在C/C++とPythonまたはJavaとScalaができないとやっていけないなと強く感じています*1。なので最近はPython系の本を読み漁っています。
- 作者: ビャーネ・ストラウストラップ,Bjarne Stroustrup,柴田望洋
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2015/10/10
- メディア: 単行本
- この商品を含むブログ (5件) を見る
- C++の本(Effective Modern C++)を読もうとしたらつまずいたのでとりあえず基礎から。Cライクな実装を今までしてきましたが(辛うじてSTLを利用するレベル)、EffectiveなんちゃらC++系の本を読むためにはC++独自の実装方法を知る必要があるようです。
CUDA C プロフェッショナル プログラミング (impress top gear)
- 作者: John Cheng,Max Grossman,Ty McKercher,森野慎也,株式会社クイープ
- 出版社/メーカー: インプレス
- 発売日: 2015/09/24
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (2件) を見る
- いい加減GPUやらないと。。GPUはアーキテクチャがどんどん進化していって、昔書いた低レベルに最適化されたコードが、次世代のアーキテクチャだと通用しない場合があるようですね(ハイパフォーマンスPythonの著者談)。CUDAのような高レベルのライブラリを積極的に使ったほうがいいとのこと。
途中まで読んで一旦ペンディング中の本
これらの本は読みたいんですけど先に優先して読みたい本があり、一旦ペンディングしている本です。
Effective C++ 第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTI)
- 作者: スコットメイヤーズ,小林健一郎
- 出版社/メーカー: 丸善出版
- 発売日: 2014/03/18
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る
- Effective Modern C++を読むための通り道。
- 作者: マーティン・レディ,Martin Reddy,三宅陽一郎,ホジソンますみ
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2012/11/02
- メディア: 大型本
- 購入: 4人 クリック: 106回
- この商品を含むブログ (11件) を見る
- 再利用や拡張性の高いC++コードを書きたいので読んでいます。
- 作者: スコット・パタースン(Scott Patterson),永野直美
- 出版社/メーカー: 日経BP社
- 発売日: 2015/10/29
- メディア: 単行本
- この商品を含むブログ (2件) を見る
- タイトルにひかれて購入したのですが、最初は前提知識がないと理解できない文が多く難儀していたのですが、後々読んでいくとそれらの説明が書かれていておもしろくなってきます。アメリカの市場において人手によるマーケットメーカから計算機によるマーケットメーカへの変化の過程(イノベーション)がドキュメンタリーとしてかかれており、また、その過程で出てくる技術系の話もおもしろいです(サーバのコロケーションとか電子的な注文がどういう流れで約定されるのかなど)。あともうちょっとで読み終えるのですが、少しペンディング中。
買ったけど積んでいる読みたい本
C言語による スーパーLinuxプログラミング Cライブラリの活用と実装・開発テクニック
- 作者: 飯尾淳
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2011/06/10
- メディア: 単行本
- 購入: 2人 クリック: 92回
- この商品を含むブログ (4件) を見る
- 取り上げている全ての内容に興味があるわけではないですが、Cでのビルド(特にCMakeに興味あり)についてと線型代数操作のライブラリ(Blas)の話が書かれているようで、 これ系の話題を取り上げている本をあまりみかけないので購入しました(まだ読んでませんが。。)。
Effective Modern C++ ―C++11/14プログラムを進化させる42項目
- 作者: Scott Meyers,千住治郎
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/09/18
- メディア: 大型本
- この商品を含むブログ (6件) を見る
- 買ったはいいんですが、CライクなC++を書いてきた私には内容が難しすぎて積んでいます。。とりあえず、C++のエッセンスとEffective C++、Effective More C++を読んでからですかね。。
新訂版MORE EFFECTIVE C++ (ADDISONーWESLEY PROFESSIONAL CO)
- 作者: スコットメイヤーズ,安村通晃,伊賀聡一郎,飯田朱美,永田周一
- 出版社/メーカー: 丸善出版
- 発売日: 2014/02/28
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
- 同じくEffective Modern C++を読むための通り道。
- 作者: Jan Erik Solem,相川愛三
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/03/23
- メディア: 大型本
- 購入: 1人 クリック: 22回
- この商品を含むブログ (4件) を見る
- 作者: Steven Bird,Ewan Klein,Edward Loper,萩原正人,中山敬広,水野貴明
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/11/11
- メディア: 大型本
- 購入: 20人 クリック: 639回
- この商品を含むブログ (44件) を見る
IPythonデータサイエンスクックブック ―対話型コンピューティングと可視化のためのレシピ集
- 作者: Cyrille Rossant,菊池彰
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/12/25
- メディア: 大型本
- この商品を含むブログを見る
- 作者: Timothy Masters
- 出版社/メーカー: Createspace Independent Publishing Platform
- 発売日: 2015/02/11
- メディア: ペーパーバック
- この商品を含むブログを見る
Deep Belief Nets in C++ and CUDA C: Autoencoding in the Complex Domain
- 作者: Timothy Masters
- 出版社/メーカー: Createspace Independent Publishing Platform
- 発売日: 2015/06/24
- メディア: ペーパーバック
- この商品を含むブログを見る
- Deep learningの実装が説明されている本。CUDA Cの本を読み終えたら読みたい本。
関数型オブジェクト指向AI プログラミング―Scala による人工知能の実装
- 作者: 深井裕二
- 出版社/メーカー: 三恵社
- 発売日: 2015/11/02
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
- 後半にディープラーニング(デノイジングオートエンコーダやディープニューラルネットワークなど)のScala実装があり購入。(ニッチだと思うんですが)Scalaで書かれているのがすばらしいと思います。
- 作者: 麻生英樹,安田宗樹,前田新一,岡野原大輔,岡谷貴之,久保陽太郎,ボレガラダヌシカ,人工知能学会,神嶌敏弘
- 出版社/メーカー: 近代科学社
- 発売日: 2015/11/05
- メディア: 単行本
- この商品を含むブログ (1件) を見る
- 深層学習の話は「深層学習 (機械学習プロフェッショナルシリーズ)」で読んだことがあるのですが、おさらいとより深い話を知るために(例えば音声認識で使われているタンデム方式について「深層学習 (機械学習プロフェッショナルシリーズ)」では触れられていませんがこの本では書かれています。)購入しました。
- 作者: 伊庭斉志
- 出版社/メーカー: オーム社
- 発売日: 2015/10/21
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
- Deep learningの本の中でも進化計算との共存について触れられている本はこれくらいだと思います。ざっと見ですが、本当に深く理解するためには論文まで追っかける必要がありそうな気がします。Deep learningと進化計算の組み合わせでどういった研究がされているのか大まかに知るには適していると思います。
- 作者: マイケルルイス,Michael Lewis,渡会圭子,東江一紀
- 出版社/メーカー: 文藝春秋
- 発売日: 2014/10/10
- メディア: 単行本
- この商品を含むブログ (11件) を見る
- 作者: Takaaki Hori,Atsushi Nakamura
- 出版社/メーカー: Morgan & Claypool Publishers
- 発売日: 2013/10/30
- メディア: ペーパーバック
- この商品を含むブログを見る
- 探索を使う機械学習を研究していた身としてはWFSTをずっと気にしていたのですがなかなか機会がありませんでした。WFSTの応用例として音声認識の探索問題があるのですが、それを解説した本が出たので購入しました。実はこの本、私が博士一年のときにAmazonで存在を知って予約をしたことがあるのですが、まだその時点ではこの著者がこの本を書くことを知らなかったようです*2。それから4年の月日が流れ、この本をやっと読むことができるというのは少し感慨深いものがあります。
*1:機械学習分野でJava/Scalaが必要になるのはSparkによるものです。SparkはPythonでも使うことはできますが、Spark用機械学習ライブラリmllibを拡張しようと思うとScalaが必要になります。またSparkを使ったDeep learningの実装としてDL4Jがあるのですが、これがJavaとScalaで書かれています。なので分散環境での機械学習にはJavaとScalaがメインになり、一台のマシンで完結できる場合はC/C++とPythonかなと。TensorFlowなどC/C++とPythonで分散環境に対応した機械学習ツールが扱いやすくなってくると必ずしもそうなるとは限りませんが。
*2:何を言っているのかわからないと思うのですが、著者はWFSTの本について当時そういった依頼があると軽く知っていた程度だったようです。にもかかわらず、すでにAmazonで予約できるという状況になっていたんです。これには著者も驚いていたようです。Amazon恐るべし。
ブログ開設について
はじめに
あけましておめでとうございます!!
エンジニアのarumihoiru89と申します。
新年になり新しいことでも始めようと思いブログを開設しました。 動機ですが、このブログは技術系の本の感想をアウトプットしていくことがメインになるのですが、 これにより自分の本を読むモチベーションの向上と自分の読書速度の測定を行いたいと思っています。
書いてく内容
主に技術系の本の感想がメインとなると思いますが、感想以外の技術系の話も書いていこうと思っています。 技術系の本と書きましたが具体的には以下の興味のある分野に偏ると思います。
書いてくペース
私の読書のペースにもよると思いますが最低でも一ヶ月に一回は投稿しようと思っています。
最後に
文章を書くのは苦手で拙い文章になると思いますが皆様のでかい器で見ていただけると幸です。