docker环境配置之bevdet配置

2023-12-14 20:02:28

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动态链接库

文章来源:https://blog.csdn.net/qq_45990036/article/details/133778526
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。