请选择 进入手机版 | 继续访问电脑版

『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 3315|回复: 25

[经验分享] 大炮打蚊子:ESXi直通独显给Frigate硬件加速

[复制链接]

17

主题

251

帖子

1890

积分

论坛DIY达人

积分
1890
金钱
1639
HASS币
20
发表于 2024-8-10 19:25:09 | 显示全部楼层 |阅读模式

以下是修正后的文本:


该分享教程比较耗时,同时可能消耗您显示中的金钱,如无必要,够用就好。

起因

老家有个小主机(i5-8250U),上个月开始频繁死机重启,一直持续到写帖子现在依然没有彻底崩掉,也是经受考验了。

具体表现是 CPU 占用奇高,基本是顶着来运行,然后就是突然死机、重启,想要开个虚拟机备份一下资料都不行。

分析

  • 硅脂不行了,导致散热不行。
  • 实际上就跑了 OP 和 HA,没有其他服务。
  • 外壳加了一个散热风扇,而且机柜门已经打开。

解决

排查后发现是 HA 占用了大量的 CPU,然后进一步发现是 Frigate 导致的,CPU 占用那是达到了百分之几百。

这就很奇怪了,之前不会的,同样的配置和硬件,怀疑是近期版本更新的缘故。

另外发现,同样三个摄像头,同样的分辨率,公司部署的 Frigate 也是顶着 CPU 跑,却没有频繁死机,N100 果然有两下子。

既然定位到了原因,查看对比了出租房、老家、公司,发现都是顶着跑,基本可以把 CPU 吃满,没有去看 Frigate 的更新日志,直接自适应:升级硬件。

购置设备

计划是出租房的小主机(i7-1165G7)换下老家的小主机,购买新的小主机。

经过对比和考虑,最终在联想 P3 Tiny 和 P3 Ultra 之间选择了 Ultra,选了标配的 i5-13600 + 8G 内存 + 500G M2 固态。

到手后第一步内存升级,4 根 32g D5 插满,频率会下降至 3600,两根的是 4000。官方文档显示支持 128g,实际支持 192g,感觉 64-96g 会比较合适。

然后虚拟机使用群晖 ABB 套件进行备份、还原。这次顺带将 Frigate 运行到 Debian 中,发现占用率依旧很高。而 HA 移除 Frigate 后,CPU 占用变得很低,从之前的十几个 GHz 下降到两三百 MHz。

因为这台机器的 PCIE 扩展比较丰富,所以开始购置独显进行硬件加速,Frigate 是其一,同时也想给 Jellyfin 硬件转码使用。

独显直通

这里面坑那是非常多,折腾了半个多月才算弄好。

先是购买了 A400,结果发现直通后可以安装驱动,但是 nvidia-smi 却找不到设备。

直通给 Windows 也是可以安装驱动,但是会报 43 错误,同时没有 GPU 在任务管理器。

开始各种找教程、各种尝试,发现一个人有一个人的说法,在综合了各种方法和尝试之后,根据目前直通成功的例子,总结了以下几个关键点:

  1. 确认显卡是否兼容,如果反复尝试均失败,考虑更换显卡。
  2. 有些机器不需要通过 BIOS 禁用集显和添加高级参数,有些需要
  3. 找一个靠谱的显示器而不是便携屏,方便调试

具体步骤

以下步骤请根据您的机器进行实际调整。

  1. 通过 BIOS 禁用集显,正常选择独显进行直通。
  2. 正常安装 Ubuntu Server,注意在引导选项中,选择 EFI 引导并取消“是否为此虚拟机启用 UEFI 安全引导”的勾选。
  3. 安装好系统后,添加高级参数:
    hypervisor.cpuid.v0=FALSE
    pciPassthru.use64bitMMIO=TRUE
  4. SSH 登录后,禁用 nouveau 驱动:
    sudo bash -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
    sudo bash -c "echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
    sudo update-initramfs -u
    sudo reboot
  5. 安装依赖:
    sudo apt update
    sudo apt install gcc make build-essential libglvnd-dev pkg-config
  6. 安装驱动(根据自己的显卡型号下载):
    wget https://cn.download.nvidia.com/X ... 6_64-550.107.02.run
    chmod +x NVIDIA-Linux-x86_64-550.107.02.run
    sudo ./NVIDIA-Linux-x86_64-550.107.02.run
  7. 安装 CUDA
  8. 安装 NVIDIA Container Toolkit
  9. 查看是否安装成功:
    nvidia-smi

Frigate 配置

安装 Docker 和 Compose 方法有很多,这里主要贴配置:

services:
  frigate:
    image: ghcr.io/blakeblackshear/frigate:stable-tensorrt # 特定版本
    container_name: frigate
    privileged: true
    restart: unless-stopped
    shm_size: '256mb'
    devices:
      - /dev/nvidia0:/dev/nvidia0
    environment:
      - NVIDIA_VISIBLE_DEVICES=all
      - NVIDIA_DRIVER_CAPABILITIES=compute,utility,video
      - YOLO_MODELS=yolov4-608,yolov7x-640
      - USE_FP16=false
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /home/yourpatch/frigate/config:/config
      - /home/yourpatch/frigate/media:/media/frigate
      - type: tmpfs
        target: /tmp/cache
        tmpfs:
          size: 1000000000
    ports:
      - "5000:5000"
      - "8554:8554"
      - "8555:8555/tcp"
      - "8555:8555/udp"
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              device_ids: ['0']
              capabilities: [gpu]

备注:生成模型文件需要一段时间,会误以为卡在启动界面。

mqtt:
  host: 192.168.xx.xx
  port: 1883
  user: username
  password: userpassword
  client_id: frigate

detectors:
  tensorrt:
    type: tensorrt
    device: 0

model:
  path: /config/model_cache/tensorrt/8.5.3/yolov7-320.trt # 根据实际路径填写
  input_tensor: nchw
  input_pixel_format: rgb
  width: 320
  height: 320

cameras:
  cam_name:
    ffmpeg:
      hwaccel_args: preset-nvidia-h264 # 根据实际路径填写
      inputs:
        - path: rtsp://192.168.xx.xx:8554/cam_name
          roles:
            - detect
            - rtmp
    detect:
      enabled: true
      width: 1920
      height: 1080
      fps: 5
    objects:
      track:
        - person # 需要检测的对象
    record:
      enabled: false
      retain:
        days: 3
        mode: motion
      events:
        retain:
          default: 7
          mode: motion
    snapshots:
      enabled: true # 保留 jpg 格式到 /media/frigate/clips
      clean_copy: false # 保留 png 格式到 /media/frigate/clips
      retain:
        default: 7 # 快照默认保留天数
        objects:
          person: 10 # 对象默认保留天数
      quality: 100 # 图片质量
    motion:
      mask:
        - 0,669,0,0,1220,0,1178,721 #不需要检测的区域坐标
version: 0.14

参考资料(不分先后)

写在最后

个人对 ESXi 了解不是很深入,仅限交流。有问题可以查询官方文档,写得很详细。

个人对 Frigate 仅限于一般配置和使用,配置好了就没管它了,这次要不是因为折腾这个都不知道界面更新得这么好看。

分享的步骤和方法如有疏漏或者错误的,请补充或指正,可以帮助折腾 ESXi 直通显卡的朋友少走一点弯路。

多陪陪家人、多出门走走。



2024-08-10_175410.png

2024-08-10_192124.png

2024-08-10_192244.png

评分

参与人数 1金钱 +20 HASS币 +10 收起 理由
+ 20 + 10 感谢楼主分享!

查看全部评分

回复

使用道具 举报

17

主题

251

帖子

1890

积分

论坛DIY达人

积分
1890
金钱
1639
HASS币
20
 楼主| 发表于 2024-8-10 19:26:32 | 显示全部楼层 |阅读模式
> 该分享教程比较耗时,同时可能消耗您显示中的金钱,如无必要,够用就好。

## 起因

老家有个小主机(i5-8250U),上个月开始频繁死机重启,一直持续到写帖子现在依然没有彻底崩掉,也是经受考验了。

具体表现是 CPU 占用奇高,基本是顶着来运行,然后就是突然死机、重启,想要开个虚拟机备份一下资料都不行。

## 分析

- 硅脂不行了,导致散热不行。
- 实际上就跑了 OP 和 HA,没有其他服务。
- 外壳加了一个散热风扇,而且机柜门已经打开。

## 解决

排查后发现是 HA 占用了大量的 CPU,然后进一步发现是 Frigate 导致的,CPU 占用那是达到了百分之几百。

这就很奇怪了,之前不会的,同样的配置和硬件,怀疑是近期版本更新的缘故。

另外发现,同样三个摄像头,同样的分辨率,公司部署的 Frigate 也是顶着 CPU 跑,却没有频繁死机,N100 果然有两下子。

既然定位到了原因,查看对比了出租房、老家、公司,发现都是顶着跑,基本可以把 CPU 吃满,没有去看 Frigate 的更新日志,直接自适应:升级硬件。

## 购置设备

计划是出租房的小主机(i7-1165G7)换下老家的小主机,购买新的小主机。

经过对比和考虑,最终在联想P3 Tiny 和 P3 Ultra 之间选择了 Ultra,选了标配的 i5-13600 + 8G 内存 + 500G M2 固态。

到手后第一步内存升级,4 根 32g D5 插满,频率会下降至 3600,两根的是 4000,官方文档显示支持 128g,实际支持 192g,感觉 64-96g 会比较合适。

然后虚拟机使用群晖 ABB 套件进行备份、还原。这次顺带将 Frigate 运行到 Debian 中,发现占用率依旧很高。而 HA 移除 Frigate 后,CPU 占用变得很低,从之前的十几个 GHz 下降到两三百 MHz。

因为这台机器的 PCIE 扩展比较丰富,所以开始购置独显进行硬件加速,Frigate 是其一,同时也想给 Jellyfin 硬件转码使用。

## 独显直通

这里面坑那是非常多,折腾了半个多月才算弄好。

先是购买了 A400,结果发现直通后可以安装驱动,但是 nvidia-smi 却找不到设备。

直通给 win 也是可以安装驱动,但是会报 43 错误,同时没有 GPU 在任务管理器。

开始各种找教程、各种尝试,发现一个人有一个人的说法,在综合了各种方法和尝试之后,根据目前直通成功的例子,总结了以下几个关键点:

- 1、确认显卡是否兼容,如果反复尝试均失败,考虑更换显卡;
- 2、有些机器不需要通过 BIOS 禁用集显和添加高级参数,有些需要;
- 3、找一个靠谱的显示器而不是便携屏,方便调试。

## 具体步骤

> 以下步骤请根据您的机器进行实际调整。

1. 通过 BIOS 禁用集显,正常选择独显进行直通
2. 正常安装 Ubuntu Server,注意在引导选项中,选择 EFI 引导并取消“是否为此虚拟机启用 UEFI 安全引导”的勾选
3. 安装好系统后,添加高级参数:
> hypervisor.cpuid.v0=FALSE
> pciPassthru.use64bitMMIO=TRUE
4. SSH 登入后,禁用 nouveau 驱动
```
sudo bash -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
sudo bash -c "echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
sudo update-initramfs -u
sudo reboot
```
5. 安装依赖
```
sudo apt update
sudo apt install gcc make build-essential libglvnd-dev pkg-config
```
6. 安装驱动(根据自己的显卡型号下载)
```
wget https://cn.download.nvidia.com/X ... 6_64-550.107.02.run
chmod +x NVIDIA-Linux-x86_64-550.107.02.run
sudo ./NVIDIA-Linux-x86_64-550.107.02.run

````
7. 安装 [CUDA](https://developer.nvidia.com/cuda-12-4-0-download-archive?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=22.04&target_type=runfile_local)
8. 安装 [NVIDIA Container Toolkit](https://docs.nvidia.com/datacent ... /install-guide.html#installing-with-apt)
9. 查看是否安装成功
```
nvidia-smi
```

## Frigate 配置
安装 Docker 和 Compose 方法有很多,这里主要贴配置:
```
services:
  frigate:
    image: ghcr.io/blakeblackshear/frigate:stable-tensorrt # 特定版本
    container_name: frigate
    privileged: true
    restart: unless-stopped
    shm_size: '256mb'
    devices:
      - /dev/nvidia0:/dev/nvidia0
    environment:
      - NVIDIA_VISIBLE_DEVICES=all
      - NVIDIA_DRIVER_CAPABILITIES=compute,utility,video
      - YOLO_MODELS=yolov4-608,yolov7x-640
      - USE_FP16=false
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /home/yourpatch/frigate/config:/config
      - /home/yourpatch/frigate/media:/media/frigate
      - type: tmpfs
        target: /tmp/cache
        tmpfs:
          size: 1000000000
    ports:
      - "5000:5000"
      - "8554:8554"
      - "8555:8555/tcp"
      - "8555:8555/udp"
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              device_ids: ['0']
              capabilities: [gpu]
```

备注:生成模型文件需要一段时间,会误以为卡在启动界面。

```
#【MQTT服务器】
mqtt:
  host: 192.168.xx.xx
  port: 1883
  user: username
  password: userpassword
  client_id: frigate

detectors:
  tensorrt:
    type: tensorrt
    device: 0

model:
  path: /config/model_cache/tensorrt/8.5.3/yolov7-320.trt # 根据实际路径填写
  input_tensor: nchw
  input_pixel_format: rgb
  width: 320
  height: 320

#【摄像头配置】
cameras:
  cam_name:
    ffmpeg:
      hwaccel_args: preset-nvidia-h264 # 根据实际路径填写
      inputs:
        - path: rtsp://192.168.xx.xx:8554/cam_name
          roles:
            - detect
            - rtmp
    detect:
      enabled: true
      width: 1920
      height: 1080
      fps: 5
    objects:
      track:
        - person # 需要检测的对象
    record:
      enabled: false
      retain:
        days: 3
        mode: motion
      events:
        retain:
          default: 7
          mode: motion
    snapshots:
      enabled: true # 保留jpg格式到/media/frigate/clips
      clean_copy: false # 保留png格式到/media/frigate/clips
      retain:
        default: 7 # 快照默认保留天数
        objects:
          person: 10 # 对象默认保留天数
      quality: 100 # 图片质量
    motion:
      mask:
        - 0,669,0,0,1220,0,1178,721 #不需要检测的区域坐标
version: 0.14
```

## 参考资料(不分先后)

[参考1](https://docs.frigate.video/)

[参考2](https://www.yydnas.cn/2024/06/20 ... E6%A1%88/index.html)

[参考3](https://badb100d.com/2021/01/04/2021-01-04/)

[参考4](https://blog.wangqi.love/article ... ubuntu%2022.04.html)

[参考5](https://www.mmuaa.com/post/13c94b84a964cbfd.html)

[参考6](https://www.bilibili.com/video/BV1Zm421N7bB/?spm_id_from=333.337.search-card.all.click)

## 写在最后

个人对 ESXi 了解不是很深入,仅限交流。有问题可以查询官方文档,写得很详细。

个人对 Frigate 仅限于一般配置和使用,配置好了就没管它了,这次要不是因为折腾这个都不知道界面更新得这么好看。

分享的步骤和方法如有疏漏或者错误的,请补充或指正,可以帮助折腾 ESXi 直通显卡的朋友少走一点弯路。

**多陪陪家人、多出门走走**







回复

使用道具 举报

149

主题

2306

帖子

7133

积分

元老级技术达人

积分
7133
金钱
4822
HASS币
30
发表于 2024-8-11 11:39:40 | 显示全部楼层
我的威联通nas才8g内存,是不是应该升级下了。虚拟机里给了4g给ha。2g给了openwrt,
回复

使用道具 举报

3

主题

15

帖子

276

积分

论坛DIY达人

积分
276
金钱
256
HASS币
20
发表于 2024-8-11 21:23:35 | 显示全部楼层
其实我觉得i5-8250U这个U,就没必要开虚拟机了,我的建议只直接安装pve系统,然后pve里面安装docker,把显卡直接映射到容器里面,配置openvino推理。我的n100  6个摄像头cpuload才跑到2左右。毫无压力
回复

使用道具 举报

1

主题

198

帖子

2185

积分

金牌会员

Rank: 6Rank: 6

积分
2185
金钱
1987
HASS币
0
发表于 2024-8-25 00:35:04 | 显示全部楼层
直接买一个TPU,不折腾
回复

使用道具 举报

10

主题

1363

帖子

4353

积分

论坛元老

Rank: 8Rank: 8

积分
4353
金钱
2990
HASS币
0
发表于 2024-8-25 11:32:16 | 显示全部楼层
firewater 发表于 2024-8-25 00:35
直接买一个TPU,不折腾

这货如今很容易买了么?
回复

使用道具 举报

9

主题

136

帖子

900

积分

高级会员

Rank: 4

积分
900
金钱
764
HASS币
0
发表于 2024-8-25 19:18:32 | 显示全部楼层
瞎折腾,要么pve直接宿主机跑frigate,要么买个TPU。
btw,ESXI真渣渣
回复

使用道具 举报

17

主题

251

帖子

1890

积分

论坛DIY达人

积分
1890
金钱
1639
HASS币
20
 楼主| 发表于 2024-8-25 22:27:11 | 显示全部楼层
zrt0603 发表于 2024-8-11 21:23
其实我觉得i5-8250U这个U,就没必要开虚拟机了,我的建议只直接安装pve系统,然后pve里面安装docker,把显 ...

感谢分享方案。有台小主机的是N100,更改探测器设置后(参数默认),CPU占用还是高(三个摄像头,串流分辨率保持一致,可能是分辨率太高?2560*1440),但检测速度有提升
2024-08-25_221318.png

另外发现探测器使用640*640分辨率和320*320分辨率之间的准确率似乎区别不大(使用N卡,单个摄像头,1920*1080),比较明显的是识别时间3ms变为30ms、同时显卡占用增加一倍多
2024-08-25_221847.png
回复

使用道具 举报

17

主题

251

帖子

1890

积分

论坛DIY达人

积分
1890
金钱
1639
HASS币
20
 楼主| 发表于 2024-8-25 22:30:18 | 显示全部楼层
bugensui 发表于 2024-8-11 11:39
我的威联通nas才8g内存,是不是应该升级下了。虚拟机里给了4g给ha。2g给了openwrt, ...

够用就好……没有试过NAS跑虚拟机,它做好数据存储类工作就行
回复

使用道具 举报

17

主题

251

帖子

1890

积分

论坛DIY达人

积分
1890
金钱
1639
HASS币
20
 楼主| 发表于 2024-8-25 22:39:45 | 显示全部楼层
zjhcr 发表于 2024-8-25 19:18
瞎折腾,要么pve直接宿主机跑frigate,要么买个TPU。
btw,ESXI真渣渣

当时想过不用ESXi了,改用PVE或者Hyper-V。了解和尝试以后,发现我对PVE如同HA的自动化一样很难理解,看着界面挺简单就是玩不转……Hyper-V主要考虑系统可能来个自动更新(虽然有禁用的办法),然后虚拟机不能网页只能软件。备份方面Hyper-V和ESXi可以通过NAS方便备份还原,PVE多一些步骤。思来想去,还是选了ESXi:原先的虚拟机还原一下就能用不用重新建、使用习惯不用改,这对我而言是最不折腾的了(除了折腾显卡直通)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-12-14 08:03 , Processed in 0.094441 second(s), 37 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表