หากต้องการใช้ Xprof คุณต้องเปิดใช้การจับภาพโปรไฟล์ภายในโค้ดของเวิร์กโหลดโมเดลก่อน การบันทึกโปรไฟล์ทำได้ 2 วิธี โดยมีรายละเอียดด้านล่าง
การจับภาพแบบเป็นโปรแกรม
การแคปเจอร์แบบเป็นโปรแกรมกำหนดให้คุณต้องใส่คำอธิบายประกอบในโค้ดโมเดลเพื่อ ระบุตำแหน่งในโค้ดที่ต้องการแคปเจอร์โปรไฟล์ โดยปกติแล้ว ผู้ใช้จะรวบรวมโปรไฟล์ เป็นเวลา 2-3 ขั้นตอนในระหว่างลูปการฝึก หรือสร้างโปรไฟล์ของบล็อกที่เฉพาะเจาะจง ภายในโมเดล คุณบันทึกการติดตามในเฟรมเวิร์กต่างๆ ได้หลายวิธี เช่น JAX, Pytorch XLA และ Tensorflow ไม่ว่าจะเป็นการติดตามแบบเริ่ม/หยุดที่อิงตาม API หรืออิงตามตัวจัดการบริบท
การบันทึกแบบออนดีมานด์ (หรือการบันทึกด้วยตนเอง)
การบันทึกโปรไฟล์ตามต้องการจะใช้เมื่อคุณต้องการบันทึกโปรไฟล์เฉพาะกิจ ระหว่างการเรียกใช้ สำหรับช่วงเวลาที่คุณไม่ได้เปิดใช้การบันทึกโปรไฟล์แบบเป็นโปรแกรม โดยปกติแล้วจะใช้เมื่อคุณเห็นปัญหาเกี่ยวกับเมตริกของโมเดล ระหว่างการเรียกใช้ และต้องการบันทึกโปรไฟล์ในขณะนั้นเป็นระยะเวลาหนึ่ง เพื่อวินิจฉัยปัญหา
หากต้องการเปิดใช้การบันทึกโปรไฟล์ตามต้องการ คุณยังคงต้องเริ่มเซิร์ฟเวอร์ xprof
ภายในโค้ด ตัวอย่างเช่น ใน JAX การเปิดใช้
jax.profiler.start_server
จะเริ่มเซิร์ฟเวอร์ xprof ในเวิร์กโหลด ML ซึ่งจะรอทริกเกอร์การจับภาพตามต้องการเพื่อเริ่มจับภาพโปรไฟล์
หลายเซสชันต่อการเรียกใช้
เมื่อบันทึกโปรไฟล์ คุณจะบันทึกโปรไฟล์สำหรับการเรียกใช้ครั้งเดียวเป็นหลายเซสชันได้ สมมติว่าคุณบันทึกโปรไฟล์ในการเรียกใช้การฝึกจากขั้นตอนที่ 1-3 และ บันทึกโปรไฟล์จากขั้นตอนที่ 8-10 ในภายหลัง ดังนั้น โปรไฟล์เหล่านี้จึงเป็นการเรียกใช้เดียวกัน แต่การจับภาพครั้งแรกจากขั้นตอนที่ 1-3 จะเป็นเซสชัน 1 และการจับภาพครั้งที่ 2 จาก ขั้นตอนที่ 8-10 จะเป็นเซสชัน 2 ระบบจะระบุเซสชันต่างๆ ด้วย การประทับวันที่แตกต่างกันภายใต้การเรียกใช้แต่ละครั้ง คุณบันทึกโปรไฟล์ในเซสชันต่างๆ ได้ ไม่ว่าจะโดยใช้โปรแกรม ตามต้องการ หรือทั้ง 2 อย่าง
XProf และ Tensorboard บน Google Cloud
ใน Google Cloud เราขอแนะนำให้ใช้ไลบรารี
cloud-diagnostics-xprof
เพื่อให้โฮสต์ Tensorboard และ XProf ได้ง่ายขึ้น ข้อดีหลักๆ บางประการของการใช้ไลบรารีนี้ใน GCP มีดังนี้
- ตั้งค่าและแพ็กเกจทรัพยากร Dependency ของ XProf และ TensorBoard ได้ง่าย
- จัดเก็บโปรไฟล์ไว้ใน GCS ซึ่งอาจมีประโยชน์สำหรับการเก็บรักษาระยะยาวและการวิเคราะห์หลังการทดสอบ (ระบบจะลบโปรไฟล์ในเครื่องที่บันทึกไว้หลังจากที่นักวิจัยทำการทดสอบเสร็จสิ้น)
- โหลดโปรไฟล์ขนาดใหญ่และหลายโปรไฟล์ได้อย่างรวดเร็วโดยการจัดสรร Tensorboard ใน VM ของ GCE หรือพ็อด GKE พร้อมตัวเลือกในการเปลี่ยนประเภทเครื่องตาม ความต้องการของผู้ใช้ในด้านความเร็วในการโหลดและค่าใช้จ่าย
- สร้างลิงก์เพื่อให้แชร์โปรไฟล์และทำงานร่วมกับสมาชิกในทีม และวิศวกรของ Google ได้ง่ายๆ
- การสร้างโปรไฟล์ตามต้องการของภาระงานใน GKE และ GCE ทำได้ง่ายขึ้นเพื่อเลือกโฮสต์ที่เรียกใช้ภาระงานเพื่อบันทึกโปรไฟล์
วิธีการเฉพาะเฟรมเวิร์ก
ดูวิธีเปิดใช้การจัดทำโปรไฟล์แบบเป็นโปรแกรมและการจัดทำโปรไฟล์ตามต้องการใน เฟรมเวิร์กต่างๆ
การแก้ปัญหา
การทำโปรไฟล์ GPU
โปรแกรมที่ทำงานบน GPU ควรสร้างการติดตามสำหรับสตรีม GPU ใกล้ด้านบน ของเครื่องมือดูการติดตาม หากคุณเห็นเฉพาะการติดตามโฮสต์ ให้ตรวจสอบบันทึกและ/หรือเอาต์พุตของโปรแกรมเพื่อดูข้อความแสดงข้อผิดพลาดต่อไปนี้
หากได้รับข้อผิดพลาดต่อไปนี้ Could not load dynamic library 'libcupti.so.10.1'
ข้อผิดพลาดแบบเต็ม:
W external/org_tensorflow/tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libcupti.so.10.1'; dlerror: libcupti.so.10.1: cannot open shared object file: No such file or directory
2020-06-12 13:19:59.822799: E external/org_tensorflow/tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1422] function cupti_interface_->Subscribe( &subscriber_, (CUpti_CallbackFunc)ApiCallback, this)failed with error CUPTI could not be loaded or symbol could not be found.
เพิ่มเส้นทางไปยัง libcupti.so ในตัวแปรสภาพแวดล้อม LD_LIBRARY_PATH
(ลองใช้ locate libcupti.so เพื่อค้นหาเส้นทาง) เช่น
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/extras/CUPTI/lib64/:$LD_LIBRARY_PATH
หากยังได้รับข้อความ Could not load dynamic library หลังจากทำตามนี้แล้ว
ให้ตรวจสอบว่าร่องรอย GPU แสดงในโปรแกรมดูร่องรอยหรือไม่ ข้อความนี้
อาจปรากฏขึ้นแม้ว่าทุกอย่างจะทำงานได้ตามปกติ เนื่องจากระบบจะค้นหา
libcupti ในหลายที่
หากได้รับข้อผิดพลาดต่อไปนี้ failed with error CUPTI_ERROR_INSUFFICIENT_PRIVILEGES
ข้อผิดพลาดแบบเต็ม:
E external/org_tensorflow/tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1445] function cupti_interface_->EnableCallback( 0 , subscriber_, CUPTI_CB_DOMAIN_DRIVER_API, cbid)failed with error CUPTI_ERROR_INSUFFICIENT_PRIVILEGES
2020-06-12 14:31:54.097791: E external/org_tensorflow/tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1487] function cupti_interface_->ActivityDisable(activity)failed with error CUPTI_ERROR_NOT_INITIALIZED
เรียกใช้คำสั่งต่อไปนี้ (โปรดทราบว่าต้องรีบูต)
echo 'options nvidia "NVreg_RestrictProfilingToAdminUsers=0"' | sudo tee -a /etc/modprobe.d/nvidia-kernel-common.conf
sudo update-initramfs -u
sudo reboot now
ดูข้อมูลเพิ่มเติมได้ในเอกสารของ NVIDIA เกี่ยวกับข้อผิดพลาดนี้
การทำโปรไฟล์ในเครื่องระยะไกล
หากโปรแกรมที่คุณต้องการสร้างโปรไฟล์กำลังทำงานในเครื่องระยะไกล ตัวเลือกหนึ่งคือการเรียกใช้คำสั่งทั้งหมดข้างต้นในเครื่องระยะไกล (โดยเฉพาะอย่างยิ่ง ให้เริ่มเซิร์ฟเวอร์ XProf ในเครื่องระยะไกล) จากนั้นใช้การส่งต่อพอร์ต SSH ในเครื่องเพื่อเข้าถึงเว็บ UI ของ XProf จากเครื่องของคุณ ใช้คำสั่ง SSH ต่อไปนี้เพื่อส่งต่อพอร์ต XProf เริ่มต้น 8791 จากเครื่องภายในไปยังเครื่องระยะไกล
ssh -L 8791:localhost:8791 <remote server address>
หรือหากคุณใช้ Google Cloud ให้ทำดังนี้
$ gcloud compute ssh <machine-name> -- -L 8791:localhost:8791
การติดตั้ง TensorBoard หลายรายการ
หากการเริ่มต้น TensorBoard ไม่สำเร็จและมีข้อผิดพลาด เช่น ValueError: Duplicate
plugins for name projector
สาเหตุส่วนใหญ่เป็นเพราะมีการติดตั้ง TensorBoard และ/หรือ TensorFlow 2 เวอร์ชัน (เช่น แพ็กเกจ pip tensorflow, tf-nightly, tensorboard และ tb-nightly
ทั้งหมดมี TensorBoard) การถอนการติดตั้งแพ็กเกจ pip เพียงแพ็กเกจเดียวอาจ
ส่งผลให้ระบบนำไฟล์tensorboardที่เรียกใช้งานออก ซึ่งจะทำให้แทนที่ได้ยาก
ดังนั้นคุณอาจต้องถอนการติดตั้งทุกอย่างและติดตั้งเวอร์ชันเดียวใหม่
pip uninstall tensorflow tf-nightly tensorboard tb-nightly xprof xprof-nightly tensorboard-plugin-profile tbp-nightly
pip install tensorboard xprof
แก้ไขปัญหาเกี่ยวกับสิทธิ์
เมื่อเรียกใช้การสร้างโปรไฟล์ด้วย CUDA® Toolkit ในสภาพแวดล้อม Docker หรือใน Linux
คุณอาจพบปัญหาที่เกี่ยวข้องกับสิทธิ์ CUPTI ไม่เพียงพอ
(CUPTI_ERROR_INSUFFICIENT_PRIVILEGES) ไปที่
เอกสารสำหรับนักพัฒนาซอฟต์แวร์ของ NVIDIA
เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีแก้ปัญหาเหล่านี้ใน Linux
หากต้องการแก้ไขปัญหาเกี่ยวกับสิทธิ์ CUPTI ในสภาพแวดล้อม Docker ให้เรียกใช้
docker run option '--privileged=true'