기타 보관함/개발자정보

회사 내부의 폐쇄망(오프라인 환경)에서 자체적으로 AI 모델을 설치하고 학습한 후 서비스할 수 있는 방법

오아름 샘 2025. 4. 26. 10:08
반응형

주요 조건: 오프라인 설치 가능, 상용화 가능한 오픈소스 라이선스, 로컬 학습 및 추론 지원

 

1. 폐쇄망용 AI 모델 선택 기준

  • 오픈소스 라이선스 (Apache 2.0, MIT 등 상업적 사용 허용)
  • 모델 크기 (7B~13B 파라미터: 일반적인 서버 GPU에서 실행 가능)
  • 오프라인 설치 지원 (Hugging Face에서 미리 다운로드 가능)

추천 모델

모델 이름라이선스최소 GPU 요구사항비고
Mistral 7B Apache 2.0 RTX 3090 (24GB) 높은 성능, 영어/다국어 지원
LLaMA 3 Meta 허가권 RTX 4090 (24GB) 메타 승인 필요
Gemma 7B Apache 2.0 A100 (40GB) Google 개발, 경량화
Falcon 7B Apache 2.0 RTX 3090 (24GB) 상업적 사용 가능

⚠️ LLaMA 3은 Meta의 허가가 필요하므로, Mistral 7B 또는 Gemma 7B를 권장합니다.

 

2. 폐쇄망 설치를 위한 준비 사항

(1) 하드웨어

  • GPU 서버: NVIDIA GPU (RTX 3090/4090, A100/H100 권장) + CUDA 12.1
  • 인터넷 연결 가능 PC: 모델 미리 다운로드 후 폐쇄망으로 이동
  • 저장 장치: 모델 가중치(20~100GB) 및 데이터셋 저장용 SSD

(2) 소프트웨어

  • OS: Ubuntu 22.04 LTS (권장)
  • Docker: 오프라인 환경에서 의존성 문제 방지
  • Python 3.10 + 필수 라이브러리 (torch, transformers, vllm 등)

3. 오프라인 설치 방법 (단계별)

Step 1. 인터넷 연결된 PC에서 모델 & 라이브러리 미리 다운로드

# 1) 모델 다운로드 (Hugging Face)
from huggingface_hub import snapshot_download
model_dir = snapshot_download(repo_id="mistralai/Mistral-7B-v0.1")

# 2) 라이브러리 패키징 (pip → 오프라인 설치용 .whl 파일 생성)
pip download torch transformers vllm -d ./offline_packages

 

Step 2. 폐쇄망 서버에 파일 복사

  • model_dir (모델 가중치)와 offline_packages (파이썬 라이브러리)를 USB/내부망으로 이동.

Step 3. 폐쇄망 서버에서 설치

# 1) Python 라이브러리 오프라인 설치
pip install --no-index --find-links=./offline_packages torch transformers vllm

# 2) 모델 로드 (로컬 경로 지정)
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("./mistral-7b")
tokenizer = AutoTokenizer.from_pretrained("./mistral-7b")

4. 폐쇄망에서 모델 학습 (Fine-Tuning)

(1) 데이터셋 준비

  • 형식: JSON, CSV, 텍스트 파일
    예시 (custom_data.jsonl):
{"text": "회사제품: A상품은 2024년 출시된...", "category": "제품소개"}

(2) LoRA로 효율적인 학습

from peft import LoraConfig, get_peft_model

# LoRA 설정
peft_config = LoraConfig(
    r=8,
    target_modules=["q_proj", "k_proj", "v_proj"],
    lora_alpha=16,
    lora_dropout=0.05,
)

# 모델 + LoRA 적용
model = get_peft_model(model, peft_config)
model.train()

# 학습 코드 (예시)
trainer = Trainer(
    model=model,
    train_dataset=dataset,  # 로컬 데이터셋 로드
    args=TrainingArguments(output_dir="./results", per_device_train_batch_size=4),
)
trainer.train()

 

5. 폐쇄망 내부에서 서비스 배포

(1) FastAPI로 REST API 구축

from fastapi import FastAPI
app = FastAPI()

@app.post("/generate")
def generate(prompt: str):
    inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
    outputs = model.generate(**inputs, max_new_tokens=100)
    return {"response": tokenizer.decode(outputs[0])}

 

(2) Docker로 배포 (오프라인 환경용)

FROM nvidia/cuda:12.1-runtime
COPY . /app
WORKDIR /app
RUN pip install --no-index --find-links=./offline_packages torch transformers
CMD ["uvicorn", "app:app", "--host", "0.0.0.0"]

 

6. 보안 및 유지보수 팁

  • 모델 암호화: 저장 시 gpg로 암호화
  • 접근 제어: 내부망 IP 화이트리스트 설정
  • 모델 버전 관리: Git LFS + 내부 Git 서버 활용

 

  1. 모델 선택: Mistral 7B 또는 Gemma 7B (Apache 2.0 라이선스)
  2. 인터넷 PC에서 미리 다운로드 → 폐쇄망으로 이동
  3. 로컬 학습 (LoRA/PEFT 활용) → FastAPI/Docker 배포
  4. 내부망 전용 서비스 구축

⚠️ LLaMA 3은 Meta의 승인이 필요하며, Falcon 40B는 GPU 여러 대가 필요하므로 주의하세요.
필요시 vLLM으로 고속 추론 또는 텐서RT-LLM으로 최적화할 수 있습니다

 

회사 내부의 폐쇄망(오프라인 환경)에서 자체적으로 AI 모델을 설치하고 학습한 후 서비스할 수 있는 AI를 찾아주시고 단계별로 방법을 알려주세요.

 

 

반응형