GraalPy:在Java中直接加载和使用Python包

GraalPy是适用于 Java 的高性能可嵌入 Python 3 运行时:

  • 在 Java 中直接加载和使用 Python 包
  • 运行最新的 Python AI 和数据科学包
  • Graal JIT编译 Python 以获得本机代码速度
  • GraalPy 为 Jython 用户提供了升级途径
  • 使用与 Java 类和框架交互的 Python 脚本扩展应用程序
  • 使用 GraalVM Native Image 将 Python 应用程序打包为单个二进制文件
GraalPy 将 Python 数据科学库的世界带入了在 GraalVM 上运行的 Java 和其他语言。使用 GraalVM 的多语言接口,现在比以往任何时候都更容易将 Python 代码嵌入 Java 应用程序中,并且性能也很好!Oracle GraalVM 还包括沙盒选项,可以在托管 Java 应用程序中运行 Python 本机扩展,如 NumPy、SciPy 或 Matplotlib。

如何开始:

 

  <dependency>
  <groupId>org.graalvm.polyglot</groupId>
  <artifactId>polyglot</artifactId> 
  <version>24.1.0</version>
</dependency>
<dependency>
  <groupId>org.graalvm.polyglot</groupId>
  <artifactId>python</artifactId> 
  <version>24.1.0</version>
  <type>pom</type>
</dependency>

import org.graalvm.polyglot.Context;

try (Context context = Context.create()) {
    context.eval("python", "print('Hello from GraalPy!')");
}

测试:

同一基准测试套件的实现在 JDK8 上的运行速度比在 GraalPython EE 22.3 Hotspot 上快 2.4 倍(几何平均值),比 CPython 3.11 快 41 倍。Graal 企业版 (EE) 似乎比社区版 (CE) 快 1.31 倍。

网友: 1、我认为 Python 现在之所以有趣,是因为它与 ML 工具链、CUDA、Metal/MLX、pytorch、tensorflow、LLM 编码器/解码器等的集成度超过了 Python 本身。但是,当 Python 仅用于粘合代码,而重要部分则在本机代码中实现时,GraalVM 能否有意义地运行这些代码?

2、作为一名从 2005 年开始使用 Python 的前 Perl 黑客,我见证了 Python 的几次浪潮。(数值计算、数据科学、深度学习) Perl 是脚本和文本解析的领先工具。Python 很长一段时间内都没有真正取代它 — 直到人们开始编写需要维护的更复杂的脚本。6 个月后,Perl 读起来就像一行行的噪音,而我可以查看 20 年前的 Python 代码,用黑色美化它,然后理解它。

Python 被科学计算社区所接受,并为其提供了一些最早的库,如 numpy、f2py、scipy。我们中一些使用 MATLAB 的人也转而使用 Python。

然后数据科学诞生了。Pandas 建立在科学计算基础之上,最终出现了 scikit 和 matplotlib(模仿 matlab 的绘图)等库。

随后,tensorflow 出现了,并建立在数值库的基础上。随后是 PyTorch。

其他系统(例如 Django)的出现使得 Python 在构建数据库支持的网站方面变得流行起来。

突然间,出现了一种势头,如今几乎所有数值软件都有一个 Python API — — 其中包括 CPLEX 等专有软件。

Python 是入门门槛最低的粘合语言。例如,Spark 是用 Scala 编写的,具有高性能的 Scala API,但每个人都使用 PySpark,因为它更容易访问,尽管互操作成本较高。

与此相反的是 Ruby。它的语法比 Python 好得多,但当我在研究生院尝试使用它时,我很快就因缺乏数字库而受阻。Ruby 在 Rails 和配置管理之外从未找到一席之地。

本质上,Python——就像今天的 Nvidia 一样——押注线性代数(以及更广泛的数据处理)并取得了胜利。

我明白为什么人们讨厌 Python —— 它不是一门完美的语言。但是我们这些使用它的实用主义者明白其中的利弊。你牺牲了硬件性能来换取程序员的性能。你牺牲了封装的困难来换取有用的东西。你牺牲了语法的不完美来换取完成任务的能力。

我本可以在研究生院使用 Ruby(一种更优美的语言)并克服它的不足,但我无法按时毕业。Python 对我来说是一个务实的选择,直到今天仍然是我的选择(除了需要原始性能的情况)

3、 Python 从 Perl 和 Tcl 手中夺走了脚本的王冠之后,在学术界使用 Python 作为 C 和 C++ REPL 已经很常见了。