คู่มือนี้แสดงวิธีใช้เครื่องมือที่มีใน XProf เพื่อติดตามประสิทธิภาพของโมเดล TensorFlow ในโฮสต์ (CPU), อุปกรณ์ (GPU) หรือทั้งโฮสต์และอุปกรณ์
การสร้างโปรไฟล์ช่วยให้เข้าใจการใช้ทรัพยากรฮาร์ดแวร์ (เวลาและหน่วยความจำ) ของการดำเนินการ (Op) ต่างๆ ของ TensorFlow ในโมเดล และแก้ไขปัญหาคอขวดด้านประสิทธิภาพ รวมถึงทำให้โมเดลทำงานได้เร็วขึ้นในท้ายที่สุด
คู่มือนี้จะแนะนำวิธีใช้เครื่องมือต่างๆ ที่มีและ โหมดต่างๆ ที่ Profiler ใช้ในการรวบรวมข้อมูลประสิทธิภาพ
หากต้องการสร้างโปรไฟล์ประสิทธิภาพของโมเดลใน Cloud TPU โปรดดูคู่มือ Cloud TPU
รวบรวมข้อมูลประสิทธิภาพ
XProf จะรวบรวมกิจกรรมของโฮสต์และร่องรอย GPU ของโมเดล TensorFlow คุณ กำหนดค่า XProf เพื่อรวบรวมข้อมูลประสิทธิภาพผ่านโหมดโปรแกรม หรือโหมดการสุ่มตัวอย่างได้
Profiling APIs
คุณใช้ API ต่อไปนี้เพื่อทำการสร้างโปรไฟล์ได้
โหมดโปรแกรมโดยใช้ TensorBoard Keras Callback (
tf.keras.callbacks.TensorBoard)# Profile from batches 10 to 15 tb_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, profile_batch='10, 15') # Train the model and use the TensorBoard Keras callback to collect # performance profiling data model.fit(train_data, steps_per_epoch=20, epochs=5, callbacks=[tb_callback])โหมดโปรแกรมโดยใช้
tf.profilerFunction APItf.profiler.experimental.start('logdir') # Train the model here tf.profiler.experimental.stop()โหมดเป็นโปรแกรมโดยใช้เครื่องมือจัดการบริบท
with tf.profiler.experimental.Profile('logdir'): # Train the model here pass
โหมดการสุ่มตัวอย่าง: ทำการสร้างโปรไฟล์ตามต้องการโดยใช้
tf.profiler.experimental.server.startเพื่อเริ่มเซิร์ฟเวอร์ gRPC ด้วยการเรียกใช้โมเดล TensorFlow หลังจากเริ่มเซิร์ฟเวอร์ gRPC และเรียกใช้โมเดลแล้ว คุณจะบันทึกโปรไฟล์ผ่านปุ่มบันทึกโปรไฟล์ใน XProf ได้ ใช้สคริปต์ในส่วน "ติดตั้งโปรไฟล์เลอร์" ด้านบนเพื่อเปิดใช้อินสแตนซ์ TensorBoard หากยังไม่ได้เรียกใช้ตัวอย่างเช่น
# Start a profiler server before your model runs. tf.profiler.experimental.server.start(6009) # (Model code goes here). # Send a request to the profiler server to collect a trace of your model. tf.profiler.experimental.client.trace('grpc://localhost:6009', 'gs://your_tb_logdir', 2000)ตัวอย่างการสร้างโปรไฟล์ผู้ปฏิบัติงานหลายคน
# E.g., your worker IP addresses are 10.0.0.2, 10.0.0.3, 10.0.0.4, and you # would like to profile for a duration of 2 seconds. tf.profiler.experimental.client.trace( 'grpc://10.0.0.2:8466,grpc://10.0.0.3:8466,grpc://10.0.0.4:8466', 'gs://your_tb_logdir', 2000)

ใช้กล่องโต้ตอบบันทึกโปรไฟล์เพื่อระบุสิ่งต่อไปนี้
- รายการ URL ของบริการโปรไฟล์หรือชื่อ TPU ที่คั่นด้วยคอมมา
- ระยะเวลาการทำโปรไฟล์
- ระดับการติดตามการเรียกใช้ฟังก์ชันของอุปกรณ์ โฮสต์ และ Python
- จำนวนครั้งที่คุณต้องการให้ Profiler ลองจับภาพโปรไฟล์อีกครั้งหากไม่สำเร็จในครั้งแรก
การสร้างโปรไฟล์ลูปการฝึกที่กำหนดเอง
หากต้องการสร้างโปรไฟล์ลูปการฝึกที่กำหนดเองในโค้ด TensorFlow ให้ใช้เครื่องมือ API tf.profiler.experimental.Trace กับลูปการฝึกเพื่อทำเครื่องหมายขอบเขตของขั้นตอนสำหรับ XProf
อาร์กิวเมนต์ name ใช้เป็นคํานําหน้าสําหรับชื่อขั้นตอน อาร์กิวเมนต์คีย์เวิร์ด step_num
จะต่อท้ายในชื่อขั้นตอน และอาร์กิวเมนต์คีย์เวิร์ด _r
ทําให้ XProf ประมวลผลเหตุการณ์การติดตามนี้เป็นเหตุการณ์ขั้นตอน
ตัวอย่างเช่น
for step in range(NUM_STEPS):
with tf.profiler.experimental.Trace('train', step_num=step, _r=1):
train_data = next(dataset)
train_step(train_data)
ซึ่งจะช่วยให้การวิเคราะห์ประสิทธิภาพแบบทีละขั้นตอนของ XProf และทำให้เหตุการณ์ step ปรากฏในโปรแกรมดูการติดตาม
ตรวจสอบว่าคุณได้รวมตัววนซ้ำชุดข้อมูลไว้ในบริบทของ
tf.profiler.experimental.Trace เพื่อการวิเคราะห์ที่แม่นยำของไปป์ไลน์อินพุต
ข้อมูลโค้ดด้านล่างเป็นรูปแบบที่ไม่ควรใช้
for step, train_data in enumerate(dataset):
with tf.profiler.experimental.Trace('train', step_num=step, _r=1):
train_step(train_data)
กรณีการใช้งานการสร้างโปรไฟล์
Profiler ครอบคลุม Use Case หลายอย่างตามแกนที่แตกต่างกัน 4 แกน ขณะนี้ระบบรองรับการ ผสมผสานบางอย่าง และจะเพิ่มการผสมผสานอื่นๆ ในอนาคต กรณีการใช้งานบางส่วนมีดังนี้
- การสร้างโปรไฟล์ในเครื่องเทียบกับการสร้างโปรไฟล์จากระยะไกล: การตั้งค่าสภาพแวดล้อมการสร้างโปรไฟล์มี 2 วิธีที่ใช้กันโดยทั่วไป ดังนี้ ในการสร้างโปรไฟล์ในเครื่อง ระบบจะเรียกใช้ Profiling API ในเครื่องเดียวกับที่โมเดลของคุณกำลังดำเนินการอยู่ เช่น เวิร์กสเตชันในเครื่องที่มี GPU ในการสร้างโปรไฟล์ระยะไกล ระบบจะเรียกใช้ Profiling API ในเครื่องอื่น จากที่โมเดลของคุณกำลังดำเนินการอยู่ เช่น ใน Cloud TPU
- การสร้างโปรไฟล์ของ Worker หลายราย: คุณสร้างโปรไฟล์ของเครื่องหลายเครื่องได้เมื่อใช้ ความสามารถในการฝึกแบบกระจายของ TensorFlow
- แพลตฟอร์มฮาร์ดแวร์: สร้างโปรไฟล์ CPU, GPU และ TPU
ตารางด้านล่างแสดงภาพรวมโดยย่อของ Use Case ที่ TensorFlow รองรับ ที่กล่าวถึงข้างต้น
| Profiling API | ในพื้นที่ | รีโมต | ผู้ปฏิบัติงาน หลายคน | แพลตฟอร์ม ฮาร์ดแวร์ |
|---|---|---|---|---|
| TensorBoard Keras Callback | รองรับ | ไม่ รองรับ | ไม่ รองรับ | CPU, GPU |
tf.profiler.experimental
เริ่ม/หยุด API |
รองรับ | ไม่ รองรับ | ไม่ รองรับ | CPU, GPU |
tf.profiler.experimental
client.trace API |
รองรับ | รองรับ | รองรับ | CPU, GPU, TPU |
| Context manager API | รองรับ | ไม่ รองรับ | ไม่ รองรับ | CPU, GPU |
แหล่งข้อมูลเพิ่มเติม
- บทแนะนำ TensorFlow Profiler: โปรไฟล์ประสิทธิภาพของโมเดล ด้วย Keras และ TensorBoard ซึ่งคุณสามารถนำคำแนะนำในคำแนะนำนี้ไปใช้ได้
- การพูดคุยเรื่อง การสร้างโปรไฟล์ประสิทธิภาพใน TensorFlow 2 จาก TensorFlow Dev Summit 2020
- การสาธิต TensorFlow Profiler จาก TensorFlow Dev Summit 2020