TrueNAS를 AI Ops 플랫폼으로 활용하기: 파일 저장소를 넘어 추론, 이미지 및 파이프라인까지
요약
TrueNAS SCALE을 LLM, Stable Diffusion 등 AI 워크로드를 위한 통합 운영 플랫폼으로 활용하는 방법을 제시합니다. Ollama, ComfyUI, Qdrant 같은 핵심 서비스를 Kubernetes/Docker 기반의 TrueNAS 환경에 구축하고, GPU Passthrough를 통해 고성능 컴퓨팅 자원을 확보할 수 있습니다.
핵심 포인트
- TrueNAS SCALE을 AI Ops 플랫폼으로 변환 가능
- Ollama, ComfyUI 등 다양한 AI 스택 통합 지원
- GPU Passthrough로 NVIDIA 가속 활용 극대화
- 워크플로우 자동화 및 모니터링 기능 제공
TrueNAS SCALE NAS를 LLM, Stable Diffusion, 벡터 데이터베이스, 오케스트레이션 워크플로우가 실행되는 완전한 AI 운영 플랫폼으로 변환하세요.
TrueNAS에서 구동되는 AI Ops 스택
실용적인 AI 운영 플랫폼이 TrueNAS SCALE에서 어떻게 작동하는지 설명합니다:
핵심 AI 서비스 계층 (Core AI Services Layer)
- Ollama: LLM 추론 서버 (qwen2.5-coder:14b, deepseek-r1:14b 등)
- Automatic1111 / ComfyUI: 이미지 생성을 위한 Stable Diffusion 웹 UI
- LiteLLM: 폴백(fallback) 기능을 갖춘 여러 LLM 제공업체용 프록시/로드 밸런서
- Open-WebUI: LLM과 상호 작용하는 채팅 인터페이스
- Qdrant: RAG 및 의미 검색을 위한 벡터 데이터베이스
- LangFuse: LLM 관찰 가능성(observability) 및 추적(tracing)
- N8n: 워크플로우 자동화 및 오케스트레이션
- PostgresQL: 애플리케이션 메타데이터 저장소
- Redis: 캐싱 및 메시지 브로커링
인프라 및 지원 서비스 (Infrastructure & Support Services)
- TrueNAS SCALE: Kubernetes와 Docker가 포함된 기본 OS
- GPU Passthrough: 가속을 위해 NVIDIA RTX 5060 Ti에 대한 직접 접근성
- NGINX Proxy Manager: SSL 종료, 라우팅 및 로드 밸런싱
- Fail2ban + CrowdSec: 침입 방지 및 IP 차단
- Netdata: 실시간 성능 모니터링
- Uptime Kuma: 서비스 모니터링 및 알림
- Volumes: 앱/모델용 빠른 NVMe, 데이터셋용 스토리지 풀(Storage Pool)
- Snapshots: 빠른 롤백 및 실험을 위한 ZFS 스냅샷
데이터 및 모델 관리 (Data & Model Management)
- Datasets: 학습/파인튜닝을 위한 큐레이션된 컬렉션
- Model Registry: 버전 관리가 되는 LLM 및 확산(diffusion) 모델
- Embeddings Cache: 빠른 검색을 위한 사전 계산된 벡터
- Prompt Library: 테스트되고 최적화된 프롬프트 템플릿
- Output Gallery: 큐레이션된 생성 콘텐츠 컬렉션
- Experiment Tracking: ML 실행에 대한 매개변수, 결과 및 메타데이터
하드웨어 요구 사항 및 GPU Passthrough
TrueNAS에서 AI 워크로드를 원활하게 작동시키기 위해 필요한 것:
최소 구동 가능한 하드웨어 (Minimum Viable Hardware):
- CPU: 6코어 이상 최신 프로세서 (AMD Ryzen 5 5600X 또는 Intel i5-12400 동급)
- RAM: ECC 메모리 32GB 권장 (가벼운 사용 시 최소 16GB)
- Storage: OS/앱용 NVMe 풀(500GB 이상), 데이터용 스토리지 풀(4TB 이상 RAIDZ1)
- GPU: 최신 드라이버의 NVIDIA 카드 (VRAM을 위해 RTX 3060+/4060+ 권장)
- Network: 최소 1GbE, 대규모 데이터셋 전송 시 2.5GbE/10GbE 선호
추천 하드웨어 (현재 구성):
- CPU: AMD Ryzen 9 9900X (12코어/24스레드) - 우수함
- RAM: DDR5 64GB - 충분 이상
- Storage: 2TB WD Black SN850X NVMe (앱용) + 3×8TB RAIDZ1 (데이터) - 이상적
- GPU: ASUS RTX 5060 Ti 16GB - AI 워크로드에 완벽함
- Network: 가정된 1GbE+ - 적절함
GPU 패스스루(Passthrough) 구성:
NVIDIA GPU를 컨테이너에서 사용 가능하게 만들기:
# TrueNAS SCALE GPU passthrough setup
# 1. TrueNAS UI에서 VM/장치 패스스루 활성화
# System → Advanced →
- **저장소 위치(Storage Location):** 모델 영속성(persistence)을 위해 스토리지 풀(Storage Pool) 사용 (/mnt/Storage_Pool/models)
- **구성:** 유형별로 폴더 생성: llm/, embedding/, vision/
- **버전 관리(Versioning):** 다른 양자화(quantization) 버전을 위해 하위 폴더 사용 (q4_K_M, q5_K_M 등)
- **심볼릭 링크(Symlinks):** Ollama의 모델 디렉터리를 구성된 스토리지로 연결
- **백업:** 실험 안전을 위한 모델 데이터셋 스냅샷
### 2. ComfyUI / Automatic1111 (이미지 생성)
#### 왜 Automatic1111보다 ComfyUI인가?
- **향상된 리소스 제어(Better resource control):** 세밀한 VRAM 관리
- **워크플로우 기반(Workflow-based):** 재현 가능하고 공유 가능한 생성 파이프라인
- **낮은 오버헤드(Lower overhead):** 전체 WebUI보다 복잡도가 낮음
- **API 우선(API-first):** n8n 및 기타 자동화와 통합하기 쉬움
- **TrueNAS 친화적(TrueNAS-friendly):** 시스템 서비스와의 충돌 가능성이 적음
#### 배포 구성(Deployment Configuration)
예시: GPU를 사용한 ComfyUI용 docker run
docker run -d
--name comfyui
...
#### ComfyUI 모델 구성
- **체크포인트(Checkpoints):** /mnt/Storage_Pool/comfyui-models/checkpoints/
- **LoRA:** /mnt/Storage_Pool/comfyui-models/loras/
- **ControlNet:** /mnt/Storage_Pool/comfyui-models/controlnet/
- **VAE:** /mnt/Storage_Pool/comfyui-models/vae/
- **임베딩(Embeddings):** /mnt/Storage_Pool/comfyui-models/embeddings/
- **업스케일러(Upscalers):** /mnt/Storage_Pool/comfyui-models/upscale/
### 3. LiteLLM (다중 제공자용 프록시/레이어)
#### 왜 LiteLLM을 사용해야 하는가?
- **제공자 폴백(Provider fallback):** Ollama 실패 시, 로컬 Llama.cpp 또는 원격 API 시도
- **로드 밸런싱(Load balancing):** 여러 인스턴스로 요청 분산
- **비용 추적(Cost tracking):** 유료 API의 사용량 및 비용 모니터링
- **표준 인터페이스(Standardized interface):** 모든 제공자를 위한 OpenAI 호환 엔드포인트
- **캐시 레이어(Cache layers):** 반복 요청을 위한 Redis 캐싱
- **보안(Security):** API 키 관리 및 속도 제한(rate limiting)
#### 일반적인 구성(Typical Configuration)
lite llm settings.yaml
model_list:
- model_name: ollama_qwen
...
### 4. Qdrant (RAG용 벡터 데이터베이스)
#### Qdrant를 선택해야 하는 이유?
- **TrueNAS 친화적:** 공식 앱 제공
- **성능:** 벡터 검색에 최적화됨
- **확장성:** 수백만 개의 벡터를 효율적으로 처리함
- **기능:** 필터링, 페이로드(payload) 저장, 하이브리드 검색
- **쉬운 통합:** LangChain, LlamaIndex, 사용자 지정 코드와 연동됨
- **백업 친화적:** 스냅샷 및 내보내기가 잘 작동함
#### 배포 및 사용법
TrueNAS SCALE 앱 배포
TrueNAS UI에서:
- 앱: Qdrant (Community Apps에서)
...
### 5. LangFuse (LLM 관측성)
#### LLM을 관측해야 하는 이유?
- **비용 추적:** 토큰 사용량 및 지출 모니터링
- **성능:** 지연 시간(latency) 및 처리량(throughput) 측정
- **품질:** 환각(hallucinations), 오류, 사용자 피드백 추적
- **디버깅:** 복잡한 체인(chain) 및 에이전트 워크플로우 추적
- **최적화:** 병목 현상 및 비효율적인 패턴 식별
- **규정 준수:** 규제 산업을 위한 감사 추적(audit trails)
#### 배포 설정
LangFuse용 docker run
docker run -d
--name langfuse
...
### 6. N8n (워크플로우 오케스트레이션)
#### AI 워크플로우에 N8n을 사용해야 하는 이유?
- **시각적 워크플로우:** 이해하고 수정하기 쉬움
- **수백 개의 통합:** LLM, API, 데이터베이스, 파일 등에 연결 가능
- **내장 스케줄링:** Cron과 유사한 방식으로 워크플로우 트리거
- **오류 처리:** 재시도 정책(retry policies), 오류 워크플로우, 알림 기능
- **사용자 지정 노드:** 전문적인 작업을 위해 JavaScript 또는 Python 작성 가능
- **웹훅 트리거:** 외부 이벤트로부터 워크플로우 시작
- **TrueNAS 검증:** TrueNAS 커뮤니티에서 잘 정착됨
#### 예시 AI 워크플로우
워크플로우 1: 자동 콘텐츠 생성 파이프라인
트리거: 웹훅 (HTTP를 통해 요청 수신)
단계:
...
## 데이터 관리 및 스토리지 전략
최적의 성능과 신뢰성을 위해 무엇을 어디에 배치해야 하는가:
### NVMe 풀 (고성능)
**사용처:**
- 운영 체제 및 TrueNAS SCALE
- 애플리케이션 컨테이너 및 이미지
- 자주 접근하는 모델 파일 (활성 LLM)
- 벡터 데이터베이스 작업 세트 (Qdrant RAM 캐시 오버플로우)
- 임시 처리 공간
- 빠른 쓰기가 필요한 로그 및 메트릭
**예시 경로:**
- /mnt/nvme-pool/apps/ - 컨테이너 애플리케이션 데이터
- /mnt/nvme-pool/models/active/ - 현재 로드된 모델
- /mnt/nvme-pool/logs/ - 애플리케이션 로그
- /mnt/nvme-pool/cache/ - Redis, 임시 파일
### 스토리지 풀 (용량 및 신뢰성)
**사용 용도:**
- 모든 모델의 마스터 복사본 (양자화 버전)
- 학습 데이터셋 및 아카이브
- 생성된 출력물 (이미지, 텍스트 등)
- 장기 백업 및 스냅샷
- 벡터 데이터베이스 영구 저장소
- ComfyUI 워크플로우용 미디어 에셋
- RAG 시스템용 문서 라이브러리
**예시 경로:**
- /mnt/Storage_Pool/models/ - 모든 모델 버전
- /mnt/Storage_Pool/datasets/ - 학습 데이터
- /mnt/Storage_Pool/generated/ - AI 출력물
- /mnt/Storage_Pool/qdrant/ - 벡터 DB 저장소
- /mnt/Storage_Pool/documents/ - 원본 문서
- /mnt/Storage_Pool/comfyui/ - 입력/출력/미디어
### 백업 전략:
AI 투자를 보호하세요:
- **모델:** Storage Pool/model 데이터셋 스냅샷 (월별)
- **데이터:** 문서 라이브러리 스냅샷 (주간)
- **구성:** 앱 구성 내보내기 및 버전 관리에 저장
- **생성 콘텐츠:** 출력 디렉토리 스냅샷 (필요에 따라)
- **벡터 데이터베이스:** Qdrant 스냅샷 + 정기 내보내기
- **테스트 복원:** 백업 무결성 확인을 위한 분기별 훈련
## 보안 및 접근 제어
AI Ops 플랫폼을 안전하게 유지하는 방법:
### 네트워크 보안:
### 네트워크 보안 (Network Security):
- **네트워크 분할 (Network segmentation):** AI 서비스를 격리된 VLAN에 배치합니다.
- **방화벽 규칙 (Firewall rules):** 필요한 포트(프록시용 HTTP/HTTPS)만 허용합니다.
- **Fail2ban:** 서비스의 무차별 대입 공격(brute-force attempts)을 차단합니다.
- **CrowdSec:** 커뮤니티 기반 IP 평판 차단 기능을 사용합니다.
- **NGINX Proxy Manager:** 중앙 집중식 TLS 종료 및 접근 제어를 수행합니다.
- **내부 통신 (Internal communications):** 사설 네트워크에서 서비스 간 통신을 허용합니다.
- **원격 접속 (Remote access):** TrueNAS에 내장된 Tailscale/ZeroTier 또는 VPN을 사용합니다.
### 애플리케이션 보안 (Application Security):
- **컨테이너 격리 (Container isolation):** 각 앱은 자체적으로 격리된 환경에서 실행됩니다.
- **최소 권한 원칙 (Least privilege):** 가능한 경우 컨테이너를 비(非)루트(non-root)로 실행합니다.
- **리소스 제한 (Resource limits):** CPU/RAM 제한을 통해 리소스 독점(noisy neighbors)을 방지합니다.
- **읽기 전용 루트 (Read-only root):** 지원되는 경우 컨테이너 루트를 읽기 전용으로 마운트합니다.
- **시크릿 관리 (Secrets management):** TrueNAS에 내장된 시크릿 또는 외부 볼트(vault)를 사용합니다.
- **정기 업데이트 (Regular updates):** 보안 패치를 추적하고 적용합니다.
- **취약점 스캐닝 (Vulnerability scanning):** 컨테이너 이미지를 주기적으로 스캔합니다.
### 데이터 보안 (Data Security):
- **저장 시 암호화 (Encryption at rest):** 민감한 데이터셋에 대해 ZFS 네이티브 암호화를 사용합니다.
- **접근 제어 (Access controls):** 데이터셋에 POSIX 권한 및 ACL(Access Control Lists)을 적용합니다.
- **감사 로깅 (Audit logging):** 누가 어떤 데이터에 접근했는지 추적합니다.
- **데이터 분류 (Data classification):** 민감도별로 데이터셋에 레이블을 지정합니다(공개/내부/기밀).
- **모델 보안 (Model security):** 다운로드된 모델의 출처(provenance)를 확인합니다.
- **출력 필터링 (Output filtering):** 생성된 콘텐츠가 부적절한 자료인지 검사합니다.
- **PII 처리 (PII handling):** 개인 정보를 포함하는 데이터셋에 대한 특별 절차를 마련합니다.
예시: AI 서비스를 위한 NGINX Proxy Manager 구성
TrueNAS UI → NGINX Proxy Manager → Proxy Hosts
1. Ollama 접근
도메인(Domain): ai.internal.yourdomain.com
스킴(Scheme): http
포워드 호스트명/IP(Forward Hostname/IP): localhost
포워드 포트(Forward Port): 11434
접근 목록(Access List): 인증 필요 (선택 사항)
사용자 정의 설정(Custom Configuration):
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
2. ComfyUI 접근
도메인(Domain): comfy.internal.yourdomain.com
스킴(Scheme): http
포워드 호스트명/IP(Forward Hostname/IP): localhost
포워드 포트(Forward Port): 8188
접근 목록(Access List): 인증 필요 (UI 사용 시 권장)
SSL: 강제 SSL 리디렉션 (외부 인증서 사용 시)
3. LangFuse 접근
도메인(Domain): langfuse.internal.yourdomain.com
스킴(Scheme): http
포워드 호스트명/IP(Forward Hostname/IP): localhost
포워드 포트(Forward Port): 3100
접근 목록(Access List): 인증 필요 (권장)
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기1