1. 執筆の背景

Pythonは2016年の時点で最も需要のあるプログラミング言語です。人口知能、機械学習といった領域にスポットライトが当てられる中、データ処理を統計パッケージのように行えて、本格的なプログラミング言語としての体裁を持つ言語の代表格はPythonであり、データドリブンなシステム開発に不可欠なものになっています。

機械学習のモデルビルディングや検証に、GPU、FPGA、ハードウェア・アクセラレータといったプロセッサで処理を行うことは開発者、データサイエンティストが意識しているかは別として日常的に行なわれていることで、特に目新しさはありません。大半の機械学習パッケージの処理は既にGPUで行なわれており、GPGPUの重要性について異論の余地はないかと思います。

PythonとGPGPUの組み合わせは自然なものであり、PythonではPyCUDAとPyOpenCLの2つのGPGPU演算をするバインディングライブラリが存在します。PyCUDAとPyOpenCLは機能としてかなりの部分が被りますが、PyOpenCLはヘテロジニアス・プロセッサ環境に対応しているのが主な違いです。

PyOpenCLのベースとなるOpenCLフレームワークはC言語で記述されていますが、「Run on all Microprocessors」という言葉で表されるように、CPUやGPU、ハードウェア・アクセラレータ(FPGA等)といったデバイスの種類に関係なくプログラムを実行できるのがOpenCLの導入要因であり、PyOpenCLでもこの特徴は保たれています。

インダストリー4.0やIoTについてはGPUよりも、消費電力の少ないFPGAやその他のアクセラレータの導入が進んでおり、車載画像認識やインフォテインメントといった大量のデータ処理が想定される用途においては、データサイエンスとリアルタイム並列処理技術の融合が前提となります。これらのシステムの商用システムをPythonで実装するとは考えられませんが、OpenCLのカーネル部分が実験用で動作する場合にC言語に移し替えることは大した手間とはならず、実験・研究開発用途として幅広く活用されるものと考えます。

本書はPyOpenCLを使って、PythonにおけるGPGPUプログラミングを紹介することを第一の目的としますが、OpenCLフレームワークを使いこなす層を増やして、Python開発者がより早く質の高いシステムの開発を様々なプラットフォームで実践するような未来の実現をもう一つの趣旨と考えております。Pythonは開発者のベースが、機械学習のバックグラウンドを持つ技術者が多くOpenCLに適した言語の一つであり、技術の進展を速めてくれることを期待して執筆することにしました。

Copyright 2018-2019, by Masaki Komatsu