lily_fast_api / README_DEPLOYMENT.md
gbrabbit's picture
Fresh start for HF Spaces deployment
526927a
|
raw
history blame
6.42 kB

Lily LLM API 배포 κ°€μ΄λ“œ

πŸ“‹ κ°œμš”

이 λ¬Έμ„œλŠ” Lily LLM API μ„œλ²„μ˜ Docker 기반 배포 방법을 μ„€λͺ…ν•©λ‹ˆλ‹€.

πŸ—οΈ μ•„ν‚€ν…μ²˜

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Lily LLM API  β”‚    β”‚     Redis       β”‚    β”‚   Celery Worker β”‚
β”‚   (FastAPI)     │◄──►│   (Message      │◄──►│   (Background   β”‚
β”‚   Port: 8001    β”‚    β”‚    Broker)      β”‚    β”‚    Tasks)       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚                       β”‚                       β”‚
         β”‚                       β”‚                       β”‚
         β–Ό                       β–Ό                       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Flower        β”‚    β”‚   Celery Beat   β”‚    β”‚   Database      β”‚
β”‚   (Monitoring)  β”‚    β”‚   (Scheduler)   β”‚    β”‚   (SQLite)      β”‚
β”‚   Port: 5555    β”‚    β”‚                 β”‚    β”‚                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸš€ λΉ λ₯Έ μ‹œμž‘

1. 사전 μš”κ΅¬μ‚¬ν•­

  • Docker
  • Docker Compose
  • μ΅œμ†Œ 4GB RAM
  • μ΅œμ†Œ 10GB λ””μŠ€ν¬ 곡간

2. 배포 μ‹€ν–‰

# μ €μž₯μ†Œ 클둠
git clone <repository-url>
cd lily_generate_package

# 배포 슀크립트 μ‹€ν–‰
chmod +x scripts/deploy.sh
./scripts/deploy.sh deploy

3. μ„œλΉ„μŠ€ 확인

# μ„œλΉ„μŠ€ μƒνƒœ 확인
./scripts/deploy.sh status

# 둜그 확인
./scripts/deploy.sh logs

πŸ“¦ Docker μ»¨ν…Œμ΄λ„ˆ

μ£Όμš” μ„œλΉ„μŠ€

μ„œλΉ„μŠ€ 포트 μ„€λͺ…
lily-llm-api 8001 FastAPI 메인 μ„œλ²„
redis 6379 λ©”μ‹œμ§€ 브둜컀 및 μΊμ‹œ
celery-worker - λ°±κ·ΈλΌμš΄λ“œ μž‘μ—… 처리
celery-beat - μŠ€μΌ€μ€„λŸ¬
flower 5555 Celery λͺ¨λ‹ˆν„°λ§

ν™˜κ²½ λ³€μˆ˜

# API μ„œλ²„
REDIS_URL: redis://redis:6379
DATABASE_URL: sqlite:///app/data/lily_llm.db
LOG_LEVEL: INFO
CELERY_BROKER_URL: redis://redis:6379/0
CELERY_RESULT_BACKEND: redis://redis:6379/0

πŸ”§ 배포 슀크립트

μ‚¬μš© κ°€λŠ₯ν•œ λͺ…λ Ήμ–΄

# 전체 배포
./scripts/deploy.sh deploy

# μ„œλΉ„μŠ€ μ‹œμž‘
./scripts/deploy.sh start

# μ„œλΉ„μŠ€ 쀑지
./scripts/deploy.sh stop

# μ„œλΉ„μŠ€ μž¬μ‹œμž‘
./scripts/deploy.sh restart

# 배포 μ—…λ°μ΄νŠΈ
./scripts/deploy.sh update

# 둜그 확인
./scripts/deploy.sh logs

# μƒνƒœ 확인
./scripts/deploy.sh status

# 정리
./scripts/deploy.sh cleanup

# 이미지 λΉŒλ“œ
./scripts/deploy.sh build

πŸ§ͺ ν…ŒμŠ€νŠΈ

Docker 배포 ν…ŒμŠ€νŠΈ

python scripts/test_docker_deployment.py

μˆ˜λ™ ν…ŒμŠ€νŠΈ

# API μƒνƒœ 확인
curl http://localhost:8001/health

# λͺ¨λΈ λͺ©λ‘ 확인
curl http://localhost:8001/models

# ν…μŠ€νŠΈ 생성 ν…ŒμŠ€νŠΈ
curl -X POST http://localhost:8001/generate \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "prompt=μ•ˆλ…•ν•˜μ„Έμš”&model_id=polyglot-ko-1.3b-chat&max_length=50"

πŸ“Š λͺ¨λ‹ˆν„°λ§

Flower (Celery λͺ¨λ‹ˆν„°λ§)

  • URL: http://localhost:5555
  • μž‘μ—… μƒνƒœ, μ›Œμ»€ μƒνƒœ, μ„±λŠ₯ λ©”νŠΈλ¦­ 확인

API λͺ¨λ‹ˆν„°λ§

# μ„±λŠ₯ λͺ¨λ‹ˆν„°λ§ μ‹œμž‘
curl -X POST http://localhost:8001/monitoring/start

# μ„±λŠ₯ μƒνƒœ 확인
curl http://localhost:8001/monitoring/status

# μ‹œμŠ€ν…œ 건강 μƒνƒœ
curl http://localhost:8001/monitoring/health

πŸ”’ λ³΄μ•ˆ

ν™˜κ²½ λ³€μˆ˜ 관리

# .env 파일 생성
cat > .env << EOF
SECRET_KEY=your-secret-key-here
JWT_SECRET_KEY=your-jwt-secret-key
DATABASE_URL=sqlite:///app/data/lily_llm.db
REDIS_URL=redis://redis:6379
EOF

λ°©ν™”λ²½ μ„€μ •

# ν•„μš”ν•œ 포트만 μ—΄κΈ°
sudo ufw allow 8001  # API μ„œλ²„
sudo ufw allow 5555  # Flower λͺ¨λ‹ˆν„°λ§

πŸ“ˆ μ„±λŠ₯ μ΅œμ ν™”

λ¦¬μ†ŒμŠ€ μ œν•œ

# docker-compose.yml에 μΆ”κ°€
services:
  lily-llm-api:
    deploy:
      resources:
        limits:
          memory: 4G
          cpus: '2.0'
        reservations:
          memory: 2G
          cpus: '1.0'

μΊμ‹œ μ„€μ •

# Redis μΊμ‹œ ν™œμš©
import redis
from functools import lru_cache

redis_client = redis.Redis(host='redis', port=6379, db=0)

@lru_cache(maxsize=128)
def cached_model_response(prompt, model_id):
    # μΊμ‹œλœ 응닡 λ°˜ν™˜
    pass

🚨 문제 ν•΄κ²°

일반적인 문제

1. λ©”λͺ¨λ¦¬ λΆ€μ‘±

# λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰ 확인
docker stats

# λΆˆν•„μš”ν•œ μ»¨ν…Œμ΄λ„ˆ 정리
docker system prune -f

2. API 응닡 μ—†μŒ

# μ»¨ν…Œμ΄λ„ˆ μƒνƒœ 확인
docker-compose ps

# 둜그 확인
docker-compose logs lily-llm-api

# μ»¨ν…Œμ΄λ„ˆ μž¬μ‹œμž‘
docker-compose restart lily-llm-api

3. Redis μ—°κ²° μ‹€νŒ¨

# Redis μ»¨ν…Œμ΄λ„ˆ μƒνƒœ 확인
docker-compose logs redis

# Redis μž¬μ‹œμž‘
docker-compose restart redis

둜그 뢄석

# μ‹€μ‹œκ°„ 둜그 확인
docker-compose logs -f

# νŠΉμ • μ„œλΉ„μŠ€ 둜그
docker-compose logs -f lily-llm-api

# 였λ₯˜ 둜그만 확인
docker-compose logs | grep ERROR

πŸ”„ μ—…λ°μ΄νŠΈ

μ½”λ“œ μ—…λ°μ΄νŠΈ

# μ΅œμ‹  μ½”λ“œ κ°€μ Έμ˜€κΈ°
git pull origin main

# 배포 μ—…λ°μ΄νŠΈ
./scripts/deploy.sh update

λͺ¨λΈ μ—…λ°μ΄νŠΈ

# λͺ¨λΈ 파일 ꡐ체
cp new_model.safetensors ./models/

# μ„œλΉ„μŠ€ μž¬μ‹œμž‘
docker-compose restart lily-llm-api

πŸ“š μΆ”κ°€ λ¬Έμ„œ

🀝 지원

λ¬Έμ œκ°€ λ°œμƒν•˜λ©΄ λ‹€μŒμ„ ν™•μΈν•˜μ„Έμš”:

  1. 둜그 파일 확인
  2. μ‹œμŠ€ν…œ λ¦¬μ†ŒμŠ€ 확인
  3. λ„€νŠΈμ›Œν¬ μ—°κ²° 확인
  4. ν™˜κ²½ λ³€μˆ˜ μ„€μ • 확인

πŸ“ λ³€κ²½ 둜그

v1.0.0 (2025-08-04)

  • 초기 Docker 배포 μ„€μ •
  • CI/CD νŒŒμ΄ν”„λΌμΈ ꡬ좕
  • λͺ¨λ‹ˆν„°λ§ μ‹œμŠ€ν…œ μΆ”κ°€
  • λ³΄μ•ˆ μ„€μ • κ°•ν™”