运行时
dokcer 容器中运行,非root用户报错:Device id must be less than GPU count, but received id is: 0. GPU count is: 0
2023-05-30 12:15:01
263

运行环境:

基础镜像:ubuntu:20.04
驱动版本:rock-4.5.2-5.11.39-V01.5.run
DTK:DTK-22.10.1-Ubuntu20.04.1-x86_64.tar.gz
飞浆:paddlepaddle-2.3.2_dtk2210_git0195561-cp38-cp38-manylinux2014_x86_64.whl
用户组信息:
root@d5981efc58e7:/opt/ocr# id  ocr
uid=1001(ocr) gid=1001(ocr) groups=1001(ocr),39(irc),44(video)


使用官方提供镜像测试,发现也是存在这个问题

#启动容器
docker run --rm -it -u 1001:1001 --name paddle-dev --device=/dev/kfd --device=/dev/dri --group-add video --group-add 39 image.sourcefind.cn:5000/dcu/admin/base/paddlepaddle:2.3.2-ubuntu20.04-dtk-22.10-py37-latest /bin/bash
#运行测试代码,
python3 -c "import paddle; paddle.utils.run_check()"
#会出现如下警告:
usr/local/lib/python3.7/site-packages/paddle/fluid/framework.py:597: UserWarning: You are using GPU version Paddle, but your CUDA device is not set properly. CPU device will be used by default.
  "You are using GPU version Paddle, but your CUDA device is not set properly. CPU device will be used by default."
....
PaddlePaddle works well on 2 CPUs.
#正常情况下应该是没有警告输出
PaddlePaddle works well on 2 GPUs.

全部评论(4)
只看楼主
网
网友GMoXGL
楼主
2楼

问题已经解决

经过和海光工程师沟通,发现non-root下--device挂载设备用户组权限问题导致对设备没有访问权限,paddle调用设备在non-root用户下需要video、render用户组,但是实际测试过程中发现ubutun 20.04镜像中默认不存在render用户组,如果需要容器内部新建用户组的话,还需要和宿主机用户组ID保持一致,考虑到不同宿主机ID不一致会导致镜像无法做到一致,目前解决办法采用chown -R ocr:ocr /dev/dri /dev/kfd方式解决(另外一组容器使用torch、tensorflow不存在此问题,初步怀疑生态包paddle和那两种实现不一致导致),此解决方式测试改变宿主机内部容器权限不会影响宿主机设备权限,
2023/6/1
T
tianlh
1楼
whl文件是py3.8,您运行的python环境是3.7,请先确认python版本一致。
2023/5/30
网
网友GMoXGL
回复 @tianlh
确认无误,第一个运行环境是我自己制作的镜像包所使用的依赖包,第二个是使用官方镜像测试发现问题还是存在,官方镜像内py是3.7
2023/5/31
网
网友GMoXGL
回复 @tianlh
补充一下,标题报错信息是我们的应用在非root用户下的报错,使用官方提供的代码在我自己制作容器内和官方的包都会出现警告,识别不到GPU
2023/5/31
没有更多内容了
--
楼主
Level.4
0 帖子
楼主热帖
暂无数据