 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 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 说 到 质 数 � 人 们 想 到 什 么 � 语言决定思维模型 moshmosh/extension_register.py (只有45行) 科普: Python Import机制是怎样的? perform_extension Source Code 分析当前文件调 用的所有扩展 检查是否使用 moshmosh扩展系 统? 所有扩展的 源码预写 所有扩展的 AST重写 所有扩展的 源码后写 分析 # ± ?????????(???? … ) 检查类型的pattern (a, *b, c): 匹配tuple [a, *b, c]: 匹配列表 演示 Pattern-Matching 基于template-python扩展实现。 性能比Pampy高数量级倍。 简单直接的自定义pattern,真实的tree pattern matching。 Match的每个分支是语句而不是表达力有限的表达式。 … benchmark.py0 码力 | 43 页 | 10.71 MB | 1 年前3 3 Thautwarm 解放python的表达力 性能和安全性 语法和语义扩展 JIT 静态检查解放Python的 表达力,性能和安全性 Thautwarm 目录 CONTENTS 语法和语义扩展 JIT 静态类型 语法和语义扩展 表达力的扩展, 可用性的保留,白来的午餐? 演示一小部分: 模式匹配, Quick Lambda, Pipe运算 语言决定思维模型 GNU-APL C++ Haskell 说 到 质 数 � 人 们 想 到 什 么 � 语言决定思维模型 moshmosh/extension_register.py (只有45行) 科普: Python Import机制是怎样的? perform_extension Source Code 分析当前文件调 用的所有扩展 检查是否使用 moshmosh扩展系 统? 所有扩展的 源码预写 所有扩展的 AST重写 所有扩展的 源码后写 分析 # ± ?????????(???? … ) 检查类型的pattern (a, *b, c): 匹配tuple [a, *b, c]: 匹配列表 演示 Pattern-Matching 基于template-python扩展实现。 性能比Pampy高数量级倍。 简单直接的自定义pattern,真实的tree pattern matching。 Match的每个分支是语句而不是表达力有限的表达式。 … benchmark.py0 码力 | 43 页 | 10.71 MB | 1 年前3
 Python 标准库参考指南 3.11.10 bisect --- 数组二分查找算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 8.7.1 性能说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 8.7.2 搜索有序列表 8 限制全局变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458 12.1.9 性能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459 12.1 4 类的层次结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640 16.2.5 性能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649 16.30 码力 | 2248 页 | 11.10 MB | 9 月前3 Python 标准库参考指南 3.11.10 bisect --- 数组二分查找算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 8.7.1 性能说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 8.7.2 搜索有序列表 8 限制全局变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458 12.1.9 性能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459 12.1 4 类的层次结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640 16.2.5 性能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649 16.30 码力 | 2248 页 | 11.10 MB | 9 月前3
 Python 标准库参考指南 3.8.20 这种情况下,它纯粹是一个便利函数,因此您不必显式导入pdb 且键入尽可能少的代码即可进入 调试器。但是,sys.breakpointhook() 可以设置为其他一些函数并被breakpoint() 自动调 用,以允许进入你想用的调试器。 引发一个审计事件 builtins.breakpoint 并附带参数 breakpointhook。 3.7 新版功能. class bytearray([source[ 的解释取决于 value 实参的类型,但 是大多数内置类型使用标准格式化语法:格式规格迷你语言。 默认的 format_spec 是一个空字符串,它通常给出与调用str(value) 相同的结果。 调 用 format(value, format_spec) 会 转 换 成 type(value).__format__(value, format_spec) ,所以实例字典中的 __format__() This does the same thing as: # super(C, self).method(arg) 除了方法查找之外,super() 也可用于属性查找。一个可能的应用场合是在上级或同级类中调 用描述器。 21 The Python Library Reference, 发布 3.8.20 请注意super() 是作为显式加点属性查找的绑定过程的一部分来实现的,例如 super().0 码力 | 1927 页 | 9.69 MB | 9 月前3 Python 标准库参考指南 3.8.20 这种情况下,它纯粹是一个便利函数,因此您不必显式导入pdb 且键入尽可能少的代码即可进入 调试器。但是,sys.breakpointhook() 可以设置为其他一些函数并被breakpoint() 自动调 用,以允许进入你想用的调试器。 引发一个审计事件 builtins.breakpoint 并附带参数 breakpointhook。 3.7 新版功能. class bytearray([source[ 的解释取决于 value 实参的类型,但 是大多数内置类型使用标准格式化语法:格式规格迷你语言。 默认的 format_spec 是一个空字符串,它通常给出与调用str(value) 相同的结果。 调 用 format(value, format_spec) 会 转 换 成 type(value).__format__(value, format_spec) ,所以实例字典中的 __format__() This does the same thing as: # super(C, self).method(arg) 除了方法查找之外,super() 也可用于属性查找。一个可能的应用场合是在上级或同级类中调 用描述器。 21 The Python Library Reference, 发布 3.8.20 请注意super() 是作为显式加点属性查找的绑定过程的一部分来实现的,例如 super().0 码力 | 1927 页 | 9.69 MB | 9 月前3
 Python 标准库参考指南 3.8.20 这种情况下,它纯粹是一个便利函数,因此您不必显式导入pdb 且键入尽可能少的代码即可进入 调试器。但是,sys.breakpointhook() 可以设置为其他一些函数并被breakpoint() 自动调 用,以允许进入你想用的调试器。 引发一个审计事件 builtins.breakpoint 并附带参数 breakpointhook。 3.7 新版功能. class bytearray([source[ 的解释取决于 value 实参的类型,但 是大多数内置类型使用标准格式化语法:格式规格迷你语言。 默认的 format_spec 是一个空字符串,它通常给出与调用str(value) 相同的结果。 调 用 format(value, format_spec) 会 转 换 成 type(value).__format__(value, format_spec) ,所以实例字典中的 __format__() This does the same thing as: # super(C, self).method(arg) 除了方法查找之外,super() 也可用于属性查找。一个可能的应用场合是在上级或同级类中调 用描述器。 21 The Python Library Reference, 发布 3.8.20 请注意super() 是作为显式加点属性查找的绑定过程的一部分来实现的,例如 super().0 码力 | 1927 页 | 9.69 MB | 9 月前3 Python 标准库参考指南 3.8.20 这种情况下,它纯粹是一个便利函数,因此您不必显式导入pdb 且键入尽可能少的代码即可进入 调试器。但是,sys.breakpointhook() 可以设置为其他一些函数并被breakpoint() 自动调 用,以允许进入你想用的调试器。 引发一个审计事件 builtins.breakpoint 并附带参数 breakpointhook。 3.7 新版功能. class bytearray([source[ 的解释取决于 value 实参的类型,但 是大多数内置类型使用标准格式化语法:格式规格迷你语言。 默认的 format_spec 是一个空字符串,它通常给出与调用str(value) 相同的结果。 调 用 format(value, format_spec) 会 转 换 成 type(value).__format__(value, format_spec) ,所以实例字典中的 __format__() This does the same thing as: # super(C, self).method(arg) 除了方法查找之外,super() 也可用于属性查找。一个可能的应用场合是在上级或同级类中调 用描述器。 21 The Python Library Reference, 发布 3.8.20 请注意super() 是作为显式加点属性查找的绑定过程的一部分来实现的,例如 super().0 码力 | 1927 页 | 9.69 MB | 9 月前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 | 9 月前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 | 9 月前3
 Python 标准库参考指南 3.9.20 8 限制全局变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 12.1.9 性能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423 12.1 3 类的层次结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580 16.2.4 性能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589 vii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1514 27.5.5 什么是确定性性能分析? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1517 27.5.6 局限性 . . . . . .0 码力 | 2015 页 | 10.12 MB | 9 月前3 Python 标准库参考指南 3.9.20 8 限制全局变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 12.1.9 性能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423 12.1 3 类的层次结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580 16.2.4 性能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589 vii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1514 27.5.5 什么是确定性性能分析? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1517 27.5.6 局限性 . . . . . .0 码力 | 2015 页 | 10.12 MB | 9 月前3
 Python 标准库参考指南 3.7.13 这种情况下,它纯粹是一个便利函数,因此您不必显式导入pdb 且键入尽可能少的代码即可进入 调试器。但是,sys.breakpointhook() 可以设置为其他一些函数并被breakpoint() 自动调 用,以允许进入你想用的调试器。 3.7 新版功能. class bytearray([source[, encoding[, errors]]]) 返回一个新的 bytes 数组。bytearray 的解释取决于 value 实参的类型,但 是大多数内置类型使用标准格式化语法:格式规格迷你语言。 默认的 format_spec 是一个空字符串,它通常给出与调用str(value) 相同的结果。 调 用 format(value, format_spec) 会 转 换 成 type(value).__format__(value, format_spec) ,所以实例字典中的 __format__() This does the same thing as: # super(C, self).method(arg) 除了方法查找之外,super() 也可用于属性查找。一个可能的此种用例是在上级或同级类中调 用descriptor。 请注意super() 是作为显式加点属性查找的绑定过程的一部分来实现的,例如 super(). __getitem__(name)。它做到这一点是通过实现自己的 __getattribute__()0 码力 | 1846 页 | 9.09 MB | 9 月前3 Python 标准库参考指南 3.7.13 这种情况下,它纯粹是一个便利函数,因此您不必显式导入pdb 且键入尽可能少的代码即可进入 调试器。但是,sys.breakpointhook() 可以设置为其他一些函数并被breakpoint() 自动调 用,以允许进入你想用的调试器。 3.7 新版功能. class bytearray([source[, encoding[, errors]]]) 返回一个新的 bytes 数组。bytearray 的解释取决于 value 实参的类型,但 是大多数内置类型使用标准格式化语法:格式规格迷你语言。 默认的 format_spec 是一个空字符串,它通常给出与调用str(value) 相同的结果。 调 用 format(value, format_spec) 会 转 换 成 type(value).__format__(value, format_spec) ,所以实例字典中的 __format__() This does the same thing as: # super(C, self).method(arg) 除了方法查找之外,super() 也可用于属性查找。一个可能的此种用例是在上级或同级类中调 用descriptor。 请注意super() 是作为显式加点属性查找的绑定过程的一部分来实现的,例如 super(). __getitem__(name)。它做到这一点是通过实现自己的 __getattribute__()0 码力 | 1846 页 | 9.09 MB | 9 月前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 | 9 月前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 | 9 月前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 | 9 月前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 | 9 月前3
共 163 条
- 1
- 2
- 3
- 4
- 5
- 6
- 17














 
 