docker环境配置之bevdet配置
python -m pip install --upgrade --no-deps --force-reinstall numpy-quaternion# 一、nvidia-dokcker配置
环境配置
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
nvidia-dokcker安装
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
重启docker服务
sudo systemctl restart docker
测试,如果测试出现了error,极有可能是新的cuda与系统内核版本不匹配了,可以尝试指定cuda版本信息即可。
docker run --rm --gpus all nvidia/cuda:11.0.3-base nvidia-smi
二、docker基础命令
1、查看已有镜像 ; 查看所有运行容器
docker images ; docker ps -a
2、创建容器,创建容器时一定用nvidia-docker,不然不能调GPU
nvidia-docker run --privileged=true --name=bevdet -it -v /home/sen/project_hao/bevdet:/root/workspace/bevdet -v /home/sen/dataset/cdc:/root/workspace//dataset -p 10022:22 --gpus all --ipc=host 65bb7d38a66b
# 参数说明
--name #容器名字:用来区分容器,一个镜像能建立多不同容器
-it #使用交互式运行:进入容器查看内容
-v #挂载卷
#-v /home/tuolong/project/aiyolov7:/yolov7 宿主机yolov7代码地址:容器内yolov7地址
#-v /home/tuolong/project/dataset_aiyolo:/dataset 主机数据集地址:容器数据集地址
-p #宿主机端口:容器内部端口
--gpus #要添加到容器中的gpu设备(all用于传递所有gpu)
--ipc #ipc=host表示主机与docker共享所有内存空间
#65bb7d38a66b 镜像id
3、查看当前目录存在文件:ls ; 查看当前文件路径:pwd ;找文件:whereis cudnn
4、删除容器 ;删除镜像
docker rm [容器id] ; docker rmi [镜像id]
先删除容器,才能删除镜像
5、启动容器,关闭容器
docker start [容器id] ; docker stop [容器id]
6、进入docker容器 ; 退出容器
docker exec -it [容器id]/容器名 /bin/bash ; exit
7、拉取镜像
docker pull 镜像名:Tag
8、打标签
docker tag 镜像名称:tag 自定义的标签
eg:docker tag ubuntu:latest myubuntu:1.0.0
9、dockerfile安装
在dockerfile文件夹下执行以下命令,标签不能有大写字母
docker build . -t bedet:1.0.0
10、复制本地文件到容器
docker cp 本地目录 容器id:/容器目录
docker cp /home/sen/project_hao/bevdet dddb6ef4350c:/root/workspace
拉docker的cuda环境
base:基于CUDA,包含最精简的依赖,用于部署预编译的CUDA应用,需要手工安装所需的其他依赖。runtime: 基于base, 添加了CUDA toolkit共享的库
devel: 基于Fruntime, 添加了编译工具链,头文件,静态库。用于从源码编译CUDA应用。
三、在容器中配置ssh
root@dddb6ef4350c:~# apt update
apt install -y openssh-server
3.1、 在root@dddb6ef4350c:依次输入
root@dddb6ef4350c:~# mkdir /var/run/sshd
root@dddb6ef4350c:~# echo 'root:123' | chpasswd
root@dddb6ef4350c:~# sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
root@dddb6ef4350c:~# sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
root@dddb6ef4350c:~# echo "export VISIBLE=now" >> /etc/profile
3.2、重启ssh
root@dddb6ef4350c:~# service ssh restart
3.3、设置root密码,后续登录会用到
root@dddb6ef4350c:/# passwd #设置145494
3.4、修改配置文件
root@dddb6ef4350c:/# vim /etc/ssh/sshd_config
#PermitRootLogin prohibit-password
PermitRootLogin yes
UsePAM no # 原先为 yes
在普通模式下,可以使用“O”命令进行换行。
注释这一行PermitRootLogin prohibit-password
添加一行PermitRootLogin yes
UsePAM yes 修改为 no #禁用PAM
3.5、重启ssh
root@dddb6ef4350c:~# service ssh restart
3.6、本机连接ssh,新开一个终端
ssh root@127.0.0.1 -p 10022
四、解决方法
查询docker内主机ip
root@dddb6ef4350c:~/workspace# hostname -i
172.17.0.2
测试ssh root 用户登录
ssh root@[主机ip] -p 22 #注意这里为docker容器内的主机ip 172.17.0.2
![在这里插入图片描述](https://img-blog.csdnimg.cn/ed2a1e0489ad4e8bb9dc1f8373e1fdc2.png)
## 解决方案:
查看/etc/ssh/sshd_config配置,将服务端PermitRootLogin 后缀改为yes.允许远程root登录
进入容器
sen@sen:~$ docker exec -it dddb6ef4350c /bin/bash
修改 sshd_config 配置
root@dddb6ef4350c:/# vim /etc/ssh/sshd_config
将PermitRootLogin 参数改为PermitRootLogin yes
按esc键,:wq 退出
重启ssh
root@dddb6ef4350c:/# service ssh restart
尝试再次使用root登录服务器
四、遇到报错
1
pip install numba==0.54.0 -i https://mirrors.aliyun.com/pypi/simple
2
python -m pip install --upgrade --no-deps --force-reinstall numpy-quaternion
3
转engine文件报错
python export_engine.py --config /root/workspace/bevdet/BEVDet-export/tools/hao/bevdet.yaml --img_encoder_onnx /root/workspace/project_hao/bevdet/BEVDet-export/tools/hao/img_stage_lt_d.onnx --bev_encoder_onnx /root/workspace/project_hao/bevdet/BEVDet-export/tools/hao/bev_stage_lt_d.onnx --postfix="_lt_d_fp16" --fp16=True
用本地环境cuda11.7,cudnn8.6.0,bev_inchannels = 80
4
部署nvidia开发板时遇到libmmdeploy_tensorrt_ops.so 找不到
agx@ubuntu:~/bevdet/mmdeploy/mmdeploy/lib$ file libmmdeploy_onnxruntime_ops.so
libmmdeploy_onnxruntime_ops.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=3fbeb794291e95712bb9c07145a347ca14a2e7db, not stripped
发现找到的 libmmdeploy_onnxruntime_ops.so 是x86架构的
改成arrm架构的libmmdeploy_onnxruntime_ops.so动态链接库
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!