RoBoLoG

[Error] tensorflow_cpu_aws cannot allocate memory in static TLS block (mediapipe, ros, tensorflow 사용시) 본문

Error Solution/Tensorflow

[Error] tensorflow_cpu_aws cannot allocate memory in static TLS block (mediapipe, ros, tensorflow 사용시)

SKJun 2024. 3. 13. 18:41

 

tensorflow_cpu_aws cannot allocate memory in static TLS block

 

이 문제는 Mediapipe, ROS, 그리고 TensorFlow를 동시에 사용할 때 발생할 수 있는 메모리 할당 문제로 보입니다. 특히, TensorFlow가 CPU 버전에서 static TLS (Thread Local Storage) 블록에 메모리를 할당하는 과정에서 발생할 수 있습니다. 저의 경우 엣지 디바이스에서 실행하므로 tensorflow를 설치하면 tensorflow-cpu-aws가 설치되었습니다. 

더보기

TensorFlow 2.10 부터 Aarch64/ARM64 프로세서용 Linux CPU 빌드는 제3자( AWS) 에 의해 구축, 유지 관리, 테스트 및 출시됩니다. ARM 시스템에 tensorflow 패키지를 설치하면 AWS의 tensorflow-cpu-aws 패키지가 설치됩니다. 

 

해결책은 두 가지 방향으로 접근합니다:

1. 호환되는 라이브러리 버전 설치

  • 라이브러리 간의 호환 문제를 해결하기 위해 특정 버전의 라이브러리를 설치하는 것이 좋습니다. 이 경우, opencv-contrib-python==4.5.5.64, mediapipe==0.10.3, tensorflow==2.10.0 버전이 ROS Noetic과 호환되는 것으로 확인되었습니다. 이러한 버전의 조합은 서로 호환되어 메모리 할당 문제를 방지할 수 있습니다.

설치 명령어

pip install opencv-contrib-python==4.5.5.64 mediapipe==0.10.3 tensorflow==2.10.0

 

2. 코드 내에서 라이브러리 import 순서 조정

  • Python 코드에서 라이브러리를 import하는 순서가 중요한 경우가 있습니다. 이 문제에서는 cv_bridge를 mediapipe보다 먼저 import하면 메모리 할당 에러가 발생할 수 있습니다. 따라서, import cv_bridge 명령어를 import mediapipe 명령어 아래에 위치시켜 순서를 조정해야 합니다. 이 방식으로 순서를 조정함으로써, TensorFlow와 관련된 메모리 할당 문제를 방지할 수 있습니다.

올바른 import 순서 예시

import mediapipe as mp 
import cv_bridge

 

 

이러한 해결 방법은 서로 다른 라이브러리들 사이의 복잡한 상호작용을 관리하는 한 가지 방법을 제시합니다. 호환되는 버전의 라이브러리를 사용하고, 코드 내에서 라이브러리를 import하는 순서에 주의를 기울임으로써, 여러 라이브러리를 함께 사용할 때 발생할 수 있는 문제를 최소화할 수 있습니다.

728x90
반응형