232 lines
5.0 KiB
Markdown
232 lines
5.0 KiB
Markdown
# 원격 워커 설치 및 실행 가이드
|
||
|
||
이 가이드는 별도의 서버/컴퓨터에서 워커를 실행하여 메인서버와 연결하는 방법을 설명합니다.
|
||
|
||
## 1. 메인서버 설정 (이미 완료)
|
||
|
||
### Redis 포트 열기
|
||
```bash
|
||
# 메인서버에서 실행
|
||
sudo ufw allow 6379/tcp
|
||
```
|
||
|
||
### Docker Redis 외부 접속 확인
|
||
```bash
|
||
docker ps | grep redis
|
||
# 출력: 0.0.0.0:6379->6379/tcp 확인
|
||
```
|
||
|
||
## 2. 원격지 서버 설정
|
||
|
||
### 2.1 저장소 클론
|
||
```bash
|
||
git clone https://github.com/your-repo/worker-system.git
|
||
cd worker-system
|
||
```
|
||
|
||
### 2.2 Python 가상환경 생성
|
||
```bash
|
||
# Python 3.8+ 필요
|
||
python3 -m venv .
|
||
source bin/activate
|
||
|
||
# 또는 기존 가상환경이 있다면
|
||
source bin/activate
|
||
```
|
||
|
||
### 2.3 패키지 설치
|
||
```bash
|
||
# 기본 패키지 설치
|
||
pip install -r requirements.txt
|
||
|
||
# 누락된 패키지가 있다면 개별 설치
|
||
pip install simple-lama-inpainting translatepy celery redis
|
||
```
|
||
|
||
### 2.4 GPU 환경 설정 (선택사항)
|
||
```bash
|
||
# CUDA 사용 가능한 경우
|
||
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118
|
||
|
||
# 또는 시스템에 맞는 PyTorch 설치
|
||
```
|
||
|
||
## 3. 워커 실행
|
||
|
||
### 3.1 메인서버 IP 확인
|
||
메인서버의 실제 IP 주소를 확인하세요:
|
||
- 내부 네트워크: `192.168.x.x`, `10.x.x.x` 등
|
||
- 외부 네트워크: 공인 IP 주소
|
||
|
||
### 3.2 네트워크 연결 테스트
|
||
```bash
|
||
# Redis 서버 연결 테스트
|
||
redis-cli -h 메인서버IP -p 6379 ping
|
||
# 응답: PONG
|
||
|
||
# 또는 telnet으로 테스트
|
||
telnet 메인서버IP 6379
|
||
```
|
||
|
||
### 3.3 워커 시작
|
||
|
||
#### 방법 1: 자동 스크립트 사용 (권장)
|
||
```bash
|
||
# 메인서버 IP를 실제 IP로 변경
|
||
MAIN_SERVER_IP=192.168.1.100 ./start_worker.sh
|
||
|
||
# 동시 처리 수 조정
|
||
MAIN_SERVER_IP=192.168.1.100 CONCURRENCY=4 ./start_worker.sh
|
||
|
||
# 원격 모드로 명시적 실행
|
||
MAIN_SERVER_IP=192.168.1.100 WORKER_MODE=remote ./start_worker.sh
|
||
```
|
||
|
||
#### 방법 2: 직접 실행
|
||
```bash
|
||
# 가상환경 활성화
|
||
source bin/activate
|
||
|
||
# 워커 실행
|
||
python worker.py \
|
||
--redis-url redis://메인서버IP:6379/0 \
|
||
--main-server 메인서버IP \
|
||
--worker-name worker-원격서버명 \
|
||
--concurrency 2
|
||
```
|
||
|
||
#### 방법 3: Docker 실행
|
||
```bash
|
||
# docker-compose.yml의 Redis URL 수정 후
|
||
MAIN_SERVER_IP=192.168.1.100 WORKER_MODE=docker ./start_worker.sh
|
||
```
|
||
|
||
## 4. 워커 상태 확인
|
||
|
||
### 4.1 메인서버에서 확인
|
||
```bash
|
||
# 메인서버에서 실행
|
||
python test_worker_client.py --test-type status
|
||
|
||
# 출력 예시:
|
||
# 활성 워커:
|
||
# celery@메인서버: 0개 작업 실행 중
|
||
# worker-원격서버@hostname: 0개 작업 실행 중
|
||
```
|
||
|
||
### 4.2 Flower 대시보드 확인
|
||
메인서버에서 Flower가 실행 중이라면:
|
||
```
|
||
http://메인서버IP:5555
|
||
```
|
||
|
||
## 5. 설정 예시
|
||
|
||
### 환경별 설정 예시
|
||
|
||
#### 같은 네트워크 내 서버
|
||
```bash
|
||
# 메인서버: 192.168.1.100
|
||
# 워커서버: 192.168.1.200
|
||
|
||
MAIN_SERVER_IP=192.168.1.100 \
|
||
WORKER_NAME=worker-gpu-server \
|
||
CONCURRENCY=4 \
|
||
./start_worker.sh
|
||
```
|
||
|
||
#### 클라우드 환경
|
||
```bash
|
||
# 메인서버: 퍼블릭 IP 또는 도메인
|
||
MAIN_SERVER_IP=your-server.com \
|
||
WORKER_NAME=worker-cloud-gpu \
|
||
CONCURRENCY=2 \
|
||
./start_worker.sh
|
||
```
|
||
|
||
#### 다중 워커 실행
|
||
```bash
|
||
# 서버1
|
||
MAIN_SERVER_IP=192.168.1.100 WORKER_NAME=worker-gpu1 ./start_worker.sh &
|
||
|
||
# 서버2
|
||
MAIN_SERVER_IP=192.168.1.100 WORKER_NAME=worker-gpu2 ./start_worker.sh &
|
||
```
|
||
|
||
## 6. 문제 해결
|
||
|
||
### 6.1 연결 실패
|
||
```bash
|
||
# Redis 연결 확인
|
||
redis-cli -h 메인서버IP -p 6379 ping
|
||
|
||
# 방화벽 확인 (메인서버)
|
||
sudo ufw status | grep 6379
|
||
|
||
# 네트워크 연결 확인
|
||
ping 메인서버IP
|
||
```
|
||
|
||
### 6.2 워커가 등록되지 않음
|
||
```bash
|
||
# 워커 로그 확인
|
||
tail -f worker.log
|
||
|
||
# Redis 연결 상태 확인
|
||
python -c "
|
||
import redis
|
||
r = redis.Redis(host='메인서버IP', port=6379, db=0)
|
||
print(r.ping())
|
||
"
|
||
```
|
||
|
||
### 6.3 패키지 오류
|
||
```bash
|
||
# 가상환경 재생성
|
||
rm -rf bin lib include pyvenv.cfg
|
||
python3 -m venv .
|
||
source bin/activate
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
### 6.4 GPU 메모리 부족
|
||
```bash
|
||
# 동시 처리 수 줄이기
|
||
CONCURRENCY=1 ./start_worker.sh
|
||
|
||
# GPU 메모리 모니터링
|
||
nvidia-smi
|
||
```
|
||
|
||
## 7. 보안 고려사항
|
||
|
||
### 7.1 Redis 보안
|
||
- 프로덕션 환경에서는 Redis에 비밀번호 설정 권장
|
||
- 방화벽에서 특정 IP만 허용하도록 설정
|
||
|
||
### 7.2 네트워크 보안
|
||
```bash
|
||
# 특정 IP만 허용 (메인서버에서 설정)
|
||
sudo ufw allow from 워커서버IP to any port 6379
|
||
sudo ufw delete allow 6379/tcp
|
||
```
|
||
|
||
## 8. 성능 최적화
|
||
|
||
### 8.1 동시 처리 수 조정
|
||
- **CPU 기반**: CPU 코어 수
|
||
- **GPU 기반**: GPU 메모리에 따라 1-2개
|
||
- **메모리 제한**: 이미지 크기 × 동시 처리 수 고려
|
||
|
||
### 8.2 네트워크 최적화
|
||
- 메인서버와 워커 간 네트워크 지연 최소화
|
||
- 가능한 같은 데이터센터/네트워크 사용
|
||
|
||
### 8.3 모니터링
|
||
```bash
|
||
# 시스템 리소스 모니터링
|
||
htop
|
||
nvidia-smi # GPU 사용 시
|
||
```
|
||
|
||
이제 원격지에서 `git clone` 후 메인서버 IP만 설정하면 워커를 쉽게 실행할 수 있습니다! 🚀 |