Furiosa.runtime.create_async 문의

안녕하세요
현재 furiosa.runtime.create_async 를 사용해보고 있습니다.

host PC에서는 잘 동작하나, 쿠버네티스로 띄운 파드에서는 hostPC에서 돌려봤을때처럼 child process가 생성되지 않습니다. (사진)

파드에서 limits.beta.furiosa.ai/npu 로 npu 여러개를 할당하고, 여러개가 인식되는 것을 furiosactl info로 확인하여도 동일합니다.

쿠버네티스로 배포했을 때 생긴 문제입니다. 혹시 도움을 얻을 수 있을까요?

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

현재 관련된 로그나 프로젝트 구조, 프로세스 상태에 대한 확인이 불가능한 상태라 정확한 답변은 드리기 어렵습니다만,
한가지 시도해볼만한 방법은 unset NPU_DEVNAME 으로 환경 변수를 제거한 상태에서 프로세스를 시작해보실 수 있으실까요?

감사합니다.

안녕하세요
답변주신대로 unset NPU_DEVNAME으로 설정하고나니
warboy*1이 busy라고 오류가 뜨길래 혹시나해서 pod에 npu 2개를 할당해보니 잘됩니다 원래 이렇게 하는 것이 맞을까요?

더불어 궁금한 것이 있는데, NPU_DEVNAME, NPU_NPUNAME, NPU_PENAME 이라는 변수는 어디서 할당하는 것일까요? 적절히 해당 환경변수를 unset 해줄 포인트를 찾고 있습니다.

또 아래 사진은 furiosactl ps 를 입력했을 때의 출력값인데
python -s -c from multiprocessing.spawn import spawn_main; spawn_main(tracker_fd=36, pipe_handle=47) --multiprocessing-fork은
'furiosa.runtime.session.async’ sdk에서 호출하는게 맞을까요? 혹시 맞다면 관련 자료가 있는지 궁금합니다.

감사합니다.

안녕하세요, 문의주신 내용에 대하여 답변을 드리면,

  1. 사용할 수 있는 NPU 장치보다 더 많은 수의 세션을 생성하게 되면 Bush 오류가 발생합니다. 만약 의도한 수만큼 사용하지 않았음에도 해당 오류가 발생을 하였다면 불필요한 세션이 생성되었을 가능성이 있습니다.
    (첨부해주신 furiosactl ps 결과 사진에서 NPU 장치가 fusion되어(warboy(2)*1) 2개 사용하고 있는 것으로 확인됩니다, 의도하신 바가 맞으신지요? - 세션이 현재 두개가 열려있는 것으로 보입니다.)

  2. 세 환경변수는 furiosa-npu-device-plugin에서 pod에 NPU를 할당할 때 생성해줍니다. container의 entrypoint 역할을 하는 스크립트 등에서 unset을 할 수 있겠지만, 만약 작업하시는 환경에서 기존 환경변수를 unset하는 시점이 모호하다면, NPU_DEVNAME 보다 우선순위가 높은 환경변수인 FURIOSA_DEVICES 를 설정하는 방법이 있습니다. pod manifest에서 다음과 같이 지정할 수 있습니다. 아래와 같이 설정 시, NPU_DEVNAME의 존재 여부나 값은 무시됩니다. (단, SDK 0.10.0 이상 한정)

spec:
  containers:
  - name: ubuntu
    image: ubuntu:focal
    resources:
      limits:
        beta.furiosa.ai/npu: 1
    env:
    - name: FURIOSA_DEVICES
      value: "warboy*1" # single core: warboy*1 / dual core(fusion): warboy(2)*1
  1. multiprocessing.spawn 관련은 furiosa-sdk에서 호출하는 것은 아닙니다. 아마도 mlserver 또는 mlserver에서 사용하는 mlflow 내부 동작에 의해 발생하는 것이 아닐까 추측됩니다. parent pid를 통해 어디서 생성된 프로세스인지 확인해보시는 것을 권장드립니다.

감사합니다.

1 Like