피드로 돌아가기
Deleting the 8.4GB Python Sidecar: Pure Go + CUDA with `CGO_ENABLED=0`
Dev.toDev.to
AI/ML

Pure Go 기반 CUDA Driver API 호출로 Docker 이미지 8.4GB에서 2.4MB로 최적화

Deleting the 8.4GB Python Sidecar: Pure Go + CUDA with `CGO_ENABLED=0`

Eitamos Ring2026년 5월 20일3advanced

Context

Go 기반 비즈니스 로직과 GPU 제어를 위한 Python Sidecar 구조의 혼용으로 인한 비효율 발생. PyTorch 및 CUDA Toolkit 의존성에 따른 이미지 비대화와 직렬화 오버헤드로 인한 Cold Start 지연 및 네트워크 홉 증가가 주요 병목 지점으로 작용.

Technical Solution

  • CGO_ENABLED=0 설정을 통한 C 컴파일러 의존성 제거 및 정적 바이너리 구현
  • purego 라이브러리를 활용하여 런타임에 libcuda.so를 직접 로드하는 동적 바인딩 구조 설계
  • CUDA Driver API 직접 호출을 통한 Python 인터프리터 및 Sidecar 통신 레이어 제거
  • Asynchronous Overlap 전략을 적용한 Stream 기반 DMA 전송으로 PCIe 전송 레이턴시 은폐
  • Go의 동시성 모델을 GPU 메모리 관리 및 PTX 로딩으로 확장하여 운영 예측 가능성 확보

Impact

  • 아티팩트 크기: 8,400MB(Python Sidecar) → 2.4MB(Pure Go)로 약 3,500배 감소
  • 빌드 시간: 5~10분에서 2초 미만으로 단축
  • GPU 파이프라인 성능: H→D Copy(19.3ms), Kernel Launch(3.4ms), D→H Copy(25.6ms) 수준의 Raw 성능 달성 및 직렬화 오버헤드 제거

1. GPU 제어를 위해 반드시 Python 환경이 필요한지 검토하고 Driver API 직접 호출 가능성을 분석할 것

2. Sidecar 패턴으로 인한 네트워크 홉과 직렬화 비용이 P99 레이턴시에 미치는 영향을 측정할 것

3. Pure Go 환경에서 C 라이브러리 호출이 필요한 경우 purego와 같은 런타임 로더 도입을 고려할 것

4. AI 서빙 인프라 설계 시 모델 가중치 외의 런타임 의존성을 최소화하여 Cold Start 시간을 단축할 것

원문 읽기