来来回回的安装服务器,是时间写个pipline了,在这里主要记录下生产环境下的一台基于深度学习的linux服务器,需要搭建那些服务
文章目录
前言
来来回回的安装服务器,是时间写个pipline了
基本情况:
- date 查看时间日期函数是对的
- 运维帮忙装了显卡驱动 nvidia-smi -l 是ok的
- yum命令有但是源还是centos7自带的
- ping命令和curl命令有,能ping通外网,telnet,wget,tree,netstat,htop,git都没有
[root@localhost ~]# nvidia-smi -l 1
Fri Dec 2 09:42:44 2022
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.63.01 Driver Version: 470.63.01 CUDA Version: 11.4 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... Off | 00000000:0B:00.0 Off | N/A |
| 33% 35C P0 1W / 350W | 0MiB / 12053MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
[root@localhost ~]# date
2022年 12月 02日 星期五 09:46:22 CST
[root@localhost ~]# which yum
/usr/bin/yum
[root@localhost ~]# which ping
/usr/bin/ping
[root@localhost ~]# which wget
/usr/bin/which: no wget in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
[root@localhost ~]# which curl
[root@localhost ~]# cat /etc/yum.repos.d/CentOS-Base.repo
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[root@localhost ~]# which telnet
/usr/bin/which: no telnet in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
[root@localhost ~]# which tree
/usr/bin/which: no tree in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
[root@localhost ~]# netstat
-bash: netstat: 未找到命令
凡事讲究个策略,从切换yum源开始
一、开工
1.1 切换yum源
#ping一下,验证是否是通的
ping mirrors.aliyun.com
PING mirrors.aliyun.com.w.alikunlun.com (59.47.74.238) 56(84) bytes of data.
# 配置yum源
# 删除旧的yum源
rm -rf /etc/yum.repos.d/*
# 不放心也可以bak
mv CentOS-Base.repo CentOS-Base.repo.bak
# 下载阿里云Centos-7.repo文件
# wget命令下载: wget [options] [url]
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# curl命令下载: curl [options] [url] 我的系统目前只有curl命令,选择这种
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 清除缓存以及生成阿里云镜像缓存
yum clean all
yum makecache
也可以脚本一键搞定
创建shell脚本文件
vim /opt/aliyun_yum.sh
插入命令
# 删除原yum源
rm -rf /etc/yum.repos.d/*
# 下载阿里云Centos-7.repo文件
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 清除yum缓存
yum clean all
# 缓存阿里云镜像
yum makecache
# 赋予脚本可执行的权限
chmod +x /opt/aliyun_yum.sh
# 执行脚本
sh /opt/aliyun_yum.s
配置好了yum源,把需要的插件安装上吧,并创建software目录,用来安装自定义的插件
yum install lrzsz wget net-tools telnet tree htop git -y
# 在家目录下创建
make ~/software
1.2 minicoda安装
mincoda的版本:https://docs.conda.io/en/latest/miniconda.html
目前conda的默认版本 base环境是python3.9, 若你习惯python3.8 可以在这里自定义安装:
我就用的最新的,右键另存为:
https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
wget -c https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
# 执行安装
sh Miniconda3-latest-Linux-x86_64.sh
# 一路 enter 和 yes
重新打开一个shell,bash环境已经来了,装的是3.9.12
接下来,切换conda源和pip源
vim ~/.condarc 放入这些,
若没有vim命令,yum install vim -y
channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
ssl_verify: true
show_channel_urls: true
切换pip源,一键搞定
```bash
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
阿里源 .condarc
channels:
- https://mirrors.aliyun.com/pypi/simple/
- defaults
show_channel_urls: true
allow_other_channels: false
阿里源 pip
vim ~/.pip/pip.conf
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host = mirrors.aliyun.com
安装pytorch
官网在这里 https://pytorch.org/,旧版本在这里:
因为我的显卡驱动是这个:NVIDIA-SMI 470.63.01 Driver Version: 470.63.01 CUDA Version: 11.4
他的意思是最高支持到cuda version 11.4,所以我理解最高适配11.4的,进入Previous versions of PyTorch
麻蛋, NOTE: PyTorch LTS has been deprecated. For more information, see this blog.太恶心了,说好的1.82是LTS呢。。。。
选一个比较新的
conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=11.3 -c pytorch
也可以选指定版本比如pytorch 1.8 cuda 11.1的
安装完成后验证:
(base) [root@localhost ~]# python
Python 3.9.12 (main, Apr 5 2022, 06:56:58)
[GCC 7.5.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.__version__
'1.12.1'
>>> torch.cuda.is_available()
True
>>> a = torch.tensor(1.0) # 正常则静默
>>> a.cuda()
tensor(1., device='cuda:0')
以上命令也可以在test.py 中完成
import torch
# 若正常则静默
a = torch.tensor(1.)
# 若正常则静默
print(a.cuda())
# 若正常则返回 tensor(1., device='cuda:0')
from torch.backends import cudnn
# 若正常则静默
print(cudnn.is_available())
# 若正常则返回 True
print(cudnn.is_acceptable(a.cuda()))
# 若正常则返回 True
1.3 docker安装
另见文章 <<Centos7安装Docker指引详细步骤>> ,不想看的来个一键安装,全部复制到shell执行即可
# 删除旧的
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 需要安装包
sudo yum install -y yum-utils
# 设置阿里镜像仓库
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装docker
sudo yum install docker-ce docker-ce-cli containerd.io -y
# 启动docker
sudo systemctl start docker
# 查看版本
docker info
# centos设置docker开机自启
systemctl enable docker.service
安装完成后查看是否服务起来了:
(base) [root@localhost ~]# ps -ef | grep docker
root 28521 1 0 10:46 ? 00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root 31106 16630 0 10:48 pts/1 00:00:00 grep --color=auto docker
1.4 git相关
1.安装git
yum install git -y
2.生成gen key
ssh-keygen -t rsa -C "你的邮箱地址"
## 一直回车
cat ~/.ssh/id_rsa.pub
## 把结果放到git settings/ssh keys上
3.git clone 你的仓库代码
mkdir ~/workplace && cd ~/workplace && git clone git@xxxx:algorithmgroup/zjk_city_manager/road_water_yolov5-7.0.git
1.5 安装ftp, (步骤最多,最麻烦)
查看是否已经安装了vsftpd,新机器肯定没安装啊
# 如果没有返回任何结果,表示没有安装;如果返回文件包名,这表示已经安装了该服务;
[root@centos7 ~]# rpm -qa|grep vsftpd
vsftpd-3.0.2-29.el7_9.x86_64 # 代表已安装
[root@centos7 ~]# vsftpd -version
vsftpd: version 3.0.2 # 代表已安装
[root@centos7 ~]# rpm -e vsftpd # 卸载vsftpd
# 再次检查
[root@centos7 ~]# rpm -qa|grep vsftpd
[root@centos7 ~]# vsftpd -version
bash: vsftpd: 未找到命令...
开始安装vsftpd
# 安装ftp服务器
yum install -y vsftpd
# 安装ftp客户端,客户端也可以不安装
yum install -y ftp lftp
# 设置为开机自动启动服务
systemctl enable vsftpd.service
# ftp服务器的服务名是vsftpd,相关的操作如下:
systenctl start vsftpd.service
systemctl stop vsftpd.service # 停止服务
systemctl restart vsftpd.service # 重启服务
systemctl status vsftpd.service # 查看服务状态
systemctl enable vsftpd.service # 设置开机自启动vsftpd服务
systemctl disable vsftpd.service # 禁用开机自启动vsftpd服务
# 也可以这样启动&关闭:
systemctl start vsftpd
systemctl stop vsftpd
# 新建用户和FTP目录
ftpuser是你为该ftp服务创建的用户名,/data/ftp/ftpuser为ftp服务器访问路径
# 新建ftp目录并授权,ftp文件上传就落入了这个目录中
# 创建文件目录
mkdir -p /data/ftp/ftpuser
# 为该目录配置权限
chmod -R 755 /data/ftp/ftpuser
如果我们直接使用useradd -d ftpuser,则新建的用户是可以登录系统的,这样会给FTP服务器带来安全隐患
因此我们为了不让FTP用户登录系统,就必须为FTP用户统一创建一个不能登录系统的shell,这一行的命令只运行一次即可,后面新建用户就不需要执行了
echo /usr/bin/nologin>>/etc/shells
新建ftp组及用户
# 新建用户组ftp
groupadd ftp
# 指定用户主目录:/data/ftp/ftpuser -M
# 指定用户的shell: -s /usr/bin/nologin
# 新建用户ftpuser,并且设置不支持ssh系统登录,只能登录ftp服务器
# -g 用户组; -d 指定家目录; -s 不能登陆系统; -M 不创建家目录
useradd -g ftp -d /data/ftp/ftpuser -M -s /usr/bin/nologin ftpuser
# 如果要恢复ftpuser用户的ssh登录(可登入CentOS7系统),执行下面的语句即可
usermod -s /bin/bash ftpuser
设置密码 & 新建ftp用户可写目录
# echo "新密码" | passwd --stdin 用户名
echo "ftppassword" | passwd --stdin ftpuser
# 由于/data/ftp/ftpuser是root用户创建的,其它用户都没有写的权限
# 所以要在该目录下新建一个目录用于文件的上传下载
mkdir -p /data/ftp/ftpuser/upload
chown ftpuser:ftp /data/ftp/ftpuser/upload
chmod 755 /data/ftp/ftpuser/upload
总结一下step5到目前的前置操作:
1.安装ftp服务端,客户端,并启动ftp服务端
2.创建ftp用户,此用户不能登陆服务器,只能用于ftp上传(局域网内也可以不做nologin限制),用户名:ftpuser 密码:ftppassword 我用的是123456, ,创建上传目录:/data/ftp/ftpuser/upload
-------------------------------------------------------------------------------------------------------------------------
配置ftp服务器,终于可以配置ftp服务器了
编辑配置文件,盲猜需要配置项目有:
1.谁能上传(哪个用户)?
2.ftp允许访问的目录是那些(别被ftp用户乱搞了)?
3.什么协议上传
4.上传文件后,给文件的权限是什么?
5.用户上传和下载的目录设置,端口配置等等
# 防止后期配置文件出错后无法还原
(base) [root@localhost workplace]# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.backup
(base) [root@localhost workplace]# cd /etc/vsftpd/
(base) [root@localhost vsftpd]# ll
总用量 28
-rw-------. 1 root root 125 6月 10 2021 ftpusers
-rw-------. 1 root root 361 6月 10 2021 user_list
-rw-------. 1 root root 5116 6月 10 2021 vsftpd.conf
-rw-------. 1 root root 5116 12月 2 11:41 vsftpd.conf.backup
-rwxr--r--. 1 root root 338 6月 10 2021 vsftpd_conf_migrate.sh
编辑配置 vim /etc/vsftpd/vsftpd.conf,也可以自己跟着改,没多少行。
打开vsftpd.conf文件,全选删除(Esc+gg+dG)文件内容,然后用下面的配置进行替换文件
# 是否开启匿名用户,匿名都不安全,默认NO
anonymous_enable=NO
# 允许本机账号登录FTP
# 这个设定值必须要为YES时,在/etc/passwd内的账号才能以实体用户的方式登入我们的vsftpd主机
local_enable=YES
# 允许账号都有写操作
write_enable=YES
# 本地用户创建文件或目录的掩码
# 意思是指:文件目录权限:777-022=755,文件权限:666-022=644
local_umask=022
# 进入某个目录的时候,是否在客户端提示一下
dirmessage_enable=YES
# 当设定为YES时,使用者上传与下载日志都会被记录起来
xferlog_enable=YES
# 日志成为std格式
xferlog_std_format=YES
# 上传与下载日志存放路径
xferlog_file=/var/log/xferlog
# 开放port模式的20端口的连接
connect_from_port_20=YES
# 关于系统安全的设定值:
# ascii_download_enable=YES(NO)
# 如果设定为YES,那么client就可以使用ASCII格式下载档案
# 一般来说,由于启动了这个设定项目可能会导致DoS的攻击,因此预设是NO
# ascii_upload_enable=YES(NO)
# 与上一个设定类似的,只是这个设定针对上传而言,预设是NO
ascii_upload_enable=NO
ascii_download_enable=NO
# 通过搭配能实现以下几种效果:
# ①当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd/chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录
# ②当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd/chroot_list文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录
# ③当chroot_list_enable=NO,chroot_local_user=YES时,所有的用户均不能切换到其他目录
# ④当chroot_list_enable=NO,chroot_local_user=NO时,所有的用户均可以切换到其他目录
# 限制用户只能在自己的目录活动
chroot_local_user=YES
chroot_list_enable=NO
chroot_list_file=/etc/vsftpd/chroot_list
# 可以更改ftp的端口号,使用默认值21
# listen_port=60021
# 监听ipv4端口,开了这个就说明vsftpd可以独立运行,不用依赖其他服务
listen=NO
# 监听ipv6端口
listen_ipv6=YES
# 打开主动模式
port_enable=YES
# 启动被动式联机(passivemode)
pasv_enable=YES
# 被动模式端口范围:注意:linux客户端默认使用被动模式,windows 客户端默认使用主动模式。在ftp客户端中执行"passive"来切换数据通道的模式。也可以使用"ftp -A ip"直接使用主动模式。主动模式、被动模式是有客户端来指定的
# 上面两个是与passive mode使用的port number有关,如果您想要使用64000到65000这1000个port来进行被动式资料的连接,可以这样设定
# 这两项定义了可以同时执行下载链接的数量
# 被动模式起始端口,0为随机分配
pasv_min_port=64000
# 被动模式结束端口,0为随机分配
pasv_max_port=65000
# 文件末尾添加
# 这个是pam模块的名称,我们放置在/etc/pam.d/vsftpd,认证用
pam_service_name=vsftpd
# 使用允许登录的名单,在/etc/vsftpd/user_list文件中添加新建的用户ftpuser
userlist_enable=YES
# 限制允许登录的名单,前提是userlist_enable=YES,其实这里有点怪,禁止访问名单在/etc/vsftpd/ftpusers
userlist_deny=NO
# 允许限制在自己的目录活动的用户拥有写权限
# 不添加下面这个会报错:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
allow_writeable_chroot=YES
# 当然我们都习惯支持TCP Wrappers的啦
# Tcp wrappers : Transmission Control Protocol (TCP) Wrappers 为由 inetd 生成的服务提供了增强的安全性
tcp_wrappers=YES
# FTP访问目录
local_root=/data/ftp/ftpuser
vim /etc/vsftpd/user_list
将新建用户ftpuser添加到/etc/vsftpd/user_list文件末尾
注意:
这个是允许登录ftp的名单,一行一个用户,不能把多个写到一行
修改用户切换目录的权限
用户切换目录的规则设定在/etc/vsftpd/vsftpd.conf文件中,如果有用户有权限切换目录,则在/etc/vsftpd/chroot_list文件中添加即可(一行一个用户)
# 在chroot_list中添加新建用户ftpuser
# 第一步:打开文件
vim /etc/vsftpd/chroot_list
# 第二步:添加ftpuser用户
ftpuser
# 第三步:保存文件并退出
一个错误:
重启ftp服务出现报错:
原因在这里:
解决指引:
https://monica.blog.csdn.net/article/details/53215724
是因为windows的编辑莫名其妙加了特殊字符,这样解决:
启动成功,验证ftp上传
到这里正常情况已经可以了,但我的不行,现象是:
server端服务已经开启,
(base) [root@localhost vsftpd]# getenforce
Enforcing
(base) [root@localhost vsftpd]# vim vsftpd.conf
(base) [root@localhost vsftpd]# netstat -ntpl | grep 21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 25941/vsftpd
但客户端telnet 无法通信
C:\Users\jianming_ge>telnet 172.18.42.200 21
正在连接172.18.42.200...无法打开到主机的连接。 在端口 21: 连接失败
检查一下防火墙:
systemctl status firewalld
尼玛防火墙开着呢,关闭后,telnet通了
systemctl stop firewalld
但是用winscp验证报错:用WINSCP,链接时,报错: 复制文件到远端时错误.
ref:https://blog.csdn.net/chen3888015/article/details/79739543
应该是某个目录权限没配对,你若也遇到这个问题,
可以 方法1:执行以下几个命令:
setsebool -P tftp_home_dir on
setsebool allow_ftpd_full_access 1
setsebool allow_ftpd_use_cifs 1
setsebool allow_ftpd_use_nfs 1
setsebool httpd_enable_ftp_server 1
set httpd_can_connect_ftp 1
方法2:
把这个vsftp.conf 替换即可(我若直接把这个文件在前面给出,就不会遇到这个问题了,嘿嘿)
# 是否开启匿名用户,匿名都不安全,默认NO
anonymous_enable=NO
# 允许本机账号登录FTP
# 这个设定值必须要为YES时,在/etc/passwd内的账号才能以实体用户的方式登入我们的vsftpd主机
local_enable=YES
# 允许账号都有写操作
write_enable=YES
# 本地用户创建文件或目录的掩码
# 意思是指:文件目录权限:777-022=755,文件权限:666-022=644
local_umask=022
# 进入某个目录的时候,是否在客户端提示一下
dirmessage_enable=YES
# 当设定为YES时,使用者上传与下载日志都会被记录起来
xferlog_enable=YES
# 日志成为std格式
xferlog_std_format=YES
# 上传与下载日志存放路径
xferlog_file=/var/log/xferlog
# 开放port模式的20端口的连接
connect_from_port_20=YES
# 关于系统安全的设定值:
# ascii_download_enable=YES(NO)
# 如果设定为YES,那么client就可以使用ASCII格式下载档案
# 一般来说,由于启动了这个设定项目可能会导致DoS的攻击,因此预设是NO
# ascii_upload_enable=YES(NO)
# 与上一个设定类似的,只是这个设定针对上传而言,预设是NO
ascii_upload_enable=NO
ascii_download_enable=NO
# 通过搭配能实现以下几种效果:
# ①当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd/chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录
# ②当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd/chroot_list文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录
# ③当chroot_list_enable=NO,chroot_local_user=YES时,所有的用户均不能切换到其他目录
# ④当chroot_list_enable=NO,chroot_local_user=NO时,所有的用户均可以切换到其他目录
# 限制用户只能在自己的目录活动
chroot_local_user=YES
chroot_list_enable=NO
chroot_list_file=/etc/vsftpd/chroot_list
# 可以更改ftp的端口号,使用默认值21
# listen_port=60021
# 监听ipv4端口,开了这个就说明vsftpd可以独立运行,不用依赖其他服务
listen=NO
# 监听ipv6端口
listen_ipv6=YES
# 打开主动模式
port_enable=YES
# 启动被动式联机(passivemode)
pasv_enable=YES
# 被动模式端口范围:注意:linux客户端默认使用被动模式,windows 客户端默认使用主动模式。在ftp客户端中执行"passive"来切换数据通道的模式。也可以使用"ftp -A ip"直接使用主动模式。主动模式、被动模式是有客户端来指定的
# 上面两个是与passive mode使用的port number有关,如果您想要使用64000到65000这1000个port来进行被动式资料的连接,可以这样设定
# 这两项定义了可以同时执行下载链接的数量
# 被动模式起始端口,0为随机分配
pasv_min_port=64000
# 被动模式结束端口,0为随机分配
pasv_max_port=65000
# 文件末尾添加
# 这个是pam模块的名称,我们放置在/etc/pam.d/vsftpd,认证用
pam_service_name=vsftpd
# 使用允许登录的名单,在/etc/vsftpd/user_list文件中添加新建的用户ftpuser
userlist_enable=YES
# 限制允许登录的名单,前提是userlist_enable=YES,其实这里有点怪,禁止访问名单在/etc/vsftpd/ftpusers
userlist_deny=NO
# 允许限制在自己的目录活动的用户拥有写权限
# 不添加下面这个会报错:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
allow_writeable_chroot=YES
# 当然我们都习惯支持TCP Wrappers的啦
# Tcp wrappers : Transmission Control Protocol (TCP) Wrappers 为由 inetd 生成的服务提供了增强的安全性
tcp_wrappers=YES
# FTP访问目录
local_root=/data/ftp/ftpuser
安全第一,设置防火墙永久关闭
(1)设置开机启用防火墙:systemctl enable firewalld.service
(2)设置开机禁用防火墙:systemctl disable firewalld.service
(3)启动防火墙:systemctl start firewalld
(4)关闭防火墙:systemctl stop firewalld
(5)检查防火墙状态:systemctl status firewalld
selinux 也关下,以下是临时关闭,开机就又有了
(base) [root@localhost vsftpd]# getenforce
Enforcing
(base) [root@localhost vsftpd]# setenforce 0
(base) [root@localhost vsftpd]# getenforce
Permissive
永久关闭
永久关闭(修改配置文件,即可永久关闭)[root@localhost ~]# vi /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing 修改为"SELINUX=disabled"
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
然后重启系统即可,
ps:其实对防火墙和selinux的检查应该放在最前面。
ftp的上传日志在这里:/var/log/xferlog
(base) [root@localhost log]# tail -f xferlog
Fri Dec 2 13:44:18 2022 1 172.18.19.191 0 /\xE7\xAE\x97\xE6\xB3\x95\xE7\xBB\x84\xE5\xB7\xA5\xE4\xBD\x9C\xE6\x80\xBB\xE7\xBB\x93&\xE8\xA7\x84\xE5\x88\x92.xmind b _ i r ftpuser ftp 0 * i
Fri Dec 2 13:44:56 2022 1 172.18.19.191 0 /1.png b _ i r ftpuser ftp 0 * i
Fri Dec 2 13:45:47 2022 1 172.18.19.191 0 /2.png b _ i r ftpuser ftp 0 * i
Fri Dec 2 13:54:28 2022 1 ::ffff:172.18.19.191 0 /2.png b _ i r ftpuser ftp 0 * i
Fri Dec 2 13:55:00 2022 1 ::ffff:172.18.19.191 0 /2.png b _ i r ftpuser ftp 0 * i
Fri Dec 2 13:55:46 2022 1 ::ffff:172.18.19.191 0 /2.png b _ i r ftpuser ftp 0 * i
Fri Dec 2 13:58:00 2022 1 ::ffff:172.18.19.191 58277 /upload/2.png b _ i r ftpuser ftp 0 * c
Fri Dec 2 14:02:50 2022 1 ::ffff:172.18.19.191 460054 /upload/1.png b _ i r ftpuser ftp 0 * c
Fri Dec 2 14:18:24 2022 1 ::ffff:172.18.19.191 460054 /upload/1.png b _ o r ftpuser ftp 0 * c
关于日志的含义解析,我的其它文章好像提过, 最重要的是 最后一个 c 代表传输完成。重点提及,是在摄像头ftp到server端,图像识别模型要根据图片处理推理,就要订阅这个日志了,根据 c 来跳过传半截的。
1.5 拉取镜像
非必须,拉一个玩玩
docker pull justin0114/cpu_torch1.8_python3.8_fastapi
docker pull kevinchina/deeplearning:cuda10.2torch1.8yolov0.1
docker pull docker pull selenium/standalone-chrome:98.0
二、nfs服务
步骤多,重新开一个标题
2.1 服务端安装
试想图片推理服务器不止一个,其它server要能共享到图片和日志,就需要nfs服务了。
nfs是一个共享文件,安装包
nfs网络文件系统:端口号2049
查看有没有安装这两个包
rpm -qa |grep nfs-utils
rpm -qa |grep rpcbind
安装服务&启动服务&设置开机自启:
yum -y install rpcbind nfs-utils # 安装软件包
systemctl start rpcbind # 启动服务
systemctl start nfs-server.service # 启动服务
systemctl status nfs # 查看启动状态
# 设置开机自启
systemctl enable rpcbind.service
systemctl enable nfs-server.service
配置文件
vim /etc/exports
添加 /data/nfs *(rw,sync)
让配置文件生效: exportfs -rv
格式:media代表是当前系统目录,
*代表对所有网段开放权限,也可以设置特定网段。
(rw)代表访问权限
ro只读 rw读写访问 sync资料同步写入到内存与硬盘当中
建立同步文件夹
mkdir -p /data/nfs
给同步文件授权
#nfs 默认用户是nfsnobody 查看:grep nfs /etc/passwd
更改权限:chown nfsnobody:nfsnobody -R /data/nfs
更改使用权限:chmod 766 -R /data/nfs
自己查看自己的共享目录:exportfs -rv
(base) [root@localhost ~]# exportfs -rv
exporting *:/data/nfs
查看开放目录
(base) [root@localhost ~]# showmount -e 172.18.42.200
Export list for 172.18.42.200:
/data/nfs *
2.2 客户端安装
nfs 共享目录肯定是需要客户端和服务端配对使用的,在客户机上安装
安装服务&启动服务&设置开机自启:
yum -y install rpcbind nfs-utils # 安装软件包
systemctl start rpcbind # 启动服务
systemctl start nfs-server.service # 启动服务
systemctl status nfs # 查看启动状态
# 设置开机自启
systemctl enable rpcbind.service
systemctl enable nfs-server.service
挂载挂完后df -Th 查看
mount -t nfs 172.18.42.200:/data/nfs /data/nfs
(base) [root@localhost ~]# df -Th
devtmpfs devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs tmpfs 3.9G 65M 3.8G 2% /run
tmpfs tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 145M 870M 15% /boot
tmpfs tmpfs 783M 0 783M 0% /run/user/0
172.18.42.200:/data/nfs nfs4 484G 23G 461G 5% /data/nfs
添加配置文件到vim /etc/fstab,开机自动挂载 !! 非常重要,对于开发来说,非常不注意开机自启
172.18.42.200:/data/nfs /data/nfs nfs defaults 0 0
mount -a # 查看有没有挂载错误
注:取消挂载
sudo fuser -m -v -i -k /data/nfs
sudo umount /data/nfs
到这里,就能看到目录已经共享了 客户机(10.10.90.209) 在/data/nfs/ 下创建的文件 服务器(172.18.42.200)可以看到,反之依然。
之前遇到了权限的问题,只能看,不能打开和修改。 需要在客户机修改下目录权限。
二、安装cuda
这个是否要安装,要看需求了,因为pytorch自己已经带了cuda,但是它的cuda是阉割版的,只是满足了torch的计算使用,自己要做模型量化啥的还是需要安装cuda的
要升级gcc版本,自带的gcc是4.x,然后挑选一个版本安装。 cuda版本和tensorrt版本要对应。用那个tensorrt版本转化的,就要用那个tensorrt版本使用。
cpu的转化onnx,环境要宽松一些,因为和cuda不搭边。
感兴趣的可以看下我 【深度学习】目标检测 yolov5模型量化安装教程以及转ONXX,torchscript,engine和速度比较一栏表这篇文章。
这篇文字是我把当时踩的坑和如何解决的都放上去了,需要我再出一个速通关版的请留言。
简单来说:
1、tenssort转化:显卡驱动和cuda版本对应,cuda版本和cudann版本对应,cudann版本和tensorrt版本对应, 用那个tenssorrt版本转化的,未来就要在那个环境下使用。 这个时候docker的优势就体现出来了。可以构建一个docker环境,专门用来转化模型
2、cpu转化要宽松些,但一定要和gpu环境分开【深度学习】目标检测 yolov5模型量化安装教程以及转ONXX,torchscript,engine和速度比较一栏表这篇文章提到了原因。
先这样!
-----------------------------------------------------------分割线--------------------------------------------------------------------------------------------
2.1 前置确认
还是要安装cuda;
确认是否有显卡:
yum install pciutils -y
(base) [root@localhost ~]# lspci | grep -i nvidia
0b:00.0 VGA compatible controller: NVIDIA Corporation Device 2208 (rev a1)
说明是有显卡的
确认GCC已安装
yum install gcc, make -y
最高支持到11.4,nvcc -v 可以看到cuda是没安装的
nvidia-smi -l
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.63.01 Driver Version: 470.63.01 CUDA Version: 11.4 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... Off | 00000000:0B:00.0 Off | N/A |
| 32% 37C P0 88W / 350W | 0MiB / 12053MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
(base) [root@localhost ~]# nvcc -V
-bash: nvcc: 未找到命令
2.2 gcc 检测版本与升级
检测gcc版本: 4.8.5 是不行的,
gcc -v
使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper
目标:x86_64-redhat-linux
配置为:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
线程模型:posix
gcc 版本 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
由于 CUDA 库(例如 cuFFT 和 CUB)中的 C++11 要求,推荐的最低 GCC 编译器至少为 GCC 6。
也可以参考这篇文章《【深度学习】从0构建深度学习环境 centos7 2080TI》
如何升级gcc:
# 教程 https://www.cnblogs.com/jixiaohua/p/11732225.html
sudo yum install centos-release-scl -y # 安装centos-release-scl 红帽自带工具让原始gcc和你新安装的共存
sudo yum install devtoolset-8-gcc* -y #安装devtoolset,注意,如果想安装7.*版本的,就改成devtoolset-7-gcc*,以此类推
scl enable devtoolset-8 bash # 激活对应的devtoolset,所以你可以一次安装多个版本的devtoolset,需要的时候用下面这条命令切
# 换到对应的版本
# scl 报错 -bash: scl: 未找到命令
# 则需要:yum install centos-release-scl
# yum install scl-utils scl-utils-build -y
# 继续报错:Unable to open /etc/scl/conf/devtoolset-8!
gcc -v # 查看版本
# 避免下次重启终端后还是会恢复到gcc4.8.5,所以:
cd /usr/bin/ # 去这个目录
mv /usr/bin/gcc /usr/bin/gcc-4.8.5 # 备份原有gcc
ln -s /opt/rh/devtoolset-8/root/bin/gcc /usr/bin/gcc # 软链接
mv /usr/bin/g++ /usr/bin/g++-4.8.5 # 备份 没有的话可以不管
ln -s /opt/rh/devtoolset-8/root/bin/g++ /usr/bin/g++ # 软链接 没有的话可以不管
gcc --version # 查看版本
g++ --version # 查看版本
安装cuda环境
cuda在这里下载,最新版是11.8, 我们最高支持到11.4 所以要点击下面那个框
https://developer.nvidia.com/cuda-downloads
我的显卡驱动:NVIDIA-Linux-x86_64-470.63.01.run
到这里找到合适匹配的cuda版本,我看到的470.31的驱动是可以支持cuda的
https://developer.nvidia.com/cuda-11-4-0-download-archive?target_os=Linux&target_arch=x86_64&Distribution=CentOS&target_version=7&target_type=rpm_local
wget https://developer.download.nvidia.com/compute/cuda/11.4.0/local_installers/cuda_11.4.0_470.42.01_linux.run
sudo sh cuda_11.4.0_470.42.01_linux.run
wget 遇到问题,不能解析host, developer.download.nvidia.com 联系运维修改dns, 永伟是把其它dns服务器(114.114.114.114),改成阿里的了
vim /etc/resolv.conf
#nameserver 114.114.114.114
nameserver 223.5.5.5
修改完成后重启网卡
service network restart
安装后显示
===========
= Summary =
===========
Driver: Not Selected
Toolkit: Installed in /usr/local/cuda-11.4/
Samples: Installed in /root/, but missing recommended libraries
Please make sure that
- PATH includes /usr/local/cuda-11.4/bin
- LD_LIBRARY_PATH includes /usr/local/cuda-11.4/lib64, or, add /usr/local/cuda-11.4/lib64 to /etc/ld.so.conf and run ldconfig as root
To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-11.4/bin
***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 470.00 is required for CUDA 11.4 functionality to work.
To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file:
sudo <CudaInstaller>.run --silent --driver
然而 nvcc -V 依然报错
其实安装成功后已经提示了,要设置环境变量
vim /etc/profile # 进入文件写env变量
# 在最后添加三句话env
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.4/lib64
export PATH=$PATH:/usr/local/cuda-11.4/bin
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-11.4
# 也可以这样添加
export LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64
export PATH=$PATH:/usr/local/cuda-11.4/bin
export CUDA_HOME=/usr/local/cuda-11.4
source /etc/profile # 生效env变量
安装一下cmake,为后面《YOLO v5 TensorRT C++推演快速教程》学习这个大佬的教程做铺垫
yum install cmake -y
2.3 cuDNN安装
安装后要记下版本
参考看这里:https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html
下载链接:https://developer.nvidia.com/zh-cn/cudnn
需要注册登陆才能下载,下载与CUDA版本对应的版本:
安装很简单,指引在这里https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#install-zlib-linux:
tar -zxvf cudnn-11.4-linux-x64-v8.2.4.15.tgz # 解压后就是cuda文件夹
sudo cp cuda/include/cudnn*.h /usr/local/cuda/include
sudo cp -P cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*
查看cudnn的版本,其实从文件名也能看出版本,但这样就是谁安装的,谁知道版本了,没有命令能知道它的版本。
有的人说 pytorch自带cudnn,但是你无法知道他的具体版本,也很难知道这个包他安装到哪了(ps:不做模型转换是没关系的,反正也用不到)
(base) [root@localhost software]# cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
#define CUDNN_MAJOR 8
#define CUDNN_MINOR 2
#define CUDNN_PATCHLEVEL 4
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)
#endif /* CUDNN_VERSION_H */
TensorRT安装
至于cuda,cudann,和TensorRT的关系,我反正是没咋搞明白,查过知乎、看过csdn,整个感觉是能看懂,但仿佛又迷糊。等我了解更深了,再回来写一下我的理解。先占坑。
两个基本结论:
- 你要模型转换就要用TensorRT,要用tensorRT就需要知道cudnn的版本。所以要安装cudnn,要安装cudnn就要安装cuda。这个逻辑看起来是清晰的。
- 不这样一路安装下来丝毫不影响使用torch做深度学习的任务,因为pytorch的gpu版本会自动安装cuda,以及cudann,但安装到哪了,没有深究。而且我确认的是,至少1.8的版本不容易看出cudann的版本,是在安装的过程中的输出日志表现出来的,很隐蔽!
扯回来,继续安装TensorRT
准备工作:
TensorRT依赖CUDA与cuDNN,具体的版本信息可以通过官方给出的支持矩阵找到:
https://docs.nvidia.com/deeplearning/tensorrt/archives/tensorrt-825/support-matrix/index.html
先看这句话:
These support matrices provide a look into the supported platforms, features, and hardware capabilities of the NVIDIA TensorRT 8.2.5 APIs, parsers, and layers.
For previously released TensorRT documentation, see TensorRT Archives.
8.2.5支持的能力挺好的, 点进TensorRT Archives 瞅瞅 previously released TensorRT documention:连接也给出了 https://docs.nvidia.com/deeplearning/tensorrt/archives/index.html
invidia的文档和组件太多了,搞清楚他们的关系都费牛劲,也是大牛之路的必修课啊啊啊啊啊啊!大牛好累啊,我还说狗着吧
点进来发现,最新的是 8.5.1
在这里忽然想到一个问题,若是我直接安装TensorRT8.5.1 (最新的),但是在python 转化的时候可能用的不是这个cudann(pytorch自带的)会报个warning,但是能过去。我之前用yolov5做.engine转化的时候,遇到过。【深度学习】目标检测 yolov5模型量化安装教程以及转ONXX,torchscript,engine和速度比较一栏表 ,现在想想应该是这个原因。
若不用python命令转化,直接用c++命令可能就能做到统一管理环境了。
安装指引:https://docs.nvidia.com/deeplearning/tensorrt/archives/tensorrt-851/install-guide/index.html
Verify that you have cuDNN installed. Review the cuDNN Installation Guide if you do not already have cuDNN installed since it’s a runtime requirement for TensorRT. TensorRT 8.5.1 supports cuDNN 8.6.0. 看到这句话时,菊花一紧~
cudann不是8.6的,往回捯…
尼玛:https://docs.nvidia.com/deeplearning/tensorrt/archives/tensorrt-843/install-guide/index.html
这个又没这句话了。
算了还是安装最新的吧。
罗列一下环境
显卡驱动:NVIDIA-Linux-x86_64-470.63.01.run
cuda:cuda_11.4.0_470.42.01_linux.run 11.4
cudann:cudnn-11.4-linux-x64-v8.2.4.15.tgz 8.2.4
tensorrt:8.5.1
这句话,其实我们可以安装也可以不安装,不用python接口就不用安装。在量化那篇文章。我是用到了,就是用python的方式转化的模型。这次我打算用c++的。聚集,先不安装。
If you are using the TensorRT Python API and PyCUDA isn’t already installed on your system, see Installing PyCUDA. If you encounter any issues with PyCUDA usage, you may need to recompile it yourself. For more information, refer to Installing PyCUDA on Linux.
~
tensorrt 下载在这里:https://developer.nvidia.com/tensorrt
上面说的下载哪一个都不算数,下载连接给出了线索,藏得深啊
8.2.5.1是对应cuda11.4的
对比这个最新的,8.5时服务于11.8的cuda的
猜测下高版本的也能兼容低版本的,但谁知道呢,下载这个大家各显神通吧。我的下着下着就断了。
安装在这里:
https://docs.nvidia.com/deeplearning/tensorrt/archives/tensorrt-825/install-guide/index.html#installing-tar
照着这集步完成即可
version="8.2.5.1"
arch=$(uname -m)
cuda="cuda-11.4"
cudnn="cudnn8.2"
tar xzvf TensorRT-${version}.Linux.${arch}-gnu.${cuda}.${cudnn}.tar.gz
ls TensorRT-${version}
bin data doc graphsurgeon include lib onnx_graphsurgeon python samples targets TensorRT-Release-Notes.pdf uff
# 后面执行的命令都贴一下,懒得一个个敲了
121 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<TensorRT-${version}/lib>
122 pwd
123 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/software/TensorRT-8.2.5.1/lib
124 cd TensorRT-8.2.5.1/python
125 python -V
126 python -m pip install tensorrt-8.2.5.1-cp39-none-linux_x86_64.whl
127 cd ../onnx_graphsurgeon/
128 ls -al
129 python -m pip install onnx_graphsurgeon-0.3.12-py2.py3-none-any.whl
130 cd ../graphsurgeon/
131 python -m pip install graphsurgeon-0.4.5-py2.py3-none-any.whl
132 cd ..
133 tree -d
134 cd uff/
# 根据文档指引,不用tensorflow可以不使用这个。
135 python -m pip install uff-0.6.9-py2.py3-none-any.whl
136 which convert-to-ufff
137 which convert-to-uff
138 history
# 注意 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/software/TensorRT-8.2.5.1/lib
# 这个只是暂时放到环境变量了,要永久放进去需要 你也可以将这行指令加入到 home 目录下的 .bashrc 中 或者 /etc/profile
# 在source ~/.bashrc
指引的
10.Verify the installation:
Ensure that the installed files are located in the correct directories. For example, run the tree -d command to check whether all supported installed files are in place in the lib, include, data, etc… directories.
Build and run one of the shipped samples, for example, sampleMNIST in the installed directory. You should be able to compile and execute the sample without additional settings. For more information, refer to sampleMNIST.
The Python samples are in the samples/python directory.
照着这个验证一下,应该没问题。10 的意思是用caff编译一个转化的模型。
(base) [root@localhost samples]# ls
common python sampleFasterRCNN sampleIOFormats sampleOnnxMNIST sampleUffMNIST
fatbin.ld sampleAlgorithmSelector sampleGoogleNet sampleMNIST sampleSSD sampleUffPluginV2Ext
Makefile sampleCharRNN sampleINT8 sampleMNISTAPI sampleUffFasterRCNN sampleUffSSD
Makefile.config sampleDynamicReshape sampleINT8API sampleNMT sampleUffMaskRCNN trtexec
### 注意 如果只是用c++的话,只需要这样
# 首先解压安装包:
tar xzvf TensorRT-8.2.5.1.Linux.x86_64-gnu.cuda-11.4.cudnn8.2.tar.gz
# 然后将安装包拷贝到你计划使用的位置:
sudo mv TensorRT-8.2.5.1 /usr/local/
# 设定动态链接库的环境变量:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/TensorRT-8.2.5.1/lib
# 你也可以将这行指令加入到 home 目录下的 .bashrc 中。
不需要装那些有的没了那一坨。
确定gcc版本和确定cmake版本
(base) [root@localhost python]# gcc --version
gcc (GCC) 8.3.1 20190311 (Red Hat 8.3.1-3)
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
(base) [root@localhost python]# cmake --version
cmake version 2.8.12.2
tensorrt的安装到此完成,是时间开辟一个新文章学一下tensorrt的内容了。
《实战YOLO V5推演(Tensorrt版本)C++实现》
三、其它问题
3.1 opencv报错
安装opencv后,会报错:
>>> import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/root/miniconda3/lib/python3.9/site-packages/cv2/__init__.py", line 181, in <module>
bootstrap()
File "/root/miniconda3/lib/python3.9/site-packages/cv2/__init__.py", line 153, in bootstrap
native_module = importlib.import_module("cv2")
File "/root/miniconda3/lib/python3.9/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
ImportError: libX11.so.6: cannot open shared object file: No such file or directory
解决:
sudo yum install libX11
sudo yum install libXext
一键解决
yum install libX11 libXext -y
不在报错
(base) [root@localhost log]# python
Python 3.9.12 (main, Apr 5 2022, 06:56:58)
[GCC 7.5.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
3.2 将ftp日志软连接一下
ln -s target source
ln -s:表示创建一个软连接;
target:表示目标文件(夹),即源文件。
source:表示当前目录的软连接名,即被创建出来的软连接名称以及放置在何处。
ftp服务器开启以后,其日志在/var/log/xferlog
为保持和原服务器一致,需要软连接过来
把原始文件/data/log/xferlog 和软连接/var/log/xferlog 建立关系
mkdir /data/log
ln -s /var/log/xferlog /data/log/xferlog
开启ftp服务
# 开启
systemctl start vsftpd
# 关闭
systemctl stop vsftpd
4. matplot不显示中文
下载 SimHei.ttf字体
放到这里:
/home/jianming_ge/miniconda3/envs/py39_torch1.10.1/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf
编辑
vim /home/jianming_ge/miniconda3/envs/py39_torch1.10.1/lib/python3.9/site-packages/matplotlib/mpl-data/matplotlibrc
把 #font.sans 下面有一行这去掉, 否则会报warning, duplicate key
并删除相关cache ~ 非常关键,否则不生效
rm -rf ~/.cache/matplotlib
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。