BLOGAzureブログ
Azure OpenAI ServiceのモデルのデプロイまでをBicepコードで書いてみよう
Azure相談センターSB C&Sは、Microsoft Azureを推奨します。
Azure OpenAI ServiceのモデルのデプロイまでをBicepコードで書いてみよう
皆さまこんにちは、SB C&Sの八釼です。
過去に掲載したこの記事ではモデルをデプロイするための稼働環境までを作成しましたが、今回はデプロイまでをやってしまおうと思います(※まずは簡単にでもこの過去の記事に目を通してから本記事を読まれることをおすすめします)。現実的にはモデルにAPIアクセスできる状態にまで一気にやらないと役に立たないですからね(笑)
そもそもBicepとは何ぞや?という方は、概要を紹介している以下の関連記事からお読みいただくことをおすすめします。
今回ご紹介する記事では、以下のようにモジュール化しました。パラメータファイルも使用しています。
.
├── main.bicep
├── main.bicepparam
└── nested
└── aoais.bicep
詳細については以下の公式ドキュメントをご確認いただければと思いますが、デプロイの度に複数のパラメーターの値を設定するのは面倒くさいですし、ミスも起こりやすくなります。そのため一般的にはパラメータファイルを作成し、コマンド(Azure CLI or Azure PowerShell)でデプロイすることが多いです。
ちなみに、過去にはJSONファイルしか使用できませんでしたが、現在は.bicepparam拡張子のファイルも使えるようになりました(行数が少なくて済みますし、記述も楽です)。デプロイ時の動きとしては、BicepパラメーターファイルはJSONパラメーターファイルにコンパイルされます。そのためどちらのファイル形式で作成しても問題ありません。ただ、各種ツール(Bicep CLI, Azure CLI, Azure PowerShell)がサポートバージョンでないとBicepパラメーターファイルは使えませんので、好みを除くとこの点が選択の分かれ道になるかと思います。
公式ドキュメント | Bicep デプロイ用のパラメーター ファイルを作成する
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"resourceGroupName": {
"value": "licensecounter-blog-aoais-rg"
},
"resourceGroupLocation": {
"value": "japaneast"
},
"gpt35ModelVersion": {
"value": "0613"
},
"gpt35ModelCapacity": {
"value": 120
}
}
}
using './main.bicep'
param resourceGroupName = 'licensecounter-blog-aoais-rg'
param resourceGroupLocation = 'japaneast'
param gpt35ModelVersion = '0613'
param gpt35ModelCapacity = 120
リソースグループを一つ、そしてそれに所属するAOAI絡みのリソースをデプロイするためのモジュールを記述しただけの単純なコードです。リージョンも同一になるようにしています。
targetScope = 'subscription'
param resourceGroupName string
param resourceGroupLocation string
param gpt35ModelCapacity int
param gpt35ModelVersion string
resource newRG 'Microsoft.Resources/resourceGroups@2023-07-01' = {
name: resourceGroupName
location: resourceGroupLocation
}
module aoaisModule 'nested/aoais.bicep' = {
scope: newRG
name: 'aoais-deploy'
params:{
location: resourceGroupLocation
gpt35ModelVersion: gpt35ModelVersion
gpt35ModelCapacity: gpt35ModelCapacity
}
}
AOAIリソースを一つ、そしてGPT-3.5 Turboが一つデプロイされる単純なコードです。もちろんリソース定義(記述)を追加すれば、例えばGPT-4デプロイのモデルも併せてデプロイなども可能です。
@description('That name is the name of our application. It has to be unique.Type a name followed by your resource group name. (<name>-<resourceGroupName>)')
param cognitiveServiceName string = 'CognitiveService-${uniqueString(resourceGroup().id)}'
@description('Location for all resources.')
param location string
@allowed([
'S0'
])
param sku string = 'S0'
param gpt35ModelCapacity int
param gpt35ModelVersion string
resource cognitiveService 'Microsoft.CognitiveServices/accounts@2023-10-01-preview' = {
name: cognitiveServiceName
location: location
sku: {
name: sku
}
kind: 'OpenAI'
properties: {
apiProperties: {
statisticsEnabled: false
}
}
}
resource gpt35Model 'Microsoft.CognitiveServices/accounts/deployments@2023-10-01-preview' = {
parent: cognitiveService
name: 'gpt-35-turbo'
sku: {
name: 'Standard'
capacity: gpt35ModelCapacity
}
properties: {
model: {
format: 'OpenAI'
name: 'gpt-35-turbo'
version: gpt35ModelVersion
}
versionUpgradeOption: 'OnceNewDefaultVersionAvailable'
raiPolicyName: 'Microsoft.Default'
}
}
今回はAzure CLIを使用して環境をデプロイしました。具体的なコマンドは以下の通りです。main.bicepが存在するディレクトリにて、サブスクリプションレベルのデプロイコマンドを実行しました。BicepでもJSONでもどちらのファイル形式で作成しても問題ない旨は前述しましたが、一つ注意事項があります。「--parameters」オプションでパラメーターファイルを指定する必要がありますが、JSONの場合にはファイル名の頭に「@」を付けてください。Bicep形式の場合はこれの必要がないのでわかりやすいし、こういった部分でも楽ですね。ちなみに、スクリプトファイルを作成しておき実行するとより楽です。
$ az deployment sub create \
--name demoSubDeployment20240105-1 \
--location japaneast \
--template-file main.bicep \
--parameters @main.parameters.json #@を忘れずに
$ az deployment sub create \
--name demoSubDeployment20240105-1 \
--location japaneast \
--template-file main.bicep \
--parameters main.bicepparam
デプロイ時のaz deployment sub createコマンドの --nameオプションで指定したデプロイ名demoSubDeployment20240105-1を表示してみると、問題なくデプロイが完了したことが確認できました。
一応モジュールのnameで指定した'aoais-deploy'も表示して確認してみても、問題ないですね。
今回の記事の内容は、コード化しておくことでAOAIモデルが使える環境をいつでも簡単に準備したり削除したりするものでした。ですが実際の開発や運用の現場ではこれだけでは旨みが小さいです。単純に各モデルに対してREST APIアクセスできる環境が準備できるだけですから。実際に企業等におけるビジネスユースの場合には特に、このような環境のみがあったとて状態なわけです。
基本的な方向性として、AOAIのLLMが人間とアプリケーションを繋ぐ自然言語のインターフェースの役割を果たすように、アプリケーション/システム開発(ざっくりLLMアプリケーション開発)が必要になります。LLMアプリケーションですから、生成AIモデルは一つの部品に過ぎないわけです。
では、この環境も冪等性を持って、作ったり壊したりできないのか?(CI/CDパイプラインが構築できないか?)
実はできます。それがAzure Developer CLIというツールです。詳細については以下の公式ドキュメントをご確認いただければと思いますが、これを活用することでOpenAI LLMアプリケーション/システムを一気に丸ごとAzure上に展開することができます。この場合には当然インフラ部分はBicep(既定、Terraformも可)コードで記載しますので、本記事のようにインフラ部分だけのコード化をまずは試してみることは無駄ではないです。
公式ドキュメント | Azure Developer CLI とは
LLMアプリケーション開発にあたっては色々とお困りごとが出てくるかもしれませんが、その際にはぜひとも法人でのAzure導入前の相談窓口であるAzure相談センターまでお気軽にお問い合わせいただけますと幸いです。弊社では、ユーザー様のご状況やご要望を踏まえて最適な形でのAzureの導入のご支援を提供しており、Azure に精通したスタッフが丁寧にご回答させていただきますし皆様のAzure OpenAI Serviceを活用したサービス開発の一助となるべく尽力いたします。
Azureの導入や運用に関するお悩みは SoftBankグループのSB C&Sにご相談ください
SoftBankグループのSB C&Sは、さまざまな分野のエキスパート企業との協力なパートナーシップによって、多岐にわたるAzure関連ソリューションをご提供しています。
「Azureのサービスを提供している企業が多すぎて、どの企業が自社にベストか分からない」
「Azure導入のメリット・デメリットを知りたい」
「Azureがどういう課題を解決してくれるのか知りたい」
など、Azureに関するお悩みならお気軽にお問い合わせください。
中立的な立場で、貴社に最適なソリューションをご提案いたします。
クラウドサーバーご検討中の方必見
お役立ち資料一覧
そのようなお悩みはありませんか?
Azure相談センターでは、上記のようなお悩みを解決する
ダウンロード資料を豊富にご用意しています。
是非、ご覧ください。
オンプレミスからクラウドへの移行を検討している方のために、安心・スムーズな移行を実現する方法を解説し、
運用コストの削減に有効な「リザーブドインスタンス」もご紹介するホワイトペーパーです。
導入から活用まで専門スタッフが回答いたします。
お気軽にお問い合わせください。