docker安装

可自行到https://tvm.apache.org/docs/install/docker.html 官网下载安装

环境:

系统: ubuntu22.04系统,

docker版本: 20.10.17

cuda: 11.6

因此在安装时选用了nvidia/cuda:11.6.1-devel-ubuntu20.04这个镜像文件

镜像 环境下载:

docker pull nvidia/cuda:11.6.1-devel-ubuntu20.04

通过sudo docker images查看镜像,并使用如下命令启动镜像:

 sudo docker run -it --shm-size=10g -v /home/ngl/workspace:/home/workspace --runtime=nvidia -e NVIDIA_VISIBLE_DEVICE=0 nvidia/cuda:11.6.1-cudnn8-devel-ubuntu20.04  /bin/bash

mmdet与onnxruntime环境安装

进入docker镜像后,执行apt-get updateapt-get upgrade对系统进行升级

安装pytorch

根据pytorch官网下载pytorch版本

pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu116

安装MMCV

MMCV地址:https://github.com/open-mmlab/mmcv

安装命令:https://github.com/open-mmlab/mmcv

安装MMDetection

git clone https://github.com/open-mmlab/mmdetection.git
cd mmdetection
pip install -v -e .

验证MMDetection安装

下载config文件和checkpoint文件

yolov3_mobilenetv2_320_300e_coco.py and yolov3_mobilenetv2_320_300e_coco_20210719_215349-d18dff72.pth

在mmdetection目录下执行

python demo/image_demo.py demo/demo.jpg yolov3_mobilenetv2_320_300e_coco.py yolov3_mobilenetv2_320_300e_coco_20210719_215349-d18dff72.pth --device cpu --out-file result.jpg

因在docker中执行,图片文件等不方便展示,在与宿主机共享目录中创建生成的目录文件,将结果存入其中

python3 demo/image_demo.py demo/demo.jpg ./configs/yolo/yolov3_mobilenetv2_320_300e_coco.py /home/workspace/Data/CheckpointFile/yolov3_mobilenetv2_320_300e_coco_20210719_215349-d18dff72.pth --device cuda --out-file /home/workspace/results/result.jpg

可在宿主机的/workspace/results目录中查看运行结果:

至此MMdection便安装成功

报错:

  1. ImportError: libGL.so.1: cannot open shared object file: No such file or directory

    缺少GL库文件,因此安装GL库即可
apt install libgl1-mesa-glx
  1. ImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or directory

    解决方法:

    apt-get install libglib2.0-dev

安装ONNX runtime

下载onnxruntime-linux 并暴露出ONNXRUNTIME_DIR,将lib库加入到LD_LIBRARY_PATH

wget https://github.com/microsoft/onnxruntime/releases/download/v1.12.0/onnxruntime-linux-x64-1.12.0.tgz
tar -xzvf onnxruntime-linux-x64-1.12.0.tgz
cd onnxruntime-linux-x64-1.12.0
export ONNXRUNTIME_DIR=$(pwd)
export LD_LIBRARY_PATH=$ONNXRUNTIME_DIR/lib:$LD_LIBRARY_PATH

因为在编译mmcv时,需要用到onnx中的头文件,所以必须要导入这个

pip install onnxruntime-gpu
pip install onnx

验证

import torch
import torch.nn as nn
import numpy as np class Model(nn.Module):
def __init__(self):
super(Model,self).__init__()
self.conv1 = nn.Conv2d(3, 16, kernel_size=3, stride=2, padding=1)
self.conv2 = nn.Conv2d(16, 32, kernel_size=3, stride=2, padding=1)
self.bn1 = nn.BatchNorm2d(16)
self.bn2 = nn.BatchNorm2d(32)
self.relu1 = nn.ReLU(inplace=True)
self.relu2 = nn.ReLU(inplace=True)
def forward(self, x):
x = self.conv1(x)
x = self.bn1(x)
x = self.relu1(x)
x = self.conv2(x)
x = self.bn2(x)
x = self.relu2(x)
return x model=Model()
model.eval() x=torch.randn((1,3,12,12)) torch.onnx.export(model, # 搭建的网络
x, # 输入张量
'model.onnx', # 输出模型名称
input_names=["input"], # 输入命名
output_names=["output"], # 输出命名
dynamic_axes={'input':{0:'batch'}, 'output':{0:'batch'}} # 动态轴
)

最后输出model.onnx即可


TVM源码安装

进入系统,便可根据官网中的操作步骤进行源码安装:

  • 下载源码

    使用--recursive选项,循环克隆git子项目

    git clone --recursive https://github.com/apache/tvm tvm

注:

relax并未合并TVM main,目前文档也相对较少。可以考虑查看https://github.com/tlc-pack/relax/wiki ,或者查阅源码

git clone --recursive https://github.com/mlc-ai/relax.git relax

在进行项目编译之前,需要安装必需的库

sudo apt-get update
sudo apt-get install -y python3 python3-dev python3-setuptools gcc libtinfo-dev zlib1g-dev build-essential cmake libedit-dev libxml2-dev
  • 创建编译目录
mkdir build
cp cmake/config.cmake build

修改config.cmake中的配置选项:

  1. 如需要使用cuda,将set(USE_CUDA OFF) 改成 set(USE_CUDA ON) ,使能CUDA后端,OpenCL/RCOM等都是一样的
  2. 为debug方便,可set(USE_GRAPH_EXECUTOR ON) and set(USE_PROFILER ON) 确保嵌入式图形执行器和调试函数
  3. 因LLVM用于CPU codegen,强烈建议安装LLVM,并修改set(USE_LLVM ON)可使cmake搜索一个可用的LLVM版本

    LLVM安装:

    apt-get install llvm

    使用如下命令测试llvm是否测试成功:

    llvm-config --version
  4. 如果要加入VTA,将其中一行set(USE_VTA_FSIM OFF)改为set(USE_VTA_FSIM ON)

如有其他配置需要,可自行根据官网提示进行配置

  • 编译TVM
cd build
cmake ..
make -j4

最后在build目录中生产libtvm.so和libtvm_runtime.so两个动态库

  • 增加python支持

    ~/.bashrc中加入如下几行:
export TVM_HOME=/home/workspace/tvm/tvm
export PYTHONPATH=$TVM_HOME/python:$TVM_HOME/vta/python:${PYTHONPATH} export VTA_HW_PATH=$TVM_HOME/3rdparty/vta-hw
  • 安装python相关依赖
pip3 install numpy decorator attrs
pip3 install tornado
pip3 install tornado psutil xgboost==1.5.0
pip3 install mypy orderedset antlr4-python3-runtime

注:

踩坑记录:

  1. CMake was unable to find a build program corresponding to "Ninja". CMAKE_MAKE_PROGRAM is not set

    On Ubuntu, I think it's apt-get install ninja-build.

  2. Crttest failed, no rules to make the target “crttest”

    I think this is because you don’t have set(USE_MICRO ON) in your config.cmake. tests/scripts/task_config_build_cpu.sh turns this option on, which is why task_cpp_unittest.sh assumes that that target exists.

    参考链接:https://discuss.tvm.apache.org/t/crttest-failed-no-rules-to-make-the-target-crttest/8450

python倒入自定义模块的方法:

要用import mymodule导入自定义的模块,其必须在python的搜索路径中,一般有三种方法可以采用:

1.将你自定义的模块(.py文件)放置在python的任意搜索路径下(可以在python中输入import syssys.path 查看搜索路径)

2.修改环境变量PYTHONPATH以包含用户自定义模块的路径

  • 临时修改: 在终端输入export PYTHONPATH=/mymodule directory:$PYTHONPATH,利用echo $PYTHONPATH 命令可查看是否将路径添加成功。该方法在当前终端下有效,但若关闭终端后重新打开,则会失效。

  • 彻底修改: 要想使修改始终有效,则需要修改用户或系统的环境变量配置文件。以修改用户的环境变量配置文件.bashrc.profile为例(两个文件均在用户主目录下/home/用户名,.bahsrc包含专用于你的bash shell的bash信息,当登录以及每次打开新的shell时,该文件被读取;.profile包含专用于你的shell信息,当用户登录时,该文件仅仅执行一次,它设置一些环境变量,执行用户的.bashrc文件)。cd到用户主目录下,打开.bashrc或.profile文件,在末尾添加一行export PYTHONPATH=/mymodule directory:$PYTHONPATH,保存退出后,执行source .bashrc 或source .profile命令使修改生效。修改系统环境变量配置文件的过程也类似,只不过相应的文件要到/etc 目录下去找。

  1. 修改python的sys.path变量,在导入自定义模块前,执行以下操作。此方法也只能临时起作用,退出python下次再进来就失效了。
import sys
sys.path.append('mymodule directory')

参考:https://blog.csdn.net/Blateyang/article/details/78753051

此外,该docker镜像中,根据mmdetection中的关于pytorch模型如何导出onnx的guide,安装了mmcv,pytorch-gpu,mmdet,onnxruntime及onnx等程序包

如有需要,可通过以下命令进行拉取,但请注意,本环境cuda版本11.6,不知道在其他平台上会不会有影响,请自行评估

docker pull niuli/tvm_onnx:v2

docker访问X server

参考:服务器中使用Docker容器显示图形界面GUI到本地

在宿主机安装如下
安装xserver
$ sudo apt install x11-xserver-utils
许可所有用户都可访问xserver
xhost +

在创建运行镜像时

sudo docker run -itd --shm-size=10g  --net=host -e DISPLAY=$DISPLAY -p 7789:22 -v /home/ngl/workspace/:/home/workspace --runtime=nvidia -e NVIDIA_VISABLE_DEVICE=0 tvm:v2.3 /bin/bash

其中最重要的是:--net=host -e DISPLAY=$DISPLAY

验证:

使用带有界面功能的时钟软件尝试

在docker容器中:
$ apt-get install xarclock
$ xarclock
应该可以看到xserver端显示器显示时钟界面。

VSCode访问docker容器

在服务容器中配置ssh

  1. 通过一个其他的端口进入容器,这里使用6789端口
 sudo docker run -it --shm-size=10g  -p 6789:22 -v /home/ngl/workspace:/home/workspace --runtime=nvidia -e NVIDIA_VISIBLE_DEVICE=0 nvidia/cuda:11.6.1-cudnn8-devel-ubuntu20.04  /bin/bash

登陆到容器中后下载openssh

2. 下载openssh

apt-get update
apt-get install openssh-server
  1. 设置root密码

    passwd

    会设置两遍相同的密码,之后登陆的时候用到

  2. 修改配置文件

    vim /etc/ssh/sshd_config

    注释掉 PermitRootLogin prohibit-password 这一行

    添加这一行 PermitRootLogin yes

  3. 重启ssh服务

service ssh restart
# 或使用
# /etc/init.d/ssh restart
  1. 本机链接ssh

    ssh -p 6789 root@0.0.0.0

  2. 远程访问服务器docker里正在运行的容器

    ssh -p 6789 root@192.168.x.xx

如报错:ssh: connect to host 0.0.0.0 port 6789: Connection refused

原因:没有开放对应端口

解决方案:

在主机上:sudo iptables -I INPUT -p tcp --dport 6789 -j ACCEPT

  1. 在宿主机上配置vscode

    8.1 安装Remote-SSH插件

使用插件连接远程服务器里的容器

这样即可在本地vscode中使用docker中的环境,但美中不足的是如果想要显示图片等可视化数据,存在一定的限制,目前,我想到的仅是先本地docker保存起来,然后在宿主机中打开查阅

如:

plt.show()后,执行plt.savefig("filename.png")

docker中源码安装onnx / tvm的更多相关文章

  1. Linux中源码安装编译Vim

    Linux中源码安装编译Vim Linux下学习工作少不了编辑器,Vim能使你的工作效率成倍的提高.在Ubuntu上安装vim使用命令直接安装很简单.但有时还是需要自己手动编译安装.例如: vim中的 ...

  2. centos7 中源码安装nginx

    使用nginx有一段时间了,还是有很多东西不懂的,在这里做一下自己学习过程中的一些整理,能使自己得到提升. 1.环境:centos7 1511  最小化安装 2.下载nginx,可以在系统中下载,也可 ...

  3. Centos7中源码安装Nodejs

    Step 1.确认服务器有nodejs编译及依赖相关软件,如果没有可通过运行以下命令安装. [root@BobServerStation local]# yum -y install gcc gcc- ...

  4. Windows 环境下于虚拟环境中源码安装 cx_oracle

    安装前提条件: (1).安装 instantclient-basic-nt (2).安装 instantclient-sdk-nt (3).安装 Microsoft Visual C++ Compil ...

  5. Manjaro中源码安装gcc7.1

    刚刚gcc 7.1也出来了,想在使用熟悉的linux下试试,特记录如下: 准备必要的系统环境:(升级系统到最新,安装必要的工具) pacman -Syyu                        ...

  6. Debian7.7 wheezy 中源码安装emacs24

    我用的是ARM版本,竟然没有最新的emacs 24,很多第三方插件不能用,果断重新编译个1.追加软件源 deb-src http://ftp.cn.debian.org/debian/ wheezy ...

  7. linux中的源码安装

    前两天自己在笔记本上装了CentOs版本的虚拟机,接着要装Python3,是源码安装的挺费劲,个人总结了一些源码安装的经验,今天在这里给大家分享一下. 1. 首先准备环境,安装必要的编译工具gcc g ...

  8. Linux 源码安装 FFmpeg

    加班次数频繁,已经快一年没有写博了.由于此次在项目中使用到了 FFmpeg 来处理音视频,顾记录下在 Linux 系统中源码安装 FFmpeg 以便不时之需. 1. 安装 yasm yasm 是一个汇 ...

  9. Docker源码安装附内网镜像安装演示

    Docker源码安装附内网镜像安装演示 系统版本要求 当前系统版本:CentOS Linux release 7.9.2009 (Core) 内核版本:3.10.0-1160.el7.x86_64 注 ...

  10. mysql-5.5.28源码安装过程中错误总结

    介绍一下关于mysql-5.5.28源码安装过程中几大错误总结,希望此文章对各位同学有所帮助.系统centOS 6.3 mini (没有任何编译环境)预编译环境首先装了众所周知的 cmake(yum ...

随机推荐

  1. 【博客搭建】Hexo使用笔记

    [博客搭建]Hexo 使用笔记 Hexo 是一款前端博客框架,可以自动根据基于 Markdown 的文章生成博客网站代码. 基本概念 项目结构 目录 描述 _config.yml 网站的配置信息 th ...

  2. Kafka - server.properties参数详解

    server.properties #broker的全局唯一编号,不能重复 broker.id=0 #用来监听链接的端口(kafka端口号),producer或consumer将在此端口建立连接 po ...

  3. 【Bug记录】Powershell 无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称 - PowerShell 执行策略

    Powershell 无法将"vue"项识别为 cmdlet.函数.脚本文件或可运行程序的名称 造成该问题主要是 PowerShell 执行策略,不支持执行全局脚本和程序的运行. ...

  4. go语言中iota和左移<< 右移<<

    iota 特殊常量 在go语言中iota比较特殊,是一个被编译器修改的常量,在每一个const关键字出现时被重置为0,然后在下一个const出现之前,每出现一次iota,其所代表的数字就会自动加1 p ...

  5. Bringing machine 'default' up with 'virtualbox' provider... Your VM has become "inaccessible." Unfortunately, this is a critical error with VirtualBox that Vagrant can not cleanly recover from.

    启动虚拟机报错 vagrant up Bringing machine 'default' up with 'virtualbox' provider...Your VM has become &qu ...

  6. 基础指令:三剑客之sed、三剑客之awk详解

    目录 4.9 三剑客之sed(查找.替换.删除.插入) 作用: 语法格式: 4.9.1 sed指定行输出 [行数]p 4.9.2 sed模糊搜索 /[字符串]/p 4.9.3 按照区间进行过滤查找 [ ...

  7. [WPF] 在RichTextBox中输出Microsoft.Extension.Logging库的日志消息

    背景 微软的日志库一般是输出到控制台的,但是在WPF中并不能直接使用控制台,需要AllocConsole. 但是这种做法个人觉得不太安全(一关闭控制台整个程序就退出了?).这时候就需要一个更加友好的方 ...

  8. 再谈MCP协议,看看 MCP 是如何重塑 AI 与外部数据源互动的能力?

    Techscribe Central 缩略图由 Techscribe Central 制作和编辑 MCP!!是不是一头雾水?我当时也是这个反应.我也是最近才听说它开始引发关注,然后我发现大多数人根本不 ...

  9. 记录一个命令 可以在linux很方便的安装一些软件

    小鱼的一键安装系列 wget http://fishros.com/install -O fishros && . fishros 一键安装:ROS(支持ROS和ROS2,树莓派Jet ...

  10. 渗透技巧——CDN绕过

    渗透技巧--CDN绕过 一.前言: 在渗透站点的时候常常会遇见站点有CDN加速情况,就无法准确的找到目标IP.首先是检测如何发现有无CDN,然后才能说绕过的问题. 二.检测有无CDN: 首先有以下几种 ...