TornadoVM 2.0: Acelera Java en CPU, GPU y FPGA para LLMs

by Editor de Tecnologia

El proyecto TornadoVM ha alcanzado recientemente la versión 2.0, un hito importante para este proyecto de código abierto que tiene como objetivo proporcionar un entorno de ejecución heterogéneo para Java. Este lanzamiento es especialmente relevante para los equipos que desarrollan soluciones de LLM en la JVM.

El proyecto acelera automáticamente los programas Java en CPUs multinúcleo, GPUs y FPGAs. No reemplaza a las JVM existentes, sino que añade la capacidad de descargar código Java a los backends, gestionando la memoria entre Java y los aceleradores de hardware, y ejecutando los kernels de cálculo. Esta capacidad proporciona un componente clave para las cargas de trabajo modernas en la nube y el aprendizaje automático.

InfoQ ya había cubierto el proyecto en 2020 y en 2022.

TornadoVM compila el bytecode de Java en tiempo de ejecución (actuando como un compilador JIT) a uno de tres backends: OpenCL C, NVIDIA CUDA PTX y SPIR-V binary. Los desarrolladores pueden elegir qué backends instalar y ejecutar según sus sistemas específicos.

Es importante tener en cuenta que no todos los tipos de computación Java son adecuados para ser descargados a TornadoVM. Por ejemplo, las cargas de trabajo con bucles ‘for’ que no tienen dependencias entre iteraciones son muy buenas candidatas, ya que permiten la computación en paralelo.

En particular, las aplicaciones basadas en matrices, como el aprendizaje automático y el aprendizaje profundo, son buenos candidatos. Otros ejemplos de este patrón son las simulaciones físicas (por ejemplo, la computación de partículas N-cuerpo), las aplicaciones financieras como Black-Scholes, y una variedad de aplicaciones en visión artificial, fotografía computacional, procesamiento del lenguaje natural y procesamiento de señales.

leer más  Spotify añade podcasts a sus listas generadas por IA

TornadoVM ofrece dos formas complementarias de expresar el paralelismo: la API Loop Parallel, que utiliza anotaciones Java como @Parallel y @Reduce para paralelizar bucles, y la API Kernel, que utiliza un KernelContext para la programación explícita de estilo GPU (con conceptos como ID de hilos, memoria local, barreras disponibles), y que es similar a CUDA/OpenCL/SYCL.

La API Loop Parallel puede ser tan simple como añadir una anotación de tipo:


public static void vectorMul(FloatArray a, FloatArray b, FloatArray result) {
    for (@Parallel int i = 0; i 

Mientras que el estilo Kernel Context construye explícitamente un TaskGraph como un objeto Java, de la siguiente manera:


var taskGraph = new TaskGraph("multiply")
      .transferToDevice(DataTransferMode.FIRST_EXECUTION, a, b)
      .task("vectorMul", Example::vectorMul, a, b, result)
      .transferToHost(DataTransferMode.EVERY_EXECUTION, result);

var snapshot = taskGraph.snapshot();
new TornadoExecutionPlan(snapshot).execute();

El equipo también está lanzando una biblioteca completa de inferencia de LLM construida con él en Java puro que proporciona inferencia de LLM en GPUs, todo en Java sin dependencias externas.

La reciente versión v0.3.0 de GPULlama3.java trae consigo mejoras significativas en rendimiento y usabilidad.

  • ~30% de aumento en el rendimiento en GPUs NVIDIA (tokens/segundo)
  • Generación de kernels FP16 y Q8 optimizada.
  • Configuración más sencilla gracias a los nuevos SDK de TornadoVM: no requiere una configuración compleja de la GPU.
  • Funciona en NVIDIA PTX, OpenCL y soporte temprano para Apple Silicon.
  • Soporte mejorado para Quarkus
  • Integración con LangChain4j

GPULlama3.java actualmente soporta varios modelos FP16 (punto flotante de 16 bits) y cuantificados de 8 bits, en el rango de los miles de millones de parámetros:

  • Llama 3.2 (1B) – FP16
  • Llama 3.2 (3B) – FP16
  • Llama 3 (8B) – FP16
  • Mistral (7B) – FP16
  • Qwen3 (0.6B) – FP16
  • Qwen3 (1.7B) – FP16
  • Qwen3 (4B) – FP16
  • Qwen3 (8B) – FP16
  • Phi-3-mini-4k – FP16
  • Qwen2.5 (0.5B)
  • Qwen2.5 (1.5B)
  • DeepSeek-R1-Distill-Qwen (1.5B)

Dependiendo del modelo seleccionado, se construirá un plan de ejecución diferente, correspondiente a la arquitectura del modelo relevante.

El proyecto está liderado por el laboratorio Beehive, que forma parte del Grupo de Tecnologías Avanzadas de Procesadores de la Universidad de Manchester, especializado en el codesarrollo de soluciones combinadas de hardware y software.

El equipo también ha desarrollado TornadoInsight, un plugin para IntelliJ IDEA que mejora la experiencia del desarrollador al trabajar con TornadoVM.

El trabajo futuro en la hoja de ruta incluye hacer que TornadoVM esté disponible en SDKman y trasladar los componentes JNI en el código base para que utilicen la nueva API FFM en su lugar.

You may also like

Leave a Comment

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.