https://blog.csdn.net/qq_28660035/article/details/80688427
https://blog.csdn.net/kkk584520/article/details/9490233
https://blog.csdn.net/panda1234lee/article/details/83473471
https://blog.csdn.net/qq_25147897/article/details/65634409
使用NVIDIA Visual Profiler追踪Python程序来分析GPU调用[nvprof-tools]
代码编写
[Python]torch.cuda.nvtx参考,实例如下:
import numpy as np import torch import time def cholesky_speed_test(device="cpu"): assert device in ("cpu","cuda") np.random.seed(123) n_rep = 10000 dim = 16 batches = 10 A = np.random.normal(0,1,(batches,dim,dim)) cov = np.matmul(A,A.swapaxes(1,2)) pt_cov = torch.tensor(cov.astype(np.float32),device=device) L = torch.cholesky(pt_cov) torch.cuda.nvtx.range_push("CholeskyDecomposition") start_time = time.time() for i in range(n_rep): torch.cuda.nvtx.range_push("Iter{}".format(i)) torch.cholesky(pt_cov, out=L) torch.cuda.nvtx.range_pop() duration = time.time() - start_time print("Duration: {:.3f}s on device {}".format(duration,device)) torch.cuda.nvtx.range_pop() cholesky_speed_test(device="cpu") cholesky_speed_test(device="cuda")
编译运行
命令行下运行nvprof生成nvvp文件,而后使用nvvp调用NVIDIA Visual Profiler:
Usually nvprof, located at /usr/local/cuda/bin
Non-Visual Profiler
$ nvprof python train_mnist.py
I prefer to use --print-gpu-trace.
$ nvprof --print-gpu-trace python train_mnist.py
Visual Profiler
On GPU machine, run
$ nvprof -o prof.nvvp python train_mnist.py
Copy
prof.nvvp
into your local machine(如果命令行未改变目录,则不需要)$ scp your_gpu_machine:/path/to/prof.nvvp .
Then, run nvvp (nvidia visual profiler) on your local machine:
$ nvvp prof.nvvp
It works more comfortably than X11 forwarding or something.
追踪Python函数内部调用
[神器不解释]Graphviz+pycallgraph
官网下载Graphviz.deb,并安装sudo dkpg -i *.deb(依赖问题运行:sudo apt install -f);
然后pip install pycallgraph;
- 使用示例
|---main.py |---downloadmusic.py |---baidu.png |---trace_detail.png ##################################################################### # coding: -utf8- # filename: main.py from pycallgraph import PyCallGraph from pycallgraph import Config from pycallgraph import GlobbingFilter from pycallgraph.output import GraphvizOutput from downloadmuisc import * # Setting depth and filters for tracer config = Config(max_depth=10) # include exclude some dirs or packages config.trace_filter = GlobbingFilter(exclude=[ 'pycallgraph.*', '*.secret_function', ]) graphviz = GraphvizOutput(output_file=r'./trace_detail.png') with PyCallGraph(output=graphviz, config=config): download('http://www.baidu.com/img/bd_logo1.png', r'./baidu.png') ##################################################################### # coding: -utf8- # filename: downloadmusic.py import urllib.request import threading def download(url, path): data = urllib.request.urlopen(url).read() open(path, 'wb').write(data) print("success!")
Graphviz +Pyreverse 绘制Python的UML类图
- 1.linux环境下graphviz安装
graphviz是一个开源做图软件,她能画结构化的抽象和网络图形,在网络,生物信息学,软件工程,数据库和web设计,机器学习, 可视化接口等众多其他技术领域都有应用。
使用yum自动安装,任意路径下执行如下命令:sudo apt-get install graphviz
- 2.pyreverse工具安装
pyreverse能方便的生成uml类图,pylint里自带了pyreverse这个工具。使用pip安装pylint
pip install pylint
- 3.使用,可以参考的命令为,scheduler为存放代码的目录
pyreverse -ASmy -o png scheduler/
Pycharm专业版:右键Diagrams工具可以显示UML类图
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
PyTorch网络可视化
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
Pycharm配置程序内存
打开pycharm64.vmoptions,进行配置
-Xms4094m -Xmx20480m -XX:ReservedCodeCacheSize=240m -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -Djdk.http.auth.tunneling.disabledSchemes="" -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Dawt.useSystemAAFontSettings=lcd -Dsun.java2d.renderer=sun.java2d.marlin.MarlinRenderingEngine -javaagent:/home/lijie/pycharm-2018.3.3/bin/JetbrainsCrack-release-enc.jar
- -Xmx用来设置你的应用程序(不是IDE)能够使用的最大内存数,如果你的程序要花很大内存的话,那就需要修改缺省的设置。
- -Xms用来设置程序初始化的时候内存栈的大小,增加这个值的话你的程序的启动性能会得到提高。
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
htop/top命令界面详解
Top命令监控某个进程的资源占有情况
下面是各种内存:
- VIRT:virtual memory usage
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量
- RES:resident memory usage 常驻内存
1、进程当前使用的内存大小,但不包括swap out
2、包含其他进程的共享
3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小
- SHR:shared memory
1、除了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES – SHR
4、swap out后,它将会降下来
- DATA
1、数据占用的内存。如果top没有显示,按f键可以显示出来。
2、真正的该程序要求的数据空间,是真正在运行中要使用的。