TornadoVM 7 Enables GPU-Native Workloads from Java Applications
TornadoVM 7, 자바 애플리케이션에서 GPU 네이티브 워크로드 실행
TornadoVM 7.3은 JNI 대신 FFM API를 쓰고 CUDA, cuTile, CUDA 라이브러리 호출과 멀티 GPU 실행을 지원합니다. 데이터 병렬 작업을 GPU로 보내는 자바 프레임워크로, 같은 릴리스에서 자바 기반 AI 추론 엔진 jitLLM 2.0도 공개했습니다.
- 주제
에디터 노트
GPU 가속의 성패는 자바로 커널을 작성할 수 있는지보다 작업을 병렬화할 수 있는지와 기존 CUDA 라이브러리를 얼마나 잘 활용하는지에 달려 있습니다. TornadoVM은 cuBLAS와 CUTLASS 호출, 커널과 라이브러리의 조합, Flink 쿼리 분석을 지원해 단순 반복문 어노테이션보다 넓은 사용 경로를 제시합니다. 반면 TPU는 아직 지원하지 않으며 GPU에 적합하지 않은 계산까지 빨라지는 것은 아닙니다. 댓글에서 제기한 타일링과 기존 커널 재사용 문제는 이 설계와 맞닿아 있지만, 성능 비교나 Vector API와의 관계를 판단할 자료는 본문에 없습니다. jitLLM이 llama.cpp와 경쟁한다는 설명도 팀의 주장으로 제시됐습니다.
AI 요약
TornadoVM 7.3은 기존 JVM과 함께 동작하며 자바 코드를 멀티코어 CPU와 GPU에서 실행하는 오픈소스 프레임워크입니다. 버전 7에서는 네이티브 연동에 JNI 대신 Foreign Function & Memory(FFM) API를 적용하고 JVM Compiler Interface(JVMCI) 의존성을 제거했습니다. 컴파일러 메타데이터는 reflection, ASM, Unsafe를 조합해 처리하며 JDK 21, 25, 26, 27에서 같은 경로를 사용합니다.
CUDA와 자바 API
최적화된 CUDA 백엔드에 cuTile 프로그래밍 모델을 위한 TileContext를 추가했고, TornadoVM TaskGraph 안에서 cuBLAS와 CUTLASS 같은 CUDA 라이브러리를 호출할 수 있습니다. JIT 컴파일 커널을 라이브러리 호출로 바꾸거나 두 방식을 연결하는 하이브리드 API를 지원합니다. 애플의 MXL 라이브러리도 같은 방식으로 연동하며 멀티 GPU 실행도 추가했습니다. 자바 개발자는 병렬 API로 반복문에 병렬화 힌트를 붙이거나 kernel context API와 TileContext를 사용할 수 있습니다. 단순한 병렬 API만으로는 실제 운영 환경에서 원하는 성능을 얻기 어려워 추가 API를 마련했다고 팀은 설명합니다.
TornadoVM은 로컬 노트북에서 OpenCL 또는 Apple Metal 백엔드로 개발한 뒤 Nvidia GPU 서버에 배포하는 사용 방식을 제시합니다. 다만 GPU 오프로딩에 적합한 작업은 반복 간 의존성이 없는 루프처럼 데이터 병렬성이 있는 연산입니다. Apache Flink 연동에서는 Table API로 쿼리를 작성하고 설정값으로 GPU 가속 가능성을 표시합니다. 작업이 Task Manager에 도달하면 노드의 GPU 유무를 확인하고 라이브러리 제공자가 쿼리의 중간 표현(IR)을 분석해 GPU 실행 적합성을 판단합니다. Quarkus, LangChain4j, Flink, Spring AI 연동과 SDKMan 배포도 제공한다고 밝혔습니다.
jitLLM 2.0
7.3 버전과 함께 TornadoVM 기반 자바 AI 추론 엔진 jitLLM 2.0도 공개했습니다. 팀은 성능 면에서 llama.cpp와 Ollama에 직접 경쟁한다고 설명하며, 단일 JAR 파일로 배포합니다. TornadoVM과 jitLLM은 프로젝트 팀이 설립한 Beestream.ai를 통해 상용화하고 있습니다.
Hacker News 반응
- @mikepapadim — https://github.com/beehive-lab/TornadoVM 이 메인 저장소입니다. JDK 21 이상과 Nvidia 또는 Apple 하드웨어에서 쓸 수 있고 Nvidia 라이브러리나 MLX 라이브러리도 사용할 수 있습니다.
- @Akseleu_omirbay — TPU 지원은 어떤가요? Google TPU와 호환되나요, 아니면 CUDA와 Metal 같은 GPU 백엔드로 제한되나요?
- @mikepapadim — 아직 TPU 지원은 없습니다. Nvidia, Apple, 그리고 OpenCL을 지원하는 다른 하드웨어만 지원합니다.
- @the_arun — 자바로 AI 인프라를 만들 수 있다는 뜻인가요?
- @vlowrian — 아니면 추상 AI 인프라 팩토리인가요?
- @mikepapadim — TornadoVM을 GPU 백엔드로 쓰는 vLLM 같은 추론 엔진이 이미 있습니다. 전부 자바로 작성됐습니다. https://github.com/beehive-lab/jitllm
- @kitd — 이름이 AbstractAiInfrastructureFactory가 아니면 실망하겠습니다.
- @pjmlp — 이런 불평은 지겹습니다. Objective-C 쪽 사례나 보세요. https://github.com/Quotation/LongestCocoa
- @keeda — 아마 소프트웨어 팩토리 다음에 그게 나오겠죠.
- @mike_hearn — 네, JVM 언어라면 가능합니다. https://qxotic.ai/도 있습니다. 로컬 모델을 SIMD로 가속하는 단일 JAR 추론 도구이며 의존성이 없고 토크나이저부터 전부 자바로 작성됐습니다. macOS에서는 Metal도 사용할 수 있습니다. 작은 모델도 요즘은 꽤 강력해서 빠른 CPU만 있으면 됩니다. LLM뿐 아니라 이미지, 동영상, 음성 모델도 지원합니다. GraalVM에서 실행하면 일부 작업, 예를 들어 프리필에서 llama.cpp보다 훨씬 빠릅니다. 디코딩은 메모리 대역폭에 좌우되므로 언어 차이가 크지 않습니다. JVM과 네이티브 이미지 모두 GraalVM에서 작동합니다. AI에서 자바가 C++ 성능을 앞설 수도 있다는 점은 인상적입니다.
- @amir734jj — 파이썬 대신 자바로 JAX를 만드는 것 같네요.
- @mikepapadim — 자바용 JAX에 필요한 여러 구성 요소를 jitllm에서 이미 시험했습니다.
- @mathisfun123 — "할 수 있는지에 너무 정신이 팔린 나머지 해야 하는지는 생각하지 못했군."
- @zmmmmm — 예제의 행렬 곱셈만 제대로 지원해도 괜찮은 성과처럼 보입니다. 하지만 Vector API가 문제입니다. 로깅처럼 표준 API로 자리 잡아도 10년 늦게 나와 기존 도구보다 부족하다는 이유로 아무도 쓰지 않게 될까요? 기존 VM에서 실행되는 JAR인데 왜 VM이라고 불러 혼란을 주나요?
- @russli1993 — 타일링은 어떤가요? 자바로 커널을 다시 쓰기보다 기존 커널이나 융합된 메가커널을 호출하는 편이 나아 보입니다.
원문: InfoQ / 번역·요약: Trawling