پلاگین های دستگاه GPU

معماری دستگاه قابل اتصال TensorFlow پشتیبانی دستگاه جدیدی را به عنوان بسته‌های پلاگین جداگانه که در کنار بسته رسمی TensorFlow نصب می‌شوند، اضافه می‌کند.

این مکانیسم به هیچ تغییری در کد TensorFlow نیاز ندارد. برای برقراری ارتباط با باینری TensorFlow به شیوه ای پایدار به C API متکی است. توسعه دهندگان پلاگین، مخازن کد و بسته های توزیع جداگانه را برای پلاگین های خود نگهداری می کنند و مسئول آزمایش دستگاه های خود هستند.

از پلاگین های دستگاه استفاده کنید

برای استفاده از یک دستگاه خاص، مانند یک دستگاه بومی در TensorFlow، کاربران فقط باید بسته افزونه دستگاه را برای آن دستگاه نصب کنند. قطعه کد زیر نحوه نصب و استفاده از افزونه یک دستگاه نمایشی جدید، Awesome Processing Unit (APU) را نشان می دهد. برای سادگی، این نمونه پلاگین APU فقط یک هسته سفارشی برای ReLU دارد:

# Install the APU example plug-in package
$ pip install tensorflow-apu-0.0.1-cp36-cp36m-linux_x86_64.whl
...
Successfully installed tensorflow-apu-0.0.1

با نصب افزونه، قابل مشاهده بودن دستگاه را آزمایش کنید و عملیاتی را روی دستگاه APU جدید اجرا کنید:

import tensorflow as tf   # TensorFlow registers PluggableDevices here.
tf.config.list_physical_devices()  # APU device is visible to TensorFlow.
[PhysicalDevice(name='/physical_device:CPU:0', device_type='CPU'), PhysicalDevice(name='/physical_device:APU:0', device_type='APU')]

a = tf.random.normal(shape=[5], dtype=tf.float32)  # Runs on CPU.
b =  tf.nn.relu(a)         # Runs on APU.

with tf.device("/APU:0"):  # Users can also use 'with tf.device' syntax.
  c = tf.nn.relu(a)        # Runs on APU.

with tf.device("/CPU:0"):
  c = tf.nn.relu(a)        # Runs on CPU.

@tf.function  # Defining a tf.function
def run():
  d = tf.random.uniform(shape=[100], dtype=tf.float32)  # Runs on CPU.
  e = tf.nn.relu(d)        # Runs on APU.

run()  # PluggableDevices also work with tf.function and graph mode.

دستگاه های موجود

Metal PluggableDevice برای پردازنده‌های گرافیکی macOS:

DirectML PluggableDevice برای Windows و WSL (پیش نمایش):

برنامه افزودنی Intel® برای TensorFlow PluggableDevice برای لینوکس و WSL: