TensorFlow のプラガブル デバイスアーキテクチャは、公式 TensorFlow パッケージと一緒にインストールされる別個のプラグイン パッケージとして新しいデバイス サポートを追加します。
このメカニズムでは、TensorFlow コードにデバイス固有の変更を加える必要はありません。 C API に依存して、安定した方法で TensorFlow バイナリと通信します。プラグイン開発者は、プラグイン用に個別のコード リポジトリと配布パッケージを管理し、デバイスのテストを担当します。
デバイスプラグインを使用する
TensorFlow のネイティブ デバイスと同様に、特定のデバイスを使用するには、ユーザーはそのデバイスのデバイス プラグイン パッケージをインストールするだけで済みます。次のコード スニペットは、新しいデモンストレーション デバイスのプラグインであるAwesome Processing Unit (APU) がどのようにインストールされ、使用されるかを示しています。わかりやすくするために、このサンプル APU プラグインには ReLU 用のカスタム カーネルが 1 つだけ含まれています。
# 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
:
- TF 2.5以降で動作します。
- スタートガイド。
- 質問やフィードバックについては、 Apple Developer Forum にアクセスしてください。
Windows および WSL 用の DirectML PluggableDevice
(プレビュー):
-
tensorflow-cpu
パッケージ、バージョン 2.10 以降で動作します。 - PyPIホイール。
- GitHub リポジトリ。
- 質問、フィードバック、または問題の提起については、 GitHub の
tensorflow-directml-plugin
の問題ページにアクセスしてください。
Linux および WSL 用 TensorFlow PluggableDevice
用インテル® 拡張機能:
- TF 2.10以降で動作します。
- スタートガイド
- PyPIホイール。
- GitHub リポジトリ。
- 質問、フィードバック、または問題の提起については、 GitHub の
intel-extension-for-tensorflow
の問題ページにアクセスしてください。