این راهنما نحوه استفاده از ابزارهای موجود در 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.profilertf.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 |
| رابط برنامهنویسی مدیریت زمینه | پشتیبانی شده | پشتیبانی نمیشود | پشتیبانی نمیشود | پردازنده مرکزی، پردازنده گرافیکی |
منابع اضافی
- آموزش TensorFlow Profiler: Profile model performance با Keras و TensorBoard که در آن میتوانید توصیههای این راهنما را به کار ببرید.
- بحث پروفایل عملکرد در TensorFlow 2 از اجلاس توسعهدهندگان TensorFlow 2020.
- نسخه نمایشی TensorFlow Profiler از اجلاس توسعهدهندگان TensorFlow 2020.