0025 MPDTPU(M.2 E) EN
Keywords
Raspberry Pi5, PCIe, TPU, DTPU, Edge TPU, Driver installation, Operation demonstration, AI, google, Coral, PCIe Switch, M.2 E key
I. Introduction
The MPDTPU is a dedicated dual-TPU expansion board designed for the Raspberry Pi 5. It connects to the Raspberry Pi 5 via a 16-pin FPC interface. On the expansion board, a PCIe Switch chip that expands one port into two is used to drive the dual-TPU modules. The Coral dual-TPU module is equipped with two Google Edge TPU processors and uses a non-standard M.2 E key interface. The dual-TPU module provides a total performance of 8 TOPS, with an efficiency of 2 TOPS/W.
II. Hardware Resources
1. Using a 16-pin PCIe interface, the board is equipped with a one-to-two PCIe Switch chip.
2. On-board M.2 E-key connector 2230, supporting dual-TPU modules.
3. The TPU module is powered through a 16-pin PCIe interface and can also be powered through a 40-pin interface.
4. Equipped with an INA219 voltage and current sampling circuit, it can monitor the power consumption of dual-TPU operations.
5. Equipped with a 40-pin SMT receptacle, it can be connected to the 40-pin header of the Raspberry Pi 5 using a PC104 connector.
6. An optional 24C32 E2PROM can be used to store device initialization information.
7. Size: 56x65mm, the PCB board is certified by UL and ROHS, and has a fire rating of 94V-0.
8. Designed with four layers for efficient heat conduction, it includes standard thermal silicone pads and optional heat sinks.
9. Optional aluminum alloy enclosure.
III. System flashing
3.1 The Raspberry Pi OS used in this document is: 2024-07-04-raspios-bookworm-armhf.img.xz(Raspberry Pi OS with desktop)。
You can download it in:
https://www.raspberrypi.com/software/operating-systems/#raspberry-pi-os-64-bit
3.2 Use Imager or balenaEtcher to flash the OS image in TF card. Click here to read the instructions for System flashing
Note: The TF card used for flashing the system should have a space of at least 16GB, otherwise, it will display space errors during the installation and configuration process!
IV. Driver installation, configuration and demonstration in Raspberry Pi OS
Note: The operation requires a stable internet connection to the regions out of China (you may need to find your own method). Otherwise, many files may not download or may only partially download, which could ultimately lead to the code failing to run.
4.1 Config config.txt
After the system starts, open the Raspberry Pi terminal and enter the command:
sudo nano /boot/firmware/config.txt
Or:
sudo mousepad /boot/firmware/config.txt
Add the codes in the ending of this file:
dtparam=pciex1
kernel=kernel8.img
dtoverlay=pineboards-hat-ai
Then, save the file and reboot the system:
sudo reboot
4.2 Ensuring software environment
After reboot the system, open the Raspberry Pi terminal and enter the command:
uname -r
After ensuring the kernel version is greater than 4.18, enter:
lsmod | grep apex
Ensure there is no output, then you can begin installing the TPU driver.
4.3 Install necessary software
Ensure the network is connected to internet connection to the regions out of China (you may need to find your own method), and then add the Google TPU software library:
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 -
Update the software list after adding:
sudo apt-get update
Install the necessary software after the update is completed:
sudo apt-get install cmake libedgetpu1-std devscripts debhelper dkms dh-dkms
4.4 Install Gasket Driver
Enter the following commands in sequence to install the 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
After the installation is complete, enter the following command to ensure that the driver and software were installed successfully:
sudo apt-get install gasket-dkms libedgetpu1-std
Then, add a udev rule to obtain device operation permissions:
sudo sh -c "echo 'SUBSYSTEM==\"apex\", MODE=\"0660\", GROUP=\"apex\"' >> /etc/udev/rules.d/65-apex.rules"
add user to apex:
sudo groupadd apex
sudo adduser $USER apex
Reboot the system after the setup is complete:
sudo reboot
4.5 Verification module testing and driver installation
After system starting, verification module testing and driver installation:
lspci -nn | grep 089a
ls /dev/apex_0
This board has a dual-TPU onboard, so you can see two TPU modules:
By entering sudo lspci -v
, you can see the driver loading. There are also drivers for the two TPU modules.
4.6 Configuration of the Code Execution Environment
Running Google TPU module code requires Python versions between 3.6 and 3.9, while the latest Raspberry Pi system is Python 3.11. Therefore, we need to use Pyenv to download an older version of Python.
First, install the depends:
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
Install pyenv after the depends are installed:
curl https://pyenv.run | bash
Enter the command:
sudo nano ~/.bashrc
Or:
sudo mousepad ~/.bashrc
Add the codes in the ending of this file:
export PYENV_ROOT="$HOME/.pyenv"
[[
-d $PYENV_ROOT/bin
]]
&& export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
Save and exit after adding, then reload the shell:
exec "$SHELL"
Then, we can use pyenv to install an older version of Python:
pyenv install -v 3.8.8
After the installation is successful, we will change the system Python version to 3.8.8:
pyenv global 3.8.8
After the change is successful, you can check the current Python version is 3.8.8:
pyenv versions
python3 -V
4.7 Download the code and run the module
Enter the following commands in sequence to download:
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
Then, download the code and run the module:
pip3 install numpy
pip3 install Pillow
pip3 install --extra-index-url https://google-coral.github.io/py-repo/ pycoral
4.8 Run the code
4.8.1 Single-TPU running a single model
Enter the following code to run it:
Note: You can copy the following code, but please paste it into a text editor first. Then, following the format shown above, remove any extra enter. After that, copy it again and paste it into the terminal to run.
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
4.8.2 Dul-TPU running multiple model
Enter the following code to run it:
Note: You can copy the following code, but please paste it into a text editor first. Then, following the format shown above, remove any extra enter. After that, copy it again and paste it into the terminal to run.
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
4.8.3 Dul-TPU running a single model
Enter the following code to run it:
Note: You can copy the following code, but please paste it into a text editor first. Then, following the format shown above, remove any extra enter. After that, copy it again and paste it into the terminal to run.
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
You should downloading a large amount of data from the internet out of China to use the testing of this development board, so users can contact our company after buying this development board to obtain a pre-configured Raspberry Pi OS image.
V. E2PROM chip flashing operation demonstration
5.1 Overview
The MPDTPU expansion board is equipped with an E2PROM chip. During the boot process, the Raspberry Pi system will search for the E2PROM via the I2C pins and read the E2PROM information. Therefore, we can write the information and device tree files we need into the E2PROM chip to achieve the functionality of automatic configuration loading.
Note: The operation requires a stable internet connection to the regions out of China (you may need to find your own method). Otherwise, many files may not download or may only partially download, which could ultimately lead to the code failing to run.
5.2 Enable I2C
Select the items in the order shown in the following diagram, enable I2C, and then restart the Raspberry Pi OS.
5.3 Install tools
Execute the following commands to install tools:
git clone https://github.com/raspberrypi/utils.git
cd utils/eeptools
cmake .
make
sudo make install
Download and put the i2c-gpio.dtbo file:
wget http://www.mcuzone.com/wiki/0025_MPDTPU/i2c-gpio.zip
unzip i2c-gpio.zip
sudo cp i2c-gpio.dtbo /boot/overlays
Reboot the system after completion:
sudo reboot
5.4 Edit the configuration file
Execute the following commands:
cd utils/eeptools
sudo mousepad eeprom_settings.txt
Copy all the content of the eeprom_settings.txt and then exit.
Then execute:
sudo mousepad myhat_eeprom.txt
Create a file named myhat_eeprom.txt, paste the text you just copied into it, and you can customize the content of the red section. In this demonstration, we will modify the device tree file to disable Bluetooth, which means changing the device tree to disable-bt-pi5
. After making these changes, save the file and exit:
Then use the eepmake tool to generate the UUID:
eepmake myhat_eeprom.txt myhat.eep
Modify the generated UUID in myhat_eeprom.txt, then save and exit:
Execute the following commands to enable I2C-9 and view the result:
sudo dtoverlay i2c-gpio i2c_gpio_sda=0 i2c_gpio_scl=1 bus=9
i2cdetect -y 9
Please modify the address within the eepflash.sh script so that it points to 0050:
sudo nano eepflash.sh
Then save and exit.
5.5 Programming the EEPROM
Execute the following command to program the EEPROM:
sudo ./eepflash.sh -w -t=24c32 -a=0x50 -f=myhat.eep
After programming is complete, reboot the system, and you will see that Bluetooth is disabled.
VI. Voltage and current monitoring function demonstration
The MPDTPU expansion board adds voltage and current detection functionality. Using this expansion board, you can monitor real-time voltage, current, and power data of the dual-TPU.
1. Follow Section 5.2 to enable I2C in the Raspberry Pi OS.
2. 执行下列命令,安装python库:
pip3 intsall smbus
3. 执行下列命令,下载监测软件:
wget http://www.mcuzone.com/wiki/0025_MPDTPU/INA219.zip
unzip INA219.zip
4. 运行监测软件:
python3 INA219.py
不插TPU模块:
插TPU模块静态:
单TPU运行:
双TPU同时运行:
在双TPU同时运行时,可以看到最大电流已经升至0.912A,对应约4.527W功率,双TPU同时工作时功率基本是单TPU工作的功率(最大电流0.524A,对应约2.603W功率)的大约两倍。
联系我们
电话:13957118045
如本页面有任何疏漏、错误或者侵权,请通过上述途径联系我们,谢谢!
Copyright 2004-2024 野芯科技