TensorFlow 的可插入设备结构以单独的插件软件包形式提供了新的设备支持,这个插件可以与官方 TensorFlow 软件包一同安装。
此机制无需对 TensorFlow 代码进行特定于设备的修改。它依赖于 C API 与 TensorFlow 二进制文件进行稳定的通信。 插件开发者需要为插件维持单独的代码库和分发软件包,并负责测试设备。
使用设备插件
若要使用特定的设备,例如 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.
可用设备
适用于 macOS GPU 的Metal PluggableDevice
:
- 入门指南。
- 如果您有任何问题和反馈,请访问 Apple 开发者论坛。