4 Python机器学习性能优化Python机器学习性能优化 以BERT服务为例例,从1到1000 刘欣 ⽬目录 CONTENTS 1. 优化的哲学 2. 了解你的资源 3. 定位性能瓶颈 4. 动⼿优化 1. 优化的哲学 "There ain't no such thing as a free lunch" Ahmdal’s Law • 系统整体的优化,取决于热点部分的占⽐比和该部分的加速程度 No Free Free Lunch • 定位热点 & 热点加速 • 对于项⽬目开发周期: 1. 先做出效果 2. 确定整体pipeline 3. 再考虑优化 • 对于⼈人⼯工智能项⽬目:迭代周期更更⻓长,更更是如此 以BERT服务为例 • BERT: TODO: ⼀一句句话解释 • 横扫多项NLP任务的SOTA榜 • 惊⼈人的3亿参数 以BERT服务为例 • Self Attention机制 's=Happy birthday to [MASK].' [“you"] 以BERT服务为例 • 我们现在上线了了这样⼀一个服务,每秒钟只能处理理10个请求 • Q: ⼤大家⼀一开始如何着⼿手优化 • Profile before Optimizing • 建⽴立闭环 2 了解你的资源 cpu/内存/io/gpu GPU为什么“快”? 计算⼒对⽐ • GFLOPS/s0 码力 | 38 页 | 2.25 MB | 1 年前3
PyConChina2022-杭州-ARM芯片的Python+AI算力优化-朱宏林ARM 芯片的 Python + AI 算力优化 主讲人: 朱宏林 – 阿里云程序语言与编译器团队 简介 • 当今开发者们大量使用 Python 语言编写的 AI 程序。过去这些程序总跑在 GPU 或者 x86 架构的 CPU 上。然而综合考虑到功耗、成本、性能等因素,云厂商们开始建设 ARM 架构的服务平台,如 何整合 Python + AI 的相关软件并使其在该平台上发挥最高的性能成为了工程师们关注的焦点。 用 ARM 架构新提供的矩阵扩展对 bf16 类型的 矩阵乘法计算进行优化,该优化将纯矩阵乘法的运算速度提升 3 倍以上,对深度学习推理任务性能 提升明显。目前,该成果已经被集成进 OpenBLAS 和 PyTorch 中。 • 本次演讲,将向大家介绍我们在倚天 710 ARM 芯片上开展的 Python + AI 优化工作,以及在 ARM 云平台上部署 Python + AI 任务的最佳实践。 • GEMM 通过优化内存局部性和向量指令,比朴素实现快 10 倍以上 GEMM • 优化 GEMM • 内存布局:矩阵分块;重排 • 向量化指令:AVX、NEON V0 V1 ✕ ✕ ✕ ✕ V2 GEMM 例子 • 优化 GEMM • 内存布局:矩阵分块;重排 • 向量化指令:AVX、NEON 原始算法 展开4x1 向量化 GEMM 例子 • 优化 GEMM • 内存布局:矩阵分块;重排0 码力 | 24 页 | 4.00 MB | 1 年前3
07 FPGA 助力Python加速计算 陈志勇的不足,又克服了原有可编程器件门电路数有限的缺点。 Ø 设计语言:硬件描述语言(HDL)是一种用来设计数字逻辑系统和描述数字电路的语言,常用 的主要有VHDL、Verilog HDL Ø 信号处理:数据可以并行处理 Ø 主要实现功能: Ø 组合逻辑 -》计数器 -》算法实现 -》SOC 设计 Ø 新一代FPGA器件:高速接口、ARM SOC、多个 IP 硬核、大容量存储器等 Ø 新一代PCIE加速卡: Ø 工业市场:工业伺服、控制器、安防相机、机器视觉、超声设备等。 Ø 消费类和广播设备:电视台演播设备、电视墙 Ø 测量测试仪器:示波器、信号发生器、逻辑分析仪等 FPGA 介绍 5 串行计算和并行计算 1 GHz 126 clock cycles = 8 MSPS / MAC unit 传统的基于 DSP 计算 - Serial 基于 FPGA 计算 - Parallelism 近期很热门的话题 Ø 目的:提高算法计算效率,缩短算法开发时间和验证时间 Ø 加速框架: Ø 分布式计算:多节点计算 Ø 并行计算:多处理器、多线程计算 Ø 分布式计算引擎:Spark Ø 并行计算语言(函数式编程):Scala Ø 加速方法: Ø 算法的优化 Ø 算法的并行化 Ø CPU: 多核 CPU Ø GPU: 多核处理器 Ø 硬件仿真:算法计算在FPGA里实现,输入和输出在 PC0 码力 | 34 页 | 6.89 MB | 1 年前3
FPGA助力Python加速计算 陈志勇 的不足,又克服了原有可编程器件门电路数有限的缺点。 ➢ 设计语言:硬件描述语言(HDL)是一种用来设计数字逻辑系统和描述数字电路的语言,常用 的主要有VHDL、Verilog HDL ➢ 信号处理:数据可以并行处理 ➢ 主要实现功能: ➢ 组合逻辑 -》计数器 -》算法实现 -》SOC 设计 ➢ 新一代FPGA器件:高速接口、ARM SOC、多个 IP 硬核、大容量存储器等 ➢ 新一代PCIE加速卡: ➢ 工业市场:工业伺服、控制器、安防相机、机器视觉、超声设备等。 ➢ 消费类和广播设备:电视台演播设备、电视墙 ➢ 测量测试仪器:示波器、信号发生器、逻辑分析仪等 FPGA 介绍 5 串行计算和并行计算 1 GHz 126 clock cycles = 8 MSPS / MAC unit 传统的基于 DSP 计算 - Serial 基于 FPGA 计算 - Parallelism 近期很热门的话题 ➢ 目的:提高算法计算效率,缩短算法开发时间和验证时间 ➢ 加速框架: ➢ 分布式计算:多节点计算 ➢ 并行计算:多处理器、多线程计算 ➢ 分布式计算引擎:Spark ➢ 并行计算语言(函数式编程):Scala ➢ 加速方法: ➢ 算法的优化 ➢ 算法的并行化 ➢ CPU: 多核 CPU ➢ GPU: 多核处理器 ➢ 硬件仿真:算法计算在FPGA里实现,输入和输出在 PC0 码力 | 34 页 | 4.19 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Python 版10.3 二分查找边界 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 10.4 哈希优化策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 10.5 重识搜索算法 . . . 时间效率:算法运行时间的长短。 ‧ 空间效率:算法占用内存空间的大小。 简而言之,我们的目标是设计“既快又省”的数据结构与算法。而有效地评估算法效率至关重要,因为只有 这样,我们才能将各种算法进行对比,进而指导算法设计与优化过程。 效率评估方法主要分为两种:实际测试、理论估算。 2.1.1 实际测试 假设我们现在有算法 A 和算法 B ,它们都能解决同一问题,现在需要对比这两个算法的效率。最直接的方法 是找一台 是找一台计算机,运行这两个算法,并监控记录它们的运行时间和内存占用情况。这种评估方式能够反映真 实情况,但也存在较大的局限性。 一方面,难以排除测试环境的干扰因素。硬件配置会影响算法的性能表现。比如一个算法的并行度较高,那 么它就更适合在多核 CPU 上运行,一个算法的内存操作密集,那么它在高性能内存上的表现就会更好。也 就是说,算法在不同的机器上的测试结果可能是不一致的。这意味着我们需要在各种机器上进行测试,统计0 码力 | 364 页 | 18.43 MB | 10 月前3
Hello 算法 1.0.0b4 Python版10.2. 二分查找边界 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 10.3. 哈希优化策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 10.4. 重识搜索算法 . . 空间效率,即算法占用内存空间的大小。 简而言之,我们的目标是设计“既快又省”的数据结构与算法。掌握评估算法效率的方法则至关重要,因为 只有了解评价标准,我们才能进行算法之间的对比分析,从而指导算法设计与优化过程。 2.1.2. 效率评估方法 实际测试 假设我们现在有算法 A 和算法 B,它们都能解决同一问题,现在需要对比这两个算法的效率。我们最直接的 方法就是找一台计算机,运行这两个算法,并监 log10 ? ,因 此空间复杂度为 ?(log10 ?) = ?(log ?) 。 2.3.4. 权衡时间与空间 理想情况下,我们希望算法的时间复杂度和空间复杂度都能达到最优。然而在实际情况中,同时优化时间复 杂度和空间复杂度通常是非常困难的。 降低时间复杂度通常需要以提升空间复杂度为代价,反之亦然。我们将牺牲内存空间来提升算法运行速度的 思路称为“以空间换时间”;反之,则称为“以时间换空间”。0 码力 | 329 页 | 27.34 MB | 1 年前3
2_FPGA助力Python加速计算_陈志勇的不足,又克服了原有可编程器件门电路数有限的缺点。 Ø 设计语言:硬件描述语言(HDL)是一种用来设计数字逻辑系统和描述数字电路的语言,常用 的主要有VHDL、Verilog HDL Ø 信号处理:数据可以并行处理 Ø 主要实现功能: Ø 组合逻辑 -》计数器 -》算法实现 -》SOC 设计 Ø 新一代FPGA器件:高速接口、ARM SOC、多个 IP 硬核、大容量存储器等 Ø 新一代PCIE加速卡: Ø 工业市场:工业伺服、控制器、安防相机、机器视觉、超声设备等。 Ø 消费类和广播设备:电视台演播设备、电视墙 Ø 测量测试仪器:示波器、信号发生器、逻辑分析仪等 FPGA 介绍 5 串行计算和并行计算 1 GHz 126 clock cycles = 8 MSPS / MAC unit 传统的基于 DSP 计算 - Serial 基于 FPGA 计算 - Parallelism 近期很热门的话题 Ø 目的:提高算法计算效率,缩短算法开发时间和验证时间 Ø 加速框架: Ø 分布式计算:多节点计算 Ø 并行计算:多处理器、多线程计算 Ø 分布式计算引擎:Spark Ø 并行计算语言(函数式编程):Scala Ø 加速方法: Ø 算法的优化 Ø 算法的并行化 Ø CPU: 多核 CPU Ø GPU: 多核处理器 Ø 硬件仿真:算法计算在FPGA里实现,输入和输出在 PC0 码力 | 33 页 | 8.99 MB | 1 年前3
Hello 算法 1.1.0 Python版10.3 二分查找边界 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 10.4 哈希优化策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 10.5 重识搜索算法 . . . 时间效率:算法运行速度的快慢。 ‧ 空间效率:算法占用内存空间的大小。 简而言之,我们的目标是设计“既快又省”的数据结构与算法。而有效地评估算法效率至关重要,因为只有 这样,我们才能将各种算法进行对比,进而指导算法设计与优化过程。 效率评估方法主要分为两种:实际测试、理论估算。 2.1.1 实际测试 假设我们现在有算法 A 和算法 B ,它们都能解决同一问题,现在需要对比这两个算法的效率。最直接的方法 是找一台 2‑4 递归调用深度 在实际中,编程语言允许的递归深度通常是有限的,过深的递归可能导致栈溢出错误。 2. 尾递归 有趣的是,如果函数在返回前的最后一步才进行递归调用,则该函数可以被编译器或解释器优化,使其在空 间效率上与迭代相当。这种情况被称为尾递归(tail recursion)。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 文。 ‧0 码力 | 364 页 | 18.42 MB | 1 年前3
Hello 算法 1.0.0 Python版10.3 二分查找边界 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 10.4 哈希优化策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 10.5 重识搜索算法 . . . 时间效率:算法运行速度的快慢。 ‧ 空间效率:算法占用内存空间的大小。 简而言之,我们的目标是设计“既快又省”的数据结构与算法。而有效地评估算法效率至关重要,因为只有 这样,我们才能将各种算法进行对比,进而指导算法设计与优化过程。 效率评估方法主要分为两种:实际测试、理论估算。 2.1.1 实际测试 假设我们现在有算法 A 和算法 B ,它们都能解决同一问题,现在需要对比这两个算法的效率。最直接的方法 是找一台 2‑4 递归调用深度 在实际中,编程语言允许的递归深度通常是有限的,过深的递归可能导致栈溢出错误。 2. 尾递归 有趣的是,如果函数在返回前的最后一步才进行递归调用,则该函数可以被编译器或解释器优化,使其在空 间效率上与迭代相当。这种情况被称为「尾递归 tail recursion」。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 文。0 码力 | 362 页 | 17.54 MB | 1 年前3
Hello 算法 1.0.0b5 Python版10.3 二分查找边界 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 10.4 哈希优化策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 10.5 重识搜索算法 . . . 时间效率:算法运行速度的快慢。 ‧ 空间效率:算法占用内存空间的大小。 简而言之,我们的目标是设计“既快又省”的数据结构与算法。而有效地评估算法效率至关重要,因为只有 这样我们才能将各种算法进行对比,从而指导算法设计与优化过程。 效率评估方法主要分为两种:实际测试、理论估算。 2.1.1 实际测试 假设我们现在有算法 A 和算法 B ,它们都能解决同一问题,现在需要对比这两个算法的效率。最直接的方法 是找一台 2‑4 递归调用深度 在实际中,编程语言允许的递归深度通常是有限的,过深的递归可能导致栈溢出报错。 2. 尾递归 有趣的是,如果函数在返回前的最后一步才进行递归调用,则该函数可以被编译器或解释器优化,使其在空 间效率上与迭代相当。这种情况被称为「尾递归 tail recursion」。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 文。0 码力 | 361 页 | 30.64 MB | 1 年前3
共 88 条
- 1
- 2
- 3
- 4
- 5
- 6
- 9













