PVE LXC容器下安装frigate+TPU

PVE LXC容器下安装frigate+TPU

最近每天刷刷黄鱼的习惯终于让我蹲到一块Coral TPU了,299入手了一块M.2 B+M Key的,由于家里的破设备已经没有多余的接口了,一咬牙一跺脚,入了一台N6005四口2.5G的软路由,主要是看中它还有一个空余的minipcie转m.2的接口,正好可以插上我的TPU。然后就是开始折腾。

ESXI

买的8+128的套餐,所有拿过来就自带了商家刷好的esxi 7。经过查阅coral官方文档发现,插上之后还要安装驱动才能使用。
在经过研究了半天esxi是个啥玩意,怎么玩之后,把TPU设备做了硬件直通。下载了ubuntu 22.04的ios,装了个虚拟机,按照官方文档,进入到虚拟机运行命令lspci -nnk | grep 089a,也看到了预期的结果,说明直通的硬件挂上了,开始装驱动。

root@ubuntu:~# lspci -nnk | grep 089a
01:00.0 System peripheral [0880]: Global Unichip Corp. Coral Edge TPU [1ac1:089a]

装驱动也很简单,就那么几条命令,插入一个源,然后apt安装gasket-dkms libedgetpu1-std,等待它运行完毕就可以了。然后重启虚拟机,一切都貌似很正常。然而,接下来发生了意外...
当我信心满满的以为驱动已经装好并执行检验命令ls /dev/apex_0时,

root@ubuntu:~# ls /dev/apex_0
ls: cannot access '/dev/apex_0': No such file or directory

什么情况?这不符合常理啊,应该输出这个设备啊。
然后,我尝试了重装一次驱动,没用。重装了一次虚拟机,还是没用。谷歌了4个小时,并没有找到什么有用的资料,抬头一瞅时间,凌晨5:45分,拉几把倒吧,先睡觉。

Ubuntu 22.04

一觉睡到11点,起来我就开干。我怀疑可能esxi有点什么毛病,虚拟机下一直没成功我试试直接硬装ubuntu试试。
于是做了一个U盘系统,挂了一个硬盘,装上ubuntu之后,按照官网的教程打驱动,就花了五分钟,Done!
这他妈的是不是在逗我...

root@ubuntu:~# ls /dev/apex_0
/dev/apex_0

PVE

经过又一次的一通搜索之后,发现有网友用pve有成功的案例。于是我果断干掉了esxi,装上了pve
在配置了硬件直通之后,也是直接上了一个ubuntu22.04的虚拟机,也按照官网教程尝试了安装驱动,结果,是的,你没猜错,跟上面硬装ubuntu一样,5分钟完事。
哎,也不能怪esxi,可能是我哪里没搞对吧!既然pve没问题,那就用pve吧!得,以前从来没结果这些虚拟软件,这两天一次性学会了俩。也算焉知非福了...
在虚拟机上,尝试了一下安装docker+frigate,也毫无问题的成功了,docker logs frigate也看到识别到了TPU。基本上算完美了吧!

PVE LXC

要不说我是虚拟软件新手呢,手贱去搜索一下esxi vs pve。在v2ex看到大家讨论的泡沫星子直飞,双方都快要干起来了。然后看到有人说pvelxc超好用。lxc又是个啥?
带着这个疑问我有搜索了一把,学到了点东西...不知道的也自己搜索科普吧。我一个小菜鸟就不给你们科普了。
我就直接告诉你们怎么折腾就好了。

  1. 创建一个LXC容器,我选择的模板还是ubuntu22.04
  2. 直接在pve主机的里面打驱动
    按照官方教程安装驱动之前,先安装pve-headers,别问我为啥要装这个,问就是我一开始也没装,也被折磨了几个小时,也是google了几小时才得到的经验。解答传送门
    WX20220909-160134@2x
    pve官网Package Repositories
root@liball:~# vi /etc/apt/sources.list
deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription
root@liball:~# apt update
root@liball:~# apt install pve-headers-$(uname -r)
  1. 然后按照tpu官网文档安装驱动,5分钟完事。
  2. 编辑主机lxc配置文件,把设备映射出去
vi /etc/pve/lxc/[lxc容器id].conf
#添加下面内容
lxc.cgroup2.devices.allow: c 226:0 rwm
lxc.cgroup2.devices.allow: c 226:128 rwm
lxc.cgroup2.devices.allow: c 29:0 rwm
lxc.cgroup2.devices.allow: c 189:* rwm
lxc.cgroup2.devices.allow: c 120:* rwm
lxc.cgroup2.devices.allow: a
lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file 0, 0 #把显卡也挂上去
lxc.mount.entry: /dev/apex_0 dev/apex_0 none bind,optional,create=file 0, 0
lxc.apparmor.profile: unconfined
lxc.cap.drop:
lxc.mount.auto: cgroup:rw
  1. 回到容器里面,ls /dev/apex_0检验一下设备是不是映射过来了,没问题就可以安装docker+frigate了。

完美,收工!

WX20220909-224430@2x

CPU vs TPU

三个1080p摄像头,对比图如下。
cpu
tpu

改成VGA分辨率之后使用TPU
tpu_vga