0025 MPDTPU(M.2 E)

来自Mcuzone Wiki
(重定向自0025 MPTPUD(M.2 E)

关键词

树莓派5、PCIe、TPU、DTPU、Edge TPU、驱动安装、操作演示、AI、google、Coral、PCIe Switch、M.2 E key

一、简介

MPDTPU是一款专为树莓派5设计的双TPU扩展板,通过16Pin FPC接口连接至树莓派5,扩展板上通过一颗一扩二的PCIe Switch芯片来驱动双TPU模组。Coral的双TPU模组板载了两颗Google的Edge TPU处理器,使用了非标的M.2 E key接口。双TPU模组可提供8TOPS的总性能,能效为2TOPS每瓦。

二、硬件资源

1. 采用16Pin PCIe接口,板载一扩二PCIe Switch芯片;

2. 板载M.2 E-key接插件2230,支持双TPU模组;

3. TPU模组通过16Pin PCIe接口供电,也可通过40Pin接口供电;

4. 标配INA219电压电流采样电路,可监测双TPU运行功耗;

5. 配40Pin贴片母座,可搭配PC104接插件连接至树莓派5的40Pin插针;

6. 可选24C32 E2PROM,可用于存放设备初始化信息;

7. 尺寸:56x65mm,PCB板通过UL和ROHS认证,防火等级94V-0;;

8. 四层板设计,高效导热,标配导热硅胶垫,可选配散热片;

9. 可选配铝合金外壳。

0025_MPDTPU_32.jpg

三、系统烧写

3.1 本文档使用的镜像为2024-07-04-raspios-bookworm-arm64.img.xz(树莓派OS,Raspberry Pi OS with desktop)。

树莓派OS下载地址:

https://www.raspberrypi.com/software/operating-systems/#raspberry-pi-os-64-bit

3.2 系统烧写在SD(TF)卡上,点击直达烧写方法说明

注意:烧写系统用的TF卡的容量至少为16G,否则可能会在安装配置过程中报空间不足!

四、树莓派OS下的驱动安装配置与演示

注意:此操作演示需要确保能稳定连通外网(需自备方法),否则许多文件无法下载或下载不全,最后可能会造成代码运行失败。

4.1 配置config.txt

系统启动后打开树莓派终端输入命令:

sudo nano /boot/firmware/config.txt

或者:

sudo mousepad /boot/firmware/config.txt

在文件最下方添加以下代码:

dtparam=pciex1

kernel=kernel8.img

dtoverlay=pineboards-hat-ai

0006_MPW7_TPU_01.jpg

0006_MPW7_TPU_02.jpg

代码添加成功后,保存并重启系统:

sudo reboot

4.2 确认软件环境

系统重启后打开打开树莓派终端输入命令:

uname -r

确保内核版本大于4.18后输入:

lsmod | grep apex

确保没有输出则可以开始安装TPU驱动。

0006_MPW7_TPU_03.jpg

4.3 安装必要软件

确保网络能连通外网(需自备方法)后,添加Google TPU软件库:

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 -

0006_MPW7_TPU_04.jpg

添加完成后更新软件列表:

sudo apt-get update

0006_MPW7_TPU_06.jpg

更新完成后安装必要的软件:

sudo apt-get install cmake libedgetpu1-std devscripts debhelper dkms dh-dkms

0006_MPW7_TPU_07.jpg

0006_MPW7_TPU_08.jpg

4.4 安装Gasket Driver

依次输入以下命令安装Gasket Driver:

git clone https://github.com/google/gasket-driver.git

cd gasket-driver

sudo debuild -us -uc -tc -b

cd ..

sudo dpkg -i gasket-dkms_1.0-18_all.deb

0006_MPW7_TPU_09.jpg

0006_MPW7_TPU_10.jpg

0006_MPW7_TPU_11.jpg

安装完成后输入以下命令确保驱动以及软件安装成功:

sudo apt-get install gasket-dkms libedgetpu1-std

0006_MPW7_TPU_12.jpg

接下来添加udev rule去获得设备操作权限:

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

添加用户到apex:

sudo groupadd apex

sudo adduser $USER apex

0006_MPW7_TPU_13.jpg

设置完成后重启系统:

sudo reboot

4.5 验证模块检测以及驱动安装

系统启动后验证模块检测以及驱动安装:

lspci -nn | grep 089a

ls /dev/apex_0

0025_MPDTPU_01.jpg

这里板载双TPU,因此可以看到两个TPU模块。

输入sudo lspci -v可以看到驱动加载,同样有两个TPU模块的驱动:

0025_MPDTPU_02.jpg

4.6 代码运行环境配置

Google TPU模块代码运行需要在Python3.6-3.9之间,而树莓派最新系统的Python版本为3.11,因此我们需要使用Pyenv来下载老版本Python。

首先进行依赖安装:

sudo apt-get install -y make build-essential libssl-dev zlib1g-dev \libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev \libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python3-openssl

0006_MPW7_TPU_17.jpg

0006_MPW7_TPU_18.jpg

依赖安装完成后进行pyenv的安装:

curl https://pyenv.run | bash

0006_MPW7_TPU_19.jpg

输入:

sudo nano ~/.bashrc

或者:

sudo mousepad ~/.bashrc

在文件最下面添加以下代码:

export PYENV_ROOT="$HOME/.pyenv"

[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"

eval "$(pyenv init -)"

0006_MPW7_TPU_36.jpg

0006_MPW7_TPU_21.jpg

添加完成后保存退出并重新加载shell:

exec "$SHELL"

0006_MPW7_TPU_22.jpg

接下来我们可以利用pyenv安装老系统版本Python:

pyenv install -v 3.8.8

0006_MPW7_TPU_23.jpg

0006_MPW7_TPU_24.jpg

等待安装成功后我们将系统Python版本更改为3.8.8:

pyenv global 3.8.8

更改成功后可以查看当前Python使用版本为3.8.8:

pyenv versions

python3 -V

0006_MPW7_TPU_25.jpg

4.7 下载代码和运行模组

依次输入以下命令进行下载:

mkdir coral && cd coral

git clone https://github.com/google-coral/pycoral.git

cd pycoral

cd test_data

git clone https://github.com/google-coral/test_data.git

0006_MPW7_TPU_26.jpg

0006_MPW7_TPU_27.jpg

接下来下载代码运行模组

pip3 install numpy

0006_MPW7_TPU_28.jpg

pip3 install Pillow

0006_MPW7_TPU_29.jpg

pip3 install --extra-index-url https://google-coral.github.io/py-repo/ pycoral

0006_MPW7_TPU_30.jpg

4.8 运行代码

模组下载完成后返回 coral/pycoral路径下

cd ..

4.8.1 单TPU运行单模型

输入以下代码进行代码运行

0006_MPW7_TPU_39.jpg

注意:我们可以复制下列代码,但是请先粘贴到文本软件中,按照上图的格式,删除多余的回车符,再复制然后粘贴到终端中运行:

python3 examples/classify_image.py \

--model test_data/test_data/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite \

--labels test_data/test_data/inat_bird_labels.txt \

--input test_data/test_data/parrot.jpg

0025_MPDTPU_03.jpg

4.8.2 双TPU运行多模型

输入以下代码进行代码运行

0025_MPDTPU_06.jpg

注意:我们可以复制下列代码,但是请先粘贴到文本软件中,按照上图的格式,删除多余的回车符,再复制然后粘贴到终端中运行:

python3 examples/two_models_inference.py \

--classification_model test_data/mobilenet_v2_1.0_224_quant_edgetpu.tflite \

--detection_model \

test_data/ssd_mobilenet_v2_face_quant_postprocess_edgetpu.tflite \

--image test_data/parrot.jpg

0025_MPDTPU_04.jpg

4.8.3 双TPU运行单模型

输入以下代码进行代码运行

0025_MPDTPU_07.jpg

注意:我们可以复制下列代码,但是请先粘贴到文本软件中,按照上图的格式,删除多余的回车符,再复制然后粘贴到终端中运行:

python3 examples/model_pipelining_classify_image.py \

--models \

test_data/pipeline/inception_v3_299_quant_segment_%d_of_2_edgetpu.tflite \

--labels test_data/imagenet_labels.txt \

--input test_data/parrot.jpg

0025_MPDTPU_05.jpg

鉴于本开发板的测试需要在外网下载大量数据,为了方便用户进行测试,用户在购买本开发板后,可以联系我司获取已经配置完毕的树莓派OS镜像。

五、E2PROM芯片烧写操作演示

5.1 概述

MPDTPU扩展板板载E2PROM芯片。树莓派系统在启动过程中会通过I2C引脚查找E2PROM并读取E2PROM信息,因此我们可以向E2PROM芯片烧写我们需要的信息以及设备树文件,以此来实现配置信息自动加载的功能。

注意,烧写过程中需要连接外网,请保持网络畅通。

5.2 打开I2C

依次选择如下图项目后,打开I2C后,然后重启树莓派OS。

MPS2280iPoE_08.png

MPS2280iPoE_09.png

5.3 安装工具

输入以下命令安装工具:

git clone https://github.com/raspberrypi/utils.git

cd utils/eeptools

cmake .

make

sudo make install

0025_MPDTPU_08.jpg

下载和放置i2c-gpio.dtbo文件:

wget http://www.mcuzone.com/wiki/0025_MPDTPU/i2c-gpio.zip

unzip i2c-gpio.zip

sudo cp i2c-gpio.dtbo /boot/overlays

0025_MPDTPU_33.jpg

完成后重启系统:

sudo reboot

5.4 编辑配置文件

执行下列命令:

cd utils/eeptools

sudo mousepad eeprom_settings.txt

0025_MPDTPU_10.jpg

0025_MPDTPU_11.jpg

复制eeprom_settinggs.txt文件的所有内容后退出。

然后执行:

sudo mousepad myhat_eeprom.txt

0025_MPDTPU_12.jpg

创建myhat_eeprom.txt文件,将刚才复制的文本粘贴到里面,红字段落的内容可以自定义修改,在当前演示,我们将设备树文件修改为关闭蓝牙,即把设备树改为disable-bt-pi5,修改完毕后保存文件并退出:

0025_MPDTPU_27.jpg

随后使用E2PROM工具生成UUID:

eepmake myhat_eeprom.txt myhat.eep

0025_MPDTPU_28.jpg

将产生的UUID修改到myhat_eeprom.txt,然后保存并退出:

0025_MPDTPU_29.jpg

输入以下命令使能I2C-9,并查看结果:

sudo dtoverlay i2c-gpio i2c_gpio_sda=0 i2c_gpio_scl=1 bus=9

i2cdetect -y 9

0025_MPDTPU_16.jpg

修改eepflash.sh内容地址为0050:

sudo nano eepflash.sh

0025_MPDTPU_17.jpg

0025_MPDTPU_18.jpg

保存并退出。

5.5 烧写E2PROM

输入以下命令烧写E2PROM:

sudo ./eepflash.sh -w -t=24c32 -a=0x50 -f=myhat.eep

0025_MPDTPU_19.jpg

烧写完成后重启系统,即可看到蓝牙被禁用:

0025_MPDTPU_20.jpg

六、电压电流监测功能演示

MPDTPU扩展板添加了电压、电流检测功能。使用本扩展板可以实时检测双TPU的电压、电流以及功率等数据。

1. 按照5.2节,在树莓派OS中打开打开I2C。

2. 执行下列命令,安装python库:

pip3 intsall smbus

0025_MPDTPU_21.jpg

3. 执行下列命令,下载监测软件:

wget http://www.mcuzone.com/wiki/0025_MPDTPU/INA219.zip

unzip INA219.zip

0025_MPDTPU_34.jpg

4. 运行监测软件:

python3 INA219.py

不插TPU模块:

0025_MPDTPU_24.jpg

插TPU模块静态:

0025_MPDTPU_23.jpg

单TPU运行:

0025_MPDTPU_30.jpg

双TPU同时运行:

0025_MPDTPU_25.jpg

在双TPU同时运行时,可以看到最大电流已经升至0.912A,对应约4.527W功率,双TPU同时工作时功率基本是单TPU工作的功率(最大电流0.524A,对应约2.603W功率)的大约两倍。

联系我们

4f7e81daf8791971.jpg 79c020da7ad0af9b.jpg 2851e01a0549e6f7.gif 0003_bb.jpg 0005_qq.jpg QQ:8204136

邮件:mcuzone@vip.qq.com

电话:13957118045

如本页面有任何疏漏、错误或者侵权,请通过上述途径联系我们,谢谢!

Copyright 2004-2024 野芯科技