เครื่องมือ Trace Viewer
คุณสามารถใช้เครื่องมือดูการติดตามเพื่อแสดงไทม์ไลน์ของเหตุการณ์ที่เกิดขึ้นระหว่างเซสชันการสร้างโปรไฟล์เป็นภาพได้ โดยจะแสดงระยะเวลาของการดำเนินการที่โมเดลดำเนินการในส่วนต่างๆ ของระบบ เช่น โฮสต์ (CPU) และตัวเร่ง (GPU หรือ TPU) ซึ่งจะช่วยให้คุณเข้าใจวิธีที่โมเดลใช้ทรัพยากรฮาร์ดแวร์ ระบุจุดคอขวดด้านประสิทธิภาพ และเพิ่มประสิทธิภาพโมเดลเพื่อให้ทำงานได้เร็วขึ้น UI เครื่องมือตรวจสอบร่องรอยจะอิงตาม UI ที่ใช้ใน chrome://tracing
คุณจึงต้องใช้เบราว์เซอร์ Chrome
แพลตฟอร์มที่รองรับ
TPU: รองรับ
GPU: รองรับ
เครื่องมือตรวจสอบร่องรอยสำหรับ GPU จะจัดกลุ่มเหตุการณ์ตามไทม์ไลน์ต่อชิป GPU และกระแสข้อมูลภายใน ส่วนสำหรับ TPU จะจัดระเบียบเหตุการณ์ตามไทม์ไลน์ต่อชิปและแกนของ TPU ในกรณีใดก็ตาม เครื่องมือตรวจสอบร่องรอยจะแสดงเหตุการณ์บนไทม์ไลน์ต่อการแยกแต่ละชุดสําหรับ CPU โฮสต์ที่เชื่อมต่อกับตัวเร่ง
การโต้ตอบกับไทม์ไลน์
เครื่องมือตรวจสอบการติดตามมีเครื่องมือและวิธีการต่างๆ ในการไปยังส่วนต่างๆ และตรวจสอบไทม์ไลน์ ดังนี้
- การไปยังส่วนต่างๆ: คุณสามารถใช้แป้นพิมพ์ลัดต่อไปนี้
- W: ซูมเข้า
- S: ซูมออก
- ตอบ: เลื่อนไปทางซ้าย
- D: เลื่อนไปทางขวา
- เครื่องมือเลือก: คุณสามารถคลิกเครื่องมือในเครื่องมือเลือกหรือใช้แป้นพิมพ์ลัดที่เกี่ยวข้อง ดังนี้
- เครื่องมือการเลือก (1 หรือ !): คลิกเหตุการณ์เพื่อเลือกและดูรายละเอียดในแผงรายละเอียด เลือกหลายเหตุการณ์ผ่านแป้น Ctrl + คลิกเพื่อดูสรุป
- เครื่องมือเลื่อน (2 หรือ @): ลากเพื่อเลื่อนไทม์ไลน์ในแนวนอนหรือแนวตั้ง
- เครื่องมือซูม (3 หรือ #): ลากเพื่อซูมเข้าที่พื้นที่ที่ต้องการในไทม์ไลน์
- เครื่องมือจับเวลา (4 หรือ $): ลากเพื่อทำเครื่องหมายช่วงเวลา ระบบจะแสดงระยะเวลาของช่วงเวลาที่ทำเครื่องหมาย นอกจากนี้ คุณยังใช้แป้น 'm' เพื่อทําเครื่องหมายส่วนที่เลือกและระบุระยะเวลาทั้งหมดของส่วนที่เลือกได้ด้วย
- ซูมไปยังเหตุการณ์ที่เลือก (f): เลือกเหตุการณ์อย่างน้อย 1 รายการ แล้วกดแป้น "f" เพื่อซูมไปยังส่วนนั้นของไทม์ไลน์อย่างรวดเร็ว ซึ่งมีประโยชน์สำหรับการมุ่งเน้นที่ขั้นตอนการฝึกอบรมหนึ่งๆ
เมื่อจัดการเหตุการณ์การติดตามจํานวนมาก เครื่องมือดูการติดตามจะทํางานในโหมดสตรีมมิง ซึ่งหมายความว่าระบบจะโหลดข้อมูลตามต้องการเมื่อคุณเลื่อนและซูมไทม์ไลน์ ซึ่งคล้ายกับวิธีการทำงานของแอปพลิเคชันแผนที่ หากคุณซูมเร็วกว่าที่ข้อมูลจะโหลด คุณอาจเห็นข้อมูลแสดงผลที่มีความละเอียดต่ำจนกว่าข้อมูลจะโหลดเสร็จ
คอมโพเนนต์อินเทอร์เฟซโปรแกรมดูร่องรอย
คอมโพเนนต์ UI หลักในเครื่องมือดูการติดตามมีดังนี้
- แกนเวลาจะวิ่งแนวนอนที่ด้านบน ซึ่งแสดงเวลาสัมพันธ์กับจุดเริ่มต้นของการติดตาม
- ไทม์ไลน์จะจัดระเบียบตามส่วนและแทร็ก โดยมีป้ายกำกับอยู่ที่แกนแนวตั้งด้านซ้าย แต่ละส่วนแสดงองค์ประกอบการประมวลผล (เช่น โหนดอุปกรณ์หรือเธรดโฮสต์) และสามารถขยายหรือยุบได้ ส่วนต่างๆ ประกอบด้วยแทร็ก ซึ่งเป็นลำดับเวลาของกิจกรรมหนึ่งๆ
- เหตุการณ์คือบล็อกสี่เหลี่ยมผืนผ้าสีบนแทร็กไทม์ไลน์ ซึ่งแสดงระยะเวลาของการดำเนินการหรือเหตุการณ์เมตา เช่น ขั้นตอนการฝึกอบรม สีของเหตุการณ์ไม่มีความหมายที่เจาะจง
- แผงรายละเอียดจะแสดงข้อมูลเพิ่มเติมเกี่ยวกับเหตุการณ์ที่เลือกในแผงไทม์ไลน์ เช่น ชื่อ เวลาที่เริ่มต้น และระยะเวลา
ส่วนและแทร็กทั่วไป
เครื่องมือดูการติดตามมีหัวข้อและแทร็กต่อไปนี้
- 1 ส่วนสําหรับโหนด TPU แต่ละโหนด โดยมีแทร็กต่อไปนี้
- โมดูล XLA: โปรแกรม XLA ที่ดำเนินการอยู่
- การดำเนินการ XLA: แสดงการดำเนินการ HLO ของ XLA ที่ทำงานบนแกน TPU การดำเนินการของเฟรมเวิร์กระดับสูงขึ้นแต่ละรายการ (เช่น JAX, Tensorflow หรือ PyTorch) จะได้รับการแปลเป็นการดำเนินการ XLA 1 รายการหรือหลายรายการ จากนั้นระบบจะคอมไพล์เพื่อเรียกใช้บน TPU เมื่อคลิกการดำเนินการ XLA คุณจะเห็นลิงก์ไปยังการดำเนินการดังกล่าวในเครื่องมือดูกราฟ พร้อมกับข้อมูลเพิ่มเติมเกี่ยวกับการดำเนินการ เช่น เวลาเริ่มต้น/หยุด ระยะเวลา และบันทึกสแต็กต้นทาง (หากเฟรมเวิร์กและคอมไพเลอร์มีให้)
- XLA TraceMe: คําอธิบายประกอบที่ผู้ใช้ระบุในโค้ดซึ่งอธิบายหน่วยงานเชิงตรรกะที่ผู้ใช้ต้องการติดตาม คุณอาจยังเห็นข้อมูลที่นี่แม้ว่าจะไม่ได้เพิ่มคำอธิบายประกอบใดๆ ก็ตาม โดยปกติแล้ว XLA (เช่น แกน Barrier) หรือ XProf เอง (เช่น รายการการติดตามที่ทิ้ง) จะเป็นผู้เพิ่มข้อมูล
- ขั้นตอน: แสดงระยะเวลาของขั้นตอนการฝึกอบรมที่ทำงานบนแกน TPU นั้น หากมีการกำกับเนื้อหาอย่างเหมาะสมในโปรแกรมหรือเฟรมเวิร์กของผู้ใช้
- การดำเนินการของเฟรมเวิร์ก: แสดงการดำเนินการของเฟรมเวิร์ก (เช่น JAX, Tensorflow หรือ PyTorch) ที่ดำเนินการบนแกน TPU หากมีการกำกับเนื้อหาอย่างเหมาะสมในโปรแกรมหรือเฟรมเวิร์กของผู้ใช้
- ขอบเขตชื่อเฟรมเวิร์ก: ภาพสแต็กเทรซสําหรับการดําเนินการเฟรมเวิร์กแต่ละรายการ เพื่อความกระชับ เราจะแสดงแทร็กนี้สำหรับอุปกรณ์เครื่องเดียวเท่านั้น
- ซอร์สโค้ด: เส้นทางไปยังซอร์สโค้ดที่กำลังดำเนินการ หากมีในโปรไฟล์
- หน่วยสกัลาร์: สำหรับ TPU แสดงเหตุการณ์ที่ดำเนินการในหน่วยสกัลาร์หากมีอยู่ในโปรไฟล์
- TensorCore Sync Flags: กลไกการซิงค์ใน TPU ซึ่งจะแสดงหากมีอยู่ในโปรไฟล์
- การย้ายข้อมูลออกจากโฮสต์: การดำเนินการที่ย้ายข้อมูลระหว่างหน่วยความจำของโฮสต์และหน่วยความจำของ Accelerator แบบไม่เป็นแบบพร้อมกัน โดยปกติแล้วจะมีการดำเนินการเริ่มต้นและหยุดที่เกี่ยวข้องซึ่งปรากฏในบรรทัดการดำเนินการ XLA ซึ่งบ่งบอกว่าเครื่องเร่งกำลังเตรียมพร้อมสำหรับการโอนข้อมูล (เช่น การทําเครื่องหมายภูมิภาคหน่วยความจําต้นทาง/ปลายทางเป็น "ใช้งานอยู่" ตลอดระยะเวลาการโอน) อาจมีแถวการโอนข้อมูลโฮสต์หลายแถวหากมีการดำเนินการโอนข้อมูลหลายรายการที่ทํางานพร้อมกัน ซึ่งทําให้ผู้ดูการติดตามต้องแสดงเหตุการณ์หลายรายการพร้อมกัน
- 1 ส่วนสำหรับโหนด Sparsecore แต่ละโหนด: TPU บางรุ่น (เช่น TPU v5p และ TPU v6e) มาพร้อมกับหน่วย SparseCore อย่างน้อย 1 หน่วยนอกเหนือจากหน่วย MXU แบบหนาแน่น โมดูล การดำเนินการ และ TraceMes ที่เชื่อมโยงกับแกนเหล่านี้จะปรากฏในส่วนนี้
- 1 ส่วนสําหรับโหนด GPU แต่ละโหนด โดยมีแทร็กต่อไปนี้
- โมดูล XLA, การดำเนินการกับเฟรมเวิร์ก, ขอบเขตชื่อเฟรมเวิร์ก, ขั้นตอน, ซอร์สโค้ด ทั้งหมดนี้คล้ายกับส่วน TPU
- 1 แทร็กต่อสตรีม โดยชื่อสตรีมจะมีข้อมูลเกี่ยวกับประเภทการดำเนินการที่ดำเนินการในสตรีมด้วย (Memcpy, Compute ฯลฯ)
- GPU ไม่รองรับ XLA TraceMe
- การดำเนินการ XLA จะปรากฏในส่วน GPU แต่ปัจจุบันข้อมูลเหล่านี้อาจไม่ถูกต้องเสมอไป เนื่องจากมาจากข้อมูลสตรีม ดังนั้นจึงไม่สามารถอธิบายรูปแบบการดําเนินการของ GPU ได้อย่างเต็มที่ ซึ่งอาจมีการกำหนดค่า N:M ของการดำเนินการ XLA ไปยังเคอร์เนลจริงที่ดำเนินการในสตรีมต่างๆ และการกำหนดเวลาแบบไดนามิกของสตรีมหลายรายการไปยัง SM ต่างๆ ในฮาร์ดแวร์
- 1 ส่วนสําหรับแต่ละคอมโพเนนต์ (เช่น 1 ThreadPool) ที่ทํางานบน CPU ของคอมพิวเตอร์โฮสต์ โดยมี 1 แทร็กต่อเธรดในกรณีของ ThreadPool นอกจากนี้ คุณจะเห็นร่องรอย Python ที่นี่ด้วยหากเปิดใช้ร่องรอยเหล่านี้ระหว่างการเก็บรวบรวมโปรไฟล์
โปรดทราบว่ามีเพียงการดำเนินการ XLA สำหรับ TPU และข้อมูลสตรีมสำหรับ GPU เท่านั้นที่อิงตามโปรไฟล์ที่รวบรวมโดยตรง ส่วนบรรทัดอื่นๆ ทั้งหมดคือ "บรรทัดอนุพันธ์" ซึ่งเกี่ยวข้องกับข้อมูล "แบนด์ข้าง" ที่ไม่บังคับซึ่งคอมไพเลอร์ระบุไว้ คําอธิบายประกอบของผู้ใช้ที่ไม่บังคับ และ/หรือวิธีการแก้ปัญหาแบบเฮuristic ที่ XProf ใช้ ดังนั้น บรรทัดสืบเนื่องเหล่านี้จึงอาจปรากฏหรือไม่ปรากฏในบางโปรไฟล์
ฟีเจอร์อื่นๆ
- คุณสามารถค้นหาชื่อเหตุการณ์ที่เฉพาะเจาะจงได้โดยใช้แถบค้นหา "ค้นหาเหตุการณ์" ปัจจุบันการค้นหานี้จะค้นหาภายในกรอบเวลาที่เห็นบนหน้าจอเท่านั้น ไม่ใช่การติดตามทั้งหมด
- เหตุการณ์ของโฟลว์: การเปิดใช้ตัวเลือกนี้โดยคลิกปุ่ม "เหตุการณ์ของโฟลว์" ในแถบด้านบนจะเพิ่มการแสดงภาพเชื่อมโยงเหตุการณ์ในชุดข้อความหรือบรรทัดหนึ่งกับเหตุการณ์ในชุดข้อความหรือบรรทัดอื่น เช่น อาจมีลูกศรที่ลากมาจากการดำเนินการบนโฮสต์ที่ส่งคิวหรือเริ่มงานสำหรับตัวเร่งไปยังการดำเนินการบนตัวเร่งที่ทำงานนั้น XProf จะระบุลิงก์เหล่านี้ผ่านคําอธิบายประกอบของผู้ใช้ วิธีการเฮิวริสติกในตัว และการประมวลผลข้อมูลขั้นสุดท้ายที่ได้รับจากคอมโพเนนต์ต่างๆ (เช่น ไดรเวอร์ CUPTI, รหัสการเริ่มเคอร์เนล, ข้อมูลรันไทม์ TPU เป็นต้น)
- การคลิกการดำเนินการ XLA จะแสดงข้อมูลเพิ่มเติมในแผงรายละเอียด เช่น ลิงก์กับการดำเนินการในเครื่องมือเครื่องมือดูกราฟ นอกจากนี้ยังอาจระบุเคอร์เซอร์ไปยังซอร์สโค้ดและ/หรือสแต็กเทรซของ Python, การดำเนินการของเฟรมเวิร์กที่ทำให้ระบบสร้างการดำเนินการ XLA นี้ขึ้น เป็นต้น (หากมีในโปรไฟล์) นอกจากนี้ยังอาจแสดง FLOPS (จํานวนการดำเนินการแบบทศนิยมที่ดำเนินการโดยการดำเนินการ) และไบต์ที่การดำเนินการเข้าถึง ข้อมูลนี้ได้รับแบบคงที่จาก XLA ระหว่างการคอมไพล์ ไม่ใช่ข้อมูลรันไทม์จากโปรไฟล์