PAASUP DIP로 구축하는 엔터프라이즈 LLM 서빙 가이드: Nvidia NIM #2

PAASUP DIP 환경에서 NVIDIA NIM Microservice를 활용해 Private 환경에 LLM 모델(예: llama-3.2-3b-instruct)을 안전하고 효율적으로 배포하는 방법을 단계별로 안내합니다. Python 코드 호출과 Flowise 노코드 워크플로우를 모두 지원해 다양한 엔터프라이즈 AI 서비스 구축에 최적화된 실전 가이드입니다.

들어가며

최근 AI 모델의 활용이 급속히 확산되면서, 기업 환경에서 안전하고 효율적으로 AI 모델을 배포하고 운영하는 것이 중요한 과제가 되었습니다. NVIDIA NIM(NVIDIA Inference Microservice)은 이러한 요구사항을 충족하기 위해 설계된 컨테이너 기반의 마이크로서비스입니다.

이번 포스팅에서는 PAASUP DIP(Data Intelligence Platform)의 NVIDIA NIM 카탈로그를 활용하여 llama-3.2-3b-instruct 모델을 Private 환경에 구축하고 실행하는 과정을 단계별로 소개하겠습니다.

목차

  1. NVIDIA NIM이란?
  2. 구축 과정
  3. 주요 장점
  4. 마무리

NVIDIA NIM이란?

NVIDIA NIM은 NVIDIA GPU에 최적화된 컨테이너 기반의 마이크로서비스 프록시로, AI 추론(inference) 과정을 간소화하고 성능을 극대화하도록 설계되었습니다. 복잡한 AI 모델 배포 과정을 표준화하여 개발자들이 더 쉽게 AI 서비스를 구축할 수 있게 도와줍니다.

구축 과정

1단계: NIM Microservice 컨테이너 이미지 Pull 경로 복사

먼저 NVIDIA NGC 카탈로그에서 필요한 모델의 컨테이너 이미지를 다운로드해야 합니다.

NGC 카탈로그 접속 및 모델 선택

  1. https://catalog.ngc.nvidia.com에 접속
  2. Containers 메뉴 클릭
  3. NVIDIA NIM 필터를 체크하여 NIM 관련 컨테이너만 표시
    스크린샷 2025-08-21 160059.png
  4. 원하는 모델(여기서는 llama-3.2-3b-instruct) 검색 및 선택
    스크린샷 2025-08-21 162553.png
  5. 모델 카드에서 Tags 탭으로 이동하여 컨테이너 이미지 pull 경로 복사
    스크린샷 2025-08-21 155947.png

2단계: PAASUP DIP에서 NIM 카탈로그 생성

DIP 환경에서 NIM 서비스를 생성하기 위해 카탈로그를 설정합니다.

기본 설정

  • 카탈로그 버전: 원하는 버전 입력
  • 카탈로그 이름: 식별 가능한 이름 입력

서비스 모델 설정

CASE1 : 카탈로그 배포 환경이 인터넷에 연결되어 있는 경우
1단계에서 Copy한 서비스할 모델의 컨테이너 이미지 Pull 경로로 설정

  • Model repository: nvcr.io/nim/meta/llama-3.2-3b-instruct (Pull 경로에서 버전 제외)
  • Model repository tag: 1.8.3 (Pull 경로에서 모델의 버전정보)
  • NGC API KEY: NVIDIA API 키 입력
  • Model name: meta/llama-3.2-3b-instruct (Pull 경로에서 모델명)

CASE2 : 카탈로그 배포 환경이 인터넷에 연결되어 있는 않은 경우
인터넷이 연결된 환경에서 컨테이너 이미지를 다운로드 한 후 DIP 환경에 반입한 후에 카탈로그를 배포합니다.

  • Model repository: nvcr.io/nim/meta/llama-3.2-3b-instruct
  • Model repository tag: 1.8.3
  • NGC API KEY: 미사용 정보이니 아무키나 입력
  • Model name: meta/llama-3.2-3b-instruct

설정 완료 후 생성 버튼을 클릭하여 카탈로그를 생성합니다.
스크린샷 2025-08-21 164405.png

3단계: Jupyter Lab에서 NIM Microservice 호출

이제 생성된 NIM 서비스를 Python 코드로 호출하여 사용할 수 있습니다.

Jupyter Lab 접속

  1. PAASUP DIP 포털에서 Kubeflow 링크 클릭
  2. Kubeflow에서 Notebooks 선택
  3. Jupyter Labs에 접속
    스크린샷 2025-08-21 171410.png

Python 코드 작성 및 실행

Python code 작성 시 base_url에 NIM 카탈로그의 domain정보 입력하고, api_key는 private환경에서는 사용하지는 않지만 OpenAI함수의 필수 입력 파라미터입니다.

import httpx
from openai import OpenAI

# --- Client Setup ---
# NIM 마이크로서비스 엔드포인트 설정
client = OpenAI(
    base_url = "http://demo01-nimtest01.demo01-nimtest01.svc.cluster.local:8000/v1",
    api_key = "[YOUR-API-KEY]"  # Private 환경에서는 실제로 사용되지 않음
)

# --- Conversation History ---
messages = [
    {"role": "system", "content": "You are a helpful assistant."}
]

print("Chatbot initialized. Type 'exit' to end the conversation.")
print("-" * 20)

# --- Main Chat Loop ---
while True:
    try:
        # 1. 사용자 입력 받기
        user_input = input("You: ")

        # 2. 종료 명령어 확인
        if user_input.lower() in ["exit", "quit"]:
            print("Exiting chat. Goodbye!")
            break

        # 3. 대화 히스토리에 사용자 메시지 추가
        messages.append({"role": "user", "content": user_input})

        # 4. 전체 대화 히스토리를 모델에 전송
        completion = client.chat.completions.create(
            model="meta/llama-3.2-3b-instruct",  
            messages=messages,
            temperature=0.5,
            top_p=1,
            max_tokens=1024,
            stream=True
        )

        # 5. 스트리밍으로 모델 응답 출력
        print("Assistant: ", end="")
        assistant_response = ""
        for chunk in completion:
            if chunk.choices[0].delta.content is not None:
                content = chunk.choices[0].delta.content
                print(content, end="", flush=True)
                assistant_response += content
        
        # 6. 모델 응답을 히스토리에 추가
        messages.append({"role": "assistant", "content": assistant_response})
        
        print()  # 깔끔한 포매팅을 위한 줄바꿈

    except KeyboardInterrupt:
        print("\nExiting chat. Goodbye!")
        break
    except Exception as e:
        print(f"\nAn error occurred: {e}")
        break

상기 코드를 실행하여 채팅
스크린샷 2025-08-21 172545.png

4단계: Flowise에서 NIM Microservice 호출

코드 작성 없이 시각적으로 AI 플로우를 구성하려면 Flowise를 활용할 수 있습니다.

Flowise란?

Flowise는 노코드(No-Code) 기반의 툴로 LangChain 플로우를 시각적으로 구성하여 챗봇과 AI 에이전트를 빠르게 구축할 수 있게 도와줍니다.
Flowise는 PAASUP DIP의 카탈로그로 제공됩니다.

Flowise 설정 과정

  1. DIP 카탈로그에서 Flowise 링크 클릭

  2. Chatflows > + Add New 선택

  3. ChatLocalAI Component 설정:

    • Base Path: NIM 카탈로그의 도메인 정보 입력
    • Model Name: 사용할 모델명 입력
  4. Buffer Memory ComponentConversation Chain Component 추가

  5. 각 컴포넌트를 Conversation Chain에 연결
    스크린샷 2025-08-21 173427.png

  6. 저장 후 채팅아이콘을 클릭하여 채팅
    스크린샷 2025-08-21 173616.png

주요 장점

1. Private 환경에서의 보안성

  • 외부 API에 의존하지 않고 내부 환경에서 완전히 격리된 상태로 운영
  • 민감한 데이터가 외부로 유출될 위험 없음

2. 성능 최적화

  • NVIDIA GPU에 특화된 최적화로 높은 추론 성능 제공
  • 컨테이너 기반으로 일관된 성능과 안정성 보장

3. 개발 편의성

  • OpenAI API와 호환되는 인터페이스로 기존 코드 재사용 가능
  • Flowise와 같은 노코드 툴을 통한 빠른 프로토타이핑

4. 확장성

  • Kubernetes 환경에서의 자동 스케일링 지원
  • 마이크로서비스 아키텍처로 유연한 시스템 구성 가능

마무리

NVIDIA NIM Microservice를 PAASUP DIP 환경에서 구축하는 과정을 통해, Private 환경에서도 최신 AI 모델을 안전하고 효율적으로 활용할 수 있음을 확인했습니다.

특히 Python 코드를 통한 직접적인 API 호출과 Flowise를 통한 노코드 방식의 활용 두 가지 접근 방법을 제시함으로써, 다양한 사용자 요구사항에 대응할 수 있는 유연성을 제공합니다.

앞으로 AI 기술이 더욱 발전하고 보안 요구사항이 강화되는 상황에서, 이러한 Private AI 배포 방식은 기업 환경에서 필수적인 기술이 될 것으로 예상됩니다. NVIDIA NIM과 같은 최적화된 솔루션을 활용하여, 보안성과 성능을 모두 만족하는 AI 서비스를 구축해보시기 바랍니다.

Subscribe to PAASUP IDEAS

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe