본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

Personal/Tip

RunPod 사용해보기: 서비스 배포해 브라우저로 접속하기

runpod 로그인

https://standout.tistory.com/1927

 

RunPod 사용해보기: ssh 키 등록, pod 만들기, workload 선택

RunPodAI, 머신러닝 및 일반 컴퓨팅 요구 사항을 위해 구축된 클라우드 컴퓨팅 플랫폼시간당 0.29달러 (400원) 정도에 최상급 GPU를 빌려 쓰는 가성비간편한 세팅가벼운 작업은 저렴한 GPU, 고해상도

standout.tistory.com

 

 

 

 

 

pod는 안정적이라는 2.4.0 을 사용해보자 .

 

 

 

 

 

작은 예제서비스이니 저렴한 pod를 사용하자. 

 

 

 

 

 

 

pod를 만들기전 http ports를 먼저 확인한다. 나중에 하려면 pod가 reset되어 다시 코드를 세팅해야함으로..(알고싶지않았다)

 

 

 

 

터미널 열기

 

 

 

 

 

 

내 git repo준비하기

특히 나는 폴더/폴더/폴더 안의 구조임으로 clone후 cd를 해야했다. root에 바로 프로젝트가 있다면 불필요하다 .

https://github.com/StandOut-0/Study-AI/tree/main/llm_workspace/day53_FineTuning_evaluation/runpod_dpo_rag_fastapi_project

 

Study-AI/llm_workspace/day53_FineTuning_evaluation/runpod_dpo_rag_fastapi_project at main · StandOut-0/Study-AI

[SK네트웍스 AI 캠프] - Day 기록. Contribute to StandOut-0/Study-AI development by creating an account on GitHub.

github.com

 

 

 

 

clone 및 run_runpod.sh 실행

가상환경을 생성하고, 설치도구를 갱신하고, requirements를 설치하며 vlln 설치 실패시 error메세지를 표시하고 완료시 설치완료 메세지를 출력하는 코드.

git clone https://github.com/StandOut-0/Study-AI.git

cd Study-AI/llm_workspace/day53_FineTuning_evaluation/runpod_dpo_rag_fastapi_project

bash run_runpod.sh
#!/usr/bin/env bash
# 오류 발생 시 즉시 종료합니다.
set -euo pipefail
# 프로젝트 루트로 이동합니다.
cd "$(dirname "$0")"
# Python 버전을 확인합니다.
python --version
# GPU 상태를 확인합니다.
nvidia-smi || true
# 가상환경이 없으면 생성합니다.
[ -d .venv ] || python -m venv .venv
# 가상환경을 활성화합니다.
source .venv/bin/activate
# 설치 도구를 갱신합니다.
python -m pip install --upgrade pip setuptools wheel
# 공통 의존성을 설치합니다.
python -m pip install -r requirements.txt
# GPU 서빙용 vLLM을 별도로 설치합니다.
python -m pip install "vllm>=0.8,<1.0" || echo "vLLM 설치 실패: transformers 백엔드로 먼저 실행하십시오."
# .env가 없으면 예제를 복사합니다.
[ -f .env ] || cp .env.example .env
# 다음 명령을 안내합니다.
echo "설치 완료: source .venv/bin/activate"

 

 

 

 

 

 

(선택) 가상환경이 잘 떠있는지는 아래 코드로 확인해볼 수 있다. 

source .venv/bin/activate

 

 

 

 

--------------------------------------------------------------error start------------------------------------------------------------------------

(선택) 에러가 뜬다면 확인하자. 나는 requirement 기준을 아무꺼나 대충 지정해서 만난 pytorch 버전 오류였다. 

실제 프로젝트는 명확히 지정하도록 하자. 

RuntimeError: Could not load libtorchcodec.
PyTorch version (2.11.0+cu130) is not compatible with this version of TorchCodec.

 

 

 

 

에러메세지를 검색했더니

코드가 아니라 requirements.txt의 버전 범위가 너무 넓어서 2026년 최신 라이브러리들이 설치된 것.

즉 서로 호환되지 않는 조합이 설치됬다.

pip show sentence-transformers
pip show torch
cat requirements.txt

 

 

 

 

 

 

 

삭제후 재실행

오디오·비디오 디코딩용 라이브러리로 현 프로젝트에서는 필요하지않았다. 

pip uninstall -y torchcodec
bash scripts/start_api.sh

 

 

--------------------------------------------------------------error end ------------------------------------------------------------------------

 

 

 

 

requirements.txt설치기다리고..

 

 

 

 

FastAPI 서버실행

source .venv/bin/activate
which uvicorn
bash scripts/start_api.sh

 

 

(선택) 현재 git의 requirements.txt는 수정되지않아 이것저것 실행중 재 requirements.txt설치를 하거나 등의 이유로 인해 원복되 똑같은 에러가 발생했다면 당황하지말고 venv가 활성화되어있는상태를 유지하며삭제후 버전을 낮춰 다시 설치하자.

pip uninstall -y torchcodec
pip uninstall -y sentence-transformers torchcodec
pip install sentence-transformers==3.3.1
bash scripts/start_api.sh

 

 

 

기다리기...

실행

 

 

 

 

 

완료.

 

 

 

 

 

현상태 에러를 돌아보자 .

현재 발생한 환경 충돌 원인 분석 및 개선 방향

 

현재 프로젝트의 requirements.txt 버전 관리가 명확하지 않아 Python 패키지 간 의존성 충돌이 발생했다.

특히 vLLM, transformers, sentence-transformers, torch 버전 간 호환성 문제가 원인이었다.

 

  • sentence-transformers 5.x → 최신 transformers, torchcodec 의존
  • vLLM → 최신 transformers 5.x, torchcodec 필요
  • RAG 임베딩 구성 → 안정적인 sentence-transformers 3.3.1 필요

vLLM은 모델 서빙(inference serving)용으로

학습 완료된 모델을 고속 추론 API로 제공하기 위한 serving 엔진

학습이 완료된 모델을 빠르게 로딩하고, GPU 메모리를 효율적으로 관리하면서 API 형태로 제공하기 위해 사용한다.

현재 RAG + FastAPI 구조에서는 선택적으로 사용할 수 있다.

 

현재는 Training 환경과 Serving 환경이 합쳐져있는데

Training 환경에서는 안정적인 transformers, sentence-transformers 조합을 원하고

Serving 환경에서는 vLLM 버전에 맞는 transformers, torch 최신버전을 따라야한다.

이를 하나의 venv에서 모두 하려고 하니 에러가 났었던것.

 

 

 

수정이 필요하다. 

 

requirements,txt는 안정적인 버전으로 명확하게 명시하고

transformers==4.57.6 
sentence-transformers==3.3.1 
torch>=2.5,<3.0 
datasets>=3.2,<5.0 
peft>=0.14,<1.0 
accelerate>=1.2,<2.0

 

 

run_runpod.sh에 vLLM 코드도 주석처리 혹은 삭제한다 .

# python -m pip install "vllm>=0.8,<1.0" || echo "vLLM 설치 실패: transformers 백엔드로 먼저 실행하십시오."

 

 

모델 배포에서는 별도 환견에서 vLLM을 설치하기로하자 .

python -m pip install "vllm>=0.8,<1.0"

 

 

 

같은 Pod 안에서 venv 2개 운영하거나

python -m venv serving-env
source serving-env/bin/activate
pip install vllm

 

pod를 따로 만들어도좋다. 실무에서는 pod를 따로 만드는것이 권장된다.

혹은 Docker를 사용해 image를 분리해 운영한다.

 

 

 

 

 

 

 

 

현재상태에서는 서비스가 간단하니 venv2개로 운영하는게 맞다 .

이 학습된 모델 위치가 아래와같다면 이 위치에서 서버를 실행하고, 

/workspace/models/dpo_model
vllm serve /workspace/models/dpo_model \
    --host 0.0.0.0 \
    --port 8000

 

 

 

기존코드를 변경하고 해달 vllm용 서버를 연결해 자원으로 활용하는 식으로 코드 수정이 필요하겠다. 

model = AutoModelForCausalLM.from_pretrained(
    "/workspace/models/dpo_model"
)

response = model.generate(...)
client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="EMPTY"
)
client.chat.completions.create(
    model="dpo_model",
    messages=[
        {"role":"user","content":"질문"}
    ]
)