Skip to content

[Chore] 임베딩 서버 torch를 CPU 전용으로 교체해 NVIDIA 독점 패키지 제거 #450

Description

@kangcheolung

📌 Description

임베딩 서버(backend/embedding-server)의 torch를 CPU 전용 빌드로 교체해, x86 리눅스 이미지에 NVIDIA 독점 패키지가 함께 설치되는 문제를 없앱니다.

배경

  • 2차 평가의 오픈소스 라이선스 기준은 OSI 승인 라이선스이고, 평가는 각 평가 시점의 저장소 상태로 이루어집니다. ([Chore] 캐시 서버를 Redis 7.4에서 Valkey로 교체 #399 참고)
  • requirements.txt의 torch==2.4.1을 python:3.11-slim(linux/amd64)에서 설치하면 NVIDIA CUDA 런타임 패키지 12개가 의존성으로 함께 설치됩니다. (pip install --dry-run으로 확인)
nvidia-cublas-cu12 12.1.3.1      nvidia-cufft-cu12     11.0.2.54
nvidia-cuda-cupti-cu12 12.1.105  nvidia-curand-cu12    10.3.2.106
nvidia-cuda-nvrtc-cu12 12.1.105  nvidia-cusolver-cu12  11.4.5.107
nvidia-cuda-runtime-cu12 12.1.105 nvidia-cusparse-cu12 12.1.0.106
nvidia-cudnn-cu12 9.1.0.70       nvidia-nccl-cu12      2.20.5
nvidia-nvjitlink-cu12 12.9.86    nvidia-nvtx-cu12      12.1.105
  • 이 패키지들의 라이선스는 NVIDIA 독점(NVIDIA Proprietary Software)이며 OSI 승인이 아닙니다. (PyPI 메타데이터 기준)
  • 개발 PC(Apple Silicon, linux/arm64) 이미지에는 이 패키지가 설치되지 않아 지금까지 드러나지 않았습니다. (로컬 docgrid-embedding-server 이미지에서 pip list로 확인)
  • 임베딩 서버는 docker-compose.yml에서 GPU 없이 CPU(cpus, mem_limit)만 사용하므로 이 패키지는 실행에 쓰이지 않습니다.

방침: torch 버전은 유지하고 CPU 전용 빌드만 받도록 바꿉니다

  • torch 2.4.1은 그대로이고 GPU용 부품이 없는 CPU 전용 휠(PyTorch CPU 저장소)을 사용합니다.
  • main.py 등 서버 코드는 변경하지 않습니다.

✅ To-do

사전 확인

  • CPU 전용 저장소를 지정한 pip install --dry-run(linux/amd64, Python 3.11)에서 NVIDIA 패키지가 사라지고 torch 2.4.1+cpu가 선택되는지 확인
  • 변경 전 기준선: 현재 서버에서 고정 문장 몇 개의 임베딩 값과 이미지 크기를 기록

변경

  • backend/embedding-server의 설치 경로를 CPU 전용 torch로 변경 (Dockerfile과 requirements.txt 중 어디에 지정할지 확정 — requirements-test.txt가 requirements.txt를 참조하므로 로컬 테스트 환경과 일치해야 함)
  • 설계 문서 docs/design/kangcheolung-#{이슈번호}-embedding-torch-cpu-only.md 작성 (배경·변경 범위·검증)

검증

  • 변경 후 이미지 빌드 (기존 docgrid-embedding-server 이미지는 덮어쓰지 않고 별도 태그로)
  • 변경 후 동일 문장 임베딩 값을 기준선과 비교
  • 이미지 크기 변화 기록

✅ 완료 기준

  • linux/amd64 기준 설치 목록에 nvidia-* 패키지가 없다. (pip list | grep -i nvidia 결과 없음)
  • torch 버전이 2.4.1(CPU 전용 빌드)이다.
  • backend/embedding-server의 pytest(test_main.py 등)가 통과한다.
  • /health/ready가 정상 응답하고 임베딩 API 응답 형식이 변경 전과 같다.
  • 고정 문장의 임베딩 값이 변경 전과 허용 오차 안에서 같다.
  • 레포의 Python 의존성 정의 어디에도 NVIDIA 패키지를 요구하는 지정이 없다.

📒 기타

이 이슈의 범위 밖 (별도 확인 필요)

  • minio/minio(태그 미고정, AGPL-3.0)와 grafana/grafana:13.2.3(AGPL-3.0) 이미지: OSI 승인 라이선스이나 별도 컨테이너 실행의 충돌 여부는 OpenUP 오픈소스 라이선스 멘토링(~10/26)에서 확인 필요
  • docs/images/architecture.png에 남아 있는 Redis 로고 교체
  • README 라이선스 표에 Python 의존성·컨테이너 이미지 라이선스 보강
  • FlagEmbedding==1.2.11은 PyPI에 라이선스 메타데이터가 비어 있음 (스캔 도구가 unknown으로 표시할 수 있음)

참고

  • 2026-10-08 자체 라이선스 사전 점검 결과이며, 라이선스는 POM·PyPI·npm 메타데이터 기준입니다. 소스 스캔 결과와 다를 수 있습니다.
  • 검증 도구 계정 배포는 10/12, 스캔 기한은 10/16입니다.

Activity

  1. added a commit that references this issue on Oct 9, 2026
  2. added 2 commits that reference this issue on Oct 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions