Meteorix's Blog

  • Home

  • Archives

  • Tags

Python机器学习性能优化——PyCon2019分享

Posted on 2019-09-29

文章放在了新开的个人技术公众号Meteorix,欢迎关注

qrcode.bmp

Python机器学习性能优化——PyCon2019分享

BERT Runtime

Posted on 2019-09-07

BERT Runtime

最近继续怼BERT,项目大部分模型都上了BERT,真香啊。

本来一直在使用PyTorch JIT来解决加速和部署的问题,顺手还写了个service-streamer来做web和模型的中间件。
正好上个月NVIDIA开源了基于TensorRT的BERT代码,官方blog号称单次inference只用2.2ms,比cpu快20倍。但是正确的问法是:这东西能比TF/PyTorch快多少呢?

于是从TensorRT开始,认真学习了一波NVIDIA的BERT实现。并做了性能Benchmark对比TensorFlow和PyTorch,结论是gpu时间能快15%-30%。主要归因于对BERT的计算图优化,自己实现了4个cuda kernel,另外避免了TensorFlow和PyTorch等框架带来的overhead。

Prerequisite

比较有用的几个背景知识:

  1. 当然是BERT的Paper,Tensorflow实现,PyTorch实现
  2. Harvard写的著名解读The Annotated Transformer
  3. GPU和Cuda基础知识,很简单可以参考我的cuda101

TensorRT

TensorRT是NVIDIA官方推出的inference引擎,建立在CUDA之上。可以对TensorFlow/PyTorch等框架训练出来的模型进行CUDA优化,达到更高的inference性能。同时支持低精度参数、跨平台部署等,总之就是对自己家的GPU使用的最好。

Read more »

cuda 101

Posted on 2019-08-02 | Edited on 2019-09-17

cuda 101

最近开始做深度学习后端和性能优化,做到模型部分需要补补gpu和cuda知识。记录此篇入门笔记,配合官方文档食用。

NVIDIA的官方文档和blog写的真好,读了一天非常舒服。很多之前调包(Pytorch/Tensorflow)不理解的地方,都有更深的认识,期待尽早开始写自己的kernel。

get started

从这篇官方博客开始quickstart,写的非常好,可以快速了解gpu特性、编程模型、显存等

https://devblogs.nvidia.com/even-easier-introduction-cuda/

线程结构

image

Read more »

6年后,为什么离开网易游戏

Posted on 2019-06-07

在网易游戏待了六年,如果说这里是一所大学,那我也算毕业了,能拿个优秀毕业生吗:-D

游戏改变世界

小s面试时问我梦想是什么,我想了很久说出这个答案。虽然听起来很中二,我今天依然相信,技术可以改变世界。在GDC和GoogleIO上发布Airtest,算是达成了一点小目标。可是做游戏,至少在网易,离梦想却是渐行渐远。


本科时认真做的两件事,考GRE和打Dota。以前我是个狂热的游戏玩家,打游戏就是要赢。为了Dota毕业杯,能拉十个人去训练个把月,热血依旧。清晰地记得当时的心境,做游戏多有激情,为何要去美帝大农村?于是拒掉USC,来到网易。

Read more »

Pyflame解析和扩展

Posted on 2019-05-24 | Edited on 2019-08-11

Pyflame是uber开源的一个python性能profiler。

没有profile的优化就是耍流氓

说起python,被吐槽最多的就是慢。根据上面的名言,首先我们需要一个性能profiler。

profiler的两种原理

profile工具基本分成两种思路:

  1. 插桩

    这个理解起来非常直白,在每个函数的开始和结束时计时,然后统计每个函数的执行时间。python自带的Profile和cProfile模块就是这个原理。但是插桩会有两个问题,一是插桩计时本身带来的性能消耗overhead极大,二是对一个正在运行的程序没法插桩。

  2. 采样

    采样是注入正在运行的进程,高频地去探测函数调用栈。根据大数定理,探测到次数越多的函数运行时间越长。pyflame正是基于采样的原理。统计结果用另一个神器——火焰图flamegraph展示,我们就可以完整地了解cpu运行状态。

使用pyflame和火焰图

官方提供了pyflame源码,需要自己编译对应python版本,然后调用flamegraph生成火焰图svg。具体可以看官方文档。为了方便自己人使用,我写了个pyflame-server。

Read more »

记一次pytorch的coredump调试

Posted on 2019-04-30 | Edited on 2019-08-11
  1. 两个算法小哥写了个flask的web服务器,跑ocr的服务。单个请求是好的,多请求就崩了, log就显示:
    Segmentation fault (core dumped)

    “wtf is core dump?”

    just google it, 简单说就是程序崩溃之后dump出来的一些信息

  2. 调试到了凌晨2点,加了一堆log,还是没有找到原因,看起来很随机。第二天找到我:

    python coredump了怎么办?

  3. 为了debug这个coredump,先打开系统设置

    1
    ulimit -c unlimited
  4. 再次制造coredump,在当前目录下就产生了一个4G的core文件

    1
    -rw------- 1 liuxin root 4.2G 4月  29 14:21 core
  5. core文件就是保存了crash时候的所有信息,调用栈、线程、内存等。然后运用我们的linux c++开发经验,可以知道用gdb来调试coredump文件

    1
    gdb <executable> <coredump file>
  6. 等等,这里我们是python程序崩了,为什么没有traceback?因为在调用到pytorch的c++代码时,直接segmentfault,并没能等到python的退出机制打印出traceback,直接崩了。但是操作系统能产生coredump文件,这是我们的救命稻草。

Read more »

vs2017混合调试py/c++

Posted on 2019-02-13 | Edited on 2019-04-22

vs2017混合调试py/c++

python卡死了怎么办?

一般的python程序卡死,可以用pycharm debug。但是有时候是python和c/c++库混合开发,比如pyqt或者boost python程序卡死,就非常难查。以前都是二分法注释代码查找问题,异常低效。

于是我尝试了vs2017的新功能:python & c++ 混合调试 Debug Python and C++ together

vs2017 python

vs一直被称为宇宙最强IDE,貌似python支持是vs2017新加的功能。相比pycharm之类的python编辑器,vs2017最大的优势就是在python和native c/c++代码的混合调试。包括:

  • python / c++ 调用栈合并显示
  • python / c++ 都可以断点
  • python / c++ 代码之间step
  • python / c++ 对象都可以watch

由于python的性能瓶颈,很多时候混合开发需要同时调试,这正是我们需要的!

Read more »

gdb调试cpython

Posted on 2019-02-13 | Edited on 2019-04-22

gdb调试cpython

主要参考这篇文章:

  • https://www.podoliaka.org/2016/04/10/debugging-cpython-gdb/
  • https://blog.alswl.com/2013/11/python-gdb/

同时debug c栈和py栈

在调试脚本卡死的时候特别有用,如下图

image

安装python-dbg

1
sudo apt-get install gdb python-dbg
Read more »

新ubuntu环境搭建

Posted on 2019-02-13 | Edited on 2019-08-11

新ubuntu环境搭建

apt

替换apt源

  • 源列表:http://wiki.ubuntu.org.cn/
  • 清华源:https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/

安装zsh/vim/git

1
2
sudo apt-get update
sudo apt-get install zsh vim git

git

1
2
git config --global core.editor "vim"
git config --global --edit # 设置name和email
Read more »

Airtest刷刷抖音

Posted on 2019-02-05 | Edited on 2019-04-22

Airtest刷刷抖音

用Airtest做点有意思的事情,先来刷个抖音?

github仓库 airtest-douyin

ide01

Get Started

环境准备

手边没有android手机,iOS又懒得搭ios-tagent的环境,于是采用最偷懒的方式:

  • 夜神模拟器(可用安卓机代替)
  • AirtestIDE
Read more »
12
meteorix

meteorix

12 posts
8 tags
GitHub
© 2019 meteorix
Powered by Hexo v3.8.0
|
Theme – NexT.Pisces v7.1.0