환경 설정 및 배포
시스템 요구사항
- Python 3.8 이상 버전
- 최소 8GB 메모리
- CUDA 지원 GPU(권장) 또는 충분한 CPU 자원
- 10GB 이상 디스크 공간
필요 패키지 설치
# 가상 환경 생성
python -m venv owl3_venv
source owl3_venv/bin/activate # Linux/Mac
owl3_venv\Scripts\activate # Windows
# 핵심 패키지 설치
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install transformers>=4.35.0
pip install streamlit Pillow accelerate
실행 검증 스크립트
# launch_verifier.py
import os
import torch
def validate_environment():
try:
print(f"PyTorch 버전: {torch.__version__}")
print(f"CUDA 상태: {torch.cuda.is_available()}")
if torch.cuda.is_available():
print(f"GPU 정보: {torch.cuda.get_device_name(0)}")
return True
except ImportError:
print("PyTorch 설치 오류")
return False
if __name__ == "__main__":
if validate_environment():
os.system("streamlit run main_app.py")
핵심 오류 수정 방법
수정 1: 모델 로딩 최적화
# FP16 반정밀도 사용
model = AutoModelForCausalLM.from_pretrained(
"MAGAer13/mplug-owl3-2b",
torch_dtype=torch.float16,
device_map="auto"
)
수정 2: 이미지 마커 포맷
conversation = [
{
"role": "user",
"content": "<|image|>\n이미지 설명 요청"
},
{"role": "assistant", "content": ""}
]
수정 3: 입력 데이터 검증
def sanitize_input(text):
text = text.replace("<|", "").replace("|>", "")
return text[:400] + "..." if len(text) > 400 else text
수정 4: 대화 기록 관리
def manage_chat_history(messages, new_entry, history_limit=4):
messages.append(new_entry)
if len(messages) > history_limit * 2:
return messages[-(history_limit*2):]
return messages
수정 5: 이미지 전처리
def prepare_image(uploaded_img):
try:
img = Image.open(uploaded_img).convert('RGB')
img.thumbnail((448, 448))
return img
except Exception:
return None
수정 6: 오류 복구 메커니즘
def robust_inference(model, processor, dialog, img):
for retry in range(3):
try:
inputs = processor(conversations=dialog, images=img, return_tensors="pt")
if torch.cuda.is_available():
inputs = {k:v.cuda() for k,v in inputs.items()}
output_ids = model.generate(**inputs, max_new_tokens=256)
return processor.decode(output_ids[0], skip_special_tokens=True)
except RuntimeError:
torch.cuda.empty_cache()
return "처리 오류 발생"
수정 7: 메모리 최적화
def free_resources():
if torch.cuda.is_available():
torch.cuda.empty_cache()
import gc
gc.collect()
배포 예시 애플리케이션
# main_app.py
import streamlit as st
from transformers import AutoModelForCausalLM, AutoProcessor
@st.cache_resource
def initialize_model():
try:
return AutoModelForCausalLM.from_pretrained(
"MAGAer13/mplug-owl3-2b",
torch_dtype=torch.float16,
device_map="auto"
), AutoProcessor.from_pretrained("MAGAer13/mplug-owl3-2b")
except Exception:
return None, None
def main_interface():
st.title("🦉 mPLUG-Owl3-2B 멀티모달 대화")
model, processor = initialize_model()
uploaded_img = st.sidebar.file_uploader("이미지 업로드", type=["jpg","png"])
if "chat_history" not in st.session_state:
st.session_state.chat_history = []
for msg in st.session_state.chat_history:
st.chat_message(msg["role"]).write(msg["content"])
if user_query := st.chat_input("이미지 관련 질문"):
if not uploaded_img:
st.warning("이미지를 먼저 업로드하세요")
return
st.session_state.chat_history.append({"role":"user","content":user_query})
with st.chat_message("assistant"):
with st.spinner("처리 중..."):
dialog = [
{"role":"user", "content":f"<|image|>\n{user_query}"},
{"role":"assistant","content":""}
]
img = prepare_image(uploaded_img)
response = robust_inference(model, processor, dialog, img)
st.write(response)
st.session_state.chat_history.append({"role":"assistant","content":response})
free_resources()
if __name__ == "__main__":
main_interface()