MLOps 개발환경 구축을 위한 EC2, Docker, MobaXterm, WandB 설정 가이드
핵심 요약: EC2(클라우드 서버), Docker(컨테이너화), MobaXterm(SSH 접속 도구), WandB(실험 추적 도구)를 순차적으로 설정하여 완전한 MLOps 개발 환경을 구축할 수 있습니다. 각 도구는 서로 연동되어 효율적인 머신러닝 개발 파이프라인을 제공합니다.
1. 각 도구의 역할과 개념
EC2 (Amazon Elastic Compute Cloud)
AWS의 클라우드 가상 서버로, 언제든지 원하는 사양의 컴퓨터를 임대해서 사용할 수 있는 서비스입니다. MLOps에서는 모델 학습, 데이터 처리, 서비스 배포를 위한 컴퓨팅 자원으로 활용됩니다.
Docker
애플리케이션을 컨테이너로 패키징하는 기술로, 어떤 환경에서든 동일하게 실행될 수 있도록 보장합니다. MLOps에서는 개발 환경 일관성 유지와 배포 자동화에 핵심적인 역할을 합니다.
MobaXterm
Windows에서 Linux 서버에 접속할 수 있는 SSH 클라이언트 도구입니다. GUI 파일 탐색기와 터미널을 함께 제공하여 서버 관리를 편리하게 해줍니다.
WandB (Weights & Biases)
머신러닝 실험을 추적하고 시각화하는 MLOps 플랫폼입니다. 하이퍼파라미터, 성능 지표, 모델 버전을 자동으로 기록하고 비교할 수 있게 해줍니다.
2. EC2 인스턴스 설정하기
2.1 EC2 인스턴스 생성
단계별 EC2 생성 과정:[2][1]
- AWS 콘솔 접속
- AWS 계정 로그인 → EC2 서비스 선택
- 인스턴스 시작
- "인스턴스 시작" 버튼 클릭
- AMI 선택: Ubuntu Server 20.04 LTS (64비트)
- 인스턴스 유형: t2.micro (프리티어, 기본 학습용)
- 네트워크 설정
- VPC: 기본 VPC 사용
- 서브넷: 퍼블릭 서브넷 선택
- 퍼블릭 IP 자동 할당: 활성화
- 보안 그룹 설정 (중요!)
SSH (포트 22): 내 IP 주소만 허용
HTTP (포트 80): 0.0.0.0/0
HTTPS (포트 443): 0.0.0.0/0
MLflow (포트 8000): 내 IP 주소만 허용
5. 키 페어 생성
- 새 키 페어 생성 선택
- 키 페어 이름: mlops-keypair
- 유형: RSA
- 형식: .pem (MobaXterm용)
6. 스토리지 설정
* 크기: 30GB
* 볼륨 유형: gp2
2.2 인스턴스 기본 설정
인스턴스 생성 후 초기 설정:
bash
# 시스템 업데이트
sudo apt update && sudo apt upgrade -y
# 필수 패키지 설치
sudo apt install -y git vim curl wget
3. MobaXterm 설치 및 SSH 연결 설정
3.1 MobaXterm 설치
MobaXterm 다운로드 및 설치:
- 다운로드
- https://mobaxterm.mobatek.net/ 접속
- "GET MOBAXTERM NOW!" → "Download now"
- Portable edition 다운로드 (설치 불필요)
- 압축 해제 및 실행
- 다운로드받은 ZIP 파일 압축 해제
- MobaXterm_Personal_xx.x.exe 실행
3.2 SSH 연결 설정
EC2 인스턴스에 SSH 접속 설정:
- 새 세션 생성
- MobaXterm 실행 → 상단 "Session" 클릭
- "SSH" 선택
- 연결 정보 입력:[10]
Remote host: [EC2 퍼블릭 IPv4 주소] Specify username: ☑️ ubuntu Port: 22
- 키 파일 설정
- "Use private key" 체크
- 폴더 아이콘 클릭 → EC2에서 다운받은
.pem
파일 선택
- 북마크 설정
- Session name:
MLOps-Server
(구분하기 쉬운 이름)
- Session name:
- 연결 테스트
- "OK" 버튼 클릭
- 처음 연결 시 호스트 키 확인 창이 뜨면 "Yes" 클릭
3.3 MobaXterm 한글 설정
터미널 한글 깨짐 방지:
- Settings → Terminal → Character encoding: UTF-8 선택
4. Docker 설치 및 설정
4.1 EC2에서 Docker 설치
Ubuntu에서 Docker 공식 설치 방법:
bash
# 1. 시스템 패키지 업데이트
sudo apt-get update
# 2. 필수 패키지 설치
sudo apt-get install -y \
ca-certificates \
curl \
gnupg \
lsb-release
# 3. Docker GPG 키 추가
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 4. Docker 저장소 추가
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 5. Docker Engine 설치
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 6. 설치 확인
sudo docker run hello-world
4.2 Docker 권한 설정
sudo 없이 Docker 사용하기:
bash
# 현재 사용자를 docker 그룹에 추가
sudo usermod -aG docker $USER
# 새 세션으로 다시 로그인 (MobaXterm 재접속)
exit
# 권한 확인
docker run hello-world
4.3 MLOps용 Docker 환경 구성
MLflow와 PostgreSQL을 포함한 Docker Compose 설정:
text
# docker-compose.yml 파일 생성
version: '3.8'
services:
# PostgreSQL 백엔드 스토어
postgres:
image: postgres:13
container_name: mlops-postgres
environment:
- POSTGRES_DB=mlflow
- POSTGRES_USER=mlflow_user
- POSTGRES_PASSWORD=mlflow_pass
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U mlflow_user -d mlflow"]
interval: 30s
timeout: 10s
retries: 3
# MinIO 아티팩트 스토어
minio:
image: minio/minio
container_name: mlops-minio
ports:
- "9000:9000"
- "9001:9001"
environment:
- MINIO_ROOT_USER=minio
- MINIO_ROOT_PASSWORD=miniostorage
command: server /data --console-address ":9001"
volumes:
- minio_data:/data
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 10s
retries: 3
# MLflow 서버
mlflow:
image: python:3.9-slim
container_name: mlops-mlflow
depends_on:
postgres:
condition: service_healthy
minio:
condition: service_healthy
ports:
- "8000:8000"
environment:
- MLFLOW_BACKEND_STORE_URI=postgresql://mlflow_user:mlflow_pass@postgres:5432/mlflow
- MLFLOW_DEFAULT_ARTIFACT_ROOT=s3://mlflow/
- AWS_ACCESS_KEY_ID=minio
- AWS_SECRET_ACCESS_KEY=miniostorage
- MLFLOW_S3_ENDPOINT_URL=http://minio:9000
command: >
bash -c "
pip install mlflow boto3 psycopg2-binary &&
mlflow server
--backend-store-uri postgresql://mlflow_user:mlflow_pass@postgres:5432/mlflow
--default-artifact-root s3://mlflow/
--host 0.0.0.0
--port 8000
"
volumes:
postgres_data:
minio_data:
Docker Compose 실행:
bash
# 백그라운드 실행
docker-compose up -d
# 실행 상태 확인
docker-compose ps
# 로그 확인
docker-compose logs mlflow
5. WandB 설정 및 연동
5.1 WandB 계정 생성 및 API 키 발급
WandB 회원가입 및 설정:[8][7]
- 회원가입
- https://wandb.ai/site 접속
- Google 또는 GitHub 계정으로 가입
- API 키 확인
- 로그인 후 https://app.wandb.ai/authorize 접속
- API 키 복사 (나중에 사용)
5.2 EC2에서 WandB 설치 및 설정
Python 가상환경에서 WandB 설치:
bash
# Python 가상환경 생성
python3 -m venv mlops_env
source mlops_env/bin/activate
# WandB 설치
pip install wandb
# WandB 로그인
wandb login
# 프롬프트가 나타나면 앞서 복사한 API 키 붙여넣기
5.3 WandB 프로젝트 초기화
첫 번째 WandB 프로젝트 생성:
python
# test_wandb.py 파일 생성
import wandb
import random
import math
# 프로젝트 초기화
wandb.init(
project="mlops-tutorial", # 프로젝트 이름
config={
"learning_rate": 0.01,
"epochs": 10,
"batch_size": 32,
"architecture": "CNN"
}
)
# 가상의 학습 시뮬레이션
for epoch in range(10):
# 가상의 손실과 정확도 생성
loss = math.exp(-epoch/10) + random.random()*0.1
accuracy = 1 - math.exp(-epoch/5) + random.random()*0.1
# WandB에 메트릭 로그
wandb.log({
"epoch": epoch,
"loss": loss,
"accuracy": accuracy
})
print(f"Epoch {epoch}: Loss={loss:.4f}, Accuracy={accuracy:.4f}")
wandb.finish()
테스트 실행:
bash
python test_wandb.py
5.4 WandB와 MLflow 통합
실제 MLOps 파이프라인에서 사용할 통합 코드:
python
# integrated_training.py
import wandb
import mlflow
import mlflow.sklearn
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score
import numpy as np
def train_model():
# WandB 초기화
wandb.init(
project="mlops-integration",
config={
"model": "RandomForest",
"n_estimators": 100,
"max_depth": 5
}
)
# MLflow 실험 시작
mlflow.set_experiment("mlops-integration")
with mlflow.start_run():
# 데이터 준비
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(
iris.data, iris.target, test_size=0.2, random_state=42
)
# 모델 학습
model = RandomForestClassifier(
n_estimators=wandb.config.n_estimators,
max_depth=wandb.config.max_depth,
random_state=42
)
model.fit(X_train, y_train)
# 예측 및 평가
predictions = model.predict(X_test)
accuracy = accuracy_score(y_test, predictions)
# MLflow에 로그
mlflow.log_param("n_estimators", wandb.config.n_estimators)
mlflow.log_param("max_depth", wandb.config.max_depth)
mlflow.log_metric("accuracy", accuracy)
mlflow.sklearn.log_model(model, "random_forest_model")
# WandB에 로그
wandb.log({
"accuracy": accuracy,
"n_estimators": wandb.config.n_estimators,
"max_depth": wandb.config.max_depth
})
print(f"Model accuracy: {accuracy:.4f}")
wandb.finish()
if __name__ == "__main__":
train_model()
6. 통합 환경 테스트 및 확인
6.1 전체 시스템 동작 확인
각 서비스 접속 테스트:
bash
# MLflow UI 접속 (브라우저에서)
# http://[EC2-퍼블릭IP]:8000
# MinIO 콘솔 접속 (브라우저에서)
# http://[EC2-퍼블릭IP]:9001
# 사용자명: minio, 비밀번호: miniostorage
# WandB 프로젝트 확인
# https://app.wandb.ai 접속 → 본인 프로젝트 확인
6.2 환경변수 설정 자동화
편의성을 위한 환경변수 설정: wandb
bash
# ~/.bashrc에 추가
echo 'export WANDB_API_KEY=[본인의-API-키]' >> ~/.bashrc
echo 'export MLFLOW_TRACKING_URI=http://localhost:8000' >> ~/.bashrc
source ~/.bashrc
6.3 실습용 디렉토리 구조 생성
체계적인 프로젝트 구조 만들기:
bash
# MLOps 프로젝트 디렉토리 생성
mkdir -p ~/mlops-project/{data,notebooks,src,models,docker,scripts}
cd ~/mlops-project
tree
# mlops-project/
# ├── data/ # 데이터 파일
# ├── notebooks/ # Jupyter 노트북
# ├── src/ # 소스 코드
# ├── models/ # 저장된 모델
# ├── docker/ # Docker 설정 파일
# └── scripts/ # 스크립트 파일
초보자를 위한 문제 해결 가이드
일반적인 문제와 해결책
문제 | 원인 | 해결책 |
---|---|---|
EC2 SSH 연결 실패 | 보안 그룹 설정 오류 | 포트 22를 내 IP에 열어주기 |
Docker 권한 오류 | 사용자가 docker 그룹에 없음 | sudo usermod -aG docker $USER 실행 후 재접속 |
MLflow 접속 불가 | 포트 5000이 막힘 | 보안 그룹에 포트 5000 추가 |
WandB 로그인 실패 | API 키 오류 | https://app.wandb.ai/authorize에서 새 키 발급 |
다음 단계 학습 방향
- 기초 단계: 간단한 scikit-learn 모델로 MLflow + WandB 연동 실습
- 중급 단계: PyTorch/TensorFlow 모델 학습 파이프라인 구축
- 고급 단계: Kubernetes 클러스터에서 자동화된 MLOps 파이프라인 운영
'▷ AI 인공지능' 카테고리의 다른 글
mlops는 무엇이고 왜 필요한가? (0) | 2025.09.19 |
---|---|
데이터분석을 위한 파이썬 필수 패키지 (0) | 2025.09.12 |
아파트 실거래가 예측 프로젝트 (0) | 2025.09.12 |
머신러닝 vs 딥러닝: 정의, 원리, 차이점 완벽 정리 (10) | 2025.09.01 |
AI 시대, 꼭 알아야 할 인공지능 용어 완벽 정리 (초보자 필독) (5) | 2025.08.31 |