ubuntu-intall-cuda
Ubuntu20.04如何安装CUDA
- 安装显卡驱动
1 | #更新系统,安装必须用到的工具 |
- 安装docker(可以在安装系统时勾选上docker,这一步就可以省略,建议不要省略,安装系统勾选安装的docker 版本较低)
1 | #安装 Docker 仓库密钥和工具 |
1 | # 配置生产存储库: |
1 | #更新系统,安装必须用到的工具 |
1 | #安装 Docker 仓库密钥和工具 |
1 | # 配置生产存储库: |
PVE(Proxmox Virtual Environment):开源免费,支持虚拟机和容器,灵活性高,内置 ZFS 和集群功能。
ESXi(VMware ESXi):商业化产品,专注虚拟机,高性能且与 VMware 全栈生态深度集成。
复制安装包proxmox-ve_8.2-2.iso到启动盘。
启动电脑(Legion Y7000P IAH7)时按F2,调整U盘为第一启动,如果没有U盘,可以换一个U盘制作,有的U盘会不识别。
进入ventoy引导界面,依次点击proxmox-ve_8.2-2.iso->Boot in normal node
,如果该模式没有进入下一个界面,可以换一个启动模式。
进入proxmox安装界面,点击Install Proxmox VE (Graphical)
进行界面安装,Terminal
是终端安装模式。
一直点击下一步即可,注意下面几个选项
country选择China
如果电脑有多个硬盘,注意选择要安装的硬盘
密码需要自己设置一个
网络配置主要选择有线网卡
Hostname:pve.iexxk.io
IP Address(CIDR):分配一个未使用的ip,后面24默认不用改,我设置的是172.16.80.244/24
Gateway:路由器的网关,一般为分配ip后面一位改为xx.xx.xx.1,我设置的是172.16.80.1
DNS Server: 该网络能访问的一个dns服务器,我设置的是8.8.8.8
我的因为是笔记本电脑,安装完成后,显示的是命令行界面,可以直接在电脑上输入root及密码就能进入系统,该系统就相当于是个linux
正式使用,在其他电脑访问https://172.16.80.244:8006/,输入root及密码就能进入管理平台了
额外配置,针对笔记本,ssh 进172.16.80.244,用户名和密码同管理平台,执行下面命令
1 | #设置合上盖子不休眠 |
登录进去可以看到,资源使用情况,什么都还没安装的情况:
CPU:显示20个,使用0%
内存:1.35 GiB的15.41 GiB,使用9%
存储:2.42 GiB的442.75 GiB,使用1%
服务器视图下菜单目录介绍
1 | |--数据中心 |
配置IOS镜像:点击数据中心->pve->local->ISO镜像
,在ISO镜像页面,点击上传
或从URL下载
,将镜像放进PVE。
Centos7 atomic镜像URL地址: CentOS-Atomic-Host-7-Installer.iso,CentOS Atomic 是一个专为执行 Docker 容器而设的轻量操作系统,它创建自标准的 CentOS 7 组件,并追随 Red Hat 企业级 Linux Atomic 主机的组件版本。
win10 ISO – Enterprise LTSC镜像地址:LTSC 版本去掉了许多不必要的功能(例如 Microsoft Store、Cortana、动态磁贴等),非常适合追求性能的用户,系统本身对内存的占用较低。(window安装时注意看提示,按任何键加载CD磁盘)
Ubuntu20.04镜像地址:Server install image服务器安装映像允许您在计算机上永久安装 Ubuntu 以用作服务器。它不会安装图形用户界面。
显卡直通:VM->硬件->添加->PCI设备->原始设备->选择RTX3050->添加
。
如果是添加到win10的,windows更新界面更新即可使用显卡了。
进入(废弃,以下shell命令都废弃,现在直接在界面上面配置就可以了,配置之后,Kernel driver in use自动就变成了vfio-pci)PVE->Shell
1 | #-----------------1. 修改------------------------------------------------- |
SRS是一个开源的(MIT协议)简单高效的实时视频服务器,支持RTMP、WebRTC、HLS、HTTP-FLV、SRT、MPEG-DASH和GB28181等协议。 SRS媒体服务器和FFmpeg、OBS、VLC、 WebRTC等客户端配合使用,提供流的接收和分发的能力,是一个典型的发布 (推流)和订阅(播放)服务器模型。 SRS支持互联网广泛应用的音视频协议转换,比如可以将RTMP或SRT, 转成HLS或HTTP-FLV或WebRTC等协议。
1 | 相关设置: |
nginx代理
1 | # ossrs代理地址 |
流程
虚拟ip处需要映射
Web: 外网ip80/443绑定节点的ingress的80/443
Ossrs: 外网ip1935绑定k8s里面的ossrs服务的Container Ports(Host端口)1935或者nodeport,不采用nodeport是因为要内网外网都要能访问ossrs,关键是内网对外网域名做了隔离,因此这里用本机的hosts映射(可以升级到dns下发)
graph LR G[OBS推流]-->C C[域名] -->|解析| A[移动光猫] A -->|LAN| B(飞塔防火墙) B -->|虚拟ip| E[K8S的Ingress] E -->|域名匹配| F[前端web/nginx] F -->|nginx代理|U[ossrs] C-->|hosts映射节点ip|E V[VLC]-->|web flv拉流|U K[IOS]-->|ios webrtc拉流|U
安装obs,用srs在线的测试工具也可以。
在来源->加号->浏览器->url
里面输入要直播的网址https://www.baidu.com/s?word=在线时间
在控制按钮->设置->直播->
服务:自定义
服务器:rtmp://iexxk.com/drone/
推码流:1
点击开始直播
播放:
内网测试(ok):
内网域名测试(ok):
外网测试:
webrtc和WHEP区别
WHEP:可以代理,但是也无法将一个域名根据环境解析为内网ip和外网ip,内网和外网是通过dns解析的,只能解析一个。在rtc里面启用保留域名,也无法解决,candidate
里面会出现2个域名一个ip,优先还是走的ip
1 | rtc_server { |
webrtc:直接连接,延迟更低,必须开放1985,无法修改
使用webrtc时,需要在web前端(nginx)做个代理,并要将该端口映射到外网1985上
1 | # ossrs webrtc代理地址 |
在内网无法访问外网域名的时候,虽然通过host映射到内网,但是webrtc播放的时候还是解析成了外网ip
使用webrtc播放时可以在浏览器控制台能看到如下信息
1 | Got answer: v=0 |
注意最后两行
1 | 使用内网ip的时候,输出如下信息 |
真域名做了host映射,但是似乎不会从host拿,应该是从dns里面拿取了
从下图可以知道,是通过1985的接口,拿到了udp的端口数据。
rtmp2rtc.conf
1 | listen 1935; |
realtime.flv.conf
1 | listen 1935; |
飞塔防火墙版本:FortiGate-100F
kubernates版本: v1.26.4
k8s界面工具kuboard:v3.5.2.4
graph LR C[域名] -->|解析| A[移动光猫] A -->|LAN| B(飞塔防火墙) B -->|虚拟ip| E[K8S的Ingress] E -->|域名匹配| F[应用路由]
飞塔防火墙配置步骤:
策略&对象->虚拟IP->新建
1 | ---------------------新建配置1------------------------------ |
配置https证书(可选-废弃,后面在k8s进行管理证书,这里管理比较麻烦)
系统管理->证书->新建->证书->导入证书->证书->上传申请的免费证书
安全配置文件->SSL/SSH检测->新建
1 | 名称: k8s_ingress_ssl |
策略&对象->虚拟IP->新建
1 | 名称: k8s_ingress |
k8s-ingress配置
endpoint代理k8s之外的服务,让其能在k8s内访问,或可以通过ingress进行访问。
待补充。
1 | #安装 ---废弃开始----直接可以在idea里面新建quarkus的项目 |
在一次操作生产服务器时,发生了系统文件丢失,导致重启之后无法进入系统,但是重要哦的文件还在系统中,第一时间应该先对当前系统【创建快照】,创建快照之后就可以【查看vmdk文件】
scp root@<ESXi_IP>:/vmfs/volumes/datastore_name/vm_name/disk.vmdk /local/path/
拷贝出来,如果文件太大,可以【创建虚拟机】作为临时存放,内网相对快很多【创建虚拟机】,虚拟机需要自定义分区,主要修改卷组(VG)名称,修改卷组名称,主要是防止逻辑卷名称冲突
启动新的虚拟机,启动成功后,【添加硬盘】,硬盘文件选择需要打开的vmdk文件
进入虚拟机,执行下面命令
1 | #检查激活状态 |
创建快照:选择虚拟机,点击 Actions
> Snapshot
> Take Snapshot
。
查看vmdk文件:在左侧菜单,点击Storage
>Data_disk
>对应的虚拟机服务
1 | #关键文件内容如下 |
开启ESXI服务器的ssh功能:在左侧菜单,点击Host
>Manage
>Services
,里面开启ssh功能。开启后用户名和密码同网页登录esxi界面一样
创建虚拟机:在左侧菜单,点击Virtual Machines
>create
,选择linux,centos7,在iso里面选择Storage
里面的iso镜像,然后就是安装centos的步骤了。设置静态ip和ESXI服务器在同一网段中。
添加硬盘:选择虚拟机,点击 edit
> add hard disk
进行添加硬盘。
合并快照磁盘:选择虚拟机,点击 Actions
> Snapshot
>Snapshot Manager
> Consolidate
。
在docker.elastic.co仓库查找springboot对应的es版本,,eg:
1 | # springboot 2.7.18 |
创建配置文件,执行vim /workspace/elasticsearch.yml
写入如下内容
1 | cluster.name: "docker-cluster" |
1 | mkdir /workspace/v_es_data/ |
测试,执行下面命令
1 | ➜ ~ curl -X GET "127.0.0.1:9200/_cat/nodes?v=true&pretty" |
可视化查看工具,类似dbeaver,非必需
执行下面命令进行安装
1 | docker run -d --name kibana -p 5601:5601 \ |
访问http://localhost:5601/
然后进行各种操作,比较复杂
在应用层面进行数据同步,即在应用代码中同时写入 MySQL 和 Elasticsearch。
优点:依赖少,自定义同步逻辑。
缺点:数据一致性和可靠性方面存在一些挑战,特别是在高并发的场景下。
借助于数据库日志(如 MySQL binlog)来捕获数据变化,并将其同步到 Elasticsearch。这种方法通常能够实时同步数据,并且不会对数据库性能造成太大影响。
优点:实时同步数据,不会对数据库性能造成太大影响。
缺点:性能开销,binlog 会占用额外的磁盘空间。
优点:功能强大,支持复杂的配置和扩展,社区活跃。
缺点:需要 Kafka,配置相对复杂。
Maxwell是一种开源的MySQL数据库同步工具,它可以将MySQL数据库的binlog转化为JSON格式,并将其发送到消息队列中。
需要mq和kafka等中间件
优点:轻量级,配置简单,适合快速实现。
缺点:功能相对简单,不支持复杂的场景
Canal是阿里巴巴开发的一款数据库同步工具,它可以实现MySQL数据库的binlog解析和日志抓取。模拟mysql的从节点实现。
在pom.xml添加依赖
1 | <dependency> |
1 | version: '3.8' |
查看显卡型号lspci | grep -i vga
,提示-bash: lspci: 未找到命令
,执行yum install pciutils
安装lspci命令
1 | [root@exxk ~]# lspci | grep -i vga |
在输出结果中获取25e2
关键字,在https://admin.pci-ids.ucw.cz/read/PC/10de/
连接尾部拼接25e2
,例如https://admin.pci-ids.ucw.cz/read/PC/10de/25e2,访问即可,页面回展示类似内容
1 | Main -> PCI Devices -> Vendor 10de -> Device 10de:25e2 |
从中可以知道25e2对应的显卡是GeForce RTX 3050 Mobile
在该https://www.nvidia.cn/Download/index.aspx?lang=cn网页找到`GeForce RTX 3050 Mobile=
GeForce RTX 3050 Laptop GPU该驱动,选择
Linux64-bit然后下载下来
NVIDIA-Linux-x86_64-550.78.run `
拷贝到centos7上面,执行下面命令进行安装驱动
1 | #屏蔽系统自带的nouveau显卡驱动(重启后生效---begin----------- |
安装NVIDIA Container Toolkit,执行下面的命令(确保您已安装适用于您的 Linux 发行版的NVIDIA 驱动程序 请注意,您不需要在主机系统上安装 CUDA Toolkit,但需要安装 NVIDIA 驱动程序)
1 | [root@exxk ~]# curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo |
配置containerd(针对Kubernetes),执行下面命令
1 | [root@exxk ~]# nvidia-ctk runtime configure --runtime=containerd |
1 | nvidia-docker pull registry.baidubce.com/paddlepaddle/paddle:2.6.1-gpu-cuda12.0-cudnn8.9-trt8.6 |
安装cuda 12.4.1最新版(飞浆需要12.0的版本,因此将下面的替换成12.0.1)
1 | wget https://developer.download.nvidia.com/compute/cuda/12.4.1/local_installers/cuda_12.4.1_550.54.15_linux.run |
添加环境变量,修改/etc/profile
文件,执行vi /etc/profile
,增加如下内容,然后执行source /etc/profile
1 | export PATH=${PATH}:/usr/local/cuda-12.4/bin |
验证
1 | [root@exxk ~]# nvcc -V |
卸载
1 | [root@exxk ~]# cd /usr/local/cuda-12.4/bin |
下载 developer.nvidia.com页面按自己的环境选择,然后下载cuda。安装方式我选择的runfile(local)
,下载完成后上传到centos
执行sh cuda_7.5.18_linux.run
,按ctrl+c
跳过文档阅读
1 | [root@exxk ~]# sh cuda_7.5.18_linux.run |
添加环境变量,修改/etc/profile
文件,执行vi /etc/profile
,增加如下内容,然后执行source /etc/profile
1 | export PATH=${PATH}:/usr/local/cuda/bin |
验证环境
1 | [root@exxk ~]# nvcc -V |
卸载 /usr/local/cuda-7.5/bin/uninstall_cuda_7.5.pl
PaddleDetection是一个基于PaddlePaddle的目标检测端到端开发套件。
在PyCharm欢迎页通过Get from VCS拉取github上PaddlePaddle/PaddleSeg项目。
拉取成功后,PyCharm会提示创建venv虚拟环境,点击确定即可,在PyCharm打开终端命令行前面有venv代表创建成功,如果没有,关闭终端点击Add new Interpreter
(需要python3.10的环境),添加后,重新在PyCharm打开终端
1 | 例如: |
安装paddle,在PyCharm中Terminal命令行中执行pip install paddlepaddle
安装setuptools,在PyCharm中Terminal命令行中执行pip install -U pip setuptools
安装依赖,在PyCharm中Terminal命令行中执行 pip install -r requirements.txt
1 | # 运行图片检测人,结果输出在output目录 |
安装ffmpeg: brew install ffmpeg
下载安装rtsp推流服务bluenviron/mediamtx,在release页面选择适合的版本,我的是inter的mac,选择mediamtx_v1.8.1_darwin_amd64.tar.gz即可
解压,然后运行./mediamtx
运行视频流检测并推流python deploy/pipeline/pipeline.py --config deploy/pipeline/config/examples/infer_cfg_human_attr.yml --rtsp rtsp://admin:123456@172.1.1.1:554/ch01.264?dev=1 --pushurl rtsp://127.0.0.1:8554
1 | python deploy/pipeline/pipeline.py --config deploy/pipeline/config/examples/infer_cfg_human_attr.yml --rtsp rtsp://admin:123456@172.16.80.59:554/ch01.264?dev=1 --pushurl rtsp://127.0.0.1:8554 |
然后使用vlc播放rtsp://127.0.0.1:8554/ch01
流即可,流的地址在上一步日志里面可以看到the result will push stream to url:rtsp://127.0.0.1:8554/ch01
默认的模型,识别速度个人电脑会卡顿,可以替换为小模型,模型地址可以在PP-Human快速开始-模型下载里面进行找
1 | 修改该deploy/pipeline/config/examples/infer_cfg_human_attr.yml文件 |
安装依赖,执行pip install -r requirements.txt
时报AttributeError: module 'pkgutil' has no attribute 'ImpImporter'. Did you mean: 'zipimporter'?
错误,详细信息如下:
1 | (.venv) ➜ PaddleDetection git:(release/2.7) pip install -r requirements.txt |
原因:在docs/tutorials/INSTALL_cn.md
文档里面可以查看到只支持Python 3(3.5.1+/3.6/3.7/3.8/3.9/3.10),64位版本。
解决:执行brew install python@3.10
,然后在上面安装的第二个步骤里面,切换成3.10的python环境
出现提示安装pip install numba==0.56.4
的警告,安装即可
运行视频流检测人时,报错
1 | python deploy/pipeline/pipeline.py --config deploy/pipeline/config/examples/infer_cfg_human_attr.yml -o visual=False --rtsp rtsp://admin:123456@172.16.1.1:554/ch01.264?dev=1 |
解决:删除命令里面的-o visual=False
,似乎是该参数有问题
运行视频流检测加推流的时候,报错
1 | python deploy/pipeline/pipeline.py --config deploy/pipeline/config/examples/infer_cfg_human_attr.yml --rtsp rtsp://admin:hcy123456@172.16.80.229:554/ch01.264?dev=1 --pushurl rtsp://127.0.0.1:8554 |
解决:安装ffmpeg,执行brew install ffmpeg