VizTracer เป็นเครื่องมือบันทึก/ดีบั๊ก/สร้างโปรไฟล์ที่มีค่าใช้จ่ายต่ำ ซึ่งสามารถติดตามและแสดงภาพการเรียกใช้โค้ด Python ของคุณได้
UI ส่วนหน้าขับเคลื่อนโดย Perfetto ใช้ "AWSD" เพื่อซูม/นำทาง ดูความช่วยเหลือเพิ่มเติมได้ใน "การสนับสนุน - การควบคุม"
วิธีติดตั้ง VizTracer ที่แนะนำคือผ่าน pip
pip install viztracer
# Instead of "python3 my_script.py arg1 arg2"
viztracer my_script.py arg1 arg2
result.json
จะถูกสร้างขึ้น ซึ่งคุณสามารถเปิดด้วย vizviewer
# You can display all the files in a directory and open them in browser too
vizviewer ./
# For very large trace files, try external trace processor
vizviewer --use_external_processor result.json
vizviewer จะโฮสต์เซิร์ฟเวอร์ HTTP บน http://localhost:9001
คุณยังสามารถเปิดเบราว์เซอร์ของคุณและใช้ที่อยู่นั้นได้
หากคุณไม่ต้องการให้ vizviewer เปิดเว็บเบราว์เซอร์โดยอัตโนมัติ คุณสามารถใช้ได้
vizviewer --server_only result.json
หากคุณต้องการเรียกรายงานการติดตามเพียงครั้งเดียว และไม่ต้องการเซิร์ฟเวอร์ถาวร ให้ใช้
vizviewer --once result.json
vizviewer result.json
มีส่วนขยายรหัส VS เพื่อทำให้ชีวิตของคุณง่ายยิ่งขึ้น
--open
เพื่อเปิดรายงานทันทีหลังจากการติดตาม viztracer --open my_script.py arg1 arg2
viztracer -o result.html --open my_script.py arg1 arg2
flask
) เช่นกัน viztracer -m your_module
viztracer flask run
คุณยังสามารถเริ่ม/หยุด VizTracer ในสคริปต์ของคุณได้ด้วยตนเองเช่นกัน
from viztracer import VizTracer
tracer = VizTracer ()
tracer . start ()
# Something happens here
tracer . stop ()
tracer . save () # also takes output_file as an optional argument
หรือคุณสามารถทำได้โดย with
คำสั่ง
with VizTracer ( output_file = "optional.json" ) as tracer :
# Something happens here
หากคุณใช้ Jupyter คุณสามารถใช้เวทมนตร์เซลล์ viztracer ได้
# You need to load the extension first
% load_ext viztracer
% % viztracer
# Your code after
ปุ่ม VizTracer Report
จะปรากฏขึ้นหลังเซลล์ และคุณสามารถคลิกเพื่อดูผลลัพธ์ได้
VizTracer สามารถบันทึกการโทรแบบเนทีฟและเหตุการณ์ GPU ของ PyTorch (อิงตาม torch.profiler
) ด้วย --log_torch
with VizTracer ( log_torch = True ) as tracer :
# Your torch code
viztracer --log_torch your_model.py
VizTracer สามารถกรองข้อมูลที่คุณไม่ต้องการลดค่าใช้จ่าย และเก็บข้อมูลไว้เป็นระยะเวลานานขึ้นก่อนที่คุณจะทิ้งบันทึก
VizTracer สามารถบันทึกข้อมูลเพิ่มเติมโดยไม่ต้องเปลี่ยนซอร์สโค้ดของคุณ
VizTracer รองรับการแทรกเหตุการณ์ที่กำหนดเองในขณะที่โปรแกรมกำลังทำงาน การทำงานนี้เหมือนกับการแก้ไขข้อบกพร่องการพิมพ์ แต่คุณสามารถทราบได้ว่าการพิมพ์นี้เกิดขึ้นเมื่อใดในขณะที่ดูข้อมูลการติดตาม
สำหรับ Python3.12+ นั้น VizTracer รองรับการติดตามแบบหลายเธรดระดับ Python โดยไม่จำเป็นต้องแก้ไขโค้ดของคุณ
สำหรับเวอร์ชันก่อน 3.12 VizTracer รองรับโมดูล threading
ดั้งเดิมของ python เพียงเริ่ม VizTracer
ก่อนที่คุณจะสร้างเธรด และมันจะใช้งานได้
สำหรับสถานการณ์แบบมัลติเธรดอื่นๆ คุณสามารถใช้ enable_thread_tracing()
เพื่อสังเกต VizTracer เกี่ยวกับเธรดเพื่อติดตาม
อ้างถึงเอกสารแบบหลายเธรดสำหรับรายละเอียด
VizTracer รองรับ subprocess
, multiprocessing
, os.fork()
, concurrent.futures
และ loky
นอกกรอบ
สำหรับกรณีแบบหลายกระบวนการทั่วไป VizTracer สามารถรองรับขั้นตอนพิเศษบางอย่างได้
อ้างถึงเอกสารหลายกระบวนการสำหรับรายละเอียด
VizTracer รองรับ asyncio
โดยกำเนิด แต่สามารถปรับปรุงรายงานได้โดยใช้ --log_async
อ้างถึงเอกสาร async สำหรับรายละเอียด
Perfetto รองรับ Flamegraph ดั้งเดิม เพียงเลือกสไลซ์บน UI และเลือก "Slice Flamegraph"
VizTracer รองรับการแนบระยะไกลกับกระบวนการ Python ที่กำหนดเองเพื่อติดตามมัน ตราบใดที่ viztracer สามารถนำเข้าได้
อ้างถึงเอกสารแนบระยะไกล
VizTracer จำเป็นต้องถ่ายโอนข้อมูลภายในเป็นรูปแบบ json ขอแนะนำให้ผู้ใช้ติดตั้ง orjson
ซึ่งเร็วกว่าไลบรารี json
ในตัวมาก VizTracer จะพยายามนำเข้า orjson
และถอยกลับไปยังไลบรารี json
ในตัว หากไม่มี orjson
VizTracer ใช้ความพยายามอย่างมากเพื่อให้ได้ค่าใช้จ่ายที่ต่ำ ผลกระทบด้านประสิทธิภาพที่แท้จริงขึ้นอยู่กับการใช้งานของคุณเป็นส่วนใหญ่ สำหรับโค้ดเบสทั่วไป โอเวอร์เฮดคาดว่าจะต่ำกว่า 1x หากโค้ดของคุณมีการเรียกใช้ฟังก์ชันไม่บ่อยนัก ค่าใช้จ่ายอาจมีเพียงเล็กน้อย
โอเวอร์เฮดที่แนะนำโดย VizTracer นั้นโดยพื้นฐานแล้วจะเป็นเวลาคงที่ระหว่างการเข้าและออกฟังก์ชัน ดังนั้น ยิ่งใช้เวลาไปกับการเข้าและออกฟังก์ชันมากเท่าใด ค่าใช้จ่ายก็จะยิ่งถูกสังเกตมากขึ้นเท่านั้น ฟังก์ชัน fib
แบบเรียกซ้ำแท้อาจประสบปัญหาโอเวอร์เฮด 3x-4x บน Python3.11+ (เมื่อการเรียก Python ได้รับการปรับปรุงให้เหมาะสม ก่อนที่การเรียก Python จะช้าลง ดังนั้นอัตราส่วนโอเวอร์เฮดจึงน้อยลง)
ในสถานการณ์จริง โค้ดของคุณไม่ควรใช้เวลามากเกินไปในการเรียกใช้ฟังก์ชัน (ไม่ได้มีประโยชน์อะไรเลย) ดังนั้น โอเวอร์เฮดจึงน้อยกว่ามาก
มีการนำเทคนิคมากมายมาใช้เพื่อลดค่าใช้จ่ายโดยรวมระหว่างการเรียกใช้โค้ด เพื่อลดความเบ้ที่หลีกเลี่ยงไม่ได้ของ VizTracer (ส่วนการบันทึกรายงานไม่สำคัญเท่า) ตัวอย่างเช่น VizTracer พยายามใช้ตัวนับการประทับเวลาของ CPU แทน syscall เพื่อรับเวลาที่พร้อมใช้งาน บน Python 3.12+ นั้น VizTracer ใช้ sys.monitoring
ซึ่งมีค่าใช้จ่ายน้อยกว่า sys.setprofile
ความพยายามทั้งหมดทำให้มันเร็วกว่า cProfile
ซึ่งเป็น Python stdlib profiler อย่างเห็นได้ชัด
อย่างไรก็ตาม VizTracer เป็นตัวติดตาม ซึ่งหมายความว่าจะต้องบันทึกทุกรายการของฟังก์ชัน ดังนั้นจึงไม่สามารถเร็วเท่ากับตัวสร้างโปรไฟล์ตัวอย่าง - สิ่งเหล่านี้ไม่เหมือนกัน ด้วยค่าใช้จ่ายเพิ่มเติม VizTracer จึงให้ข้อมูลได้มากกว่าเครื่องมือสร้างโปรไฟล์การสุ่มตัวอย่างปกติ
สำหรับเอกสารฉบับเต็ม โปรดดู https://viztracer.readthedocs.io/en/stable
กรุณาส่งรายงานข้อผิดพลาดและคำขอคุณสมบัติผ่านตัวติดตามปัญหา GitHub ขณะนี้ VizTracer อยู่ระหว่างการพัฒนา และพร้อมเปิดรับข้อเสนอแนะเชิงสร้างสรรค์ใดๆ
ลิขสิทธิ์ 2020-2024 เถียนเกา
เผยแพร่ภายใต้เงื่อนไขของใบอนุญาต Apache 2.0