PyTorch Crash, 싱글톤 패턴과의 관계는?

Bean·2025년 7월 2일
0

프로그래밍

목록 보기
10/38

libtorch에서 전역 리소스 관리가 중요한 이유

PyTorch를 C++에서 사용할 때 torch::jit::Module 등이 프로그램 종료 시 crash를 유발하는 이유는 무엇일까요? 그 중심엔 싱글톤(Singleton) 패턴과 전역 리소스 소멸 순서가 있습니다. 이 글에서는 싱글톤 개념부터 PyTorch의 내부 구조(libtorch), 그리고 crash 발생 원인까지 간결하게 정리합니다.


1. 싱글톤(Singleton) 패턴이란?

싱글톤 패턴은 프로그램 전체에서 하나의 인스턴스만 존재하도록 보장하는 설계 방식입니다. 어디서든 접근할 수 있으면서도 중복 생성을 방지하여 리소스 효율성과 일관성을 확보할 수 있습니다.

class Singleton {
public:
    static Singleton& getInstance() {
        static Singleton instance;
        return instance;
    }

private:
    Singleton() {}
    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;
};

🔹 싱글톤이 자주 사용되는 경우

  • 로깅 시스템
  • 설정(Configuration) 관리
  • DB 커넥션 풀, 장치 제어 등 공용 리소스 관리

2. PyTorch의 전역 리소스 의존이란?

PyTorch(C++ 라이브러리인 libtorch)는 내부적으로 다음과 같은 요소를 전역 리소스로 초기화합니다:

  • 텐서 메모리 할당자(Allocator)
  • 쓰레드풀(Thread Pool)
  • JIT 엔진
  • 디바이스(CPU/GPU) 컨텍스트
  • ATen, c10 등 라이브러리 전역 상태

이들은 모두 싱글톤 구조로 구성되어 있으며, at::Tensor, torch::jit::Module 같은 객체가 동작할 때 이 전역 리소스를 필요로 합니다.


3. 종료 시 crash가 나는 이유

Crash는 PyTorch 내부 전역 리소스의 소멸이 사용자 객체보다 먼저 발생할 때 발생합니다.

  1. 프로그램 종료 시 전역 싱글톤 리소스가 먼저 소멸되고
  2. 그 후에 torch::jit::Module 같은 객체가 소멸되면서
  3. 이미 사라진 리소스에 접근 → segmentation fault 등 crash 발생

즉, 객체의 생명주기 관리 문제이며, 싱글톤의 단점 중 하나입니다.


4. 싱글톤의 장단점 요약

👍 장점

  1. 어디서든 접근 가능 (전역 접근)
  2. 인스턴스 유일성 보장
  3. 공용 상태 관리에 유리
  4. 초기화/소멸 타이밍 제어 가능

👎 단점

  1. 코드 의존성 증가 → 유지보수 어려움
  2. 테스트 격리 어려움
  3. 숨겨진 종속성 증가
  4. 종료 시점 소멸 순서 문제 발생 가능 (이번 crash처럼!)
  5. 멀티스레드 환경에서 동기화 필요

한 줄 요약:
싱글톤은 유일한 전역 상태를 관리하는 데 효과적이지만, 종속성 관리 및 생명주기 통제가 어렵기 때문에 PyTorch(libTorch) 같은 프레임워크와 함께 사용할 때 주의가 필요합니다.


profile
AI developer

0개의 댓글