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 로 공유해주시면 감사드리겠습니다.

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

감사합니다.!

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

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

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

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