Win ML Series: Perkenalan dengan Windows ML

Hi Rekan Makers,

Bertemu lagi di seri kita yang baru yaitu Windows ML atau disingkat dengan WinML. Kali ini mungkin kita akan fokus sama rekan-rekan pengguna windows ya. Seperti kita tahu library, tools dan environment pengembangan Machine Learning kebanyakan lahir di dunia linux. Tapi jangan khawatir model ML ini tetap bisa kita gunakan di windows dengan adanya WinML. WinML adalah API yang terdapat pada windows 10 dan windows 2019 server untuk melakukan inferensi menggunakan model ML dengan format onnx. Aplikasi yang dibuat bisa menggunakan C++, C#, Python atau JS. 

Langkah penggunaan model ML ini digambarkan seperti gambar berikut:

Training environment, add model reference, application, Windows ML

  1. Siapkan model dalam format ONNX
  2. Masukan model sebagai asset ke dalam aplikasi
  3. Lalu masukan kode untuk melakukan inferensi (ambil input data, proses, dan tunjukan output).
  4. Tampilkan representasi output dari hasil inferensi model ke user

Format model ML yang disupport WinML adalah onnx, format ini adalah format standard untuk machine learning model yang disupport oleh beberapa pemain besar di dunia teknologi seperti FB, NVIDIA, Microsoft, ARM, IBM, Intel, dsb. Jika ingin mengetahui lebih lanjut tentang onnx silakan klik link ini. Jika rekan-rekan menggunakan salah satu dari library ML ini:

  1. Apple Core ML
  2. Keras
  3. scikit-learn
  4. lightgbm
  5. xgboost
  6. libSVM
  7. TensorFlow (experimental)

Maka kita bisa konversi modelnya ke dalam format onnx agar bisa digunakan WinML. Tool ini bernama winmltools, tool ini menggunakan python jadi rekan-rekan perlu menginstall python terlebih dahulu lalu menginstall tool ini dengan PIP dengan perintah:

pip install winmltools

Untuk support konversi core-ml model di windows perlu install juga modulnya dengan perintah:

pip install git+https://github.com/apple/coremltools

berikut adalah contoh perintah untuk melakukan konversi model tensorflow (pb) ke onnx:

import winmltools
import tensorflow

filename = 'frozen-model.pb'
output_names = ['output:0']graph_def = graph_pb2.GraphDef()
with open(filename, 'rb') as file:
graph_def.ParseFromString(file.read())
g = tf.import_graph_def(graph_def, name='')

with tf.Session(graph=g) as sess:
converted_model = winmltools.convert_tensorflow(sess.graph, 7, output_names=['output:0'])
winmltools.save_model(converted_model)

WinML ini mengabstraksi proses inferensi dengan menggunakan berbagai jenis hardware seperti CPU, GPU dan di masa yang akan datang akan mendukung AI Accelerator seperti intel movidius, sehingga developer tidak perlu memikirkan proses optimasi penggunaan hardware saat melakukan inferensi. WinML berjalan diatas DirectML yaitu high-performance low-level API untuk mengeksekusi model ML, ini bagian dari keluarga DirectX.  

windows ml layers

Adapun beberapa benefit dari menggunakan WinML ini antara lain:

  • Kemudahan dan Kecepatan dalam Development: Dengan Visual Studio, rekan-rekan tinggal memasukan onnx model ke dalam asset aplikasi UWP lalu secara otomatis visual studio akan membuatkan boiler plate code untuk memuat model dan melakukan inferensi. Jadi beberapa proses sudah di otomatisasi dan rekan-rekan tinggal fokus pada pembuatan aplikasinya. 

  • Dukungan Hardware yang Beragam: WinML akan mengoptimasi penggunaan hardware yang digunakan saat melakukan inferensi, entah itu menggunakan CPU, GPU atau AI Accelerator (NPU, TPU, dsb) dari berbagai vendor hardware, dan menjamin konsistensi dari cara penggunaan dan hasilnya.

  • Low latency dan Hasil yang real-time: Tentunya dengan optimasi hardware kecepatan proses inferensi bisa dijamin, ini memungkinkan kita melakukan proses inferensi menggunakan data yang besar seperti gambar, video, audio, database terstruktur secara realtime. Proses ini juga dilakukan secara lokal (edge computing) di device berbasis windows. Cocok untuk pengembangan game engine, CAD app, intensive background job.

  • Fleksibilitas: model tentunya bisa di serve di server dan client device. Ini memungkinkan skenario hybrid dimana model di run secara lokal sehingga tidak membutuhkan koneksi ke internet secara kontinyu, dan juga menjamin privasi dan kerahasiaan data karena tidak perlu mengirimkan data ke API. Nah, jika ada ada pembaharuan model, maka model bisa didownload dari server / cloud lalu diupdate di aplikasi.  
  • Pengurangan Biaya Operasional: Skenario hybrid bisa mengoptimalkan pengurangan biaya operasional. Rekan-rekan bisa memanfaatkan cloud untuk melakukan training model dengan multi-gpu seperti VM data science di Azure atau Azure ML Services. Tentunya ini akan menghemat waktu proses pembuatan model dan mengurangi biaya pembelian server / workstation untuk memproses secara lokal. Lalu model yang dihasilkan dikonversi ke onnx untuk digunakan di windows device dengan WinML tanpa biaya sepeser pun. Data yang dikoleksi aplikasi untuk peningkatan model ML bisa disimpan dulu, begitu ada koneksi baru dikirimkan ke cloud. Tentunya skenario seperti ini akan banyak menghemat biaya operasional rekan-rekan. Menggunakan WinML juga untuk digunakan sebagai Web API / Service bisa mengoptimalkan kecepatan proses dan mengurangi jumlah server/vm.

Nah pasti sudah tidak sabar mencoba membuat aplikasi pertama dengan WinML, ikuti terus seri ini dan bagikan ke rekan-rekan yang membutuhkan.

Salam Makers ;D

Loading

You May Also Like