파이썬만 쓰라는 법 없다…생성형 AI를 위한 자바 기반 툴 10가지
컨텐츠 정보
- 조회 677
본문
자바는 AI/ML 관련 프로젝트를 시작하는 프로그래머가 가장 먼저 떠올리는 언어가 아니다. 많은 개발자에게 1순위는 파이썬이다. AI/ML, 데이터 과학을 위한 파이썬 기반 프레임워크와 툴이 워낙 많기 때문이다.
그러나 AI/ML, 생성형 AI 혁명에는 자바의 자리도 있다. 여전히 많은 개발자가 기술적인 이점과 방대한 생태계를 이유로 자바를 선호한다. 안전성을 중시하는 개발자들은 모든 데이터 요소에 명확한 타입이 있다는 점에 안도한다. 가상머신은 매우 빠르고 잘 설계된 덕분에 다른 언어에도 차용됐다. 파이썬 애호가조차 JVM의 속도를 즐기기 위해 자이썬(Jython)으로 코드를 실행한다.
썬(Sun)과 오라클은 30년 동안 혁신을 지속했고, 오라클과 오픈JDK 프로젝트는 기존 코드의 동작을 대체로 유지하면서 새로운 기능을 계속 추가하고 있다. 자바는 전통적으로 안정성과 성능에 우직하게 집중해왔으며 그 결과 자바의 강한 타입에서 비롯되는 안전성을 벗어나지 않고도 AI/ML에 접근할 수 있는 좋은 옵션이 많이 있다.
이 목록을 보면 알 수 있듯이 AI를 애플리케이션과 워크플로우에 통합해야 하는 자바 기반 팀에게는 좋은 옵션이 많다. 파이썬 코더만 재미를 독차지할 이유는 없다.
스프링 AI
스프링 AI(Spring AI)는 지난 몇 년에 걸쳐 웹 애플리케이션부터 마이크로서비스에 이르기까지 온갖 것을 만드는 데 필요한 탄탄한 기반을 제공해 왔다. 스프링 AI는 프로세스를 구성하고 정의하는 일련의 추상화를 제공함으로써 이 환경에 AI를 도입하는 과정을 간소화하는 데 목표를 둔다.
앤트로픽이나 오픈AI 같은 주요 서비스 업체를 통해 작업하고자 하는 개발자라면 스프링 AI 추상화를 사용해 신속하게 모델을 통합해서 채팅 완성, 조정과 같은 작업을 처리할 수 있다. 상용, 오픈소스를 포함한 모든 주요 모델 공급자가 지원된다.
벡터 데이터베이스에 로컬로 데이터를 저장하려는 개발자는 밀버스(Milvus)나 파인콘(Pinecone)을 비롯한 다양한 옵션을 직접 연결해 사용할 수 있다. 스프링 AI는 개발자가 자바 객체로 작업하는 동안 데이터베이스가 순수한 벡터를 저장할 수 있도록 데이터를 임베딩으로 변환하거나 다시 원래 형태로 변환한다.
또한 스프링 AI는 애플리케이션 개발에서 빠르게 표준으로 자리잡고 있는 다양한 작업을 위한 기능을 갖추고 있다. 채팅 대화를 나중에 복구할 수 있도록 자동으로 저장할 수 있으며, AI 모델 평가 기능은 메타 평가 모델을 지원해서 환각을 줄이거나 환각임을 표시한다.
랭체인4j
많은 애플리케이션이 벡터 데이터베이스와 LLM을 하나의 포털로 통합하기를 원한다. 많은 경우 LLM 하나로는 충분하지 않다. 예를 들어 생성형 AI 모델이 텍스트를 생성하고 이미지 생성 LLM이 해당 텍스트를 그림으로 표현한다고 가정해 보자. 파이프라인의 시작과 끝부분에서는 검수 AI가 위치해서 생성되는 콘텐츠에 문제가 될 만한 표현이 없는지 확인한다.
랭체인4j(LangChain4j)는 자바스크립트와 파이썬 커뮤니티에서 인기 있는 프레임워크인 랭체인(LangChain)의 자바 우선 버전이다. 이 코드는 개발자가 통합해야 하는 다양한 부분을 모으는 집합체 역할을 한다. 수십 가지의 모델과 데이터 스토어가 몇 개의 표준적이고 강력한 추상화와 함께 번들로 포함된다.
딥러닝4J
AI 분류 프로젝트를 진행하는 자바 개발자는 광범위한 ML 알고리즘을 지원하는 이클립스 딥러닝4J(Eclipse Deeplearning4J) 생태계를 활용할 수 있다. 원시 데이터가 입력되면 의사 결정을 내릴 준비가 된 완전히 조정된 모델이 출력된다.
시스템의 핵심은 코어 ML 프리미티브의 빠른 실행을 보장하는 C++ 라이브러리인 libnd4j다. 이 라이브러리의 주요소는 두 그래프 번들인 nd4j와 Samediff, 그리고 함께 연결해 ML 알고리즘을 구현할 수 있는 넘파이(NumPy), 텐서플로우/파이토치 연산이다. 데이터 흐름은 아파치 스파크에 의해 정의된다.
전체적인 프레임워크는 자바로 통합되지만, 딥러닝4J의 많은 구동부는 다른 언어로 작성이 가능하다. 파이프라인은 코틀린이나 스칼라와 같이 JVM과 직접 소통할 수 있는 많은 언어에서 실험이 가능하도록 설계됐다. 파이썬 알고리즘은 파이썬4j에서 직접 실행할 수 있다.
이 프로젝트는 오픈소스이며, 문서에는 구성요소의 잠재력을 활용하기 위한 좋은 예제가 풍부하게 포함돼 있다.
아파치 스파크 MLib
큰 문제를 헤쳐 나가는 데이터 과학자들은 오랜 기간 스파크에 의존해 왔다. 스파크는 대규모 데이터 분석을 지원하도록 설계된 아파치 프로젝트이며, MLib는 ML 알고리즘에 최적화된 부가적인 계층이다.
데이터는 하둡 스타일의 스토리지 위치에 저장될 수 있다. 알고리즘은 모든 주요 언어로 코딩이 가능하다. 가장 잘 어울리는 언어는 자바, 스칼라 또는 기타 JVM 중심 언어 등이다. 그러나 스파크 사용자들은 데이터 분석 분야에서 인기가 높은 파이썬 또는 R을 사용하기 위한 연결 코드도 추가했다.
MLib의 매력을 높여주는 중요한 부분은 많은 고전적인 ML 및 데이터 분석 알고리즘(의사결정 트리, 군집화, 교대 최소 제곱법 등)을 위한 사전 빌드된 루틴이다. 대형 행렬의 특이값 분해와 같은 대규모 계산을 여러 시스템으로 분산해서 모든 작업의 속도를 높일 수 있다. 개발자는 많은 코드를 구현할 필요가 없다.
스파크는 반복적인 프로세스용으로 설계된 파이프라인을 통해 나머지 작업을 처리한다. MLib 개발자들은 맵리듀스(MapReduce)보다 100배 더 빠르다고 자랑해도 될 정도로 속도에 집중했다. 빠른 속도는 실제로 큰 매력이다.
테스트컨테이너
LLM 생태계의 많은 부분은 도커 컨테이너 내에서 실행된다. 따라서 이런 컨테이너를 조율하는 툴은 유용하다. 테스트컨테이너(Testcontainers)는 오픈소스 라이브러리로, 컨테이너의 IO 및 기타 채널을 시작, 종료하고 관리한다. LLM을 스택과 통합하는 쉬운 방법 중 하나다. 데이터베이스, 서비스 버스, 메시지 브로커 또는 기타 일반적인 구성요소가 필요하다면 이러한 구성요소를 즉시 실행할 수 있는 테스트컨테이너의 다양한 사전 정의된 모듈을 사용하면 된다.
그랄파이
이름만 봐도 파이썬 코드용임을 알 수 있고, 실제로 그렇다. 그랄파이(GraalPy)는 파이썬3의 임베디드 버전으로, JVM 내부에서 파이썬 코드를 더 쉽게 실행할 수 있도록 최적화됐다. 자바 프로그래머는 다양한 파이썬 라이브러리와 툴을 활용할 수 있다. 그랄파이는 JVM 내의 파이썬을 위한 가장 빠른 실행 속도를 제공한다고 주장하며, 가상 머신에서 스택을 배포하고 유지하도록 설계된 더 큰 그랄VM(GrallVM) 프로젝트 모음에 속한다.
아파치 오픈NLP
텍스트로부터 학습하기 위해서는 많은 전처리가 필요하다. 텍스트에서 불필요한 조판 명령을 제거하고 섹션으로 구성하고 작은 덩어리로 나눠 알고리즘이 패턴에서 의미를 추출할 수 있도록 해야 한다. 바로 이 부분에서 아파치 오픈NLP(OpenNLP)가 사용된다. 오픈NLP는 견고한 ML 기반을 구축하기 위한 많은 기본 알고리즘을 제공한다.
툴은 저수준 세그먼트화 및 토큰화부터 고수준 파싱에 이르기까지 다양한 작업을 실행한다. 언어 감지 또는 명명된 엔터티 추출과 같은 부가적인 기능은 필요에 따라 즉시 배포할 수 있다. 오픈NLP JAR 파일에는 32가지 이상의 언어에 대한 모델이 포함돼 있으며 사용자가 직접 학습을 시작할 수도 있다.
이 툴은 자바 생태계와 잘 통합된다. UIMA, 솔라(Solr)와 같은 프로젝트는 자연어 텍스트에서 패턴을 파악하기 위해 이미 오픈NLP를 활용한다. 메이븐 및 그레이들과의 통합 덕분에 간단히 시작할 수 있다.
네오4j
애플리케이션에 RAG 데이터 스토어가 필요하다면 그 워크로드를 처리할 수 있는 그래프 데이터베이스인 네오4j(Neo4j)를 사용하면 된다. 네오4j는 이미 사기 탐지, 소셜 네트워크 관리와 같은 다양한 그래프 애플리케이션을 지원한다. 견고한 자바 기반을 통해 그래프RAG(GraphRAG)라는 하나의 통합 데이터 스토어에서 RAG 애플리케이션과 그래프 데이터베이스를 자바 스택과 손쉽게 통합할 수 있다.
스탠포드 코어NLP
스탠포드 NLP 그룹이 제공하는 스탠포드 코어NLP(Stanford CoreNLP)는 큰 텍스트 블록을 분해해서 ML 알고리즘에 입력할 수 있도록 하는 자연어 루틴 모음이다. 문장 분할부터 숫자나 날짜와 같은 일반적인 요소의 표준화까지 다양한 작업을 수행한다.
개발자가 코어NLP를 선택하는 이유는 높은 정확성과 사전 빌드된 옵션에 있다. 예를 들어 감정 분석이나 공통참조 감지를 위한 모델을 바로 사용할 수 있다. 라이브러리의 고급 기능을 사용하면 더 복잡한 파싱 알고리즘과 전략을 더 쉽게 구현할 수 있다.
그레이들 또는 메이븐으로 손쉽게 패키지를 포함할 수 있으며 9개 주요 언어를 위한 모델이 제공된다.
J라마
직접 제어하고 감독하는 JVM에서 모델을 실행하는 것이 합리적인 경우가 종종 있다. 그렇게 하는 편이 하드웨어가 더 저렴할 수도 있고, 개인정보 보호와 보안이 더 간단할 수도 있다. 먼 클라우드의 한 구석에 있는 API를 신뢰하는 것보다 로컬에서 LLM을 실행하면 많은 이점을 얻을 수 있다.
J라마(Jllama)는 인기 있는 많은 오픈소스 모델을 로드해서 추론을 실행한다. 애플리케이션에 채팅, 프롬프트 완성 또는 오픈AI 호환 API가 필요한 경우 J라마가 답이 될 수 있다. 또한 젬마(Gemma), 라마(Llama), 퀀(Qwen), 그라나이트(Granite) 등의 사전 양자화된 모델을 몇 개든 다운로드하고 시작한다.
LLM 추론을 위한 병렬 실행 속도를 높일 수 있는 벡터 API, SIMD 인식 확장과 같은 여러 최신 자바 기능을 활용한다. 또한 워크로드를 여러 부분으로 나눠 클러스터 내의 사용 가능한 컴퓨팅 리소스로 분산할 수 있도록 한다.
dl-itworldkorea@foundryco.com
관련자료
-
링크
-
이전
-
다음





