Agentic AI / Generative AI

초고속 머신러닝 작업을 위한 인터랙티브 AI 에이전트 구축

Reading Time: 5 minutes

데이터 사이언티스트는 분석에 앞서 방대한 비정형 데이터를 정제하고 준비하는 데 많은 시간을 투자합니다. 이 과정에는 높은 수준의 프로그래밍과 통계 지식이 요구되며, 특징 엔지니어링, 모델 튜닝, 워크플로우 간 일관성 유지 같은 작업은 복잡하고 오류가 발생할 여지도 많습니다. 여기에 CPU 기반 머신러닝 워크플로우 특유의 느리고 순차적인 처리 방식까지 더해지면, 실험과 반복 작업이 비효율적으로 늘어납니다.

가속화된 데이터 사이언스 ML 에이전트

NVIDIA는 ML 워크플로우 내 반복적인 작업을 자동화하고 실험을 간소화할 수 있는 데이터 과학 에이전트를 프로토타입 형태로 구현했습니다. 이 에이전트는 사용자의 의도를 파악해 전체 작업을 조율하며, NVIDIA CUDA-X Data Science 라이브러리를 기반으로 GPU 가속을 통해 수백만 건의 샘플로 구성된 대규모 데이터셋도 빠르게 처리합니다. 핵심에는 데이터 사이언티스트의 의도를 최적화된 워크플로우로 변환하는 경량 오픈소스 언어 모델 NVIDIA Nemotron Nano-9B-v2가 탑재되어 있습니다.

이 구성만으로도 대용량 데이터셋 탐색부터 모델 학습, 결과 평가까지 자연어 기반 대화만으로 수행할 수 있습니다. 자연어와 고성능 컴퓨팅의 간극을 좁혀, 원시 데이터를 인사이트로 전환하는 전 과정을 몇 분 안에 끝낼 수 있도록 돕습니다. 다양한 LLM, 도구, 저장소를 조합해 환경에 맞는 에이전트를 직접 구축해보세요. 관련 Python 스크립트는 GitHub에서 확인하실 수 있습니다.

데이터 사이언스 에이전트 오케스트레이션

이 에이전트는 모듈화와 확장성, GPU 가속을 기반으로 설계되었습니다. 자연어 프롬프트를 실행 가능한 데이터 처리 및 머신러닝 워크플로우로 전환하기 위해, 총 다섯 개의 핵심 레이어와 하나의 임시 데이터 저장소로 구성되어 있습니다. 각 레이어가 어떻게 상호작용하는지는 아래 그림 1의 하이레벨 워크플로우에서 확인할 수 있습니다.

그림 1. 데이터 사이언스 에이전트 아키텍처 구성도

각 레이어가 어떻게 함께 동작하는지 좀 더 자세히 살펴보겠습니다.

Layer 1: 사용자 인터페이스
사용자 인터페이스는 Streamlit 기반의 대화형 챗봇으로 구현되어, 사용자가 자연어로 에이전트와 직접 소통할 수 있도록 구성했습니다.

Layer 2: Agent orchestrator
Agent orchestrator는 모든 레이어를 조율하는 중앙 컨트롤러 역할을 합니다. 사용자 프롬프트를 해석하고, LLM을 통해 의도를 파악한 뒤, Tool Layer에서 적절한 GPU 가속 함수들을 호출하고, 그 결과를 자연어로 응답합니다. 각 orchestrator 메서드는 GPU 함수의 경량 래퍼로 구성되어 있으며, 예를 들어 사용자가 _describe_data를 요청하면 basic_eda() 함수가 호출되고, _optimize_ridge를 요청하면 optimize_ridge_regression() 함수가 실행됩니다.

그림 2. “optimize SVC with 50 trials” 예제 쿼리에 대한 오케스트레이션 흐름

Layer 3: LLM layer
LLM 레이어는 에이전트의 추론 엔진 역할을 하며, NVIDIA NIM API를 통해 Nemotron Nano 9B-v2와 통신할 수 있도록 언어 모델 클라이언트를 초기화합니다. 이 레이어는 자연어 입력을 구조화된 실행 명령으로 변환하는 핵심 기능을 담당하며, 다음 네 가지 메커니즘을 중심으로 작동합니다: LLM 모델, 안정적인 통신을 위한 재시도 전략, 구조화된 도구 호출을 위한 함수 호출 기능, 그리고 함수 호출을 위한 실행 윈도우.

  • LLM 모델: LLM 레이어 아키텍처는 특정 언어 모델에 종속되지 않으며, 함수 호출을 지원하는 어떤 모델과도 연동 가능합니다. 이 애플리케이션에서는 함수 호출과 고급 추론을 모두 지원하는 Nemotron Nano-9B-v2를 사용했습니다. 이 모델은 경량화되어 단일 GPU에서도 추론이 가능하며, 효율성과 성능의 균형을 잘 갖추고 있습니다. 동일한 크기의 타 모델 대비 최대 6배 높은 토큰 생성 처리량을 제공하고, ‘thinking budget’ 기능을 통해 사용되는 추론 토큰 수를 제어함으로써 최대 60%까지 추론 비용을 절감할 수 있습니다. 이러한 성능과 비용 효율성을 바탕으로 실시간 대화형 워크플로우를 운영 환경에서도 안정적으로 적용할 수 있습니다.
  • 안정적인 통신을 위한 재시도 전략: LLM 클라이언트는 네트워크 오류나 API 호출 제한 같은 일시적인 문제에 대응할 수 있도록 지수적 백오프 재시도 메커니즘을 구현해, 불안정한 네트워크 환경이나 높은 부하 상황에서도 안정적인 통신을 유지합니다.
  • 구조화된 도구 호출을 위한 함수 호출: 함수 호출 기능은 자연어와 코드 실행 사이의 다리를 놓습니다. LLM은 사용자 의도를 Agent Orchestrator 내에서 구조화된 도구 호출로 변환하며, 이를 위해 OpenAI 호환 함수 스키마를 기반으로 각 도구의 이름, 목적, 파라미터, 제약 조건 등을 정의합니다.
  • 함수 호출 윈도우: 함수 호출을 통해 LLM은 단순한 텍스트 생성기를 넘어 API 오케스트레이션이 가능한 추론 엔진으로 작동합니다. Nemotron Nano-9B-v2는 사용할 수 있는 도구 목록에 대한 구조화된 API 명세를 입력받아, 사용자 의도를 파악하고 적절한 함수 선택, 올바른 타입의 파라미터 추출, 다단계 데이터 처리 및 머신러닝 작업 조율까지 수행합니다. 이 모든 과정은 자연어 기반으로 이뤄지기 때문에 사용자가 API 문법을 학습하거나 직접 코드를 작성할 필요가 없습니다.

그림 3에 제시된 전체 함수 호출 흐름은 자연어가 어떻게 실행 가능한 코드로 변환되는지를 보여줍니다. 해당 흐름에서 사용된 동작들은 GitHub에 공개된 chat_agent.pyllm.py 스크립트에서 확인할 수 있습니다.

그림 3. 함수 호출의 4단계 흐름

Layer 4: Memory layer
Memory 레이어인 ExperimentStore는 모델 설정, 성능 지표, 정확도 및 F1 점수와 같은 평가 결과 등 실험 관련 메타데이터를 저장합니다. 이 메타데이터는 세션별 파일에 표준 JSONL 형식으로 기록되며, get_recent_experiments(), show_history() 같은 함수를 통해 세션 내 추적 및 조회가 가능합니다.

Layer 5: 임시 데이터 저장소
임시 데이터 저장 레이어는 best_model.joblib, predictions.csv 등 세션별 출력 파일을 시스템의 임시 디렉터리 및 사용자 인터페이스에 저장해 즉시 다운로드하고 활용할 수 있도록 합니다. 이 파일들은 에이전트 종료 시 자동으로 삭제됩니다.

Layer 6: Tool layer
Tool 레이어는 에이전트의 연산 중심을 담당하며, 데이터 로딩, 탐색적 데이터 분석(EDA), 모델 학습 및 평가, 하이퍼파라미터 최적화(HPO)와 같은 데이터 과학 기능을 실행합니다. 실행할 함수는 사용자 쿼리에 따라 결정되며, 다양한 최적화 기법이 적용됩니다.

  • 일관성과 재현성
    에이전트는 scikit-learn의 다양한 추상화 기법을 활용해 학습, 테스트, 운영 환경 전반에 걸쳐 데이터 전처리 및 모델 학습의 일관성을 보장합니다. 이를 통해 데이터 누수나 전처리 불일치 같은 일반적인 머신러닝 오류를 방지하며, 학습 중 계산된 결측치 대체값, 스케일링 파라미터, 인코딩 매핑을 추론 단계에서도 동일하게 자동 적용합니다.
  • 메모리 관리
    대용량 데이터셋 처리를 위해 메모리 최적화 전략을 적용했습니다. Float32 타입으로 변환해 메모리 사용량을 줄이고, 활성 캐시 GPU 메모리를 해제해 GPU 메모리 관리 효율을 높이며, 희소 형식보다 GPU에서 빠르게 처리되는 조밀한 형식(dense output) 구성을 사용합니다.
  • 함수 실행
    Tool execution 에이전트는 cuDF, cuML 등 CUDA-X 데이터 사이언스 라이브러리를 사용해 GPU 가속 성능을 제공합니다. 이때 pandas 및 scikit-learn과 동일한 문법을 유지하여 코드 변경 없이 가속을 적용할 수 있도록 Python의 모듈 프리로딩(preloading) 메커니즘을 활용합니다. pandas 연산은 cudf.pandas 가속기를 통해 GPU 연산으로 대체되고, scikit-learn 모델은 cuml.accel을 통해 자동으로 cuML 기반의 GPU 모델로 전환됩니다.

다음 명령어를 실행하면 데이터 처리와 머신러닝 컴포넌트 모두 GPU 가속이 적용된 Streamlit 인터페이스를 실행할 수 있습니다:

python -m cudf.pandas -m cuml.accel -m streamlit run user_interface.py

가속 성능, 모듈성, 확장성

이 에이전트는 새로운 함수 호출, 실험 저장소, LLM 통합 등 다양한 기능 확장 기반, 모듈형 설계로 구축되었습니다. 계층형 아키텍처를 기반으로 기능을 점진적으로 추가할 수 있으며, 기본적으로는 주요 머신러닝 알고리즘, 탐색적 데이터 분석(EDA), 하이퍼파라미터 최적화(HPO)를 지원합니다.

CUDA-X 데이터 사이언스 라이브러리를 활용해 데이터 처리부터 머신러닝 워크플로우 전반에 걸쳐 GPU 기반 가속을 적용하며, 작업 유형에 따라 3배에서 최대 43배까지 성능 향상을 제공합니다. Table 1에서는 머신러닝 연산, 데이터 처리, HPO를 포함한 핵심 작업에서 달성된 속도 향상 수치를 확인할 수 있습니다.

Agent TaskCPU (초)GPU (초)속도 향상세부 사항
분류 ML 작업21,4106,886~3x 로지스틱 회귀, 랜덤 포레스트 분류, 선형 서포트 벡터 분류 적용 (샘플 100만 개 기준)
회귀 ML 작업57,0408,947~6x Using ridge 릿지 회귀, 랜덤 포레스트 회귀, 선형 서포트 벡터 회귀 적용 (샘플 100만 개 기준)
머신러닝 알고리즘 HPO18,447906~20xcuBLAS 기반 행렬 연산(QR 분해, SVD)이 주 연산을 구성하며, 정규화 경로를 병렬로 계산 후 사용

표 1: CUDA-X Data Science 라이브러리를 활용한 에이전트의 end-to-end 가속 성능

Nemotron 모델과 CUDA-X Data Science 라이브러리로 시작하기

Nemotron 모델과 CUDA-X Data Science 라이브러리를 활용한 오픈소스 데이터 사이언스 에이전트는 GitHub에서 제공되며, 여러분의 데이터셋에 바로 통합해 end-to-end 머신러닝 실험을 진행할 수 있습니다. 에이전트를 다운로드해 다양한 데이터셋을 시도해 보고, 어떤 속도 향상을 얻었는지, 어떤 커스터마이징을 적용했는지 공유해 주세요.

자세히 알아보기:

Discuss (0)

Tags