Ubuntu 22 安装 Google Coral TPU NVME 驱动

July 8, 2024 · 496 words · 3 min

最近折腾图像识别和视频对象检测,因为需要长期低功耗运行,所以购入了 Google Coral TPU

Google Coral TPU 是一款专为边缘应用设计的机器学习加速器,由 Google 设计和开发,它基于 TensorFlow Lite 模型,能够在低功耗的情况下提供快速的神经网络性能,适用于边缘设备,用于目标检测和图像分类(如开源 NVR Frigate);可以使用 Yolo、MobikeNet 等模型

单个 Coral TPU 芯片有 4T OPS 的算力,每秒可以识别大概 100 帧的视频内容,非常适合低功耗、本地场景,可以有效保护隐私;虽然 Coral 从 2021年开始不再更新,但是在边缘场景下依然是非常合适的选择

Coral TPU 有多种型号,如开发板、USB 配件、M2、Mini PCIE等,这里使用的是 M.2 Accelerator B+M key 的版本。关于 Coral 不同类型的设备更多信息参考 Products

要求

  • 系统:Linux、Windows
  • 环境:python3.6-3.9

安装

安装 Coral TPU

  • 安装 Coral TPU

将 Coral TPU 安装到 M.2 插槽

  • 检查连接

等待启动后,检查 NVME 连接

lspci -nn | grep 089a

已经正确识别到了 Coral TPU

03:00.0 System peripheral [0880]: Global Unichip Corp. Coral Edge TPU [1ac1:089a]

安装驱动

需要安装 gasket-dkmslibedgetpu1-std

gasket-dkms 是一个动态内核模块支持 (DKMS) 包,它包含了用于与 EdgeTPU 进行通信的驱动程序;libedgetpu1-std 是一个 C++ 库,提供了一个更高级别的接口,让应用能够使用 EdgeTPU 进行模型推理

添加 Coral 软件源

echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-get update

如果提示 “不支持 ‘i386’ 体系结构,跳过配置文件 ‘main/binary-i386/Packages’ 的获取”, 则将 deb https://packages.cloud.google.com/apt coral-edgetpu-stable main 改为 deb [arch=amd64] https://packages.cloud.google.com/apt coral-edgetpu-stable main

安装 libedgetpu1-std

apt install libedgetpu1-std

安装 gasket-dkms

gasket-dkms 在 Ubuntu 22 中无法直接安装,因此需要手动编译安装

  • 安装依赖
sudo apt update
sudo apt upgrade
sudo apt install dkms devscripts debhelper dh-dkms -y
  • 下载源码
git clone https://github.com/google/gasket-driver.git
  • 编译

使用 root 用户进行编译

sudo -i
cd gasket-driver; debuild -us -uc -tc -b; cd ..

会进入项目目录编译并在当前目录生成编译后的软件

dpkg-buildpackage -us -uc -ui -tc -b
dpkg-buildpackage: info: 源码包 gasket-dkms
dpkg-buildpackage: info: 源码版本 1.0-18
dpkg-buildpackage: info: source distribution unstable
dpkg-buildpackage: info: 源码修改者 Coral <[email protected]>
 dpkg-source --before-build .
dpkg-buildpackage: info: 主机架构 amd64
... 
  • 检查软件信息

编译完成后,会在当前目录下生成 gasket-dkms_版本_all.deb 软件包及相关信息文件

ls -l gasket-dkms*
-rw-r--r-- 1 root root 49162  7月 14 19:07 gasket-dkms_1.0-18_all.deb
-rw-r--r-- 1 root root  1882  7月 14 19:07 gasket-dkms_1.0-18_amd64.build
-rw-r--r-- 1 root root  6700  7月 14 19:07 gasket-dkms_1.0-18_amd64.buildinfo
-rw-r--r-- 1 root root  1017  7月 14 19:07 gasket-dkms_1.0-18_amd64.changes
  • 安装软件

安装刚才编译的 gasket-dkms

sudo dpkg -i gasket-dkms_1.0-18_all.deb
  • 加载 apex 模块

加载 Coral 的驱动程序

sudo modprobe apex

添加用户权限

如果用户没有 root 权限,需要将该用户手动添加到 apex 用户组

sudo sh -c "echo 'SUBSYSTEM==\"apex\", MODE=\"0660\", GROUP=\"apex\"' >> /etc/udev/rules.d/65-apex.rules"
sudo groupadd apex
sudo adduser $USER apex

检查

  • 检查内核模块
lsmod | grep apex

会输出 apex 模块的信息,apex 模块依赖 gasket 模块

apex                   28672  0
gasket                135168  1 apex
  • 检查 PCIE 驱动
ls /dev/apex_0

设备存在说明 apex 模块成功加载了 Coral 设备

/dev/apex_0

参考文档

安装遇到的问题

  • 安装 gasket-dkms 提示错误,需要手动编译源码安装
apt install gasket-dkms
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成
下列【新】软件包将被安装:
  gasket-dkms
升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
需要下载 0 B/48.0 kB 的归档。
解压缩后会消耗 256 kB 的额外空间。
正在选中未选择的软件包 gasket-dkms。
(正在读取数据库 ... 系统当前共安装有 349763 个文件和目录。)
准备解压 .../gasket-dkms_1.0-18_all.deb  ...
正在解压 gasket-dkms (1.0-18) ...
正在设置 gasket-dkms (1.0-18) ...
Loading new gasket-1.0 DKMS files...
Building for 6.5.0-41-generic
Building initial module for 6.5.0-41-generic
ERROR: Cannot create report: [Errno 17] File exists: '/var/crash/gasket-dkms.0.crash'
Error! Bad return status for module build on kernel: 6.5.0-41-generic (x86_64)
Consult /var/lib/dkms/gasket/1.0/build/make.log for more information.
dpkg: 处理软件包 gasket-dkms (--configure)时出错:
 已安装 gasket-dkms 软件包 post-installation 脚本 子进程返回错误状态 10
在处理时有错误发生:
 gasket-dkms
  • 编译 gasket-dkms 提示 unstable

表示 gasket-dkms 软件包的 Changes 文件中使用了 “unstable” 作为发行版,而 Lintian 认为 “unstable” 不是一个有效的发行版名称,这是因为在 ubuntu 上编译 debian 的软件导致的;这个错误提示并不影响使用,忽略即可

....
 dpkg-source --after-build .
dpkg-buildpackage: info: binary-only upload (no source included)
Now running lintian gasket-dkms_1.0-18_amd64.changes ...
running with root privileges is not recommended!
E: gasket-dkms changes: bad-distribution-in-changes-file unstable
Finished running lintian.