[神器大集合]Trace Python Codes / UML in Pycharm

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]

代碼編寫

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、真正的該程序要求的數據空間,是真正在運行中要使用的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章