XProf का इस्तेमाल करके, TensorFlow की परफ़ॉर्मेंस को ऑप्टिमाइज़ करना

इस गाइड में, XProf के साथ उपलब्ध टूल का इस्तेमाल करके, होस्ट (सीपीयू), डिवाइस (जीपीयू) या होस्ट और डिवाइस, दोनों पर TensorFlow मॉडल की परफ़ॉर्मेंस को ट्रैक करने का तरीका बताया गया है.

प्रोफ़ाइलिंग की मदद से, आपके मॉडल में मौजूद अलग-अलग TensorFlow ऑपरेशनों (ऑप्स) के लिए, हार्डवेयर रिसोर्स के इस्तेमाल (समय और मेमोरी) को समझा जा सकता है. साथ ही, परफ़ॉर्मेंस से जुड़ी समस्याओं को हल किया जा सकता है. इससे मॉडल को तेज़ी से एक्ज़ीक्यूट करने में मदद मिलती है.

इस गाइड में, उपलब्ध अलग-अलग टूल इस्तेमाल करने का तरीका बताया गया है. साथ ही, यह भी बताया गया है कि परफ़ॉर्मेंस डेटा इकट्ठा करने के लिए, प्रोफ़ाइलर कौनसे मोड इस्तेमाल करता है.

अगर आपको Cloud TPU पर अपने मॉडल की परफ़ॉर्मेंस की प्रोफ़ाइल बनानी है, तो Cloud TPU गाइड देखें.

परफ़ॉर्मेंस डेटा इकट्ठा करना

XProf, आपके TensorFlow मॉडल की होस्ट ऐक्टिविटी और GPU ट्रेस इकट्ठा करता है. XProf को कॉन्फ़िगर करके, परफ़ॉर्मेंस डेटा इकट्ठा किया जा सकता है. इसके लिए, प्रोग्रामैटिक मोड या सैंपलिंग मोड का इस्तेमाल किया जा सकता है.

प्रोफ़ाइलिंग एपीआई

प्रोफ़ाइलिंग करने के लिए, इन एपीआई का इस्तेमाल किया जा सकता है.

  • TensorBoard Keras कॉलबैक (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 फ़ंक्शन एपीआई का इस्तेमाल करके प्रोग्रामैटिक मोड

    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)
    

प्रोफ़ाइल कैप्चर करने का डायलॉग बॉक्स

Capture Profile डायलॉग बॉक्स का इस्तेमाल करके, यह जानकारी दें:

  • प्रोफ़ाइल सेवा के यूआरएल या टीपीयू के नामों की कॉमा लगाकर अलग की गई सूची.
  • प्रोफ़ाइलिंग की अवधि.
  • डिवाइस, होस्ट, और Python फ़ंक्शन कॉल की ट्रेसिंग का लेवल.
  • अगर पहली बार में प्रोफ़ाइल कैप्चर नहीं होती है, तो आपको Profiler को कितनी बार प्रोफ़ाइल कैप्चर करने की कोशिश करनी है.

कस्टम ट्रेनिंग लूप की प्रोफ़ाइल बनाना

अपने TensorFlow कोड में कस्टम ट्रेनिंग लूप की प्रोफ़ाइल बनाने के लिए, ट्रेनिंग लूप को 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 की चरण-दर-चरण परफ़ॉर्मेंस का विश्लेषण करने की सुविधा चालू हो जाएगी. साथ ही, चरण के इवेंट, ट्रेस व्यूअर में दिखने लगेंगे.

पक्का करें कि आपने इनपुट पाइपलाइन का सटीक विश्लेषण करने के लिए, 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)

प्रोफ़ाइलिंग के इस्तेमाल के उदाहरण

प्रोफ़ाइलर, चार अलग-अलग ऐक्सिस के हिसाब से कई तरह के इस्तेमाल के उदाहरणों को कवर करता है. फ़िलहाल, कुछ कॉम्बिनेशन के लिए यह सुविधा उपलब्ध है. आने वाले समय में, अन्य कॉम्बिनेशन के लिए भी यह सुविधा उपलब्ध होगी. इन्हें इन कामों के लिए इस्तेमाल किया जा सकता है:

  • लोकल बनाम रिमोट प्रोफ़ाइलिंग: प्रोफ़ाइलिंग एनवायरमेंट सेट अप करने के ये दो सामान्य तरीके हैं. लोकल प्रोफ़ाइलिंग में, प्रोफ़ाइलिंग एपीआई को उसी मशीन पर कॉल किया जाता है जिस पर आपका मॉडल चल रहा है. उदाहरण के लिए, जीपीयू वाला कोई लोकल वर्कस्टेशन. रिमोट प्रोफ़ाइलिंग में, प्रोफ़ाइलिंग एपीआई को उस मशीन पर कॉल किया जाता है जिस पर आपका मॉडल एक्ज़ीक्यूट हो रहा है. उदाहरण के लिए, Cloud TPU पर.
  • कई वर्कर की प्रोफ़ाइलिंग करना: TensorFlow की डिस्ट्रिब्यूटेड ट्रेनिंग की सुविधाओं का इस्तेमाल करते समय, कई मशीनों की प्रोफ़ाइलिंग की जा सकती है.
  • हार्डवेयर प्लैटफ़ॉर्म: सीपीयू, जीपीयू, और टीपीयू की प्रोफ़ाइल बनाएं.

नीचे दी गई टेबल में, ऊपर बताए गए TensorFlow के साथ काम करने वाले इस्तेमाल के उदाहरणों के बारे में खास जानकारी दी गई है:

Profiling API लोकल रिमोट एक से ज़्यादा वर्कर हार्डवेयर प्लैटफ़ॉर्म
TensorBoard Keras Callback अनुमति है Not Supported Not Supported सीपीयू, जीपीयू
tf.profiler.experimental एपीआई शुरू/बंद करें अनुमति है Not Supported Not Supported सीपीयू, जीपीयू
tf.profiler.experimental client.trace API अनुमति है अनुमति है अनुमति है सीपीयू, जीपीयू, टीपीयू
Context manager API अनुमति है उपलब्ध नहीं है Not Supported सीपीयू, जीपीयू

अन्य संसाधन