当前位置:   article > 正文

[Rock Pi] (二) RK3588 rknn宿主机端配置之docker开发环境部署_docker rknn

docker rknn

参考

瑞芯微rknn-tookit2

开发环境介绍

宿主机 HostPC: 装有ubuntu22.04(其它亦可参考)
开发板:rock 5a with rk3588s 芯片

宿主机安装Docker

Docker具有隔离开发环境的作用,为了方便开发环境的切换,避免环境配置时破坏主机稳定的环境,我们选择使用docker来进行开发工作,这样避免了同时开发两个或者多个项目时环境的混乱。
关于Docker的具体原理及用法本文不做具体介绍,可以想象成windows上安装的VMware等虚拟机软件,上面运行对应系统的镜像。只不过操作更加便捷,更轻量化,更加适合命令行操作。具体可以参考:Docker.
需要注意的是关于容器的概念,即系统运行的基本单位。

安装Docker

sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
  • 1

状态查看

使用以下命令来查看Docker的状态,如果执行结果如下,则证明Docker服务正常运行:

dengml@dengml-SER:/data/ubuntu/rockpi$ systemctl status docker
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2023-07-27 21:26:09 CST; 1 week 6 days ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 43420 (dockerd)
      Tasks: 23
     Memory: 93.6M
        CPU: 3min 27.381s
     CGroup: /system.slice/docker.service
             └─43420 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

开机自启设置

如果未成功运行,可以执行以下命令打开,和设置开机自动运行

sudo systemctl start dockersudo systemctl restart docker  #打开docker

sudo systemctl enable docker #设置开机自动启动Docker
  • 1
  • 2
  • 3
  • 4
  • 5

运行docker子系统

1. 拉取系统镜像(此处我们拉取的是ubuntu20.04版本镜像)

sudo docker pull ubuntu:20.04
# 查看本地镜像
$ sudo docker images -a
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        20.04     14be0685b768   7 weeks ago    72.8MB
hello-world   latest    9c7a54a9a43c   3 months ago   13.3kB
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2. 以ubuntu20.04镜像启动一个容器,可以想象成创建一个虚拟机:

 sudo docker run -it --name rknn -v /data:/data ubuntu:20.04 /bin/bash 
  • 1

其中”–name rknn“表示该容器命名为rknn,”-v /data:/data“的作用是将物理机的/data目录挂载到docker虚拟容器的/data目录上,实现两机器文件系统的共享(正在运行的docker添加共享目录可以参考: docker对已经启动的容器添加目录映射(挂载目录))。”-it“参数表示分配并驻留在容器终端。 ”ubuntu:20.04“为该容器用到的系统镜像,”/bin/bash“为系统用到的shell解释器。

3. docker容器的退出与进入

执行成功后将进入该docker容器的终端。可执行exit命令退出容器,回到物理机系统。
在物理机中执行 sudo docker ps命令查看正在运行的容器。

$ sudo docker ps
CONTAINER ID   IMAGE          COMMAND       CREATED       STATUS       PORTS     NAMES
612c918d5027   ubuntu:20.04   "/bin/bash"   3 weeks ago   Up 3 weeks             rknn
  • 1
  • 2
  • 3

如果有在未运行状态的容器,可以通过sudo docker ps -a命令查看。
再次进入该docker容器的时候不需要重新执行docker run 命令,而可以采用 docker exec 命令进入

sudo docker exec -it 612c918d5027 /bin/bash
  • 1

其中”612c918d5027 “为已存在的容器的id。(如果有在未运行状态的容器,需要先执行”docker start <容器的id>“)
当然可以指定用户及对应的工作目录,因为我们还没创建用户及对应家目录,放在后面介绍。

配置docker

- 安装权限管理工具
  apt install sudo 
- 添加普通用户并指定其家目录及对应的默认解释器
  adduser --home /home/dengml --shell /bin/bash  dengml
- 修改用户密码
  passwd dengml
- 安装文本编辑工具vim
  apt install vim
- 编辑/etc/sudoers文件
  chmod 777 /etc/sudoers #添加编辑权限
  vim /etc/sudoers #在”root  ALL=(ALL:ALL) ALL“下添加”dengml  ALL=(ALL:ALL) ALL“
  chmod u-w /etc/sudoers // 去除可写权限
- 登陆到dengml用户
  su dengml
- 安装自动补全工具
  apt-get install -y bash-completion
  apt update
  source /usr/share/bash-completion/completions/*
- 安装网络工具
  apt install iputils-ping
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

此时我们从物理机进入docker容器的方法可以指定用户名及对应的家目录,如下

dengml@dengml-SER:~$ sudo docker exec -it -u dengml -w /home/dengml 612c918d5027 /bin/bash
[sudo] dengml 的密码:
dengml@612c918d5027:~$
  • 1
  • 2
  • 3

搭建rknn开发环境

配置github

github上拉代码(在docker上进行)

首先我们使用ssh的方式在GitHub获取代码(也可使用http方式,不过更慢?),第一步需要配置ssh-key。

  • 配置ssh-key
    本机执行以下命令生成并获取ssh key。
dengml@612c918d5027:~$ ssh-keygen -t rsa -C "dengml1996@163.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/dengml/.ssh/id_rsa):
Created directory '/home/dengml/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/dengml/.ssh/id_rsa
Your public key has been saved in /home/dengml/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:OW6GGqaLjp+zD+R4hq2tKXnocEJIktnk/tNEXgNdLFg dengml1996@163.com
The key's randomart image is:
+---[RSA 3072]----+
|  .   .+Eo.      |
| *    ..o .      |
|+.o   . o.       |
|+.   o . o       |
|..o   o S        |
|.* . o o .       |
|=oB = o +        |
|*Xo= + o         |
|X*B=o            |
+----[SHA256]-----+
dengml@612c918d5027:~$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAA***************xP0YX0= dengml1996@163.com
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 将以上最终得到的key粘贴到github:
    打开并登录”github.com“ 网站,点击右上角自己的头像。点击setting按钮如下
    setting of github account
    之后点击"SSH and GPG keys" 和 ”New SSH Key“ 按钮。
    add ssh key to github
    在弹出的框里填入标题及刚才得到的key,最后点击”Add New Key“按钮
    add new ssh key
    最终添加成功如下
    add new key result

rknn开发环境配置

1. rknn仓库代码获取

配置完成ssh-key后就可以拉代码,通过以下命令获取瑞芯微rknn的开发仓库

dengml@612c918d5027:/data/ubuntu/rockpi$ git clone git@github.com:rockchip-linux/rknn-toolkit2.git
Cloning into 'rknn-toolkit2'...
The authenticity of host 'github.com (20.205.243.166)' can't be established.
ECDSA key fingerprint is SHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'github.com,20.205.243.166' (ECDSA) to the list of known hosts.
remote: Enumerating objects: 475, done.
remote: Counting objects: 100% (67/67), done.
remote: Compressing objects: 100% (57/57), done.
remote: Total 475 (delta 6), reused 66 (delta 6), pack-reused 408
Receiving objects: 100% (475/475), 630.23 MiB | 4.97 MiB/s, done.
Resolving deltas: 100% (132/132), done.
Updating files: 100% (140/140), done.
dengml@612c918d5027:/data/ubuntu/rockpi$ ls
rknn-toolkit2

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

2. docker容器安装基本的开发所需要的包

sudo apt install virtualenv
sudo apt-get install python3 python3-dev python3-pip
sudo apt-get install libxslt1-dev zlib1g zlib1g-de
sudo apt-get install libxslt1-dev zlib1g zlib1g-dev libglib2.0-0
sudo apt-get install libsm6 libgl1-mesa-glx libprotobuf-dev gcc
  • 1
  • 2
  • 3
  • 4
  • 5

其中virtualenv是用来隔绝python环境,使一个系统内可以安装多个python环境,切换时候也仅仅需要执行 source <对应python环境名称>/bin/activate命令即可,非常方便,可以仅作了解,边用边学。

3. 安装所需的python环境,

因为官方文档在ubuntu20.04系统上推荐使用python3.8的开发环境,为提高开发效率,避免重复造轮子,我们安装python3.8的开发环境。

创建python3的环境名字为”venv“的python环境

  dengml@612c918d5027:/data/ubuntu/rockpi/rknn-toolkit2$ virtualenv -p /usr/bin/python3 venv
  created virtual environment CPython3.8.10.final.0-64 in 68ms
  creator CPython3Posix(dest=/data/ubuntu/rockpi/rknn-toolkit2/dengml, clear=False, global=False)
  seeder FromAppData(download=False, pip=latest, setuptools=latest, wheel=latest, pkg_resources=latest, via=copy, app_data_dir=/home/dengml/.local/share/virtualenv/seed-app-data/v1.0.1.debian.1)
  activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
  • 1
  • 2
  • 3
  • 4
  • 5

创建完成后会在目录下形成一个名字为”venv“的目录
venv
切换到刚创建的python环境

  dengml@612c918d5027:/data/ubuntu/rockpi/rknn-toolkit2$ source venv/bin/activate
  (venv) dengml@612c918d5027:/data/ubuntu/rockpi/rknn-toolkit2$
  • 1
  • 2

此时前面会有(venv)的前缀,表示当前所处的python环境。

根据官方介绍,安装python3.8 所需要的依赖。

(venv) dengml@612c918d5027:/data/ubuntu/rockpi/rknn-toolkit2$ pip3 install -r doc/requirements_cp38-1.5.0.txt
  • 1

安装过程可能会有报错,如下:

ERROR: tensorflow 2.6.2 has requirement six~=1.15.0, but you'll have six 1.16.0 which is incompatible.
ERROR: tensorflow 2.6.2 has requirement typing-extensions~=3.7.4, but you'll have typing-extensions 4.7.1 which is incompatible.
  • 1
  • 2

大概原因是因为版本部匹配,当前环境里面的版本过高,不满足官方文档中对于该软件包版本的要求。解决方法可以先卸载掉对应的pip包,并安装满足版本要求的对应的包如下

pip3 uninstall typing-extensions
pip3 install -v typing-extensions==3.7.4
  • 1
  • 2

如果遇到pip因网络连接安装失败或者比较慢的情况,大概因为pip源不在国内,在pip安装后面添加 -i 参数即可即:

pip3 install -v typing-extensions==3.7.4  -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 1

最终安装好rockchip提供的对应python3.8的瑞芯微的rknn官方开发包

pip3 install ../../../packages/rknn_toolkit2-1.5.0+1fa95b5c-cp38-cp38-linux_x86_64.whl
  • 1

环境测试

(venv) dengml@612c918d5027:/data/ubuntu/rockpi/rknn-toolkit2/examples/onnx/yolov5$ ls
bus.jpg  dataset.txt  test.py  yolov5s.onnx
(venv) dengml@612c918d5027:/data/ubuntu/rockpi/rknn-toolkit2$ cd examples/onnx/yolov5/
(venv) dengml@612c918d5027:/data/ubuntu/rockpi/rknn-toolkit2/examples/onnx/yolov5$ python3 test.py
......
......
......
(venv) dengml@612c918d5027:/data/ubuntu/rockpi/rknn-toolkit2/examples/onnx/yolov5$ ls
bus.jpg                    check3_fuse_ops.onnx  onnx_yolov5_0.npy  onnx_yolov5_2.npy  test.py       yolov5s.rknn
check0_base_optimize.onnx  dataset.txt           onnx_yolov5_1.npy  result.jpg         yolov5s.onnx

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

打开最终生成的result.jpg
final result
接下来,将模型移植到开发板上运行。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/308275
推荐阅读
相关标签
  

闽ICP备14008679号