跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
Mcuzone Wiki
搜索
搜索
登录
个人工具
登录
查看“0025 MPDTPU(M.2 E) EN”的源代码
页面
讨论
大陆简体
阅读
查看源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
查看源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
←
0025 MPDTPU(M.2 E) EN
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
== '''关键词''' == 树莓派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 E<sup>2</sup>PROM,可用于存放设备初始化信息; 7. 尺寸:56x65mm,PCB板通过UL和ROHS认证,防火等级94V-0;; 8. 四层板设计,高效导热,标配导热硅胶垫,可选配散热片; 9. 可选配铝合金外壳。 http://www.mcuzone.com/wiki/0025_MPDTPU/0025_MPDTPU_32.jpg == '''三、系统烧写''' == 3.1 本文档使用树莓派OS,Raspberry Pi OS with desktop,镜像为2024-07-04-raspios-bookworm-arm64.img.xz。 树莓派OS下载地址: https://www.raspberrypi.com/software/operating-systems/#raspberry-pi-os-64-bit 3.2 系统烧写在SD(TF)卡上,[[0005 MPS2242 2280 2280P(单SSD扩展板)#3.2 从TF卡启动|点击直达烧写方法说明]]。 '''''注意:烧写系统用的TF卡的容量至少为16G,否则可能会在安装配置过程中报空间不足!''''' == '''四、树莓派OS的操作演示''' == '''''注意:此操作演示需要确保能稳定连通外网(需自备方法),否则许多文件无法下载或下载不全,最后可能会造成代码运行失败。''''' === 4.1 配置config.txt === 系统启动后打开树莓派终端输入命令: <code>sudo nano /boot/firmware/config.txt</code> 或者: <code>sudo mousepad /boot/firmware/config.txt</code> 在文件最下方添加以下代码: <code>dtparam=pciex1</code> <code>kernel=kernel8.img</code> <code>dtoverlay=pineboards-hat-ai</code> http://www.mcuzone.com/wiki/0006_MPW7_TPU/0006_MPW7_TPU_01.jpg http://www.mcuzone.com/wiki/0006_MPW7_TPU/0006_MPW7_TPU_02.jpg 代码添加成功后,保存并重启系统: <code>sudo reboot</code> === 4.2 确认软件环境 === 系统重启后打开打开树莓派终端输入命令: <code>uname -r</code> 确保内核版本大于4.18后输入: <code>lsmod | grep apex</code> 确保没有输出则可以开始安装TPU驱动。 http://www.mcuzone.com/wiki/0006_MPW7_TPU/0006_MPW7_TPU_03.jpg === 4.3 安装必要软件 === 确保网络能连通外网(需自备方法)后,添加Google TPU软件库: <code>echo "deb <nowiki>https://packages.cloud.google.com/apt</nowiki> coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list</code> <code>curl <nowiki>https://packages.cloud.google.com/apt/doc/apt-key.gpg</nowiki> | sudo apt-key add -</code> http://www.mcuzone.com/wiki/0006_MPW7_TPU/0006_MPW7_TPU_04.jpg 添加完成后更新软件列表: <code>sudo apt-get update</code> http://www.mcuzone.com/wiki/0006_MPW7_TPU/0006_MPW7_TPU_06.jpg 更新完成后安装必要的软件: <code>sudo apt-get install cmake libedgetpu1-std devscripts debhelper dkms dh-dkms</code> http://www.mcuzone.com/wiki/0006_MPW7_TPU/0006_MPW7_TPU_07.jpg http://www.mcuzone.com/wiki/0006_MPW7_TPU/0006_MPW7_TPU_08.jpg === 4.4 安装Gasket Driver === 依次输入以下命令安装Gasket Driver: <code>git clone <nowiki>https://github.com/google/gasket-driver.git</nowiki></code> <code>cd gasket-driver</code> <code>sudo debuild -us -uc -tc -b</code> <code>cd ..</code> <code>sudo dpkg -i gasket-dkms_1.0-18_all.deb</code> http://www.mcuzone.com/wiki/0006_MPW7_TPU/0006_MPW7_TPU_09.jpg http://www.mcuzone.com/wiki/0006_MPW7_TPU/0006_MPW7_TPU_10.jpg http://www.mcuzone.com/wiki/0006_MPW7_TPU/0006_MPW7_TPU_11.jpg 安装完成后输入以下命令确保驱动以及软件安装成功: <code>sudo apt-get install gasket-dkms libedgetpu1-std</code> http://www.mcuzone.com/wiki/0006_MPW7_TPU/0006_MPW7_TPU_12.jpg 接下来添加udev rule去获得设备操作权限: <code>sudo sh -c "echo 'SUBSYSTEM==\"apex\", MODE=\"0660\", GROUP=\"apex\"' >> /etc/udev/rules.d/65-apex.rules"</code> 添加用户到apex: <code>sudo groupadd apex</code> <code>sudo adduser $USER apex</code> http://www.mcuzone.com/wiki/0006_MPW7_TPU/0006_MPW7_TPU_13.jpg 设置完成后重启系统: <code>sudo reboot</code> === 4.5 验证模块检测以及驱动安装 === 系统启动后验证模块检测以及驱动安装: <code>lspci -nn | grep 089a</code> <code>ls /dev/apex_0</code> http://www.mcuzone.com/wiki/0025_MPDTPU/0025_MPDTPU_01.jpg 这里板载双TPU,因此可以看到两个TPU模块。 输入<code>sudo lspci -v</code>可以看到驱动加载,同样有两个TPU模块的驱动: http://www.mcuzone.com/wiki/0025_MPDTPU/0025_MPDTPU_02.jpg === 4.6 代码运行环境配置 === Google TPU模块代码运行需要在Python3.6-3.9之间,而树莓派最新系统的Python版本为3.11,因此我们需要使用Pyenv来下载老版本Python。 首先进行依赖安装: <code>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</code> http://www.mcuzone.com/wiki/0006_MPW7_TPU/0006_MPW7_TPU_17.jpg http://www.mcuzone.com/wiki/0006_MPW7_TPU/0006_MPW7_TPU_18.jpg 依赖安装完成后进行pyenv的安装: <code>curl <nowiki>https://pyenv.run</nowiki> | bash</code> http://www.mcuzone.com/wiki/0006_MPW7_TPU/0006_MPW7_TPU_19.jpg 输入: <code>sudo nano ~/.bashrc</code> 或者: <code>sudo mousepad ~/.bashrc</code> 在文件最下面添加以下代码: <code>export PYENV_ROOT="$HOME/.pyenv"</code> <code>[[</code><code> -d $PYENV_ROOT/bin </code><code>]]</code><code> && export PATH="$PYENV_ROOT/bin:$PATH"</code> <code>eval "$(pyenv init -)"</code> http://www.mcuzone.com/wiki/0006_MPW7_TPU/0006_MPW7_TPU_36.jpg http://www.mcuzone.com/wiki/0006_MPW7_TPU/0006_MPW7_TPU_21.jpg 添加完成后保存退出并重新加载shell: <code>exec "$SHELL"</code> http://www.mcuzone.com/wiki/0006_MPW7_TPU/0006_MPW7_TPU_22.jpg 接下来我们可以利用pyenv安装老系统版本Python: <code>pyenv install -v 3.8.8</code> http://www.mcuzone.com/wiki/0006_MPW7_TPU/0006_MPW7_TPU_23.jpg http://www.mcuzone.com/wiki/0006_MPW7_TPU/0006_MPW7_TPU_24.jpg 等待安装成功后我们将系统Python版本更改为3.8.8: <code>pyenv global 3.8.8</code> 更改成功后可以查看当前Python使用版本为3.8.8: <code>pyenv versions</code> <code>python3 -V</code> http://www.mcuzone.com/wiki/0006_MPW7_TPU/0006_MPW7_TPU_25.jpg === 4.7 下载代码和运行模组 === 依次输入以下命令进行下载: <code>mkdir coral && cd coral</code> <code>git clone <nowiki>https://github.com/google-coral/pycoral.git</nowiki></code> <code>cd pycoral</code> <code>cd test_data</code> <code>git clone <nowiki>https://github.com/google-coral/test_data.git</nowiki></code> http://www.mcuzone.com/wiki/0006_MPW7_TPU/0006_MPW7_TPU_26.jpg http://www.mcuzone.com/wiki/0006_MPW7_TPU/0006_MPW7_TPU_27.jpg 接下来下载代码运行模组 <code>pip3 install numpy</code> http://www.mcuzone.com/wiki/0006_MPW7_TPU/0006_MPW7_TPU_28.jpg <code>pip3 install Pillow</code> http://www.mcuzone.com/wiki/0006_MPW7_TPU/0006_MPW7_TPU_29.jpg <code>pip3 install --extra-index-url <nowiki>https://google-coral.github.io/py-repo/</nowiki> pycoral</code> http://www.mcuzone.com/wiki/0006_MPW7_TPU/0006_MPW7_TPU_30.jpg === 4.8 运行代码 === 模组下载完成后返回 coral/pycoral路径下 <code>cd ..</code> ==== 4.8.1 单TPU运行单模型 ==== 输入以下代码进行代码运行 http://www.mcuzone.com/wiki/0006_MPW7_TPU/0006_MPW7_TPU_39.jpg 注意:我们可以复制下列代码,但是请先粘贴到文本软件中,按照上图的格式,删除多余的回车符,再复制然后粘贴到终端中运行: <code>python3 examples/classify_image.py \</code> <code>--model test_data/test_data/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite \</code> <code>--labels test_data/test_data/inat_bird_labels.txt \</code> <code>--input test_data/test_data/parrot.jpg</code> http://www.mcuzone.com/wiki/0025_MPDTPU/0025_MPDTPU_03.jpg ==== 4.8.2 双TPU运行多模型 ==== 输入以下代码进行代码运行 http://www.mcuzone.com/wiki/0025_MPDTPU/0025_MPDTPU_06.jpg 注意:我们可以复制下列代码,但是请先粘贴到文本软件中,按照上图的格式,删除多余的回车符,再复制然后粘贴到终端中运行: <code>python3 examples/two_models_inference.py \</code> <code>--classification_model test_data/mobilenet_v2_1.0_224_quant_edgetpu.tflite \</code> <code>--detection_model \</code> <code>test_data/ssd_mobilenet_v2_face_quant_postprocess_edgetpu.tflite \</code> <code>--image test_data/parrot.jpg</code> http://www.mcuzone.com/wiki/0025_MPDTPU/0025_MPDTPU_04.jpg ==== 4.8.3 双TPU运行单模型 ==== 输入以下代码进行代码运行 http://www.mcuzone.com/wiki/0025_MPDTPU/0025_MPDTPU_07.jpg 注意:我们可以复制下列代码,但是请先粘贴到文本软件中,按照上图的格式,删除多余的回车符,再复制然后粘贴到终端中运行: <code>python3 examples/model_pipelining_classify_image.py \</code> <code>--models \</code> <code>test_data/pipeline/inception_v3_299_quant_segment_%d_of_2_edgetpu.tflite \</code> <code>--labels test_data/imagenet_labels.txt \</code> <code>--input test_data/parrot.jpg</code> http://www.mcuzone.com/wiki/0025_MPDTPU/0025_MPDTPU_05.jpg '''<big>鉴于本开发板的测试需要在外网下载大量数据,为了方便用户进行测试,用户在购买本开发板后,可以联系我司获取已经配置完毕的树莓派OS镜像。</big>''' == '''五、E<sup>2</sup>PROM芯片烧写操作演示''' == === 5.1 概述 === MPDTPU扩展板板载E<sup>2</sup>PROM芯片。树莓派系统在启动过程中会通过I<sup>2</sup>C引脚查找E<sup>2</sup>PROM并读取E<sup>2</sup>PROM信息,因此我们可以向E<sup>2</sup>PROM芯片烧写我们需要的信息以及设备树文件,以此来实现配置信息自动加载的功能。 '''''注意,烧写过程中需要连接外网,请保持网络畅通。''''' === 5.2 打开I<sup>2</sup>C === 依次选择如下图项目后,打开I<sup>2</sup>C后,然后重启树莓派OS。 http://www.mcuzone.com/wiki/0002_MPS2280iPoE/MPS2280iPoE_08.png http://www.mcuzone.com/wiki/0002_MPS2280iPoE/MPS2280iPoE_09.png === 5.3 安装工具 === 输入以下命令安装工具: <code>git clone <nowiki>https://github.com/raspberrypi/utils.git</nowiki></code> <code>cd utils/eeptools</code> <code>cmake .</code> <code>make</code> <code>sudo make install</code> http://www.mcuzone.com/wiki/0025_MPDTPU/0025_MPDTPU_08.jpg 下载和放置i2c-gpio.dtbo文件: <code>wget <nowiki>http://www.mcuzone.com/wiki/0025_MPDTPU/i2c-gpio.zip</nowiki></code> <code>unzip i2c-gpio.zip</code> <code>sudo cp i2c-gpio.dtbo /boot/overlays</code> http://www.mcuzone.com/wiki/0025_MPDTPU/0025_MPDTPU_33.jpg 完成后重启系统: <code>sudo reboot</code> === 5.4 编辑配置文件 === 执行下列命令: <code>cd utils/eeptools</code> <code>sudo mousepad eeprom_settings.txt</code> http://www.mcuzone.com/wiki/0025_MPDTPU/0025_MPDTPU_10.jpg http://www.mcuzone.com/wiki/0025_MPDTPU/0025_MPDTPU_11.jpg 复制eeprom_settinggs.txt文件的所有内容后退出。 然后执行: <code>sudo mousepad myhat_eeprom.txt</code> http://www.mcuzone.com/wiki/0025_MPDTPU/0025_MPDTPU_12.jpg 创建myhat_eeprom.txt文件,将刚才复制的文本粘贴到里面,红字段落的内容可以自定义修改,在当前演示,我们将设备树文件修改为关闭蓝牙,即把设备树改为<code>disable-bt-pi5</code>,修改完毕后保存文件并退出: http://www.mcuzone.com/wiki/0025_MPDTPU/0025_MPDTPU_27.jpg 随后使用E<sup>2</sup>PROM工具生成UUID: <code>eepmake myhat_eeprom.txt myhat.eep</code> http://www.mcuzone.com/wiki/0025_MPDTPU/0025_MPDTPU_28.jpg 将产生的UUID修改到myhat_eeprom.txt,然后保存并退出: http://www.mcuzone.com/wiki/0025_MPDTPU/0025_MPDTPU_29.jpg 输入以下命令使能I<sup>2</sup>C-9,并查看结果: <code>sudo dtoverlay i2c-gpio i2c_gpio_sda=0 i2c_gpio_scl=1 bus=9</code> <code>i2cdetect -y 9</code> http://www.mcuzone.com/wiki/0025_MPDTPU/0025_MPDTPU_16.jpg 修改eepflash.sh内容地址为0050: <code>sudo nano eepflash.sh</code> http://www.mcuzone.com/wiki/0025_MPDTPU/0025_MPDTPU_17.jpg http://www.mcuzone.com/wiki/0025_MPDTPU/0025_MPDTPU_18.jpg 保存并退出。 === 5.5 烧写E<sup>2</sup>PROM === 输入以下命令烧写E<sup>2</sup>PROM: sudo ./eepflash.sh -w -t=24c32 -a=0x50 -f=myhat.eep http://www.mcuzone.com/wiki/0025_MPDTPU/0025_MPDTPU_19.jpg 烧写完成后重启系统,即可看到蓝牙被禁用: http://www.mcuzone.com/wiki/0025_MPDTPU/0025_MPDTPU_20.jpg == '''六、电压电流监测功能演示''' == MPDTPU扩展板添加了电压、电流检测功能。使用本扩展板可以实时检测双TPU的电压、电流以及功率等数据。 1. 按照[[0025 MPDTPU(M.2 E)#5.2 打开I2C|5.2节]],在树莓派OS中打开打开I<sup>2</sup>C。 2. 执行下列命令,安装python库: <code>pip3 intsall smbus</code> http://www.mcuzone.com/wiki/0025_MPDTPU/0025_MPDTPU_21.jpg 3. 执行下列命令,下载监测软件: <code>wget <nowiki>http://www.mcuzone.com/wiki/0025_MPDTPU/INA219.zip</nowiki></code> <code>unzip INA219.zip</code> http://www.mcuzone.com/wiki/0025_MPDTPU/0025_MPDTPU_34.jpg 4. 运行监测软件: <code>python3 INA219.py</code> 不插TPU模块: http://www.mcuzone.com/wiki/0025_MPDTPU/0025_MPDTPU_24.jpg 插TPU模块静态: http://www.mcuzone.com/wiki/0025_MPDTPU/0025_MPDTPU_23.jpg 单TPU运行: http://www.mcuzone.com/wiki/0025_MPDTPU/0025_MPDTPU_30.jpg 双TPU同时运行: http://www.mcuzone.com/wiki/0025_MPDTPU/0025_MPDTPU_25.jpg 在双TPU同时运行时,可以看到最大电流已经升至0.912A,对应约4.527W功率,双TPU同时工作时功率基本是单TPU工作的功率(最大电流0.524A,对应约2.603W功率)的大约两倍。 {{联系我们_图标}}
本页使用的模板:
模板:Contact Us icon
(
查看源代码
)
返回
0025 MPDTPU(M.2 E) EN
。
开关有限宽度模式