최신글

[스터디] Generative AI on Kubernetes 5장: 실험 환경부터 모델 배포까지(upyterHub, LoRA, RAG)

반응형

요약

  • 이 글은 책 5장 실습을 따라 kubernetes 위에서 생성형 AI 서비스를 구성하는 과정을 정리합니다.
  • 실습 범위는 JupyterHub 기반 실험 환경, LoRA 파인튜닝, AI 모델 API 배포, Qdrant 기반 RAG, 챗봇 UI입니다.
  • 책과 달리 kubernetes 리소스는 Terraform 대신 kubectl과 Helm으로 배포했습니다.

 

목표

학습 목표

이 장에서는 kubernetes를 사용해 AI 모델을 실험하고, 빌드하고, 배포하는 흐름을 다룹니다.

 

Kubeflow 아키텍처 문서에서 설명하는 AI Lifecycle 중 Model Development, Model Training, Model Serving 단계를 실습으로 간접 경험합니다.

출처: https://www.kubeflow.org/docs/started/architecture/

책의 예제 목표

책은 MyRetail이라는 e-commerce 회사를 예로 듭니다. MyRetail은 고객에게 더 개인화된 쇼핑 경험을 제공하기 위해 두 가지 AI 서비스를 만듭니다.

두 서비스는 하나의 챗봇 UI에서 실행됩니다.

  • Shopping assistant: 상품 카탈로그 데이터를 기반으로 고객에게 개인화된 상품을 추천합니다. 이 기능은 RAG 방식으로 구현하며, AI 모델은 OpenAI 모델을 사용합니다.
  • Program assistant: MyElite loyalty program FAQ에 대한 고객 질문에 답변합니다. 이 기능은 FAQ 데이터로 AI 모델을 파인튜닝해서 구현합니다.

 

실습 환경

  • GPU: RTX 5060 Ti 16GB
  • OS: Ubuntu 24.04 LTS
  • kubernetes 설치: k3s 단일 node

 

책과 다르게 진행한 부분

책에서는 일부 kubernetes 리소스를 Terraform으로 배포합니다. 저는 kubernetes 리소스는 Terraform보다 kubectl과 Helm으로 관리하는 편이 더 단순하다고 판단했습니다. 그래서 이 실습에서는 kubectl과 Helm으로 리소스를 배포했습니다.

 

실습 자료

 

주제 1. JupyterHub로 실험 환경 만들기

이론

책은 가장 먼저 kubernetes에 JupyterHub를 배포합니다. JupyterHub는 Jupyter pod 실행을 관리하는 오픈소스입니다.

 

사용자가 Jupyter IDE 사용을 요청하면 JupyterHub가 Jupyter pod를 생성합니다. 사용자는 생성된 Jupyter pod에 접속해 AI 모델을 만드는 코드를 작성합니다.

 

AI 모델을 만들기 위해 테스트하는 환경을 실험 환경이라고 부릅니다. AI 실험은 일반적인 소프트웨어 개발과 다르게 로컬 PC보다 실험 서버에서 진행하는 경우가 많습니다.

 

실험 서버가 필요한 이유는 다음과 같습니다.

  • GPU가 필요합니다.
  • 데이터셋에 접근할 수 있어야 합니다.
  • ipynb 파일을 실행할 수 있어야 합니다.
  • 실험 기록을 남길 수 있어야 합니다.

 

그래서 생성형 AI 시스템을 구축하려면 먼저 실험 환경을 제공해야 합니다. 이 실험 환경을 보통 notebook이라고 부르며, 대표적인 구축 방법이 JupyterHub입니다.

 

실습

 

주제 2. LoRA 파인튜닝으로 AI 모델 만들기

이론

두 번째 주제는 LoRA 파인튜닝을 사용해 AI 모델을 만드는 과정입니다. 실험 환경에서 테스트한 AI 모델을 실제로 사용하려면 모델을 만들고 모델 저장소에 저장해야 합니다. 이 예제에서는 별도의 모델 저장소를 사용하지 않습니다. 대신 LoRA 파인튜닝으로 만든 가중치만 스토리지에 저장합니다.

 

AI 모델을 만들고 저장하는 작업은 실험 환경이 아니라 빌드 서버에서 실행하는 편이 적절합니다. kubernetes에서 이 작업을 실행한다면 job 리소스가 잘 맞습니다. 모델 빌드 작업은 시작과 끝이 명확한 일회성 workload이기 때문입니다.

실습

 

주제 3. AI 모델 API 배포

이론

세 번째 주제는 두 번째 과정에서 만든 AI 모델을 API로 배포하는 과정입니다.

모델을 서빙하는 방법은 vLLM처럼 여러 가지가 있습니다. 이 책의 예제에서는 FastAPI로 API를 만들고, API 서버가 AI 모델을 직접 호출해 응답을 생성합니다.

@app.post("/generate")
async def generate(request: Request):
    ...

    inputs = build_inputs(prompt)

    with torch.no_grad():
        outputs = generate_with_inputs(
            inputs,
            max_new_tokens=MAX_NEW_TOKENS,
            repetition_penalty=REPETITION_PENALTY,
        )

    generated_tokens = outputs[0][get_input_length(inputs):]
    response = tokenizer.decode(generated_tokens, skip_special_tokens=True)

    return {"response": response}

 

실습

 

주제 4. RAG와 상품 추천 API 배포

이론

네 번째 주제는 Qdrant vector store를 사용해 RAG를 구축하고, 상품 카탈로그 데이터를 기반으로 개인화된 상품 추천 서비스를 만드는 과정입니다. 이 서비스는 OpenAI 모델을 사용합니다.

실습

 

주제 5. 챗봇 UI 배포

이론

다섯 번째 주제는 Gradio를 사용해 챗봇 UI를 만드는 과정입니다.

사용자가 챗봇 UI에서 요청을 보내면, 챗봇 UI는 주제 3과 주제 4에서 만든 API를 호출합니다. 사용자는 하나의 UI에서 파인튜닝한 모델과 RAG 기반 추천 서비스를 함께 사용할 수 있습니다.

실습

참고자료

반응형