BLOGAzureブログ

Azure OpenAI ServiceのモデルのデプロイまでをBicepコードで書いてみよう

2024.02.01

クラウドサーバーご検討中の方必見 お役立ち資料一覧

皆さまこんにちは、SB C&Sの八釼です。
過去に掲載したこの記事ではモデルをデプロイするための稼働環境までを作成しましたが、今回はデプロイまでをやってしまおうと思います(※まずは簡単にでもこの過去の記事に目を通してから本記事を読まれることをおすすめします)。現実的にはモデルにAPIアクセスできる状態にまで一気にやらないと役に立たないですからね(笑)

そもそもBicepとは何ぞや?という方は、概要を紹介している以下の関連記事からお読みいただくことをおすすめします。

【関連記事】二頭筋? 力こぶ? 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 デプロイ用のパラメーター ファイルを作成する

◆JSONパラメーターファイルの例


                            {
                              "$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
                                }
                              }
                            }
                        

◆Bicepパラメーターファイルの例


                            using './main.bicep'
                            
                            param resourceGroupName = 'licensecounter-blog-aoais-rg'
                            param resourceGroupLocation = 'japaneast'
                            param gpt35ModelVersion = '0613'
                            param gpt35ModelCapacity = 120                            
                        

Bicepファイル

リソースグループを一つ、そしてそれに所属する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形式の場合はこれの必要がないのでわかりやすいし、こういった部分でも楽ですね。ちなみに、スクリプトファイルを作成しておき実行するとより楽です。

◆JSONパラメーターファイルを用いる場合


                    $ az deployment sub create \
                    --name demoSubDeployment20240105-1 \
                    --location japaneast \
                    --template-file main.bicep \
                    --parameters @main.parameters.json #@を忘れずに
                

◆Bicepパラメーターファイルを用いる場合


                    $ az deployment sub create \
                    --name demoSubDeployment20240105-1 \
                    --location japaneast \
                    --template-file main.bicep \
                    --parameters main.bicepparam
                

デプロイ完了

デプロイ時のaz deployment sub createコマンドの --nameオプションで指定したデプロイ名demoSubDeployment20240105-1を表示してみると、問題なくデプロイが完了したことが確認できました。

edited_finished-deploy-sub.png

一応モジュールのnameで指定した'aoais-deploy'も表示して確認してみても、問題ないですね。

edited_finished-deploy-aoais.png

最後に

今回の記事の内容は、コード化しておくことで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 エヴァンジェリスト
    SB C&S株式会社 ICT事業本部 クラウド・ソフトウェア推進本部 クラウドプラットフォーム推進統括部 戦略推進室 販売企画課

yyatsurugi-image-v2.png

Azureの導入や運用に関するお悩みは SoftBankグループのSB C&Sにご相談ください

SoftBankグループのSB C&Sは、さまざまな分野のエキスパート企業との協力なパートナーシップによって、多岐にわたるAzure関連ソリューションをご提供しています。

「Azureのサービスを提供している企業が多すぎて、どの企業が自社にベストか分からない」
「Azure導入のメリット・デメリットを知りたい」
「Azureがどういう課題を解決してくれるのか知りたい」
など、Azureに関するお悩みならお気軽にお問い合わせください。
中立的な立場で、貴社に最適なソリューションをご提案いたします。

クラウドサーバーご検討中の方必見
お役立ち資料一覧

クラウドサーバーご検討中の方必見 お役立ち資料一覧
  • クラウドサーバーの導入を検討しているがオンプレミスとどう違うのか
  • AWSとAzureの違いについて知りたい
  • そもそもAzureについて基礎から知りたい
  • 今、話題の「WVD」って何?

そのようなお悩みはありませんか?
Azure相談センターでは、上記のようなお悩みを解決する
ダウンロード資料を豊富にご用意しています。
是非、ご覧ください。

Azureの導入・運用に役立つ資料を
無料でダウンロードしていただけますDOWNLOAD

オンプレミスからクラウドへの移行を検討している方のために、安心・スムーズな移行を実現する方法を解説し、
運用コストの削減に有効な「リザーブドインスタンス」もご紹介するホワイトペーパーです。

Azureのことなら、
SB C&Sにご相談を!

導入から活用まで専門スタッフが回答いたします。
お気軽にお問い合わせください。