TornadoVM 7.3 is een open-source framework dat Java-programma's versnelt op GPU's en multi-core CPU's zonder de bestaande JVM te vervangen. Het framework offloadt Java-code naar hardware-backends en maakt gebruik van OpenCL en Apple Metal, waardoor ontwikkelaars lokaal kunnen ontwikkelen en vervolgens kunnen implementeren op krachtige Nvidia-servers.
Belangrijkste updates in versie 7:
- Architectuur: Overstap naar de Foreign Function & Memory (FFM) API en verwijdering van de JVMCI-dependency.
- Hardware-integratie: Verbeterde CUDA-backend voor Nvidia (inclusief cuBLAS en CUTLASS) en integratie met de MXL-bibliotheek van Apple, inclusief ondersteuning voor multi-GPU uitvoering.
- Workloads: Focus op data-parallelle taken zoals lineaire algebra, FFT en diepe neurale netwerken.
- Ecosysteem: Integraties met onder andere Quarkus, Spring AI en Apache Flink.
Daarnaast is jitLLM v2.0 geïntroduceerd, een Java AI-inference engine die qua prestaties concurreert met llama.cpp en Ollama. Beide projecten worden gecommercialiseerd via Beestream.ai.
TornadoVM 7 Maakt GPU-Native Workloads Mogelijk vanuit Java-applicaties
TornadoVM versnelt Java-programma's automatisch op multi-core CPU's en GPU's. In plaats van bestaande JVM's te vervangen, werkt het er zij aan zij mee en biedt het een uitgebreid GPU-programmeerecosysteem in Java dat kan worden gebruikt met elke gangbare JDK-distributie, zoals OpenJDK, GraalVM, Temurin of Zulu.
Het framework offloadt Java-code naar hardware-backends, beheert het geheugen tussen de Java heap en de accelerators, en voert de resulterende compute kernels uit. Dit maakt het een nuttige bouwsteen voor moderne cloud- en machine learning-workloads.
Tijdens de ontwikkeling compileert TornadoVM de Java-broncode naar OpenCL- en Apple Metal-backends. Het idee is dat ontwikkelaars lokaal op een laptop kunnen ontwikkelen met de beschikbare hardware, om vervolgens te implementeren op een server met Nvidia GPU's en zo grote prestatieverbeteringen te behalen. Dit is een vorm van "Write Once, Run Anywhere" voor moderne ML-workloads.
Architecturale wijzigingen in versie 7
Versie 7 introduceert verschillende architecturale wijzigingen. De backends maken nu gebruik van de Foreign Function & Memory (FFM) API in plaats van de Java Native Interface (JNI). Daarnaast is de experimentele JVM Compiler Interface (JVMCI) dependency verwijderd. Volgens het team haalt TornadoVM nu "alle compiler-metadata via een reflectie + ASM + Unsafe laag", wat de enige, uniforme route is op elke ondersteunde JDK (21, 25, 26 en 27).
Integratie met Nvidia en Apple
De release verdiept de integratie met het Nvidia-ecosysteem via een geoptimaliseerde CUDA-backend. Dit omvat:
- Ondersteuning voor het cuTile-programmeermodel (via een nieuwe
TileContext).
- De mogelijkheid om CUDA-bibliotheken zoals cuBLAS en CUTLASS direct aan te roepen vanuit TornadoVM TaskGraphs.
Ontwikkelaars kunnen JIT-gegenereerde kernels vervangen door CUDA-bibliotheekaanroepen, of beide combineren, afhankelijk van hun behoeften op het gebied van prestaties en portabiliteit. Op een vergelijkbare manier voegt TornadoVM dezelfde functionaliteit toe voor de MXL-bibliotheek van Apple via de hybride API. Tot slot is er ondersteuning toegevoegd voor multi-GPU uitvoering.
Geschikte workloads en ecosysteem
Niet elke Java-berekening profiteert van offloading. De beste kandidaten zijn data-parallelle workloads, zoals lussen zonder afhankelijkheden tussen iteraties, omdat deze iteraties parallel op de accelerator kunnen worden uitgevoerd.
Een van de doelen van recente TornadoVM-versies is het creëren van een idiomatische JVM-omgeving voor toegang tot de bibliotheken die Nvidia heeft geoptimaliseerd voor verschillende hardwareplatforms. Het doel is dat Java-ontwikkelaars gebruik kunnen maken van zaken als:
- Lineaire algebra
- Fast Fourier Transforms (voor signaalanalyse)
- Diepe neurale netwerken
- Handmatig geoptimaliseerde matrixvermenigvuldiging voor ijle matrices (sparse matrices)
TornadoVM heeft bibliotheekintegraties met Quarkus, Lang4j, Flink, Spring AI en anderen, en is tevens beschikbaar via SDKMan.
Voorbeeld: Integratie met Apache Flink
Bij de integratie van Apache Flink met TornadoVM schrijft de ontwikkelaar een standaard query via de Table API. Via een configuratievlag wordt aangegeven dat deze query potentieel versneld moet worden op een GPU.
Wanneer de berekening de task manager bereikt, controleert het framework of er een GPU beschikbaar is op de node waar deze wordt uitgevoerd. Zo ja, dan maakt het verbinding met een library provider die de intermediate representation (IR) van de query analyseert om te bepalen of de berekening daadwerkelijk geschikt is voor GPU-uitvoering.
Programmeerinterfaces voor Nvidia GPU's
In totaal biedt TornadoVM vier manieren voor Java-programmeurs om Nvidia GPU's aan te sturen:
- De Parallel API: In feite een annotatie voor een lus, die de compiler een hint geeft dat deze lus potentieel geparallelliseerd kan worden. Deze eenvoudige API bleek op de lange termijn onvoldoende voor de gewenste prestaties in productieapplicaties.
- Kernel Context API: Toegevoegd voor meer controle en prestaties.
- TileContext: Voor geavanceerde GPU-optimalisaties.
- Hybride API: Voor directe aanroepen naar geoptimaliseerde bibliotheken.
jitLLM en commercialisering
Tegelijk met de 7.3-release introduceerde het TornadoVM-team jitLLM v2.0, een next-generation Java AI-inference engine gebouwd op TornadoVM. Het team positioneert jitLLM als een directe concurrent van llama.cpp en Ollama wat betreft prestaties; het wordt geleverd als een enkel JAR-bestand.
Zowel TornadoVM als jitLLM worden gecommercialiseerd via Beestream.ai, een spin-off opgericht door het TornadoVM-team.
TornadoVM 7 Maakt GPU-Native Workloads Mogelijk vanuit Java-applicaties
TornadoVM versnelt Java-programma's automatisch op multi-core CPU's en GPU's. In plaats van bestaande JVM's te vervangen, werkt het er zij aan zij mee en biedt het een uitgebreid GPU-programmeerecosysteem in Java dat kan worden gebruikt met elke gangbare JDK-distributie, zoals OpenJDK, GraalVM, Temurin of Zulu.
Het framework offloadt Java-code naar hardware-backends, beheert het geheugen tussen de Java heap en de accelerators, en voert de resulterende compute kernels uit. Dit maakt het een nuttige bouwsteen voor moderne cloud- en machine learning-workloads.
Tijdens de ontwikkeling compileert TornadoVM de Java-broncode naar OpenCL- en Apple Metal-backends. Het idee is dat ontwikkelaars lokaal op een laptop kunnen ontwikkelen met de beschikbare hardware, om vervolgens te implementeren op een server met Nvidia GPU's en zo grote prestatieverbeteringen te behalen. Dit is een vorm van "Write Once, Run Anywhere" voor moderne ML-workloads.
Architecturale wijzigingen in versie 7
Versie 7 introduceert verschillende architecturale wijzigingen. De backends maken nu gebruik van de Foreign Function & Memory (FFM) API in plaats van de Java Native Interface (JNI). Daarnaast is de experimentele JVM Compiler Interface (JVMCI) dependency verwijderd. Volgens het team haalt TornadoVM nu "alle compiler-metadata via een reflectie + ASM + Unsafe laag", wat de enige, uniforme route is op elke ondersteunde JDK (21, 25, 26 en 27).
Integratie met Nvidia en Apple
De release verdiept de integratie met het Nvidia-ecosysteem via een geoptimaliseerde CUDA-backend. Dit omvat:
- Ondersteuning voor het cuTile-programmeermodel (via een nieuwe
TileContext).
- De mogelijkheid om CUDA-bibliotheken zoals cuBLAS en CUTLASS direct aan te roepen vanuit TornadoVM TaskGraphs.
Ontwikkelaars kunnen JIT-gegenereerde kernels vervangen door CUDA-bibliotheekaanroepen, of beide combineren, afhankelijk van hun behoeften op het gebied van prestaties en portabiliteit. Op een vergelijkbare manier voegt TornadoVM dezelfde functionaliteit toe voor de MXL-bibliotheek van Apple via de hybride API. Tot slot is er ondersteuning toegevoegd voor multi-GPU uitvoering.
Geschikte workloads en ecosysteem
Niet elke Java-berekening profiteert van offloading. De beste kandidaten zijn data-parallelle workloads, zoals lussen zonder afhankelijkheden tussen iteraties, omdat deze iteraties parallel op de accelerator kunnen worden uitgevoerd.
Een van de doelen van recente TornadoVM-versies is het creëren van een idiomatische JVM-omgeving voor toegang tot de bibliotheken die Nvidia heeft geoptimaliseerd voor verschillende hardwareplatforms. Het doel is dat Java-ontwikkelaars gebruik kunnen maken van zaken als:
- Lineaire algebra
- Fast Fourier Transforms (voor signaalanalyse)
- Diepe neurale netwerken
- Handmatig geoptimaliseerde matrixvermenigvuldiging voor ijle matrices (sparse matrices)
TornadoVM heeft bibliotheekintegraties met Quarkus, Lang4j, Flink, Spring AI en anderen, en is tevens beschikbaar via SDKMan.
Voorbeeld: Integratie met Apache Flink
Bij de integratie van Apache Flink met TornadoVM schrijft de ontwikkelaar een standaard query via de Table API. Via een configuratievlag wordt aangegeven dat deze query potentieel versneld moet worden op een GPU.
Wanneer de berekening de task manager bereikt, controleert het framework of er een GPU beschikbaar is op de node waar deze wordt uitgevoerd. Zo ja, dan maakt het verbinding met een library provider die de intermediate representation (IR) van de query analyseert om te bepalen of de berekening daadwerkelijk geschikt is voor GPU-uitvoering.
Programmeerinterfaces voor Nvidia GPU's
In totaal biedt TornadoVM vier manieren voor Java-programmeurs om Nvidia GPU's aan te sturen:
- De Parallel API: In feite een annotatie voor een lus, die de compiler een hint geeft dat deze lus potentieel geparallelliseerd kan worden. Deze eenvoudige API bleek op de lange termijn onvoldoende voor de gewenste prestaties in productieapplicaties.
- Kernel Context API: Toegevoegd voor meer controle en prestaties.
- TileContext: Voor geavanceerde GPU-optimalisaties.
- Hybride API: Voor directe aanroepen naar geoptimaliseerde bibliotheken.
jitLLM en commercialisering
Tegelijk met de 7.3-release introduceerde het TornadoVM-team jitLLM v2.0, een next-generation Java AI-inference engine gebouwd op TornadoVM. Het team positioneert jitLLM als een directe concurrent van llama.cpp en Ollama wat betreft prestaties; het wordt geleverd als een enkel JAR-bestand.
Zowel TornadoVM als jitLLM worden gecommercialiseerd via Beestream.ai, een spin-off opgericht door het TornadoVM-team.