exlm์ ๋๋ฉ์ธ ํนํ LLM์ ์๋์ผ๋ก ์์ฑํ๊ณ ๋ฐฐํฌํ ์ ์๋ ํตํฉ ํ๋ซํผ์ ๋๋ค. ์คํ์์ค LLM ํ์ธํ๋๋ถํฐ ํฉ์ฑ ๋ฐ์ดํฐ ์์ฑ, ์ต์ ํ์ต ๊ธฐ๋ฒ ์ ์ฉ, ๊ทธ๋ฆฌ๊ณ ํ๋ก๋์ ์๋น๊น์ง ์ ์ฒด ํ์ดํ๋ผ์ธ์ ์๋ํํฉ๋๋ค.
- ์ต์ ์คํ์์ค LLM ์ง์: Llama3, Mistral, Qwen2, Phi-3 ๋ฑ
- ์๋ ํ์ธํ๋: LoRA, QLoRA, DPO, ORPO ๋ฑ ์ต์ ๊ธฐ๋ฒ ์ง์
- ๋ชจ๋ธ ๋ฒ์ ๊ด๋ฆฌ: ์คํ ์ถ์ ๋ฐ ๋ชจ๋ธ ๋ฒ์ ๊ด๋ฆฌ
- ํฉ์ฑ ๋ฐ์ดํฐ ์์ฑ: OpenAI, Claude, Gemini API๋ฅผ ํ์ฉํ ๊ณ ํ์ง ๋ฐ์ดํฐ ์์ฑ
- ํ๋กฌํํธ ํ ํ๋ฆฟ: ๋๋ฉ์ธ๋ณ ์ปค์คํฐ๋ง์ด์ง ๊ฐ๋ฅํ ํ ํ๋ฆฟ
- ํ์ง ๊ด๋ฆฌ: ์๋ ์ค๋ณต ์ ๊ฑฐ, ํ์ง ์ ์ ๊ณ์ฐ, ๋๋ฉ์ธ ๊ด๋ จ์ฑ ๊ฒ์ฆ
- ๋๋๊ทธ ์ค ๋๋กญ ์ธํฐํ์ด์ค: ์ง๊ด์ ์ธ ํ์ดํ๋ผ์ธ ์ค๊ณ
- ์ต์ ๊ธฐ๋ฒ ์กฐํฉ: ๋ค์ํ ํ์ต ๊ธฐ๋ฒ์ ์์ ๋กญ๊ฒ ์กฐํฉ
- ์ฝ๋ ์๋ ์์ฑ: ์ค๊ณํ ํ์ดํ๋ผ์ธ์ ์คํ ๊ฐ๋ฅํ ์ฝ๋๋ก ๋ณํ
- vLLM ํตํฉ: ๊ณ ์ฑ๋ฅ ์ถ๋ก ์๋ฒ
- OpenAI API ํธํ: ๊ธฐ์กด ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ฝ๊ฒ ํตํฉ
- ์๋ ์ค์ผ์ผ๋ง: ํธ๋ํฝ์ ๋ฐ๋ฅธ ์๋ ํ์ฅ
GPU ํ๊ฒฝ์์ 1๋ถ ๋ง์ ์์ ์๋ ์ค์น๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
# RunPod SSH ์ ์ ํ ํ ๋ฒ์ ๋ช
๋ น์ด๋ก ์๋ฃ
curl -sSL https://raw.githubusercontent.com/quantumaikr/exlm-app/main/scripts/runpod-full-setup.sh | bash- โ ์์ ์๋ํ: ์์คํ ์ค์ ๋ถํฐ ์๋น์ค ์์๊น์ง ๋ชจ๋ ๊ณผ์ ์๋
- โ GPU ์๋ ๊ฐ์ง: CUDA ํ๊ฒฝ ์๋ ๊ตฌ์ฑ
- โ ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅ: ์ค์น ์๋ฃ ํ ๋ฐ๋ก ์น UI ์ ์ ๊ฐ๋ฅ
ํฌํธ ์ค์ : RunPod ์ฝ์์์ 3000, 8000 ํฌํธ๋ฅผ Public์ผ๋ก ์ค์
์ ์: https://[POD_ID]-3000.proxy.runpod.net
๐ ์์ธ ๊ฐ์ด๋: RunPod ๋น ๋ฅธ ์ค์น ๊ฐ์ด๋
- Python 3.9+
- Node.js 18+
- Docker & Docker Compose (์ ํ์ฌํญ)
- CUDA 11.8+ (GPU ํ์ต ์)
GPU ํ๊ฒฝ์์ ๋น ๋ฅธ ๋ฐฐํฌ๋ฅผ ์ํ๋ค๋ฉด RunPod์ ์ฌ์ฉํ์ธ์:
# EXLM ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ์์ ์คํ
cd /workspace/exlm-app
chmod +x scripts/setup-runpod-local.sh
./scripts/setup-runpod-local.sh
# ์๋น์ค ์์
./start-all.sh# ์๋ ๋ฐฐํฌ ์คํฌ๋ฆฝํธ ๋ค์ด๋ก๋
curl -sSL https://raw.githubusercontent.com/quantumaikr/exlm-app/main/scripts/deploy-runpod-native.sh -o deploy.sh
chmod +x deploy.sh
# ํ ํฐ๊ณผ ํจ๊ป ๋ฐฐํฌ (๊ถ์ฅ)
./deploy.sh YOUR_GITHUB_TOKEN
# ๋๋ ํ ํฐ ์์ด ๋ฐฐํฌ (Public ์ ์ฅ์์ธ ๊ฒฝ์ฐ)
./deploy.shRunPod ํฌํธ ์ค์ : 3000, 8000, 5555 ํฌํธ๋ฅผ Public์ผ๋ก ์ค์ ํ์ธ์.
๐ ์์ธ ๊ฐ์ด๋: RunPod ๋ค์ดํฐ๋ธ ๋ฐฐํฌ ๊ฐ์ด๋
git clone https://github.com/quantumaikr/exlm-app.git
cd exlm-appcp .env.example .env
# .env ํ์ผ์ ์ด์ด ํ์ํ API ํค์ ์ค์ ์ ์
๋ ฅํ์ธ์# ๊ฐ๋ฐ ํ๊ฒฝ (CPU)
docker-compose up -d
# GPU ํ๊ฒฝ
docker-compose -f docker-compose.gpu.yml up -dcd backend
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
uvicorn main:app --reloadcd frontend
npm install
npm run dev- ํ๋ก์ ํธ ์์ฑ: ์น UI์์ ์ ํ๋ก์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.
- ๋ชจ๋ธ ์ ํ: ์ฌ์ฉํ ๋ฒ ์ด์ค ๋ชจ๋ธ์ ์ ํํฉ๋๋ค.
- ๋ฐ์ดํฐ ์ค๋น: ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ์ ๋ก๋ํ๊ฑฐ๋ ํฉ์ฑ ๋ฐ์ดํฐ๋ฅผ ์์ฑํฉ๋๋ค.
- ํ์ดํ๋ผ์ธ ์ค๊ณ: ์ํ๋ ํ์ต ๊ธฐ๋ฒ์ ์ ํํ๊ณ ์กฐํฉํฉ๋๋ค.
- ํ์ต ์คํ: ์ค๊ณํ ํ์ดํ๋ผ์ธ์ผ๋ก ๋ชจ๋ธ์ ํ์ต์ํต๋๋ค.
- ๋ฐฐํฌ: ํ์ต๋ ๋ชจ๋ธ์ API๋ก ์๋นํฉ๋๋ค.
โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ
โ Frontend โโโโโโถโ Backend โโโโโโถโ ML โ
โ (Next.js) โ โ (FastAPI) โ โ Pipeline โ
โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ
โ โ โ
โผ โผ โผ
โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ
โ Browser โ โ PostgreSQL โ โ vLLM โ
โ UI โ โ Redis โ โ Server โ
โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ
ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๊ณ ์ถ์ผ์ ๊ฐ์? CONTRIBUTING.md๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
์ด ํ๋ก์ ํธ๋ MIT ๋ผ์ด์ ์ค ํ์ ๋ฐฐํฌ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ LICENSE ํ์ผ์ ์ฐธ๊ณ ํ์ธ์.
- ๐ RunPod 5๋ถ ๋น ๋ฅธ ์์ - ์ถ์ฒ
- ๐ RunPod ์ค์น ์์ ๊ฐ์ด๋ - ์์ธ ๊ฐ์ด๋
- โก ๋น ๋ฅธ ์์ ๊ฐ์ด๋ - ๋ฐฐํฌ ๋ฐฉ๋ฒ ๋น๊ต
- RunPod ๋ค์ดํฐ๋ธ ๋ฐฐํฌ ๊ฐ์ด๋
- Docker ๋ฐฐํฌ ๊ฐ์ด๋
- GitHub Token ๊ฐ์ด๋
- ํ๊ฒฝ ์ค์ ๊ฐ์ด๋
- ํ๋ก์ ํธ ๊ตฌ์กฐ
- ๋ชจ๋ํฐ๋ง ์ค์
- GitHub Issues: ๋ฒ๊ทธ ๋ฆฌํฌํธ ๋ฐ ๊ธฐ๋ฅ ์ ์
- Discord: ์ปค๋ฎค๋ํฐ ์ฑ๋
- Email: support@exlm.io
- Docker & Docker Compose
- Node.js 18+
- Python 3.9+
- NVIDIA GPU (CUDA 11.8+)
- Docker & Docker Compose
- NVIDIA Container Toolkit
# ์ ์ฅ์ ํด๋ก
git clone <repository-url>
cd exlm
# ๊ฐ๋ฐ ํ๊ฒฝ ์์
make up-dev
# ๋๋ ์ง์ ์คํ
docker-compose up -d# GPU ํ๊ฒฝ ์์
make up-gpu
# ๋๋ ์ง์ ์คํ
docker-compose -f docker-compose.gpu.yml up -d# ๊ฐ๋ฐ ํ๊ฒฝ ๋น๋ (CPU only)
make build-dev
# GPU ํ๊ฒฝ ๋น๋
make build-gpu- ํ๋ก ํธ์๋: http://localhost:3000
- ๋ฐฑ์๋ API: http://localhost:8000
- API ๋ฌธ์: http://localhost:8000/docs
- Flower (Celery ๋ชจ๋ํฐ๋ง): http://localhost:5555
- Grafana: http://localhost:3001 (admin/admin)
.env ํ์ผ์ ์์ฑํ์ฌ ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค:
# ๋ฐ์ดํฐ๋ฒ ์ด์ค
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DB=exlm_db
# ๋น๋ ํ๊ฒฝ (dev ๋๋ gpu)
BUILD_ENV=dev
# API ํค๋ค
OPENAI_API_KEY=your_openai_key
ANTHROPIC_API_KEY=your_anthropic_key
GOOGLE_API_KEY=your_google_keyGPU ํ๊ฒฝ์ ์ฌ์ฉํ๋ ค๋ฉด:
- NVIDIA Container Toolkit ์ค์น:
# Ubuntu/Debian
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update && sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker- GPU ํ๊ฒฝ ์์:
make up-gpu# ๊ฐ๋ฐ ํ๊ฒฝ ํ
์คํธ
make test-dev
# GPU ํ๊ฒฝ ํ
์คํธ
make test-gpu- Prometheus: http://localhost:9090
- Node Exporter: ์์คํ ๋ฉํธ๋ฆญ
- PostgreSQL Exporter: ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฉํธ๋ฆญ
- Redis Exporter: ์บ์ ๋ฉํธ๋ฆญ
- Grafana: http://localhost:3001
- ๊ธฐ๋ณธ ๊ณ์ : admin/admin
- ์ฌ์ ๊ตฌ์ฑ๋ ๋์๋ณด๋ ํฌํจ
# ์ ์ฒด ๋ก๊ทธ
make logs
# GPU ํ๊ฒฝ ๋ก๊ทธ
make logs-gpu
# ํน์ ์๋น์ค ๋ก๊ทธ
make backend-logs
make frontend-logs
make celery-logs
make flower-logs# ๊ฐ๋ฐ ํ๊ฒฝ
make shell-backend
make shell-frontend
# GPU ํ๊ฒฝ
make shell-backend-gpu
make shell-frontend-gpumake restart-backend
make restart-frontend
make restart-celeryexlm/
โโโ backend/ # FastAPI ๋ฐฑ์๋
โ โโโ app/
โ โ โโโ api/ # API ์๋ํฌ์ธํธ
โ โ โ โโโ core/ # ํต์ฌ ์ค์
โ โ โ โโโ models/ # SQLAlchemy ๋ชจ๋ธ
โ โ โ โโโ schemas/ # Pydantic ์คํค๋ง
โ โ โ โโโ services/ # ๋น์ฆ๋์ค ๋ก์ง
โ โ โ โโโ tasks/ # Celery ํ์คํฌ
โ โ โโโ requirements.txt # ๊ฐ๋ฐ ํ๊ฒฝ ์์กด์ฑ
โ โ โโโ requirements-gpu.txt # GPU ํ๊ฒฝ ์์กด์ฑ
โ โโโ frontend/ # Next.js ํ๋ก ํธ์๋
โ โโโ monitoring/ # ๋ชจ๋ํฐ๋ง ์ค์
โ โโโ docker-compose.yml # ๊ฐ๋ฐ ํ๊ฒฝ ์ค์
โ โโโ docker-compose.gpu.yml # GPU ํ๊ฒฝ ์ค์
โ โโโ Makefile # ์๋ํ ์คํฌ๋ฆฝํธ
| ๊ธฐ๋ฅ | ๊ฐ๋ฐ ํ๊ฒฝ (CPU) | GPU ํ๊ฒฝ |
|---|---|---|
| PyTorch | CPU ๋ฒ์ | CUDA 11.8 ๋ฒ์ |
| vLLM | ๋ฏธ์ค์น | ์ค์น๋จ |
| bitsandbytes | ๋ฏธ์ค์น | ์ค์น๋จ |
| ๋ชจ๋ธ ํ์ต | ์ ํ์ | ์ ์ฒด ๊ธฐ๋ฅ |
| ๋ชจ๋ธ ์๋น | ์ ํ์ | ์ ์ฒด ๊ธฐ๋ฅ |
# add-apt-repository ์ค๋ฅ ๋ฐ์ ์
chmod +x scripts/fix-apt-pkg.sh
./scripts/fix-apt-pkg.sh
# ์๋์ผ๋ก ํด๊ฒฐํ๋ ๊ฒฝ์ฐ
sudo rm -f /usr/lib/python3/dist-packages/apt_pkg.cpython-*.so
sudo ln -sf /usr/lib/python3/dist-packages/apt_pkg.cpython-310-x86_64-linux-gnu.so /usr/lib/python3/dist-packages/apt_pkg.cpython-311-x86_64-linux-gnu.so# PyYAML ๋น๋ ์ค๋ฅ ๋ฐ์ ์
cd backend
chmod +x ../scripts/fix-pyyaml.sh
../scripts/fix-pyyaml.sh# ์์กด์ฑ ์ถฉ๋ ์ค๋ฅ ๋ฐ์ ์
cd backend
chmod +x ../scripts/fix-dependencies.sh
../scripts/fix-dependencies.sh-
PostgreSQL ์ฐ๊ฒฐ ์ค๋ฅ
docker-compose down -v docker-compose up -d
-
GPU ์ปจํ ์ด๋ ์์ ์คํจ
# NVIDIA Container Toolkit ํ์ธ docker run --rm --gpus all nvidia/cuda:11.8-base-ubuntu20.04 nvidia-smi -
๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ค๋ฅ
# Docker ๋ฉ๋ชจ๋ฆฌ ์ ํ ์ฆ๊ฐ # Docker Desktop > Settings > Resources > Memory
์ด ํ๋ก์ ํธ๋ MIT ๋ผ์ด์ ์ค ํ์ ๋ฐฐํฌ๋ฉ๋๋ค.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request