Wasmerが「py2wasm」を発表、PythonからWebAssemblyに変換 インタープリタより3倍高速実行可能に:Nuitkaを利用し高速化、難読化
WebAssembly(Wasm)ランタイムを開発するWasmerは、PythonプログラムをWebAssemblyに変換し、ベースラインインタープリタよりも3倍高速に実行できるようにする「py2wasm」を発表した。
WebAssembly(Wasm)ランタイムを開発するWasmerは2024年4月19日(米国時間)、PythonプログラムをWebAssemblyに変換し、ベースラインインタープリタよりも3倍高速に実行できるようにするコンパイラ「py2wasm」を発表した。
py2wasmの使い方は以下の通り。
なお、py2wasmはPython 3.11環境で実行する必要がある。
pystone.pyベンチマーク
Wasmerは、「pystone.py」ベンチマークを使用して、「Pythonをネイティブに実行した場合」「CPythonインタープリタをWebAssemblyで実行した場合」「Pythonコンパイラ『Nuitka』のフォークを用いたpy2wasmを使用した場合」のパフォーマンスを比較した結果を、以下のように報告している。
Pythonをネイティブに実行した場合
CPythonインタープリタをWebAssemblyで実行した場合
Pythonコンパイラ「Nuitka」のフォークを用いたpy2wasmを使用した場合
py2wasmを使用すると、ネイティブPythonの約70%の速度を達成でき、ベースラインインタープリタよりも2.5〜3倍高速に実行できる。
WebAssemblyでPythonワークロードを最適化する方法
Wasmerは、WebAssemblyでPythonを高速化する方法として、以下の3つを比較検討した。その結果、PythonコンパイラであるNuitkaのフォークをpy2wasmに採用することを決めた。
パフォーマンスの高いコードにコンパイル可能なPythonのサブセットのみをWebAssemblyにコンパイルする
この方法では、Cython、RPython(PyPy)、Codonがよく使用される。
- 利点:高パフォーマンスのコードを生成できる
- 欠点:完全な構文やモジュールをサポートしない
Python内部でJITを使用し、実行のホットパスがWebAssemblyにコンパイルされるようにする
この方法では、PyPyがよく使用される。
- 利点:極めて高速
- 欠点:ウォームアップが必要
- 欠点:WebAssemblyでサポートするのは容易なことではない(サポートは可能)
生成されたコードを静的解析を用いて最適化する
この方法では、Mypy、mypy-cがよく使用される。
- 利点:どのPythonコードやアプリケーションともほぼ互換性がある
- 欠点:1.5〜3倍の高速化しか期待できない
- 欠点:適切に実行するのが難しい
- 欠点:バイナリが大きくなる
Nuitkaの採用
Nuitkaは、プログラムが行うPythonの呼び出しをCにトランスパイルすることで動作する。Pythonコードを対応するCPython呼び出しにトランスパイルするので、ほとんどのPythonプログラムをサポートする。
また、コードの難読化も可能にする(生成されたプログラムは逆コンパイルできない)。
全ての選択肢を分析した結果、WebAssemblyでPythonを最速で動作させる方法は、Nuitkaを使用することだろうと、Wasmerは判断した。
Wasmerは、同社のサーバレスアプリケーションプラットフォーム「Wasmer Edge」で、Pythonバックエンドアプリケーションを極めて高いパフォーマンスで実行できるようにすることで、こうしたアプリケーションのホスティングの選択肢を、現在のクラウドプロバイダーよりはるかに安価に提供することを目指しており、py2wasmによって、この目標に一歩近づけると述べている。
また、Wasmerは将来的に、py2wasmをWasmerパッケージとして公開し、以下のコマンドを実行するだけで動作するようにする計画だ。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- JavaScriptランタイム「WinterJS 1.0」リリース、WasmerがRustで開発
Wasmerは、Rustで書かれた高速JavaScriptランタイムの正式版「WinterJS 1.0」を発表した。 - Wasmer、「Wasmer JavaScript SDK」を発表
WebAssembly(Wasm)ランタイムを開発するWasmerは、WASI(X)アプリケーションをブラウザで簡単に実行するための新しいライブラリ「Wasmer JavaScript SDK」を発表した。 - 調査で分かった「一度書けばどこでも実行できる」WebAssemblyの魅力
ソフトウェアコンサルティング会社のScott Logicは、「WebAssembly」の使用状況に関する調査レポート「The State of WebAssembly 2023」を発表した。この調査は2021年から毎年実施されており、今回で3回目となる。