เพิ่มประสิทธิภาพ TensorFlow โดยใช้ XProf

คู่มือนี้แสดงวิธีใช้เครื่องมือที่มีใน 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.profiler Function API

    tf.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

แหล่งข้อมูลเพิ่มเติม