Furiosa SDK 0.10.0 업데이트 후 'cannot allocate memory in static TLS block' 에러 문제

안녕하세요
Furiosa SDK 0.10.0 업데이트 후

File “/home/aination/TEST/npu.py”, line 3, in
from furiosa.runtime import session
File “/home/aination/miniconda3/envs/furiosa-3.9/lib/python3.9/site-packages/furiosa/runtime/init.py”, line 15, in
raise e from None
File “/home/aination/miniconda3/envs/furiosa-3.9/lib/python3.9/site-packages/furiosa/runtime/init.py”, line 13, in
from furiosa.native_runtime import *
ImportError: /home/aination/miniconda3/envs/furiosa-3.9/lib/python3.9/site-packages/furiosa/native_runtime.cpython-39-x86_64-linux-gnu.so: cannot allocate memory in static TLS block

이라는 에러가 떴고,
from furiosa.native_runtime import * 의 위치를 맨 위로 올리자

File “/home/aination/TEST/npu.py”, line 6, in
import torch.nn as nn
File “/home/aination/miniconda3/envs/furiosa-3.9/lib/python3.9/site-packages/torch/init.py”, line 217, in
_load_global_deps()
File “/home/aination/miniconda3/envs/furiosa-3.9/lib/python3.9/site-packages/torch/init.py”, line 177, in _load_global_deps
raise err
File “/home/aination/miniconda3/envs/furiosa-3.9/lib/python3.9/site-packages/torch/init.py”, line 172, in _load_global_deps
ctypes.CDLL(lib_path, mode=ctypes.RTLD_GLOBAL)
File “/home/aination/miniconda3/envs/furiosa-3.9/lib/python3.9/ctypes/init.py”, line 382, in init
self._handle = _dlopen(self._name, mode)
OSError: /home/aination/miniconda3/envs/furiosa-3.9/lib/python3.9/site-packages/torch/lib/libgomp-a34b3233.so.1: cannot allocate memory in static TLS block

로 바뀌어서 떴습니다.

pip install ‘furiosa-sdk[full]’
export LD_PRELOAD=$(ldconfig -p | grep libgomp | head -n 1 | grep -Eo “\S+$”)

를 실행시킨후에는

File “/home/aination/TEST/npu.py”, line 8, in
from utils import utils_image as util
File “/home/aination/TEST/utils/utils_image.py”, line 7, in
import cv2
File “/home/aination/miniconda3/envs/furiosa-3.9/lib/python3.9/site-packages/cv2/init.py”, line 181, in
bootstrap()
File “/home/aination/miniconda3/envs/furiosa-3.9/lib/python3.9/site-packages/cv2/init.py”, line 153, in bootstrap
native_module = importlib.import_module(“cv2”)
File “/home/aination/miniconda3/envs/furiosa-3.9/lib/python3.9/importlib/init.py”, line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
ImportError: /lib/x86_64-linux-gnu/libGLdispatch.so.0: cannot allocate memory in static TLS block

라는 에러가 떴습니다.

export LD_PRELOAD=/lib/x86_64-linux-gnu/libGLdispatch.so.0:
를 하고 나니
다시

에러로 바뀌었습니다.

모듈을 import 시키는 위치에 따라서 에러메세지가 달라지는데,
위현상에 대한 빠른 해결 부탁드립니다.

과도 연관 있는 문제로 보입니다.

감사합니다.

안녕하세요, 현재 0.10.0 업데이트 후 Pytorch와 함께 furiosa-sdk를 사용할 시 해당 에러가 뜨는 것으로 파악하였습니다. 에러의 해결을 위해서 아래와 같이 LD_PRELOAD를 지정해줄 필요가 있습니다.

export LD_PRELOAD= 현재 파이썬 환경에서 Pytorch의 libgomp-a34b3233.so.1 경로

파이썬 환경 재시작 후에 아래와 같이 설정해주시면 해결될 것으로 보입니다.

export LD_PRELOAD=/home/aination/miniconda3/envs/furiosa-3.9/lib/python3.9/site-packages/torch/lib/libgomp-a34b3233.so.1

해결이 안되시는 경우 알려주신다면 최대한 도움드리도록 하겠습니다.

안녕하세요!! 답변 감사드립니다. 덕분에 기존에 있던 문제는 해결되었습니다.

그런데 이제 다음 문제가 생겼습니다…

위와같은 코드로 npu 10개 있는 것을 돌리려 하는데

runtime.FuriosaRuntimeError: runtime error: Compilation error: Out of instruction memory

와 같은 에러가 발생합니다.
npu 3장 정도로 시도해보거나


위처럼 한장만 쓰는 경우도 같은 에러가 생깁니다

혹시 해결 방법을 알수 있을까요??

안녕하세요, FuriosaAI 김종욱입니다.

모델에 대한 공유가 가능하시면 문제를 해결하는데 큰 도움이 될 것 같습니다!
혹시 모델에 대한 공유 가능하신지요? 만약 가능하시다면 jongwook.kim@furiosa.ai 로 공유해주시면 감사드리겠습니다.

네, 관련하여 메일보내드렸습니다.

감사합니다.!

1 Like

보내주신 파일 확인하였습니다! 우선 해당 문제는 모델의 크기가 너무 커 발생하는 문제로 보이며, onnx 파일 생성시 batch size를 1로 하여 생성한 뒤 테스트 진행 가능 하신지요?

추가적으로 onnx 파일 생성시 opset version이 10으로 설정되어 있는데 13으로 바꾸는 것을 추천드립니다.

1 Like

네, 답변 감사드립니다.
무사히 실행될수 있게 되었습니다.
그런데 npu 1개를 썼을때와 npu 10개를 썼을때 속도 차이가 크지 않아서, npu10개를 어떻게 하면 효율적으로 사용할수 있을지 예시를 볼수 있을까요??

1 Like

아래 링크와 같이 가이드를 작성 중입니다. 작성이 완료되면 바로 공유 드리겠습니다. 감사합니다!