【竞赛/TPU】算能TPU编程竞赛总结

news2024/10/2 3:34:17

如果觉得我的分享有一定帮助,欢迎关注我的微信公众号 “码农的科研笔记”,了解更多我的算法和代码学习总结记录。或者点击链接扫码关注【竞赛/TPU】算能TPU编程竞赛总结

1 基础知识

1.1【Ubuntu】

Ubuntu操作系统中有很多不同的文件夹,每个文件夹都有不同的用途和内容。以下是Ubuntu中常见的文件夹列表及其用途:

  • /:根目录,也称为“文件系统根”。所有其他文件夹都是在此根目录下的子目录。

  • /bin:存放基本系统命令的二进制文件,如ls、cp、mkdir等。

  • /boot:存放启动引导程序和内核镜像文件。

  • /dev:存放设备文件,包括硬件设备文件和虚拟设备文件。

  • /etc:存放系统配置文件,如网络配置、用户和组配置、安全配置等。

  • /home:存放用户主目录,每个用户都有一个与其用户名相同的文件夹。

  • /lib:存放系统共享库文件。

  • /media:用于挂载可移动媒体设备(如CD、DVD、USB驱动器)的挂载点。

  • /mnt:用于挂载其他文件系统的挂载点。

  • /opt:用于存放可选应用程序的文件夹。

  • /proc:虚拟文件系统,用于访问系统内核信息。

  • /root:超级用户(root)的主目录。

  • /run:存放系统运行时文件,例如PID文件和套接字文件。

  • /sbin:存放系统管理命令的二进制文件,例如reboot和shutdown。

  • /srv:用于存放本地服务的数据,例如Web服务器的网站内容。

  • /sys:虚拟文件系统,用于访问系统硬件信息。

  • /tmp:用于存放临时文件的文件夹。

  • /usr:用于存放系统应用程序和数据的文件夹,包括bin、lib、share等子文件夹。

  • /var:存放系统运行时文件和日志文件,例如日志文件、数据库文件、邮件文件等。

这些文件夹不仅在Ubuntu中存在,也存在于其他基于Linux的操作系统中,并且是基本的文件系统结构。

  • ls -l 命令:以长格式的形式查看当前目录下所有可见文件的详细属性

1.2【Docker操作】

  • docker images:将获得当前系统上所有可用的docker镜像的列表
  • docker ps /docker ps -q:查看您系统中正在运行的docker容器
  • docker stop <CONTAINER_ID/CONTAINER_NAME>:要停止正在运行的docker容器
  • docker rm <CONTAINER_ID/CONTAINER_NAME>:删除容器

1.3【INT8对称量化模型和非对称区别】

https://tpumlir.org/docs/developer_manual/06_quantization.html

INT8对称量化模型和非对称量化模型都是用于优化神经网络模型的计算速度和内存占用的技术。

  • 对称量化模型指的是量化范围以0为中心对称分布的模型。例如,对于8位整数,范围是-128到127。这意味着模型只能表示在这个范围内的整数值,并且0值是最精确的。因为它是对称的,因此在某些硬件上实现时,可以使用一些优化技术,例如位移和异或等来加速计算。

  • 非对称量化模型指的是量化范围不对称的模型。例如,范围是0到255,这意味着模型可以表示0到255之间的整数值,并且128值是最精确的。非对称量化模型可以更好地适应具有不同权重分布的不同神经网络模型。

对称量化模型相对于非对称量化模型来说,具有更高的计算效率和更简单的实现方式。但是,非对称量化模型可以提供更高的精度和更广泛的数值表示范围。在选择量化方法时,需要考虑具体的应用场景和要求。

以图像分类任务为例,假设我们使用一个预训练好的卷积神经网络(CNN)模型来对图像进行分类。CNN模型通常具有大量的参数,因此在部署到嵌入式设备等资源受限的环境中时,需要将模型的计算速度和内存占用进行优化。在这种情况下,可以使用量化技术来优化模型。如果我们选择使用对称量化模型,将模型参数量化为8位整数,并且量化范围为-128到127。在这种情况下,所有的权重和激活值都将被量化为8位整数,并且量化范围是对称的。这种方法可以提高计算效率和内存利用率,并且可以使用硬件优化技术来加速计算。如果我们选择使用非对称量化模型,将模型参数量化为8位整数,并且量化范围为0到255。在这种情况下,所有的权重和激活值都将被量化为8位整数,并且量化范围是非对称的。这种方法可以提供更高的精度和更广泛的数值表示范围,但可能会导致一些硬件实现的复杂性。

1.4【为什么转INT8模型前需要跑calibration, 得到校准表】

在将神经网络模型转换为INT8格式之前,需要进行量化校准(calibration),以便确定量化范围和量化参数。量化校准是指将模型输入的数据集输入到模型中,并收集模型在这些数据上的激活值,然后基于这些激活值计算出一个量化参数表。这是因为在INT8量化模型中,模型中的权重和激活值都被量化为8位整数。但是,对于每个模型,量化参数都需要在实际数据上进行校准,以确保量化后的模型在精度上没有过多损失。因为在量化时,通过将浮点数值映射到整数值,会引入一些不可避免的误差,因此需要根据具体的模型和数据集来确定量化参数,以最小化精度损失。

量化校准通常包括以下步骤:

  • 将数据集输入到模型中,收集模型在数据集上的激活值。

  • 对激活值进行统计分析,以确定量化范围和量化参数。

  • 根据量化参数生成一个量化表(Quantization Table),包括每个层的量化参数和量化范围。

  • 将量化表应用到模型中,以将权重和激活值量化为8位整数。

量化校准是将模型从浮点数格式转换为INT8格式的关键步骤。通过量化校准,我们可以确保在进行INT8量化后,模型的精度仍然可以得到保持,从而可以在嵌入式设备等资源受限的环境中高效地部署模型。

2 TPU-MLIR竞赛

参赛地址:https://www.sophgo.com/competition/introduction.html?id=3

2.1【操作流程】

【第一步】购买云主机 ubuntu 18.04 64位,Putty连接服务器并登录

镜像: Ubuntu 20.04 64位
CPU: 16核
内存: 128G
系统盘总容量: 20GB
数据盘总容量: 0GB

【第二步】修改ubuntu用户名权限

Ubuntu系统默认用户是ubuntu,需要修改配置文件启动root

  • 并设置密码: sudo passwd root
  • 修改文件:sudo vim /etc/ssh/sshd_config
  • 插入文件:shift+i
  • 将PermitRootLogin prohibit-password更改为:PermitRootLogin yes
  • 保存修改:按ESC,然后输入:wq
  • 最后重启ssh服务:sudo systemctl restart ssh
  • 利用root用户 root

【第三步】安装docker环境

sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker

【第四步:配置环境】首先从比赛官网下载tpu-mlir_v0.8.13-g327ff6dc-20230113以及unet.zip

sudo apt-get install tmux
tmux new -s mlir
mkdir worksplace
docker pull sophgo/tpuc_dev:latest

docker run --privileged=true --restart always -td -v /root/../home/ubuntu/worksplace:/workspace --name mlir sophgo/tpuc_dev:latest bash

docker exec -it mlir bash
mv tpu-mlir_v0.8.13-g327ff6dc-20230113 tpu-mlir
cd tpu-mlir
chmod -R +x ../tpu-mlir
source envsetup.sh
cd ..
mkdir competition
cd competition/unet/script 
  • apt-get install tmux:这个命令将安装tmux工具,它是一种终端复用器,可以让用户在单个终端窗口中同时运行多个命令行程序,而不需要打开多个终端窗口。在Ubuntu中,您可以使用apt-get包管理器来安装tmux。
  • tmux new -s mlir:这个命令创建一个名为mlir的新tmux会话。tmux会话可以在一个终端窗口中同时运行多个终端会话,并且可以在会话之间切换。通过创建一个新会话,您可以在同一个终端窗口中同时运行多个命令行程序,而不需要打开多个终端窗口。这个命令中的-s选项用于指定新会话的名称,而mlir是会话的名称。如果省略-s选项,则会话名称将由tmux自动生成。
  • mkdir worksplace:这个命令创建一个名为worksplace的新目录,用于存储您的工作文件。
  • docker pull sophgo/tpuc_dev:latest:这个命令使用Docker引擎从Docker Hub Registry中拉取sophgo/tpuc_dev:latest镜像。该镜像是一个包含深度学习框架和TPU开发工具的Docker镜像。
  • docker run --restart always -td -v /root/…/workspace:/workspace --name mlir sophgo/tpuc_dev:latest bash:这个命令使用sophgo/tpuc_dev:latest镜像创建一个新的Docker容器。–restart always选项告诉Docker引擎,当容器异常停止时应该自动重启容器。-td选项告诉Docker在容器中以交互式终端模式运行。-v /root/…/workspace:/workspace选项将/root/…/workspace目录挂载到容器内的/workspace目录,这样就可以在容器内访问/root/…/workspace目录中的文件。–name mlir选项为容器指定了一个名称mlir,以便以后可以使用该名称轻松访问容器。最后,bash命令告诉Docker在容器中启动Bash终端。
  • docker exec -it mlir bash:这个命令通过容器名称mlir进入已经运行的Docker容器,并在容器中启动Bash终端。-it选项告诉Docker将终端连接到容器的标准输入和输出,并使终端处于交互模式。

【第五步:检测环境是否编译成功】

python3 
import pyruntime_bm 
import pymlir
exit()

【第六步:MLIR转F32模型】

unzip unet.zip 
cd unet/script 
sh run1.sh 
sudo sh run.sh 
sudo run.sh 

最终结果

【第六步:MLIR转INT8模型】

python3 ../../../tpu-mlir/python/tools/run_calibration.py ../model/unet_scale0.5.mlir \
--dataset ../data/test_hq \
--input_num 200 \
-o unet_scale0.5_cali_table

输出结果

python3 ../../../tpu-mlir/python/tools/model_deploy.py \
--mlir ../model/unet_scale0.5.mlir \
--quantize INT8 \
--calibration_table unet_scale0.5_cali_table \
--chip bm1684x \
--tolerance 0.85,0.45 \
--model ../model/unet_scale0.5_int8.bmodel;

【第七步:结果输出】

python3 mlir_tester.py --img_dir ../data/test_hq --out_dir ../data/result --model ../model/unet_scale0.5.mlir

结果输出

2.2【可能问题】

问题1

ImportError: /workspace/tpu-mlir/lib/libdnnl.so.2: file too short

替换libdnnl.so.2为其中对应的文件,并命名为libdnnl.so.2

问题2

ModuleNotFoundError: No module named ‘torchsummary’

直接运行:pip install torchsummary

问题3

fail to load cmodel: libcmodel.so

替换并覆盖

问题4

INFO:cpu_lib ‘libbmcpu.so’ is loaded.

问题5

ubuntu@10-60-205-99:~$ apt-get install tmux
E: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?

sudo apt-get install tmux

问题6

问题6

权限不够解决办法, 通过 chmod -R +x ../bin 命令重新进一次该文件夹,bin 就代表当前文件夹。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/380454.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文阅读——FECANet:应用特征增强的上下文感知小样本语义分割网络

代码&#xff1a;NUST-Machine-Intelligence-Laboratory/FECANET (github.com) 文章地址&#xff1a;地址 文章名称&#xff1a;FECANet: Boosting Few-Shot Semantic Segmentation with Feature-Enhanced Context-Aware Network 摘要 Few-shot semantic segmentation 是学习…

4年经验之谈,什么是接口测试?怎样做接口测试?

一、什么是接口&#xff1f;【文末学习资源分享】赶紧嫖&#xff01;冲&#xff01;&#xff01;&#xff01;&#xff01; 接口测试主要用于外部系统与系统之间以及内部各个子系统之间的交互点&#xff0c;定义特定的交互点&#xff0c;然后通过这些交互点来&#xff0c;通过…

Nydus 在约苗平台的容器镜像加速实践

文 | 向申 约苗平台运维工程师 关注云原生领域 本文字数 9574阅读时间24分钟 本文是来自向申同学的分享&#xff0c;介绍了其在 K8s 生产环境集群部署 Nydus 的相关实践。 Nydus 是蚂蚁集团&#xff0c;阿里云和字节等共建的开源容器镜像加速项目&#xff0c;是 CNCF Dragon…

Spring Boot 3.0系列【3】基础篇之使用Spring Initializr快速创建项目

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Spring Boot版本3.0.3 源码地址&#xff1a;https://gitee.com/pearl-organization/study-spring-boot3 文章目录前言安装JDK 17创建Spring Boot 项目方式1&#xff1a;网页在线生成方式2&#…

PyQGIS开发--自动化地图布局案例

前言创建地图布局是 GIS 作业结束时的一项常见任务。 它用于呈现最终结果的输出&#xff0c;作为与用户交流的一种方式&#xff0c;以便从地图中获取信息、知识或见解。 在包括 QGIS 在内的任何 GIS 软件中制作地图布局都非常容易。 但另一方面&#xff0c;当我们必须生成如此大…

centos7上安装mysql8.0

1、检查一下自己电脑上安装了哪些mysql [rootlocalhost ~]# find / -name mysql 2、把安装的mysql全部删掉 [rootlocalhost ~]# rm -rf /usr/lib64/mysql/ [rootlocalhost ~]# rm -rf /usr/local/mysql/ [rootlocalhost ~]# rm -rf /etc/selinux/targeted/active/modules/100…

《Roller: Fast and Efficient Tensor Compilation for Deep Learning》

《Roller: Fast and Efficient Tensor Compilation for Deep Learning》 用于深度学习 快速高效的张量编译器 作者 微软亚洲研究院以及多伦多大学等多所高校 摘要 当前编译为了产生高效的kernel时&#xff0c;搜索空间大&#xff0c;通常使用机器学习的方法 找到最优的方案…

管理逻辑备数据库(Logical Standby Database)

1. SQL Apply架构概述 SQL Apply使用一组后台进程来应用来自主数据库的更改到逻辑备数据库。 在日志挖掘和应用处理中涉及到的不同的进程和它们的功能如下&#xff1a; 在日志挖掘过程中&#xff1a; 1&#xff09;READER进程从归档redo日志文件或备redo日志文件中读取redo记…

Apache Airflow Provider Sqoop 模块远程代码执行漏洞

漏洞描述 Apache Airflow 是一个以编程方式管理 workflow 的平台&#xff0c;Sqoop 模块用于在 Hadoop 和结构化数据存储&#xff08;例如关系数据库&#xff09;之间高效传输大量数据。 apache-airflow-providers-apache-sqoop 3.1.1 之前版本中&#xff0c;由于 SqoopHook …

【ONE·C || 自定义类型:结构体、段位、枚举、联合】

总言 C语言&#xff1a;自定义类型介绍。 文章目录总言1、结构体1.1、结构体声明1.1.1、基本声明方式1.1.2、特殊的声明&#xff1a;不完全声明1.2、结构体自引用1.2.1、结构体自引用说明1.2.2、typdef对结构体重命名1.3、结构体变量的定义和初始化1.4、结构体变量大小计算&…

VMware虚拟机安装Ubuntu(超详细图文教程)

VMware虚拟机安装Ubuntu&#xff08;超详细图文教程&#xff09; 1、Ubuntu下载 Ubuntu下载地址&#xff1a;点这里 注&#xff1a;但官网下载比较慢 也可关注公众号Time木回复&#xff1a; ubuntu22 获取 2、打开VMware VMware安装过程&#xff1a;待更新 2.1 创建新的虚…

5个面向开发人员的顶级报表工具

报表工具对有处理大量数据需求的公司至关重要。实际上&#xff0c;报表可以帮助公司实时访问公司资源&#xff0c;同时能够以可读和调整的格式分析和显示数据。本文为大家推荐五种成熟且强大的报表工具&#xff0c;重点介绍它们的功能和优势。 Stimulsoft Stimulsoft主要用于…

【安装教程】SSH远程连接工具-FinalShell的安装

&#x1f449;&#x1f449;&#x1f449;&#x1f449;&#x1f449;&#x1f449; 【目录在右侧哦~】省时间可以直接跳转到【安装步骤】 &#x1f449;&#x1f449;&#x1f449;&#x1f449;&#x1f449;&#x1f449;&#x1f449;一、软件介绍&#xff08;点我查看该软…

【python学习笔记】:环境搭建

Python 环境搭建 本章学习如何在本地搭建Python开发环境。 Python可应用于多平台包括 Linux 和 Mac OS X。 你可以通过终端窗口输入 "python" 命令来查看本地是否已经安装Python以及Python的安装版本。 Unix (Solaris, Linux, FreeBSD, AIX, HP/UX, SunOS, IRIX,…

「TCG 规范解读」PC 平台相关规范(3)

可信计算组织&#xff08;Ttrusted Computing Group,TCG&#xff09;是一个非盈利的工业标准组织&#xff0c;它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立&#xff0c;并采纳了由可信计算平台联盟&#xff08;the Trusted Computing Platform Alli…

消息队列原理与实战-学习笔记

消息队列&#xff1a;保存消息的一个容器&#xff0c;本质是个队列&#xff0c;但是需要支持高吞吐、高并发、高可用。 1 前世今生 1.1 业界消息队列对比 Kafka:分布式的、分区的、多副本的日志提交服务&#xff0c;在高吞吐场景下发挥较为出色RocketMQ:低延迟、强一致、高性…

概率论与数理统计期末小题狂练 11-12两套,12-13-1

11-12第一学期A1 略。2 X服从正态分布N&#xff08;0&#xff0c;1&#xff09;&#xff0c;X^2服从卡方分布。又考查了卡方分布均值和方差公式。一开始如果对本题无从下手&#xff0c;大概是没看出来是什么分布。3 第二小空本身也可以作为一个结论。4 考查切比雪夫不等式&…

王道操作系统课代表 - 考研计算机 第三章 内存管理 究极精华总结笔记

本篇博客是考研期间学习王道课程 传送门 的笔记&#xff0c;以及一整年里对 操作系统 知识点的理解的总结。希望对新一届的计算机考研人提供帮助&#xff01;&#xff01;&#xff01; 关于对 “内存管理” 章节知识点总结的十分全面&#xff0c;涵括了《操作系统》课程里的全部…

装修的正确顺序是什么?

装修的正确顺序可以概括为以下几个步骤&#xff1a;1.设计阶段&#xff1a;根据你的需求和预算&#xff0c;设计师会提供多个方案供你选择&#xff0c;确定最终的设计方案。2.拆除阶段&#xff1a;清除室内所有旧的装修材料&#xff0c;包括地板、瓷砖、灯具、门窗等&#xff0…

Windows Server 2016搭建文件服务器

1&#xff1a;进入系统在服务器管理器仪表盘中添加角色和功能。 2&#xff1a;下一步。 3&#xff1a;继续下一步。 4&#xff1a;下一步。 5&#xff1a;勾选Web服务器(IIS) 6&#xff1a;添加功能。 7&#xff1a;下一步。 8&#xff1a;下一步。 9&#xff1a;下一步。 10&a…