Q4 ズバリ弱点は?

A 処理速度が遅い

 Pythonの弱点はCやC++、Javaと比べて実行速度が遅い点だ。

 Pythonはソースコードをインタープリターが逐一解釈しながら実行する。このためコンパイラーが事前にコードを実行ファイルに変換するC/C++のような言語より数十倍~数百倍遅いとされる。

 Pythonのようなスクリプト言語を高速実行する手段として、実行のたびにソースコードをコンパイルするJIT(Just in Time)コンパイラーがある。例えばJavaScriptは主要ブラウザーがJITコンパイラーを備え、高速に実行できるようにしている。

 PythonにもJITコンパイラーとして「PyPy」や「Numba」などの開発が進んでおり、それらを使うとある程度の高速化が可能になる。だが既存の処理系を置き換えるほどの成功には至っていない。NumPyを始め様々なライブラリーによって機能を追加できるPythonの強力な拡張性が、JITコンパイラーでは実現しにくい点が理由の1つとされる。

 これまでPythonの遅さは周辺のライブラリーなどがカバーしていた。例えば数値計算はCで実装されたNumPyやCの関数を直接呼び出せるCythonを使えば高速に実行できる。

 ただ最近はライブラリーを活用してもなお、Pythonのコードが速度のボトルネックとなるケースも出てきた。例えばPFNの深層学習フレームワーク「Chainer」は2018年まで、CPUで実行するPythonプログラムがGPUに数値演算を指示する構成だった。演算処理のほとんどを高速なGPUが担うため、CPU側のPython処理系の遅さは問題にならなかった。だが近年は「GPU側が極めて高速になり、CPUのシングルスレッド性能が演算のボトルネックになるケースが出てきた」とPFNの得居誠也リサーチャーは語る。

図 「Chainer」を例としたPythonのボトルネック
低速な処理系が全体の処理を遅らせる
[画像のクリックで拡大表示]

 このためPFNはN次元配列の自動微分などChainerのPython実装の一部をC++で置き換えた「ChainerX」を2018年12月にリリースした。

組み込み機器には普及せず

 現時点で産業機器やIoT(インターネット・オブ・シングズ)端末など組み込み機器向けにPythonが使われる例が少ないことも弱点と言える。

 先に挙げた実行速度の問題に加えて、ガベージコレクションの実行中にデバイスの応答性能に問題が出ないか、メモリー消費量が多すぎないか、などの検討事項が増える。「組み込み機器へのPythonの採用は簡単ではない」と、エッジ機器向け深層学習を手掛けるLeapMindの徳永拓之CTO(最高技術責任者)は語る。

 同じく組み込み機器向けの機械学習システムを開発するArithmerは、開発時は試行錯誤がしやすいPythonでアルゴリズムを調整し、納品前にCやC++で書き直して実行ファイルを作成するケースがあるという。性能を高める目的に加え、Pythonで開発したシステムは実行ファイルでなくソースコード自体を納品する必要があり、知的財産を守りにくい事情もある。

 現時点では組み込み機器にほとんど使われていないPythonだが、組み込み機器向けの処理系の開発が進みつつある。その一例がPythonのサブセットである「MicroPython」だ。「比較的多くの機能を備えつつメモリー消費量を大幅に削減しており、普及の可能性はある」(LeapMindの徳永CTO)。今後、Pythonを習得した技術者がIoTなど組み込み系の分野に流入すれば「サーバーもエッジもPythonで」との機運が高まりそうだ。

この先は有料会員の登録が必要です。「日経コンピュータ」定期購読者もログインしてお読みいただけます。有料会員(月額プラン)は初月無料!

日経 xTECHには有料記事(有料会員向けまたは定期購読者向け)、無料記事(登録会員向け)、フリー記事(誰でも閲覧可能)があります。有料記事でも、登録会員向け配信期間は登録会員への登録が必要な場合があります。有料会員と登録会員に関するFAQはこちら