开源项目介绍 |TNN-跨平台AI推理框架

2021腾讯犀牛鸟开源人才培养计划

开源项目介绍

滑至文末报名参与开源人才培养计划

提交项目Proposal

TNN项目介绍

        标签:人工智能

        技术栈:C++,Python

TNN-跨平台AI推理框架, 跨平台AI推理框架,同时拥有跨平台、高性能、模型压缩、代码裁剪等众多突出优势。同时也借鉴了业界主流开源框架高性能和良好拓展性的优点。目前TNN已经在腾讯业务手Q、微视、P图等广泛落地应用,欢迎大家参与协同共建,促进TNN推理框架进一步完善。

TNN项目导师介绍

姚达、田恒锋、王星晨

姚达,TNN框架技术负责人

田恒锋,TNN框架CPU侧架构师

王星晨,TNN框架CPU侧架构师

导师寄语:

“AI推理优化是一套系统工程,希望通过TNN相关辅导,能够帮助学员在硬件架构、应用框架等方向提升发现问题、解决问题的能力”——姚达

“TNN专注于深度学习推理部署,其中GPU在整个深度学习框架中占据了重要位置。希望通过相关辅导以及开源实践,帮助学员熟悉和提升GPU编程和性能调优经验,提升在整个开源社区和行业影响力。”——田恒锋

“TNN是一个跨平台高性能的推理框架,通过相关实践你将了解到AI算法落地的详细过程,以及如何在兼容性、性能以及效果之间做到平衡,为日后工作打下坚实基础”——王星晨

TNN拓展资料

????TNN Readme

https://github.com/Tencent/TNN/blob/master/README_CH.md

????ARM
https://developer.arm.com/documentation/den0018/latest

https://developer.arm.com/documentation/den0024/a

????X86
https://software.intel.com/content/www/us/en/develop/articles/intel-sdm.html

https://software.intel.com/sites/landingpage/IntrinsicsGuide/

????software optimize 

https://www.agner.org/optimize/

????MILR
https://mlir.llvm.org/

????GPU
https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html

https://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html

????模型量化
https://intellabs.github.io/distiller/algo_quantization.html

https://arxiv.org/pdf/1806.08342.pdf

TNN实战任务

(最终具体任务以实战阶段导师布置为准)

编程任务

1.量化模型支持,打通训练和推理,支持非对称、按channel量化

预期结果:

  • 打通量化训练到推理的流程,并针对arm或x86平台对量化实现进行优化

  • 文档和测试

2.AI芯片适配,完成腾讯自研芯片或业界最新芯片的适配,完成模型迁移

预期结果:

  • 打通服务端AI芯片的软件栈接入到TNN的流程

  • 完成部分常用模型的适配

  • 文档和测试

3.云或端侧个性功能实现高性能部署,如人像分割、3D物体检测等

预期结果:

  • 完成最新的趣味模型的云端Demo实现,并进行Demo性能优化达到可用状态

  • 文档和测试

扫码填写问卷报名,提交项目proposal

加入开发实战

与导师一起成长这一夏

TNN开源项目交流群

欢迎对本项目感兴趣的同学一起交流

更多开源项目信息,

尽在“腾讯犀牛鸟开源人才社区”

扫码加入,解锁所有学习资料

关于腾讯犀牛鸟开源人才培养计划:为响应国家十四五规划的开源战略,腾讯于2021年5月发布“首届腾讯犀牛鸟开源人才培养计划”,希望企业界和教育界形成合力,打造面向高校学生的开源课程和开源实践培养方案,培育开源人才,普及开源文化,助力开源人才生态的发展。

首届项目由教育部计算机教学指导委员会、教育部软件工程教学指导委员会、中国信息通信研究院作为联合指导单位,包括开源基础培训、开源进阶研学、开源项目实战三个环节,项目涉及云原生、微服务、容器、AI、大数据、前端、物联网/边缘计算等多项技术热点。

各位同学报名即可参加线上开源系列课程,学习开源知识,对话学界及产业界大咖。其中入选开源项目实战的学生将在导师的一对一指导下,利用暑假开展编程实战,并有机会获得腾讯开源贡献者证书(目前全球只发出了10+张)。

????学生指南Q&A:https://github.com/Tencent/OpenSourceTalent/issues/14

????官方QQ群:859260607 (加群请备注学校+专业)

【其他项目介绍】

开源项目介绍 |OMI-前端【跨框架】框架

开源项目介绍 |APIJSON- 后端零代码接口和文档ORM 库

开源项目介绍 |TARS-高性能微服务治理框架

开源项目介绍|Apache InLong-分布式消息中间件系统

开源项目介绍|Tencent KonaJDK

开源项目介绍 |SuperEdge-云原生边缘计算平台

开源项目介绍 |Hippy-跨平台动态化框架

开源项目介绍 | Angel-高性能分布式机器学习平台

腾讯犀牛鸟开源人才培养计划官网

https://opensource.tencent.com/summer-of-code

(点击文末阅读原文直接访问)

合作或疑问欢迎联系:tencentopen@tencent.com

<think>我们正在解析lspci -t命令的输出,该命令以树形结构显示PCI设备的总线层次关系。以下是一个典型的输出示例(来自引用[2]的示例,稍作整理): ``` -[0000:00]-+-00.0 Intel Corporation 440FX - 82441FX PMC [Natoma] +-01.0 Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II] +-01.1 Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II] +-01.2 Intel Corporation 82371SB PIIX3 USB [Natoma/Triton II] +-01.3 Intel Corporation 82371AB/EB/MB PIIX4 ACPI +-02.0 Cirrus Logic GD 5446 +-03.0 Red Hat, Inc. Virtio console +-04.0 Red Hat, Inc. Virtio block device +-05.0 Red Hat, Inc. Virtio network device \-06.0 Red Hat, Inc. Virtio memory balloon ``` ### 解释树形结构中的元素 1. **根总线**: - 树形结构的起点是根总线(Root Bus),通常表示为`[0000:00]`(其中`0000`是PCI域,通常为0000;`00`是总线号)。 - 在示例中,根总线是`[0000:00]`,它是整个PCI设备树的起点。 2. **总线(Bus)**: - 总线是连接PCI设备的通道。在树形结构中,总线用方括号表示,如`[0000:00]`。 - 根总线下的设备可能连接到其他总线(子总线),但在此示例中,所有设备都直接连接在根总线上,没有显示子总线。 3. **设备(Device)**: - 每个设备由其在总线上的位置标识,格式为`总线:设备.功能`(如`00.0`、`01.0`等)。 - 在示例中,`00.0`、`01.0`等就是设备在总线上的位置。 - 设备位置后的字符串是设备描述,包括厂商和设备名称(如`Intel Corporation 440FX - 82441FX PMC [Natoma]`)。 4. **功能(Function)**: - 一个物理PCI设备可能包含多个功能(如音频、视频等),每个功能用一个数字表示(如`01.0`、`01.1`等)。 - 在示例中,`01.0`、`01.1`、`01.2`、`01.3`是同一个物理设备(设备01)的四个不同功能。 5. **连接符号**: - `-+-`:表示分支开始(有多个子设备)。 - `+-`:表示分支中的中间设备。 - `\-`:表示分支的最后一个设备。 - `|`:用于垂直连接,表示子设备继续向下延伸(在示例中没有出现,但其他输出中可能有)。 ### 解析设备位置格式 - **完整格式**:`[域:总线:设备.功能]`,但`lspci -t`输出中通常省略域和总线的重复部分,只显示设备位置(如`01.0`)。 - **示例分解**: - `00.0`:位于总线00,设备号00,功能0。 - `01.0`:位于总线00,设备号01,功能0。 - `01.1`:位于总线00,设备号01,功能1。 ### 关键参数说明 - **总线号(Bus Number)**:PCI总线的编号,范围00-FF(十六进制)。 - **设备号(Device Number)**:在总线上设备的编号,范围00-1F(5位,因为PCI总线最多支持32个设备)。 - **功能号(Function Number)**:一个设备内功能的编号,范围0-7(3位)。 ### 如何识别树形结构中的层级 - **第一层级**:根总线(如`-[0000:00]`)下的直接设备(如`00.0`、`01.0`等)都是顶级设备。 - **子总线**:如果一个设备连接了子总线,树形结构会缩进显示子总线及其设备。例如: ``` -[0000:00]-+-00.0 \-[0000:01]-+-01.0 \-02.0 ``` 这里`[0000:01]`是子总线(从属于总线00的设备),它下面有两个设备(`01.0`和`02.0`)。 ### 结合其他选项增强解析 - 使用`lspci -tv`:在树形结构中增加详细信息(如设备ID),便于更精确识别设备[^2]。 - 使用`lspci -t -nn`:显示设备ID(如`[8086:1234]`),其中`8086`是厂商ID,`1234`是设备ID。 ### 示例解析(引用[2]的输出) ``` -[0000:00]-+-00.0 Intel Corporation 440FX - 82441FX PMC [Natoma] +-01.0 Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II] +-01.1 Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II] +-01.2 Intel Corporation 82371SB PIIX3 USB [Natoma/Triton II] +-01.3 Intel Corporation 82371AB/EB/MB PIIX4 ACPI +-02.0 Cirrus Logic GD 5446 ...(其他设备) ``` 解析: - 所有设备都位于根总线`[0000:00]`上。 - 设备`01.0`到`01.3`是同一个物理设备(设备01)的四个功能。 - 设备`02.0`、`03.0`等是独立的设备。 ### 总结 `lspci -t`输出的树形结构直观展示了PCI总线的层次关系: 1. **根总线**是起点。 2. **设备**按总线位置(`总线:设备.功能`)列出。 3. **缩进和连接符**表示层级关系(子总线或设备功能)。 4. 结合`-v`或`-nn`选项可获取更详细的设备信息[^1][^2]。 通过这种解析,您可以快速识别系统中PCI设备的拓扑结构,用于硬件问题排查或性能优化。 §§相关问题§§ 1. 如何用 lspci 命令查看特定设备的详细信息? 2. lspci 输出的设备 ID 如何映射到实际硬件型号? 3. 在 Linux 中,还有哪些工具可以分析 PCI 设备树(如 sysfs)?</think>### 解析 `lspci -t` 命令输出的 PCI 设备树结构 `lspci -t` 以树形结构展示 PCI 设备的层次关系,直观呈现总线、设备和功能的父子关系。以下是关键元素的解析(基于引用[1][2]): --- #### **1. 树形结构的符号含义** | **符号** | **含义** | |-----------|--------------------------------------------------------------------------| | `-[0000:00]` | 根总线(Domain:Bus),`0000` 是 PCI 域(通常为 0000),`00` 是总线号 | | `-+-` | 分支节点(有多个子设备) | | `+-` | 中间子设备(非末尾设备) | | `\-` | 末尾子设备(分支结束) | | `|` | 垂直连接符(表示子设备继续向下延伸) | | **缩进** | 表示层级关系(每级缩进代表更深层的从属关系) | --- #### **2. 设备位置标识格式** 每个设备条目遵循 **`[域:总线:设备.功能]`** 格式: ```bash -[0000:00]-+-00.0 Intel Corporation Device # 示例 \-[0000:01]-+-01.0 NVIDIA GPU \-01.1 NVIDIA Audio ``` - **域 (Domain)**:通常为 `0000`(多主机系统可能不同) - **总线 (Bus)**:PCI 总线的编号(如 `00`, `01`) - **设备 (Device)**:总线上的物理设备编号(如 `00`, `01`) - **功能 (Function)**:设备的多功能分区(如 `0`=主功能,`1`=音频,`2`=USB 控制器等) > ✅ **示例解析**: > - `[0000:00]`:根总线 > - `00.0`:总线 `00` 上的设备 `00`,功能 `0`(主功能) > - `[0000:01]`:子总线(从属于根总线) > - `01.0`:子总线 `01` 上的设备 `01`,功能 `0`(如 GPU 核心) > - `01.1`:同一设备的子功能(如 GPU 的音频输出) --- #### **3. 关键参数说明** - **总线层级**: - 缩进越深,表示越底层的总线或设备(如 `[0000:01:01.1]` 是 `[0000:01]` 的子设备) - 同级缩进表示并列设备(如多个 USB 控制器) - **设备描述**: - 厂商名称(如 `Intel Corporation`) - 设备类型(如 `Virtio block device`) - 结合 `lspci -nn` 可显示设备 ID(如 `[8086:1234]`,`8086`=Intel 厂商 ID)[^1] - **状态参数**(需结合 `lspci -v`): - **`Cap+`**:支持 PCI 新功能列表(如电源管理、MSI 中断)[^3] - **`DEVSEL=fast`**:设备快速响应总线请求(高性能设备特征) - **`INTx-`**:当前未通过传统中断请求(不代表禁用)[^3] --- #### **4. 解析示例** 引用[2]的输出: ```bash -[0000:00]-+-00.0 Intel Corporation 440FX +-01.0 Intel Corporation PIIX3 ISA +-01.1 Intel Corporation PIIX3 IDE \-06.0 Red Hat Virtio memory balloon ``` 1. **根总线**:`[0000:00]` 2. **直接子设备**: - `00.0`:主板芯片组(440FX) - `01.0`–`01.1`:同一设备(`01`)的多功能分区(ISA 控制器 + IDE 控制器) - `06.0`:独立设备(Virtio 内存气球驱动) --- #### **5. 增强解析技巧** - **显示详细信息**:`lspci -tv`(添加设备描述和状态)[^2] - **显示设备 ID**:`lspci -tnn`(输出 `[厂商ID:设备ID]` 格式,便于查询硬件型号) - **过滤设备**:`lspci -t -s 01:00.0`(仅显示总线 `01`、设备 `00`、功能 `0` 的子树) > 💡 **自动化建议**: > 用脚本解析树形结构时(如 Python),通过缩进深度计算层级关系(参考[引用示例](#步骤-4-自动化解析工具))。 --- ### 总结 `lspci -t` 的树形输出本质是 PCI 总线的拓扑映射: 1. **根总线**为起点,**子总线**和**设备**通过缩进表示从属关系 2. **设备位置**(`域:总线:设备.功能`)是唯一标识 3. 结合 `-v`/`-nn` 选项可获取技术细节(如中断状态、设备 ID)[^1][^3] 通过此结构,可快速定位硬件位置(如排查设备冲突或分析性能瓶颈)[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值