SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Cognitive Services in containers を使用してみる

leave a comment

でアナウンスされていますが、Cognitive Services の機能をコンテナーで動作させることができるイメージの提供が開始されています。

デプロイの方法などについては Cognitive Services Containers を利用して ローカルの Docker コンテナで Text Analytics Sentiment を試すでまとめられており、展開方法についてはこちらを見ると確認できるかと。

詳細な内容については、Container support in Azure Cognitive Services のドキュメントから確認できます。

Cognitive Services には、様々な認知機能のサービスが提供されていますが、今回、コンテナーとして提供が行われたのは、次の 3 種類のサービスとなり、Text Analytics 以外は、別途プレビュー利用の申請 が必要となります。

Cognitive Services in containers ですが、イメージのダウンロード後はインターネットへの接続が不要で、ローカル環境だけで完全にどうさせることができるかというと、そういうものではありません。

Container support in Azure Cognitive Services / Install and run containers に次の記載があります。

Docker must be configured to allow the containers to connect with and send billing data to Azure.

コンテナーは Azure に請求データを送信する必要があるため、インターネットへの接続が必要となります。
Cognitive Services in containers  は単体で使用することはできず、最初に該当の Azure のサービスをデプロイしておく必要があり、課金についてはそちらにチャージされる仕組みとなっているようですね。

Cognitive Services in containers を起動する際には、次の 3 種類の引数を指定する必要があります。

  • Eula=accept
  • Billing=https://westus.api.cognitive.microsoft.com/vision/v2.0
  • ApiKey=0123456789

ポイントとなるのは、「Billing」「ApiKey」の 2 つですね。
指定した Billing API に対して、API キーを使用してアクセスを行い請求のメータリング情報が送信されることになります。

Cognitive Services の請求の API に、事前にデプロイしておいた Cogntive Services の API を使用してアクセスが行われる必要があり、これはコンテナー起動時に必須で通信ができるよう必要があります。
コンテナーで起動することができるサービスではありますが、インターネットへの接続は意識しておいた方が良いかと。

現状、すぐに利用することができる Text Analytics については、MCR のコンテナーリポジトリでイメージが公開されています。
(Docker Hub には、MCR へのリンクのみが登録されており、こちらからはイメージを入手できないようです)

インストールと構成については、 Install and run containers と、Configure containers で情報が公開されています。
まだ、単純なコンテナーの立ち上げしかやっていないのですが、ロギングの仕組みも提供されているようですね。

チュートリアルに従い、コンテナーを起動すると、次のように、ローカル IP でアクセスできる環境下に Cognitive Services の API を展開することができるようになります。

image

Swagger も利用されているようで、基本的な API のドキュメントをこちらから確認することもできます。
image

次のような PowerShell でもアクセスすることができますので、起動後の確認や利用方法は様々なものがあるかと。

$Header = @{
    "Content-Type" = "application/json"
}
$val =  @()
$val += @{id=1; "text"="縄神様"}
$val += @{id=2; "text"="えろす財閥総帥快楽亭えろす師匠ひさしごま油ビスコのりたま"}

$body = @{
    documents = $val
}

$body = [Text.Encoding]::UTF8.GetBytes(($body | ConvertTo-Json -Compress))
# Invoke-WebRequest -Method POST -Uri "http://10.200.0.2:5000/text/analytics/v2.0/languages" -Header $Header -Body $body


$Header = @{
    "Content-Type" = "application/json"
}

$val =  @()
$val += @{language="ja"; id=1; "text"="縄神様"}
$val += @{language="ja"; id=2; "text"="えろす財閥総帥快楽亭えろす師匠ひさしごま油ビスコのりたま"}

$body = @{
    documents = $val
}
$body = [Text.Encoding]::UTF8.GetBytes(($body | ConvertTo-Json -Compress))
Invoke-WebRequest -Method POST -Uri "http://10.200.0.2:5000/text/analytics/v2.0/keyPhrases" -Header $Header -Body $body


$Header = @{
    "Content-Type" = "application/json"
}

$val =  @()
$val += @{language="ja"; id=1; "text"="縄神様"}
$val += @{language="ja"; id=2; "text"="えろす財閥総帥快楽亭えろす師匠ひさしごま油ビスコのりたま"}

$body = @{
    documents = $val
}
$body = [Text.Encoding]::UTF8.GetBytes(($body | ConvertTo-Json -Compress))
Invoke-WebRequest -Method POST -Uri "http://10.200.0.2:5000/text/analytics/v2.0/sentiment" -Header $Header -Body $body

コンテナーの構成がどうなっているのか気になったので、アクセスしてみたところ、「sfp」ファイルが使用されているみたいですね。

以下のディレクトリは、KeyPhrase のイメージの「/opt/KeyPhraseFx/lib」配下の内容なのですが、いくつかの sfp というファイルが配置されていることが確認できますね。

image

コンテナー起動時には「/opt/bin/KeyPhraseFx」が起動されるのですが、ここから各種 sfp ファイルをロードして、API を提供しているのかと。

この sfp というファイルですが、SQL Server on Linux でも使用されており「Single File Pack」という、Windows の各種バイナリをパックしたファイルとなっているはずです。

Cognitive Services in Containers ですが、SQL Server on Linux の SQLPAL の仕組みを使用し、Linux 上で Windows のバイナリを起動して API を提供するという仕組みを使っているようですね。

(SQLPAL を使用している名残りか、/var/opt/mssql というディレクトリがあったり、sfp として「sqldkxlat.sfp」という、SQL Server のコアモジュールのクロスプラットフォーム用のモジュールが組み込まれていたりもします)

API の Web のインタフェースとしては、ASP.NET Core + Kestrel で提供されているようなのですが、.NET Core だけでは動作させることができないモジュールの利用があり、Windows のバイナリをそのまま使用することができる SQLPAL を利用することにしたのでしょうかね。

SQLPAL は Windows の SQL Server のバイナリを Linux 上で動作させるための、ライブラリ OS として Windows を起動させるための抽象層となりますが、このライブラリ OS としての Windows が結構汎用性が高いのかもしれませんね。

SQL Server も 2019 になると、Big Data Clusters という大規模データ向けのデータ分析基盤を構築することができるようになります。

このデータ分析基盤は、Kubernetes 上で構築が行われており、様々なコンテナーを組み合わせて実装が行われています。

この Big Data Cluster 上に、Cognitive Services in containers の Pod を追加し、「データ分析基盤に認知機能を持たせる」というアプローチもできそうですね。

Written by masayuki.ozawa

11月 17th, 2018 at 9:40 pm

Posted in Microsoft Azure

Tagged with

Leave a Reply

*