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 Flask Production Server • gunicorn 多进程解决多核利利⽤用率问题 • gevent 协程替代多线程⽹网络模型 • 更更⾼高效的序列列化lib 3 定位性能瓶颈 Profile before Optimizing Python Profilers • time.time() • cProfile • line profiler • pyflame 放个截图 cProfile • 倒序打印 & graph pyflame • 插桩 or 采样 • 放个flamegraph • 开源地址 wrk • 制造压⼒力力 • 挖掘整体性能瓶颈 • 实现⾮非常精妙的压⼒力力⼯工具,强烈烈安利利(要不不要写个py binding) 4 动⼿优化 多线程服务器的问题 • 每个请求单独进GPU,利利⽤用率不不⾼高 • ⼤大量量请求并⾏行行,CUDA会爆0 码力 | 38 页 | 2.25 MB | 1 年前3
3 Thautwarm 解放python的表达力 性能和安全性 语法和语义扩展 JIT 静态检查解放Python的 表达力,性能和安全性 Thautwarm 目录 CONTENTS 语法和语义扩展 JIT 静态类型 语法和语义扩展 表达力的扩展, 可用性的保留,白来的午餐? 演示一小部分: 模式匹配, Quick Lambda, Pipe运算 语言决定思维模型 GNU-APL C++ Haskell 说 到 质 数 � 人 们 想 到 什 么 � 语言决定思维模型 检查类型的pattern (a, *b, c): 匹配tuple [a, *b, c]: 匹配列表 演示 Pattern-Matching 基于template-python扩展实现。 性能比Pampy高数量级倍。 简单直接的自定义pattern,真实的tree pattern matching。 Match的每个分支是语句而不是表达力有限的表达式。 … benchmark.py 而基本上编译器0优化的Cython端, 你模拟栈后, 还远不如Python解释器快, 所以必须写分析去掉栈机语义。 那用Julia后端就可以不写了? 来谈后端的问题。 Julia Cython 常见性能提升 100x 1-10x 小函数JIT 比Python慢1000倍 比Python快50% 启动时间 10s以上, “JAOT” 没有,调编译器快 循环折叠 有 有 Debug现场? 每次打log等待30s0 码力 | 43 页 | 10.71 MB | 1 年前3
Python 标准库参考指南 3.8.20 形式也都是有效的别名;因此, 'utf-8' 是 'utf_8' 编解码器的有效别名。 CPython implementation detail: 有些常见编码格式可以绕过编解码器查找机制来提升性能。这些优化 机会对于 CPython 来说仅能通过一组有限的别名(大小写不敏感)来识别:utf-8, utf8, latin-1, latin1, iso-8859-1, iso8859-1, mbcs 中保证了这种新行为),它们变得不那么重要了。 一些与dict 的不同仍然存在: • 常规的dict 被设计为非常擅长映射操作。跟踪插入顺序是次要的。 • OrderedDict 旨在擅长重新排序操作。空间效率、迭代速度和更新操作的性能是次要的。 • 算法上,OrderedDict 可以比dict 更好地处理频繁的重新排序操作。这使其适用于跟踪最近的 访问(例如在 LRU cache 中)。 • 对于OrderedDict ,相等操作检查匹配顺序。 个单参数的函数,用于从 iterable 的每个元素中提取比较键 (例如 key=str.lower)。等价于: sorted(iterable, key=key)[:n]。 后两个函数在 n 值较小时性能最好。对于更大的值,使用sorted() 函数会更有效率。此外,当 n==1 时,使用内置的min() 和max() 函数会更有效率。如果需要重复使用这些函数,请考虑将可迭代对象转 为真正的堆。 80 码力 | 1927 页 | 9.69 MB | 10 月前3
Python 标准库参考指南 3.8.20 形式也都是有效的别名;因此, 'utf-8' 是 'utf_8' 编解码器的有效别名。 CPython implementation detail: 有些常见编码格式可以绕过编解码器查找机制来提升性能。这些优化 机会对于 CPython 来说仅能通过一组有限的别名(大小写不敏感)来识别:utf-8, utf8, latin-1, latin1, iso-8859-1, iso8859-1, mbcs 中保证了这种新行为),它们变得不那么重要了。 一些与dict 的不同仍然存在: • 常规的dict 被设计为非常擅长映射操作。跟踪插入顺序是次要的。 • OrderedDict 旨在擅长重新排序操作。空间效率、迭代速度和更新操作的性能是次要的。 • 算法上,OrderedDict 可以比dict 更好地处理频繁的重新排序操作。这使其适用于跟踪最近的 访问(例如在 LRU cache 中)。 • 对于OrderedDict ,相等操作检查匹配顺序。 个单参数的函数,用于从 iterable 的每个元素中提取比较键 (例如 key=str.lower)。等价于: sorted(iterable, key=key)[:n]。 后两个函数在 n 值较小时性能最好。对于更大的值,使用sorted() 函数会更有效率。此外,当 n==1 时,使用内置的min() 和max() 函数会更有效率。如果需要重复使用这些函数,请考虑将可迭代对象转 为真正的堆。 80 码力 | 1927 页 | 9.69 MB | 10 月前3
Python 标准库参考指南 3.8.20 写形式也都是有效的别名;因此,'utf-8' 是 'utf_8' 编解码器的有效别名。 CPython implementation detail: 有些常见编码格式可以绕过编解码器查找机制来提升性能。这些优化机会 对于 CPython 来说仅能通过一组有限的别名(大小写不敏感)来识别:utf-8, utf8, latin-1, latin1, iso-8859-1, iso8859-1, mbcs 中保证了这种新行为),它们变得不那么重要了。 一些与dict 的不同仍然存在: • 常规的dict 被设计为非常擅长映射操作。跟踪插入顺序是次要的。 • OrderedDict 旨在擅长重新排序操作。空间效率、迭代速度和更新操作的性能是次要的。 • 算法上,OrderedDict 可以比dict 更好地处理频繁的重新排序操作。这使其适用于跟踪最近的访问 (例如在 LRU cache 中)。 • 对于OrderedDict ,相等操作检查匹配顺序。 则其应指定一个单参数的 函数,用于从 iterable 的每个元素中提取比较键 (例如 key=str.lower)。等价于: sorted(iterable, key=key)[:n]。 后两个函数在 n 值较小时性能最好。对于更大的值,使用sorted() 函数会更有效率。此外,当 n==1 时, 使用内置的min() 和max() 函数会更有效率。如果需要重复使用这些函数,请考虑将可迭代对象转为真正 的堆。0 码力 | 2052 页 | 9.74 MB | 10 月前3
Python 标准库参考指南 3.10.15 bisect --- 数组二分查找算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 8.7.1 性能说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 iii 8.7 8 限制全局变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434 12.1.9 性能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435 12.1 4 类的层次结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597 16.2.5 性能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606 16.30 码力 | 2072 页 | 10.39 MB | 10 月前3
Python 标准库参考指南 3.10.15 bisect --- 数组二分查找算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 8.7.1 性能说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 8.7 限制全局变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465 12.1.9 性能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466 类的层次结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 641 16.2.5 性能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6500 码力 | 2207 页 | 10.45 MB | 10 月前3
Python 标准库参考指南 3.13 bisect --- 数组二分算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 8.7.1 性能说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 8.7.2 搜索有序列表 8 限制全局变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484 12.1.9 性能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485 12.1 4 类的层次结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682 16.2.5 性能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691 16.30 码力 | 2246 页 | 11.74 MB | 10 月前3
Python 标准库参考指南 3.13 bisect --- 数组二分算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 8.7.1 性能说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 8.7.2 搜索有序列表 8 限制全局变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480 12.1.9 性能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481 12.1 4 类的层次结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 678 16.2.5 性能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687 16.30 码力 | 2242 页 | 11.73 MB | 10 月前3
Python 标准库参考指南 3.12 bisect --- 数组二分算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 8.7.1 性能说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 8.7.2 搜索有序列表 8 限制全局变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466 12.1.9 性能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467 12.1 4 类的层次结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654 16.2.5 性能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663 16.30 码力 | 2253 页 | 11.81 MB | 10 月前3
共 137 条
- 1
- 2
- 3
- 4
- 5
- 6
- 14













