Azure Machine LearningでModel Catalogが使えるようになりました。

2023.07.07

Buildで発表され、注目されていた Model Catalog Prompt Flowが2023年7月6日(JST)から使えるようになっていました。

※ まだ、Previewなので、今後仕様などが変更する可能性があります。

この記事ではModel Catalogの紹介です。

Prompt Flowはこちら Prompt Flowが使えるようになったから、もうLangChainとか自分でホストしなくていい世界になったのかもしれない。

どちらの機能も、Azure Machine Learning Studioから使うことができます。

Modelを選ぶ

Machine Learning Studioの左側のメニューから、Model Catalogを選択すると、以下のような画面が表示されます。

Open Source Modelsでは、Databricksのdollyや、t5,robertaなどのモデルが選べるようになっています。 Hugging Faceとの連携によって、Hugging Faceで公開されているモデルを利用することも可能です。

Open Source Modelsの中から一つ選んでみると、すぐにDeployできるようになっています。

Hugging Faceで公開されているものからも選ぶことができます。

モデルをデプロイする

リアルタイム(RESTAPIでアクセスできるようにするもの)のエンドポイントと、バッチ(Datasetを指定して、まとめて処理するもの)のエンドポイントのどちらも作れます。

GPT-2をデプロイしてみます。 デプロイのボタンを押すと、右側にDeployのブレードが開き、VMのサイズを選び、Endpointをすでにあるものを使うのか、新しくのつくるのかなどを指定することでデプロイできます。

Azure Machine Learningでは、Datasetや、Modelだけでなく、Endpointもアセットとして管理されるので、今どこにどのモデルがデプロイされているのかということを確認するために、いろいろなサーバにSSHで入って、、みたいなことはしなくて大丈夫です。

Deployment {モデル名}のコンポーネントにある。 Provisioning state:の項目がUpdatingから Succeededに変わればデプロイは完了です。

デプロイされたモデルに対してリクエストを送ってみる。

デプロイが完了したら、実際にリクエストを送ってみます。

テスト用のUIから

APIの仕様については、デプロイが完了すると、Endpointの画面にTestというタブができているので、ひとまずこちらで簡単にテストしてみます。 Payloadを入力することができるので、

GPT-2の場合は

{
    "inputs": {
        "input_string": ["My name is Tokugami and I am", "Hi, What's up!"]
    }
}

のように入力し、「Test」ボタンで送信します。 無事に、続きの文章が作成されました。 今回、input_stringに配列で二つの入力を渡したので、二つの文章が生成されているのが確認できます。

このRequest のペイロードは、デプロイ完了時にSwaggerのURIが表示されているのでそちらを確認すれば良さそうなところですが、 Swaggerにも認証がかかっており、KeyをHeaderにつけて送らないといけないので、ブラウザで開くのは辛いところは今後の改善を期待です。 また、Bearerをつけてダウンロードしてきても、SwaggerにもRequestのJsonの構造までは書かれていなかったので、こちらも今後の改善に期待して待ちます。

GPT-2の場合は、モデル選択した時のOverviewに、Sample InputとOutputが出ているので、こちらも確認してみましょう。

これで、テストはできました。

アプリケーションへの組み込み

次に、アプリケーションからこのAPIを呼び出す場合ですが、Endpointの画面にConsumeというタブができているので、こちらを開きます。

この画面には、RESTのEndpoint、認証用のKeyが二つと、Python,C#,Rでのサンプルコードが載っています。

サンプルコードが載っていてありがたいのですが、 今回は、めんどくさいので、cURLでやります。

% curl -XPOST \
     -H 'Content-Type: application/json' \
     -H 'Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXX' \
     -d '{ "inputs":{ "input_string": ["My name is Tokugami and I am"]}}' \
     "https://promptflow-kgtka.eastus.inference.ml.azure.com/score"
[{"0": "My name is Tokugami and I am the head of the University of Nagoya department of Physics. I have studied physics for more than 20 years but I've always preferred to take care of other people and to make sure that I was in a"}]

簡単なHTTPのリクエストで、GPT-2のモデルを利用することができました。

おまけ:Fine Tuningもできる

Modelによっては、Fine Tuningできるものもあります。

どんなタスク用にTuningしたいのかを、Training用のデータセットを指定することで、実行できるので、 この機能はFine Tuningの敷居をものすごく下げることができるので、Fundation Modelに対してFine Tuningして検証して、というフローが簡単にできるようになりそうです。

Modelを選ぶ画面には、絞り込める機能がありますが、Fine Tuning可能かどうかもつくと嬉しいですね。

さいごに

Model Catalogの機能によって、今後こなしたいタスクに合わせてモデルを選択し、Fine Tuningして、デプロイして使うということが可能になります。 今まで莫大なコストをかけて学習させていたようなものが簡単に使えるようになるので、もっと自分好みのモデルを使う機会が増えるといいなと思います。 また、今回は、GPT-2を使いましたが、GPT-3も使えるようになると、もっと面白いことができそうですね。

↑(さいごにはGithub Copilotが半分以上書きました。)