[VESSL AI] Streamlit 과 VESSL Run을 사용하여 Gemma 2b-it 대화형 챗봇 만들기

VESSL AI
11 min readMar 15, 2024

Streamlit과 VESSL Run을 사용하여 GPU 클라우드에서 Gemma 2b-IT를 대화형 대화에 호스팅하는 방법을 배웁니다.

웹 기반 AI 서비스를 개발하는 것은 모델 훈련에서 전문가인 머신러닝 엔지니어에게는 특히 어려울 수 있습니다. 웹 인프라나 프론트엔드 디자인에 대한 전문 지식은 상대적으로 부족하기 때문인데요. 이 튜토리얼에서는 VESSL Run과 Streamlit의 시너지로 어떻게 이 작업을 단순화할 수 있는지 보여 드리겠습니다. 이를 통해 Gemma 2b-IT 챗봇과 같은 AI 애플리케이션도 빠르게 만들 수 있습니다. 이 방법은 Kubernetes나 프론트엔드 코딩과 같은 직접 인프라 관리와 관련된 복잡성을 모두 없앨 수 있습니다. 참고로 최종 코드는 우리의 GitHub 저장소 에서 찾을 수 있습니다.

튜토리얼 개요

이 튜토리얼에서는 Google이 개발한 “Gemma 2b-IT” 모델을 위한 간단한 Playground를 만들어 볼텐데요. VESSL AI의 GPU 클라우드에 호스팅된 이 애플리케이션을 통해 사용자는 AI 엔티티와 실시간 대화를 체험할 수 있습니다. 또한, 이 AI 챗봇을 직접 인프라에 배포하는 방법도 다룰 것입니다. 결과물은 아래 사진과 같습니다.

구현에는 Gemma 2b-IT 코드베이스를 활용했습니다. 이 모델은 자연어 처리의 대표적인 모델로, 사용자가 상세하고, 맥락을 인식하는 대화에 참여할 수 있도록 합니다. Gemma 2b-IT의 주요 특징 중 하나는 대화의 흐름과 관련성을 유지하는 능력이 뛰어나며, 자연스럽게 마치 인간과 대화하는 것과 같은 커뮤니케이션이 가능하다는 점인데요. 이처럼 맥락을 유지하는 것이 중요한 대화 시나리오에서 특히 유리한 모델입니다.

인프라 레이어에는 VESSL Run 을 사용할 것입니다. VESSL Run은 학습, 파인튜닝, 컨테이너화된 AI 모델을 제공하는 데 필요한 복잡한 컴퓨팅 백엔드를 통일된 YAML 인터페이스로 쉽게 사용할 수 있는 기능입니다. VESSL Run을 사용하면, 클라우드 인프라, CUDA 설정, Python 종속성과 같은 ML 주변 장치에 대해 걱정 없이도, 인퍼런스 작업을 위한 GPU 가속 컴퓨팅 환경을 몇 초 안에 생성할 수 있습니다. ​

인터페이스 레이어에는 Streamlit을 사용했습니다. Streamlit은 머신러닝을 위한 사용자 정의 웹 형태의 어플리케이션을 쉽게 만들고 공유할 수 있게 하는 Python 오픈소스 라이브러리입니다. 여기에서는 Python을 이용해 앱의 UI를 어떻게 몇 분 만에 만들었는지 확인할 수 있습니다. VESSL Run과 Streamlit을 같이 사용하면 AI 어플리케이션 구축의 일반적인 병목 현상을 제거하여 쉽게 서비스를 만들어보실 수 있습니다.

우리가 이 글에서 배울 내용

  • 웹 애플리케이션으로 컴퓨팅 집약적인 생성 AI 모델인 LLM을 빠르게 실행하고 배포하는 방법.
  • VESSL Run을 사용하여 훈련, 미세조정, 추론을 위한 GPU 가속 런타임 환경을 설정하는 방법.
  • Streamlit을 사용하여 웹 기반 데이터 애플리케이션을 실행하는 방법.
  • Hugging Face 인증 토큰을 애플리케이션의 YAML 설정에 통합하여 안전한 모델 접근 및 배포를 수행하는 방법.

참고할만 한 내용들

프로젝트 설정

먼저 VESSL AI의 계정에 가입해주세요. 이 튜토리얼을 완료하고 주변에 공유하는 데 충분한 $30의 무료 크레딧을 받을 수 있습니다. 계정을 만들고 로그인을 하면, VESSL의 Managed GPU Cloud 와 함께 기본 Organization을가지게 되는데요. 이곳에서 앱을 위한 클라우드 런타임 환경을 만들게 됩니다. 이어서 Python 패키지를 설치하고 VESSL CLI를 설정해 봅시다.

pip install --upgrade vessl
vessl configure

GPU 가속 환경 설정

VESSL Run을 사용하면, 런타임 환경 설정을 간단한 YAML 구성으로 바로 시작합니다. 학습 중이든, 파인 튜닝중이든, 서빙 중이든, 다음과 같은 구조로 시작하고 이후 더 많은 키-값을 쉽게 추가할 수 있습니다.

name: # 모델의 이름
resources: # 리소스 사양
clusters:
preset:
image: # Docker 이미지 링크

이번 앱을 만드는 과정에서는 저희의 Managed Cluster 중 하나인 GCP L4 Small 인스턴스를 활용해보도록 하겠습니다. NVIDIA L4 Tensor Core GPU는 이미지 생성 및 애니메이션과 같은 작업에 적합하게 설계되었습니다. 일반적으로 사용되는 NVIDIA A10G 대신 더 정확한 L4 small을 선택함으로써, 팀은 인프라 비용에서 최소 40% 이상 상당한 절약을 경험하실 수 있습니다. 동시에 NVIDIA T4 GPU에 비해 2–4배 개선된 성능을 확인하실 수 있습니다. L4 small을 사용할 경우, 출력 품질을 저하시키지 않고 리소스 집약적인 작업을 효율적으로 관리할 수 있습니다.

# interacactive-gemma.yaml
name: interacactive-gemma
description: # 리소스 사양
resources:
cluster: vessl-gcp-oregon
preset: gpu-l4-small-spot
image: quay.io/vessl-ai/torch:2.2.0-cuda12.3-r4

이 사용자 정의 Docker 이미지를 사용하면, 어디서든 앱을 실행할 수 있습니다. 글의 뒷 부분에서, 동일한 Docker 이미지를 사용하여 어떻게 사용자의 클라우드나 사내 GPU에서 앱을 실행할 수 있는지 알아보겠습니다. resources의 값을 편집하여 PyTorch와 CUDA 버전으로 확인해보겠습니다. 이렇게 우리가 만든 것은 클라우드에 있는 GPU 가속 Kubernetes 가상 컨테이너입입니다.

모델과 코드베이스로 작업하기

컨테이너에 코드베이스나 볼륨을 마운트할 수 있습니다. 여기서는 Hugging Face에서 모델 체크포인트를 가져오고 GitHub에서 코드베이스를 가져올텐데요. 나아가 여러분이 사용하시는 클라우드나 로컬 데이터셋도 쉽게 가져오실 수 있습니다.

import:
/root/:
git:
url: github.com/vessl-ai/examples.git
ref: main

코드가 마운트되었으므로 이제 컨테이너가 실행되는 동안 실행될 실행 명령어를 정의해보겠습니다. 여기서는 기본 작업 디렉터리를 설정하고, requirements.txt에 정의된 추가 라이브러리를 설치한 후,app.py를 실행하여 Streamlit 앱을 실행합니다.

transformers
accelerate
streamlit
torch
streamlit-chat

다음 단계는 애플리케이션이 원활하게 작동하도록 필요한 Python 패키지를 설치하는 단계입니다. requirements.txt 파일에 AI 모델과 웹 어플리케이션의 기능을 지원하기 위해 필요한 필수 라이브러리들을 설치합니다. 예를 들어 transformers, accelerate, streamlit, torch, streamlit-chat이 포함되어 있습니다.​

컨테이너 설정의 실행 명령어 섹션에서는 pip install -r requirements.txt 명령어를 실행하여 모든 의존성을 효율적으로 한번에 설치합니다. 이로써 추가적인 수동 설정 없이 우리의 Streamlit 애플리케이션을 효과적으로 실행할 준비를 마칠 수 있습니다.

run:
- command: |-
pip install -r requirements.txt
streamlit run app.py --server.port 8000
workdir: /root/gemma

어플리케이션 내에서 Hugging Face 모델과 resource에 안전하게 접근하기 위해, YAML 설정 파일에 Hugging Face 인증 토큰을 포함하는 것이 중요한데요. 이 토큰은 Hugging Face로부터 직접 API를 호출하고, 모델을 다운로드 할 수 있도록 하여, 배포 과정의 보안과 효율성을 향상시킬 수 있게 됩니다.

env:
HF_TOKEN: (Add your own Hugging Face Token)

YAML 파일의 맨 끝에 다음 줄을 추가하고 (Add your own Hugging Face Token) 부분에 여러분의 실제 Hugging Face 토큰(hf-… 로 시작)으로 교체해주세요. 이를 통해 어플리케이션을 만들기 위해 필요한 모델과 라이브러리에 대한 안전한 접근을 허용받아, Hugging Face의 자원을 활용할 수 있게 됩니다.

# Chat window setup
st.title("Gemma 2B-IT Chatbot")

user_input = st.text_input("Type your message here and press enter", key="input")
if user_input:
# Convert input text to tokens
input_ids = tokenizer.encode(user_input, return_tensors="pt")
input_ids = input_ids.to(model.device)

# Convert generated tokens to string
response = tokenizer.decode(output_ids[0], skip_special_tokens=True)

# Display response in a nicer format
col1, col2 = st.columns([1, 4]) # Adjust the ratio as needed
with col1:
st.write("You:")
with col2:
st.write(user_input)

col1, col2 = st.columns([1, 4]) # Repeat the column layout for the response
with col1:
st.write("Gemma:")
with col2:
st.write(response, unsafe_allow_html=True) # Use unsafe_allow_html if needed for formatting

app.py는 Streamlit을 사용하여 구축한 간단한 웹 형태의 인터페이스를 포함하고 있습니다.

앱 배포하기

YAML의 마지막 단계에서는 앱의 배포 옵션을 설정합니다. 런타임 시간을 설정하고 컨테이너를 위한 포트를 열텐데요. interactive 필드에서 JupyterLab, SSH 또는 지정된 포트를 통해서 사용자 정의 서비스 등 컨테이너와 상호 작용하는 다양한 방법을 제공하고 있습니다.

interactive:
max_runtime: 24h
jupyter:
idle_timeout: 120m
ports:
- name: streamlit
type: http
port: 8000

이제 vessl run 명령어를 사용하여 완성된 YAML 파일을 실행할 수 있습니다. 참고로 인스턴스가 시작되는 데 몇 분 정도 걸릴 수 있습니다.

vessl run create -f interacactive-gemma.yml

위의 명령어는 YAML 파일을 읽고 다음과 같은 작업을 수행합니다:

  • VESSL AI GPU 클라우드에 GPU 가속 Kubernetes를 구동합니다.
  • Docker 이미지를 사용하여 모델의 런타임 환경을 설정합니다.
  • Hugging Face에서 모델 체크포인트와 GitHub에서 코드베이스를 마운트합니다.
  • 실행 명령어를 실행하고 Streamlit 앱을 시작합니다.
  • 앱을 위한 포트를 활성화합니다.

​마지막으로 앱이 작동하는 것을 URL을 따라가서 보시면, 프롬프트를 입력함으로써 결과를 확인하실 수 있습니다.

VESSL Hub에서 돌려볼 수 있는 다양한 모델들

이 튜토리얼에서 우리는 VESSL Run과 Streamlit을 사용하여 GPU 백업 AI 어플리케이션을 빠르게 시작하는 방법을 탐색해보았는데요. 여러분이 다양한 모델을 실험해보실 수 있도록, VESSL Hub에 추가 모델과 자원을 준비해두었습니다. 참고로 VESSL Hub는 호스팅, 학습, 파인튜닝, 최신 모델 배포까지 빠르게 실험해볼 수 있는 큐레이션된 모델 Hub입니다.

(그 외에 다양한 모델들)

  • LIama2–7B 모델을 코드 지침 데이터셋으로 파인튜닝하기
  • Mistral-7B를 사용하여 Streamlit 텍스트 생성 앱 실행하기
  • SSD-1B의 인터렉티브 플레이그라운드 사용하기 ​

VESSL AI의 계정이 없다면, 무료로 회원 가입하여 위에서 언급한 모델들을 직접 사용해 보세요. 추가적인 질문이나 미래의 튜토리얼에 대한 요청이 있다면, support@vessl.ai로 연락 주시기 바랍니다. 감사합니다 :)


Kelly, Growth Manager

--

--