SB C&Sの最新技術情報 発信サイト

C&S ENGINEER VOICE

SB C&S

SLM「Phi-3」をAzureへサーバーレスAPIとしてデプロイ

AI
2024.07.16

みなさんこんにちは。

以前のブログ記事SLM(Small Language Model、小規模言語モデル)である「Phi-3」の概要をご紹介しました。 LLMと比較してパラメータ数が少なく軽量であるという特徴から、言語モデル活躍の場が広がるという期待があるのではないでしょうか。

軽量だからといって必ずしもローカル環境で稼働させるものという訳ではなく、Azure上へデプロイすることも可能です。 今回はサーバーレスAPIとしてAzurePhi-3をデプロイする様子をご紹介します。 なお、利用可能なリージョンについてはMicrosoft Learnに掲載されていますので、事前に確認頂くことをおすすめいたします。

まずはデプロイ

以前のブログ記事でご紹介しましたが、Azure AI StudioのモデルカタログでPhi-3のモデルを確認すると「デプロイ」というボタンがあります。 こちらをクリックするとPhi-3Azure上にデプロイすることができます。 まずはこちらのボタンをクリックするとどのようになるかをご紹介します。
az-phi3-dp-1.png

デプロイにあたっては以下の通り2つのオプションがあります。 今回は「Azure AI Content Safetyを使ったサーバーレスAPI」(プレビュー)を選択します。 各オプションの違いについては画面に説明がありますが、左側のオプションですと有害なコンテンツをフィルタリングする「Azure AI Content Safety」を利用できます。 さらに、サーバーレスですのでユーザー側でPhi-3のためのインフラを管理する必要がありません。
az-phi3-dp-2.pngデプロイにあたっては、「Azure AI プロジェクト」リソースが必要です。 Azure AI プロジェクトが存在しない場合には新規に作成することも可能です。 Azure AI プロジェクトについては改めて後述しますので、このままウィザードを進めます。 「デプロイ」をクリックします。
az-phi3-dp-3.png

以下のような画面に遷移しますので、「プロビジョニングの状態」「エンドポイントの状態」が「成功」になるまで待機します。
az-phi3-dp-4-1.pngaz-phi3-dp-4-2.png

「使用」タブではRESTエンドポイントやサンプルコードを確認することができます。
az-phi3-dp-5.png以上のようにウィザードを進めるだけでPhi-3をデプロイすることができました。

 

Azure AI プロジェクト

Phi-3のデプロイに関するご説明では詳細を省略しましたが、「新しいプロジェクトの作成」をクリックした場合にどのような流れになるかご紹介します。
az-phi3-pj-1.png

以前のブログ記事でAzure AI Studioにおけるモデルカタログやベンチマークについてご紹介しました。 Azure AI StudioAIアプリ開発のためのプラットフォームであり、実は前回ご紹介したものの他にも様々な機能があります。 Azure AIプロジェクトには、AIアプリ開発における作業の整理・状態保存を行うという役割があります。 例えばAzure AI Studioではプロンプトフローなどのツール(※)を利用することができますが、Azure AIプロジェクトによってその状態を保存したり、他のユーザーと共同作業したりすることができるという訳です。 Microsoft LearnではAzure AIプロジェクトが「組織のコンテナー」と表現されています。

※筆者にて確認する限り、本ブログ記事執筆時点ではAzure AI StudioのツールによるPhi-3モデルの利用は難しい状況のように見受けられます。 実施したいタスクによっては適宜Azure Machine Learning Studioの利用などご検討ください。 MicrosoftTech Community ブログではAzure Machine Learning Studioにてプロンプトフローを利用する様子が紹介されています。

Azure AI StudioAzure AI プロジェクトを作成するにあたっては、Azure AI ハブを指定する必要があります。 Azure AI ハブはAzure AIプロジェクトをホストする環境です。 1つのAzure AIハブに対して複数のAzure AIプロジェクトを作成することが可能です。
az-phi3-pj-2.png

今回はウィザードでAzure AI ハブを新規に作成します。
az-phi3-pj-3.pngハブ名やリソースグループなどを指定し「次へ」をクリックします。
az-phi3-pj-4.png

「プロジェクトを作成する」をクリックします。
az-phi3-pj-5.pngこの際、ストレージアカウントやキーコンテナ(Azure Key Vault)も作成されます。 また、Azure AI Services(またはAzure OpenAI Service)を接続しますが、今回は既存のリソースではなく新規にAzure AI Servicesも作成しています。 これらリソースの依存関係や、今回は作成を省略したリソースに関する情報についてはMicrosoft Learnをご参照ください。
az-phi3-pj-6.png

Azure AI プロジェクトを作成すると、先程のサーバーレスAPIデプロイの画面で選択肢として表示されるようになります。
az-phi3-pj-7.png

サーバーレスAPIデプロイ(「デプロイ」ボタンをクリックした後の動作)については先ほどご紹介した通りですが、サーバーレスAPIデプロイ完了後にAzure Portalでリソースグループを確認すると以下のようなリソースが作成されています。 (今回、同じリソースグループ内にAzure AIプロジェクトも作成しているためこのようになっています。)
az-phi3-pj-8.png 

APIを利用できるか確認

「サーバーレスAPI」をデプロイしましたので、APIを利用できるか確認してみたいと思います。 Phi-3Azure上へサーバーレスAPIとしてデプロイすると「Azure AI Model Inference API」を利用できますので、こちらを利用します。 Azure AI Model Inference APIはAzure上にサーバーレスAPIとしてデプロイされた様々なAIモデルを同じ方法で利用できるため、アプリで利用するモデルを変えるにあたりコードを大幅に書き換えるといったことをしなくて済むという利点があります。 対応しているAIモデルに関してはMicrosoft Learnをご参照ください。

今回はこちらのAPIを利用して、情報の取得とチャット入力候補(Chat Completions)を試してみます。 なお、今回はWindows Subsystem for Linux (WSL)でcurlコマンドを実行します。
az-phi3-api-1.pngまずは以下のコマンドを実行して環境変数を設定します。(API_KEYとENDPOINTは環境に応じて書き換えます。 今回はキーによって認証を行うためキーも環境変数として設定しています。)

export PHI3_ENDPOINT="ENDPOINT"
export PHI3_API_KEY="API_KEY"

az-phi3-api-2.png

 

情報の取得

まずはモデルの情報を取得してみます。 以下のコマンドを実行します。(jqコマンドでコマンド実行結果を見やすくしています。)

curl $PHI3_ENDPOINT/info?api-version=2024-04-01-preview  \
  -H "Authorization: Bearer $PHI3_API_KEY" \
  -s | jq

az-phi3-api-3.png

モデルの名前など確認することが可能です。 各項目の意味についてはMicrosoft Learnのリファレンスをご参照ください。

チャット入力候補 (Chat Completions)

次にChat Completionsを試してみます。 今回は以下のコマンドを実行します。

curl $PHI3_ENDPOINT/chat/completions?api-version=2024-04-01-preview \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $PHI3_API_KEY" \
  -d '{"messages":[{"role": "user", "content": "Azureの特徴について200文字以内で教えてください。"}]}' \
  -s | jq

az-phi3-api-4.png

Azure OpenAI ServiceGPTに対するChat Completion APIについて以前のブログ記事でご紹介しましたが、似た構成の出力になっています。 (完全一致という訳ではなく異なる部分もあります。) 例えば"finish_reason"で生成を終了した理由を確認できたり、".choices[0].message.content"に生成された回答文が含まれていたり、トークン数を確認できるといった部分は同様です。

なお、今回はかなり簡単な内容でリクエストを送信しましたがtemperatureを指定するといったことも可能です。 詳細についてはMicrosoft Learnのリファレンスをご参照ください。

 

まとめ

今回はPhi-3をサーバーレスAPIとしてデプロイし、APIを利用する様子をご紹介しました。

デプロイ後に作成されたAzureリソースをご紹介しましたが、「サーバーレス」ですのでPhi-3をホストするサーバーはユーザーが意識することなく利用できるようになっています。

本ブログ記事の後半ではPhi-3を利用するにあたってAzure AI Model Inference APIをご紹介しましたが、GPTChat Completion APIを利用した経験のある方は特に馴染みやすい仕様なのではないでしょうか。

Phi-3はSLMですので様々な環境で利用できますが、AzureへサーバーレスAPIとしてデプロイするとこういったメリットを享受できるようになっています。

 

 


Azureを取り扱われているパートナー企業様へ様々なご支援のメニューを用意しております。 メニューの詳細やAzureに関するご相談等につきましては以下の「Azure相談センター」をご確認ください。

Azure相談センター
https://licensecounter.jp/azure/


※ 本ブログ記事は弊社にて把握、確認された内容を基に作成したものであり、サービス・製品の動作や仕様について担保・保証するものではありません。サービス・製品の動作、仕様等に関しては、予告なく変更される場合があります。
※ 本ブログ記事ではプレビューの機能を扱っています。

Azureに関するブログ記事一覧はこちら

著者紹介

SB C&S株式会社
ICT事業本部 技術本部 第1技術部 4課
中原 佳澄