GraalVM Pythonランタイム

GraalPyは、Python 3.10準拠のランタイムを提供します。主な目標は、PyTorch、SciPy、およびそれらを構成するライブラリをサポートすることと、充実したPythonエコシステムの他のデータ・サイエンスおよび機械学習ライブラリと連携することです。GraalPyは通常、純粋なPythonコードをCPythonより高速に実行でき、C拡張が関係する場合はCPythonのパフォーマンスにほぼ匹敵します。多くのワークロードは正常に実行されますが、外部パッケージを使用するPythonプログラムでは、サポートされていない問題が発生する可能性があります。現時点では、Pythonの実装は、試験的使用や関心があるエンドユーザーによる使用が可能です。この実装に関するよくある質問については、FAQを参照してください。

GraalPyディストリビューション

GraalVM for JDK 21では、Pythonランタイム(GraalPy)をスタンドアロン・ディストリビューションとして使用できます。

Oracle GraalVM (Oracle GraalPy)上にビルドされたGraalPyスタンドアロンは、GraalVM Free Terms and Conditions (GFTC)ライセンスに基づいてライセンスされます。このライセンスにより、商用および本番環境の使用を含むすべてのユーザーが使用できます。再配布は有料でない限り許可されます。Oracle GraalPyは最高のエクスペリエンスを提供します。追加の最適化が付属しており、スピードとメモリー効率が大幅に向上します。

GraalVM Community Edition (GraalPy Community)上にビルドされたGraalPyスタンドアロンは完全にオープンソースです。これらを区別するために、GraalPy Communityには名前に接尾辞-communityが付きます。

# Oracle GraalPy
graalpy-<version>-<os>-<arch>.tar.gz
# GraalPy Community
graalpy-community-<version>-<os>-<arch>.tar.gz

OracleとCommunityの両方のGraalPyには、ネイティブとJVMの2つの言語ランタイム・オプションがあります。ネイティブ構成では、GraalPyはスタンドアロンのネイティブ実行可能ファイルに事前にコンパイルされます。つまり、JVMを使用するためにシステムにJVMをインストールする必要はなく、サイズはコンパクトです。JVM構成では、Java相互運用性を簡単に使用できること、およびピーク・パフォーマンスがネイティブ構成よりも高くなる可能性があることです。JVMに付属するJVMスタンドアロンでは、graalpy-JVM-<version>-<os>-<arch>.tar.gzという名前に-JVM接尾辞が付きます。

構成: ネイティブ(デフォルト) JVM
開始時刻 高速 低速
ピーク・パフォーマンスに達するまでの時間 高速 低速
ピーク・パフォーマンス(GCも考慮) 良好 最良
Javaホストの相互運用性 構成が必要 動作

GraalPyのインストール

GraalPyをインストールするには、プラットフォームに適した圧縮されたGraalPy tarballをダウンロードします。

LinuxおよびmacOSユーザーは、Pyenvを使用してGraalPyをインストールできます。また、Linux x64アーキテクチャでは、Conda-Forgeを介してインストールできます(Conda-Forgeで提供されるのはGraalPy Communityのみです)。

ダウンロード中

  1. GitHubリリースに移動し、オペレーティング・システムに適したスタンドアロンを選択します。
  2. アーカイブを圧縮解除します。

    ノート: macOS Catalina以降を使用している場合は、最初に隔離属性を削除します。

     sudo xattr -r -d com.apple.quarantine <archive>.tar.gz
    

    抽出します。

     tar -xzf <archive>.tar.gz
    

    または、ファインダでファイルを開きます。

  3. バージョンをチェックして、ランタイムがアクティブかどうかを確認します。
     ./path/to/bin/graalpy --version
    

pyenvの使用

LinuxおよびmacOSユーザーは、Pyenvを使用してGraalPyをインストールできます。バージョン23.1.0をインストールするには、次のコマンドを実行します:

pyenv install graalpy-23.1.0

Conda Forgeの使用(GraalPy Communityのみ)

もう1つのオプションは、Conda-Forgeを使用して、Linux x64アーキテクチャにGraalPyをインストールする方法です(GraalPy Communityのみ)。最新バージョンの環境を取得するには、次のコマンドを使用します:

conda create -c conda-forge -n graalpy graalpy

Windows用のGraalPy

Windows用のGraalPyプレビュー・ビルドがあり、ダウンロードできます。pipを介した純粋なPythonパッケージのインストールをサポートします。ネイティブ拡張は進行中の作業です。

Windowsビルドにはいくつかの既知の問題があります:

Pythonの実行

GraalPyの最適な使用方法は、venv仮想環境から使用することです。これにより、ラッパー・スクリプトが生成され、標準のPythonインタプリタとしてシェルから実装を使用できるようになります。GraalPyを使用してvenv仮想環境を作成するには、プロジェクト・ディレクトリで次のコマンドを実行します:

graalpy -m venv <venv-dir>

シェル・セッションで環境をアクティブ化するには、次を実行します:

source <venv-dir>/bin/activate

仮想環境では、pythonpython3graalpyなどの複数の実行可能ファイルを使用できます。

graalpyランチャを使用して、単純なPythonコマンドまたはプログラムを実行できます:

graalpy [options] [-c cmd | filename]

たとえば、コマンドgraalpyを使用してコマンドラインからPython対話型シェルを起動し、Pythonシェル・プロンプト(>>>で識別)で次の行を入力し、続いてCRを入力します。

>>> print("Hello World!")

出力が直接表示され、その後にPython対話型シェル・プロンプトが表示されます

Hello World!
>>>

または、Pythonスクリプトを起動できます。次の内容をhelloworld.pyという名前のファイルにコピーします:

print("Hello World!")

graalpyを起動し、ファイル名を引数として渡します:

graalpy helloworld.py

次の出力が表示されます

Hello World!

Pythonオプション

GraalPyでは、Python 3.10と同じオプションの一部に加えて、基礎となるPythonランタイム、GraalVMのツールおよび実行エンジンを制御するための追加オプションがサポートされています。これらは、次のコマンドを使用して表示できます:

graalpy --help --help:tools --help:languages

Javaとの相互運用性

GraalPyを埋め込む最善の方法は、GraalVM SDKポリグロットAPIを使用することです。

GraalVM for JDK 21以降は、必要なすべてのアーティファクトをMaven Centralから直接ダウンロードできます。埋込みに関連するすべてのアーティファクトは、Maven依存関係グループorg.graalvm.polyglotにあります。

GraalPyをJavaホスト・アプリケーションに埋め込むには、GraalPyをMaven依存関係として追加するか、JARをモジュール・パスに明示的に配置します。Python埋込み用のMaven構成を次に示します。

<dependency>
    <groupId>org.graalvm.polyglot</groupId>
    <artifactId>polyglot</artifactId>
    <version>23.1.0</version>
</dependency>
<dependency>
    <groupId>org.graalvm.polyglot</groupId>
    <artifactId>python</artifactId>
    <version>23.1.0</version>
    <scope>runtime</scope>
    <type>pom</type>
</dependency>

<scope>runtime</scope>パラメータは、実行時依存関係が必要な場合にのみ必要です。

埋込みGraalPyを実行するサポートされているJDKに応じて、ここで説明するように、最適化のレベルは異なります。

詳細は、専用のGraalPy相互運用性ガイドを参照してください。Pythonのようなゲスト言語がJavaとどのように相互作用するかについては、言語の埋込みに関するドキュメントも参照してください。