بهینه‌سازی عملکرد TensorFlow با استفاده از XProf

این راهنما نحوه استفاده از ابزارهای موجود در XProf را برای ردیابی عملکرد مدل‌های TensorFlow شما روی میزبان (CPU)، دستگاه (GPU) یا ترکیبی از میزبان و دستگاه(ها) نشان می‌دهد.

پروفایل‌سازی به درک میزان مصرف منابع سخت‌افزاری (زمان و حافظه) عملیات (ops) مختلف TensorFlow در مدل شما کمک می‌کند و گلوگاه‌های عملکرد را برطرف می‌کند و در نهایت، باعث می‌شود مدل سریع‌تر اجرا شود.

این راهنما شما را با نحوه استفاده از ابزارهای مختلف موجود و حالت‌های مختلف جمع‌آوری داده‌های عملکرد توسط Profiler آشنا می‌کند.

اگر می‌خواهید عملکرد مدل خود را روی Cloud TPUها بررسی کنید، به راهنمای Cloud TPU مراجعه کنید.

جمع‌آوری داده‌های عملکرد

XProf فعالیت‌های میزبان و ردپای GPU مدل TensorFlow شما را جمع‌آوری می‌کند. می‌توانید XProf را طوری پیکربندی کنید که داده‌های عملکرد را از طریق حالت برنامه‌نویسی یا حالت نمونه‌برداری جمع‌آوری کند.

پروفایلینگ APIها

برای انجام پروفایلینگ می‌توانید از 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])
    
  • حالت برنامه‌نویسی با استفاده از API تابع 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 و اجرای مدل خود، می‌توانید از طریق دکمه Capture Profile در XProf، یک پروفایل را ثبت کنید. در صورتی که نمونه TensorBoard از قبل در حال اجرا نیست، از اسکریپت موجود در بخش Install profiler در بالا برای راه‌اندازی آن استفاده کنید.

    به عنوان مثال،

    # 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 برای تعیین موارد زیر استفاده کنید:

  • فهرستی از URLهای سرویس پروفایل یا نام‌های TPU که با کاما از هم جدا شده‌اند.
  • مدت زمان پروفایلینگ.
  • سطح ردیابی فراخوانی تابع پایتون، دستگاه و میزبان.
  • اگر در ابتدا موفق نشدید، می‌خواهید 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 را فعال می‌کند و باعث می‌شود رویدادهای مرحله در نمایشگر ردیابی نمایش داده شوند.

مطمئن شوید که تکرارکننده‌ی مجموعه داده را در چارچوب 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)

پروفایل کردن موارد استفاده

این پروفایلر تعدادی از موارد استفاده را در چهار محور مختلف پوشش می‌دهد. برخی از ترکیب‌ها در حال حاضر پشتیبانی می‌شوند و برخی دیگر در آینده اضافه خواهند شد. برخی از موارد استفاده عبارتند از:

  • پروفایلینگ محلی در مقابل پروفایلینگ از راه دور : این دو روش رایج برای تنظیم محیط پروفایلینگ شما هستند. در پروفایلینگ محلی، API پروفایلینگ در همان دستگاهی که مدل شما در حال اجرا است، مثلاً یک ایستگاه کاری محلی با GPUها، فراخوانی می‌شود. در پروفایلینگ از راه دور، API پروفایلینگ در دستگاهی متفاوت از جایی که مدل شما در حال اجرا است، مثلاً روی یک Cloud TPU، فراخوانی می‌شود.
  • پروفایل کردن چندین کارگر : می‌توانید هنگام استفاده از قابلیت‌های آموزش توزیع‌شده TensorFlow، چندین ماشین را پروفایل کنید.
  • پلتفرم سخت‌افزاری : پردازنده‌های مرکزی (CPU)، پردازنده‌های گرافیکی (GPU) و پردازنده‌های حرارتی (TPU).

جدول زیر مروری سریع بر موارد استفاده پشتیبانی‌شده توسط TensorFlow که در بالا ذکر شد، ارائه می‌دهد:

API پروفایلینگ محلی از راه دور کارگران متعدد پلتفرم‌های سخت‌افزاری
فراخوانی تنسوربورد در کراس پشتیبانی شده پشتیبانی نمی‌شود پشتیبانی نمی‌شود پردازنده مرکزی، پردازنده گرافیکی
tf.profiler.experimental start/stop API پشتیبانی شده پشتیبانی نمی‌شود پشتیبانی نمی‌شود پردازنده مرکزی، پردازنده گرافیکی
رابط برنامه‌نویسی tf.profiler.experimental client.trace پشتیبانی شده پشتیبانی شده پشتیبانی شده پردازنده مرکزی، پردازنده گرافیکی، TPU
رابط برنامه‌نویسی مدیریت زمینه پشتیبانی شده پشتیبانی نمی‌شود پشتیبانی نمی‌شود پردازنده مرکزی، پردازنده گرافیکی

منابع اضافی