Vengineerの妄想(準備期間)

人生は短いけど、長いです。人生を楽しみましょう!

PlaidMLにて、ONNX import をサポート


2017年11月2日のブログ、PlaidML
2018年4月5日のブログ、PlaidMLがLLVMを使うようになったと

そして、今回は、


にあるように、PlaidML 0.3.0 にて、ONNX 1.1.0 を import できるようになったと。onnx-plaidml

こんな感じ、引用
import onnx
import onnx_plaidml.backend
import numpy as np

# Assumption: test_images.npz contains a tensor, "inputs", whose
# most-major dimension strides through images to be supplied to the model.
with np.load('test_images.npz') as img:
    model = onnx.load('resnet50_model.onnx')
    rep = onnx_plaidml.backend.prepare(model, device='GPU')
    for batch in range(img['inputs'].shape[0]):
        data = img['inputs'][batch, :]
        output = rep.run([data])
        print(output)

Announcing PlaidML: Open Source Deep Learning for Every Platformにあるように、PlaidMLは、フロントエンドは、keras、バックエンドは、NVIDIA GPUAMD GPUIntel GPUをサポートしています。

NVIDIA GPUAMD GPUIntel GPUは、OpenCLによるサポートです。

ONNXの記事では、
引用
    Experimental Config Devices:
       geforce_gpu.0 : NVIDIA Corporation GeForce GPU
       opencl_cpu.0 : Intel(R) Corporation OpenCL CPU

とありますので、Intel CPUのOpenCLもサポートしたようですね。

PlaidML Architecture Overviewを見ると、
引用
 Frontend adapters that utilize the op library and the API to implement support for that frontend
  ONNX
  Keras

ONNX以外にも、Kerasをサポートしているのね。

Kerasのサンプルコード
引用
import plaidml.keras
plaidml.keras.install_backend()

import keras
import keras.applications as kapp
from keras.datasets import cifar10