2. 开发环境配置
本章介绍开发环境配置, 代码在Docker中编译和运行。
2.1. 代码下载
代码路径: https://github.com/sophgo/tpu-mlir
克隆该代码后, 需要在Docker中编译。参考下文配置Docker。
2.2. Docker配置
TPU-MLIR在Docker环境开发, 配置好Docker就可以编译和运行了。
从 DockerHub https://hub.docker.com/r/sophgo/tpuc_dev 下载所需的镜像:
$ docker pull sophgo/tpuc_dev:v3.4
若下载失败,可从官网开发资料 https://developer.sophgo.com/site/index/material/86/all.html 下载所需镜像文件,或使用下方命令下载镜像:
1$ wget https://sophon-assets.sophon.cn/sophon-prod-s3/drive/25/04/15/16/tpuc_dev_v3.4.tar.gz
2$ docker load -i tpuc_dev_v3.4.tar.gz
如果是首次使用Docker, 可执行下述命令进行安装和配置(仅首次执行):
1$ sudo apt install docker.io
2$ sudo systemctl start docker
3$ sudo systemctl enable docker
4$ sudo groupadd docker
5$ sudo usermod -aG docker $USER
6$ newgrp docker
确保安装包在当前目录, 然后在当前目录创建容器如下:
$ docker run --privileged --name myname -v $PWD:/workspace -it sophgo/tpuc_dev:v3.4
# myname只是举个名字的例子, 请指定成自己想要的容器的名字
# 使用 --privileged 参数以获取root权限,如果不需要root权限,请删除该参数
注意TPU-MLIR工程在Docker中的路径应该是/workspace/tpu-mlir
2.3. ModelZoo(可选)
TPU-MLIR中自带yolov5s模型, 如果要跑其他模型, 需要下载ModelZoo, 路径如下:
https://github.com/sophgo/model-zoo
下载后放在与tpu-mlir同级目录, 在Docker中的路径应该是/workspace/model-zoo
2.4. 代码编译
在Docker的容器中, 代码编译方式如下:
$ cd tpu-mlir
$ source ./envsetup.sh
$ ./build.sh
回归验证, 如下:
# 本工程包含yolov5s.onnx模型, 可以直接用来验证
$ pushd regression
$ python run_model.py yolov5s
$ popd
如果要验证更多网络, 需要依赖model-zoo, 回归时间比较久。
操作如下: (可选)
# 执行时间很长, 该步骤也可以跳过
$ pushd regression
$ ./run_all.sh
$ popd
2.5. 代码开发
为了方便代码的阅读和开发,建议用VSCode编辑, 在VSCode中需要安装这些插件:
C/C++ Intellisense : 用于C++代码的智能提示和代码导航,以及代码格式化
GitLens : 用于Git版本控制和代码审查
Python : 用于Python代码的智能提示和代码导航
yapf: 用于Python代码格式化
shell-format: 用于Shell脚本格式化
Remote-SSH : 用于远程连接服务器上的代码 (代码不在本地的情况下非常需要)
写完代码后右键点击格式化代码非常重要,保证代码的排版风格一致。
另外由于TPU-MLIR使用了llvm-project,代码大量使用了它的头文件和库,建议安装llvm-project,方便代码导航。操作如下:
在TPU-MLIR的同级目录建立third-party目录,然后在该目录下克隆llvm-project:
$ mkdir third-party
$ cd third-party
$ git clone git@github.com:llvm/llvm-project.git
在TPU-MLIR的Docker环境下,编译llvm-project(编译过程中可能会提示缺失组件,根据提示安装即可):
$ cd llvm-project
$ mkdir build && cd build
# 编译过程中可能会提示缺失组件,根据提示安装即可
# 比如如果提示缺失nanobind,就安装它pip3 install nanobind
$ cmake -G Ninja ../llvm \
-DLLVM_ENABLE_PROJECTS="mlir" \
-DLLVM_INSTALL_UTILS=ON \
-DLLVM_TARGETS_TO_BUILD="" \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DMLIR_INCLUDE_TESTS=OFF \
-DLLVM_INSTALL_GTEST=ON \
-DMLIR_ENABLE_BINDINGS_PYTHON=ON \
-DCMAKE_BUILD_TYPE=DEBUG \
-DCMAKE_INSTALL_PREFIX=../install \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
-DLLVM_ENABLE_LLD=ON
$ cmake --build . --target install
这样就可以在VSCode中关联到llvm-project的代码了。