파드에 2개를 할당한 후에 NPU_DEVNAME을 확인했는데, 하나 밖에 안보입니다. 왜 그런지 알 수 있을까요
안녕하세요, 퓨리오사에이아이 김종욱입니다.
기본적으로 NPU_DEVNAME 환경변수에 장치가 설정이 안되는 것으로 보입니다.
혹시 npu2 번 장치를 사용하는데 있어서 문제가 발생하시는지 질문드립니다.
2번 장치 사용을 위해서는 아래와 같이 inference시 runtime 설정에 device="npu2pe0-1"과 같이 파라미터로 주시면 됩니다.
with create_runner(model_path, device="npu2pe0-1") as runner:
....
직접할당해서 사용하면 잘 됩니다
파드 내부에서도 NPU_DEVNAME에 없어도 device에 직접 넣어주면 동작합니다
NPU_DEVNAME에 있는 장치의 경우 실행에 있어 기본적으로 사용할 장치를 표현하게 됩니다.
따라서 해당 환경 변수를 설정하는 것과 runtime 상에서 device를 지정하는 것과 차이점은 없다고 보시면 됩니다.
하지만 device=None으로 지정하면 자동으로 사용가능한 장치를 찾는데, NPU_DEVNAME이 하나만 있다보니, 2개 모델이 한 NPU 칩만 사용하려다 충돌이 발생하고 있습니다
그런 경우에는 오히려 NPU_DEVNAME 환경변수를 제거하셔야 할 것으로 생각됩니다.
NPU_DEVNAME 을 두개로 장치를 주는 경우, 예를들어 NPU_DEVNAME = npu0pe0-1,npu3pe0-1 로 주는 경우에는 하나의 runtime 에서 두개의 warboy장치를 사용하게 됩니다. 따라서 다른 모델을 실행하는 runtime을 시행하는 경우에도 동일하게 충돌하는 현상이 발생하게 될 것으로 예상됩니다.
근데 NPU_DEVNAME 환경변수는 device plugin에서 제대로 세팅해줘야 하는 값 아닌가요? 물론 임의로 환경변수 지워서 할 순 있지만, 원래는 환경변수 값이 제대로 설정이 되어야 하는게 맞지 않나 싶어서요
말씀 주신 대로 furiosa-npu-device-plugin 에서 NPU_DEVNAME이 제대로 세팅이 되어야 합니다.
다만, 현재 runtime에서 device-api 를 통해 사용자가 사용 가능한 장치를 지정해서 또는 자동으로 runtime에서 device를 할당해 사용하도록 api가 제공이 되고 있습니다.
따라서 해당 환경 변수가 쓰이지 않아 NPU_DEVNAME 이 문제가 되는 경우 container의 entry하는 스크립트에서 unset 으로 환경변수 지우는 것을 추천 드리고 있습니다.
아니면 아래와 같이 pod manifest에서 NPU_DEVNAME 보다 높은 우선 순위의 환경 변수인 FURIOSA_DEVICES 를 설정하여 해결할 수 도 있어 보입니다.
spec:
containers:
- name: ubuntu
image: ubuntu:focal
resources:
limits:
...
env:
- name: FURIOSA_DEVICES
value: "warboy(2)*1"