2018年3月13日火曜日

AIをサポートする「Windows ML」APIと新しい「WebView」の登場

 2018年3月7日に「Windows Developer Day 2018 March」が開催された。このイベントでは、Edgeをベースとした新しいWebView、Windows 10を機械学習の実行プラットフォームとする「Windows ML」と呼ばれる新たなAPIなど、さまざまな発表があった。本稿ではそのキーノートスピーチから幾つかのトピックを見ていこう。

3つのポイント
 キーノートスピーチでは「Windows 10の新バージョンには数千もの新機能が搭載される」としながら、その中でも開発者に向けて次の3点が強調された。

デスクトップアプリのモダナイズ
WindowsへのAIの導入
Windows IoTによるインテリジェントエッジの拡張


デスクトップアプリのモダナイズ(モダン化)はこれまでもマイクロソフトが度々口にしていることだが、これをさらに推し進めるべく、次の3つが発表された。

Microsoft Edgeの描画エンジンを利用する新しいWebViewコントロール
MSIXと呼ばれる新たなアプリの「インストーラー/アップデーター」
さまざまなプラットフォームを通じて、カード形式でデータをやりとりできるAdaptive Card

 何より多くの人が驚いたのはWindowsへのAIの導入だろう。もちろん、これまでもWindowsにはAI機能(Cortanaなど)が搭載されていた。が、Windowsの次期アップデートでは、訓練済みの機械学習モデルをWindows上で動作する自分のアプリで使用できるようになる。そのために提供されるAPIが「Windows ML」だ。

 最後の「Windows IoTによるインテリジェントエッジの拡張」とは、インテリジェントエッジ*1を駆動するOSとしてWindows IoTを搭載することで、エッジデバイスの開発や運用において、セキュリティやコンポーネントの更新などはWindows任せにして、開発者はあくまでもエッジデバイスを使って「どんな有用なことを実現するか」に注力できるようにしようという考えだ。Windows IoTを使うことで、Visual Studioという手慣れたツールを使って開発を行えるというのもそのメリットの1つだ。

 デモではXogo Miniという小サイズのデジタルサイネージとWindows IoTを使用して、自転車販売店のデジタルサイネージを客層に合わせてリアルタイムに変化させていた。

WindowsへのAIの導入
 WindowsへのAIの導入とは、機械学習によって得られたトレーニング済みのモデルをWindows 10上で実行できるようにしようというものだ。そのためのランタイムやアプリから使用するAPIを整備したものがWindows MLとなる。

 ローカルのWindows上でAIを使用することのメリットは幾つかある。

ネットワークを介さないので、結果を即座に得られる
CPU、GPU、VPU(Vision Processing Unit。AIで画像処理を行うことに特化したマイクロプロセッサ)など、Windowsデバイスが持つリソースを直接使用できる
 以下はキーノートで紹介されたデモだ。これはカメラに映った映像をリアルタイムに変換するもの。

 このような場合、クラウドにいったんデータを送ることを考えると、とてもリアルタイムでの変換処理は実現できないだろう。カメラに映ったものをそのままGPUへと流し込むことで、ネットワーク帯域を使用することなく、高速に処理を行えるようになる。これはWindowsでローカルに機械学習モデルを利用できるようにすることの大きなメリットとなる。

 ただし、現状ではトレーニングを行ってモデルを作成するのはあくまでもクラウド側で行うことになるだろう。Windows側ではあくまでもその結果として得られたモデルを活用して、なるべく高速に、そして豊富なハードウェア資源があればそれを活用して、モデルと入力から迅速に推論した結果を得ようというのが目的だ。

 実際にWindows上でモデルを利用してアプリを作成しようという場合には、次のような流れになる。

 まずはAzureなどでトレーニングを行い、モデルを作成する。それをVisual Studioでアプリプロジェクトに追加する。アプリでは、モデルとそれに対する入力と出力を「バインド」し、さらに入力と出力をアプリのUI要素と結び付ける。アプリの実行時にはWindows MLによって、モデルが読み込まれ、それにユーザーが入力を与えるとモデルによって評価が行われ、出力が得られる。

 なお、Windows MLでは利用可能なハードウェア資源があれば、それを活用するようになっている。CPUしか使えないのであればCPUだけを、GPUやVPUを使用できるのであれば、それらを自動的に使ってくれる。開発者はモデルを得て、それに対する入力と、そこから得られる出力がどう扱うかを記述していくことに注力できるようになっているということだ。

 利用するモデルはONNX*2形式のデータであれば、Azureで作成しようが、他のプラットフォームで作成しようが構わない。以下はVisual StudioでONNX形式のデータを取り込んでいるところだ。

 モデルをプロジェクトに追加すると、モデルの内容を反映したクラスが自動的に作成される。モデルそのものを表すクラスと、そのモデルに対する入力と出力を抽象化したクラスがそうだ。これらは「バインド」と呼ばれる機構を用いて関連付けられる。

 追加したモデルをアプリに読み込んで、それに対する入力と出力をアプリのUI上の適切な要素とつなぎ合わせることも必要だ。デモではそのためのコードも示された。

 マイクロソフトはこれまでにもCognitive ServicesとしてAI機能を開発者に提供してきた。これらは機能がある程度定まったものを(例えば、画像認識、音声認識など)、アプリから使いやすくしようというものだが、今回のWindows MLの発表はより包括的な形でAI機能を(トレーニングはクラウド上でするものとしても)Windows自体、そしてWindows上で動作するアプリに組み込もうという意欲的なアプローチだ。モデルの作成そのものはWindowsアプリ開発者には荷が重いことだが、既にあるモデルを使って(あるいは、機械学習エンジニアと協働して)何か有用な機能をアプリに組み込んでみようという開発者にとっては大いに興味を引かれる発表だ。

0 件のコメント:

コメントを投稿