11
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

セゾン情報システムズAdvent Calendar 2023

Day 1

Azure OpenAI ServiceをBicepで構築する

Last updated at Posted at 2023-11-30

この記事は セゾン情報システムズ Advent Calendar 2023 1日目の記事です。

Azure OpenAI ServiceをBicepで構築するコードです。
今回最新のGPT-4 Turboモデルを使いたかったので、利用可能なリージョンの1つであるEast US2 リージョンでデプロイしています。
診断設定でAOAIのログをStorage Accountに飛ばしています。

リポジトリ構成

  • 以下のようにモジュール化、パラメータ化しています。
.
├── main.bicep
├── main.bicepparam
└── modules
    ├── openai.bicep
    └── storageaccount.bicep

Bicepパラメータファイル

  • モデルバージョンはパラメータとして渡しています。GPT-4 Turboが利用できる '1106-Preview' バージョンとしています。
  • Azure OpenAI Serviceへのネットワークアクセス制限をしたいので、allowIpList配列に許可するIPアドレスを渡します。
main.bicepparam
using 'main.bicep'

param location = 'eastus2'

// OpenAI Parameters
param openAiName = '[Your OpenAi Name]'
param openAiSku = 'S0'
param allowIpList = [
  'x.x.x.x'
  'y.y.y.y'
]

// OpenAI Model Parameters
param gpt4ModelCapacity = 10
param gpt4ModelVersion = '1106-Preview'
param gpt35ModelCapacity = 120
param gpt35ModelVersion = '0613'

// Storage Account Parameters
param storageAccountName = '[Your Storage Account Name]'
param storageSku = 'Standard_LRS'

Bicepファイル

  • mainからモジュールを呼び出すようにしています。
main.bicep
param location string

// OpenAI Parameters
param openAiName string
param openAiSku string
param allowIpList array

// OpenAI Model Parameters
param gpt4ModelCapacity int
param gpt4ModelVersion string
param gpt35ModelCapacity int
param gpt35ModelVersion string

// Storage Account Parameters
param storageAccountName string
param storageSku string

module storageAccountModule 'modules/storageaccount.bicep' = {
  name: 'storageAccountModule'
  params: {
    location: location
    storageAccountName: storageAccountName
    storageSku: storageSku
  }
}

module openAiModule './modules/openai.bicep' = {
  name: 'openAiModule'
  params: {
    location: location
    openAiName: openAiName
    openAiSku: openAiSku
    gpt4ModelCapacity: gpt4ModelCapacity
    gpt4ModelVersion: gpt4ModelVersion
    gpt35ModelCapacity: gpt35ModelCapacity
    gpt35ModelVersion: gpt35ModelVersion
    storageAccountId: storageAccountModule.outputs.storageAccountId
    allowIpList: allowIpList
  }
}
  • 診断設定用のストレージアカウントを作ります。
storageaccount.bicep
param location string
param storageAccountName string
param storageSku string

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
  location: location
  name: storageAccountName
  kind: 'StorageV2'
  sku: {
    name: storageSku
  }
  properties: {
    minimumTlsVersion: 'TLS1_2'
  }
}

resource storageAccountBlob 'Microsoft.Storage/storageAccounts/blobServices@2023-01-01' = {
  parent: storageAccount
  name: 'default'
  properties: {
    deleteRetentionPolicy: {
      enabled: true
      days: 7
    }
    containerDeleteRetentionPolicy: {
      enabled: true
      days: 7
    }
  }
}

output storageAccountId string = storageAccount.id
  • Azure OpenAI Serviceをデプロイします。モデルはGPT-4、GPT-3.5の2つをデプロイします。
openai.bicep
param location string
param openAiName string
param openAiSku string
param gpt4ModelCapacity int
param gpt4ModelVersion string
param gpt35ModelCapacity int
param gpt35ModelVersion string
param storageAccountId string
param allowIpList array

resource openAi 'Microsoft.CognitiveServices/accounts@2023-05-01' = {
  name: openAiName
  location: location
  kind: 'OpenAI'
  sku: {
    name: openAiSku
  }
  properties: {
    customSubDomainName: openAiName
    networkAcls: {
      defaultAction: 'Deny'
      virtualNetworkRules: []
      ipRules: [for item in allowIpList: {
        value: item
      }]
    }
    publicNetworkAccess: 'Enabled'
  }
}

resource gpt4Model 'Microsoft.CognitiveServices/accounts/deployments@2023-10-01-preview' = {
  parent: openAi
  name: 'gpt-4'
  sku: {
    name: 'Standard'
    capacity: gpt4ModelCapacity
  }
  properties: {
    model: {
      format: 'OpenAI'
      name: 'gpt-4'
      version: gpt4ModelVersion
    }
    versionUpgradeOption: 'OnceNewDefaultVersionAvailable'
    raiPolicyName: 'Microsoft.Default'
  }
}

resource gpt35Model 'Microsoft.CognitiveServices/accounts/deployments@2023-10-01-preview' = {
  parent: openAi
  name: 'gpt-35-turbo'
  sku: {
    name: 'Standard'
    capacity: gpt35ModelCapacity
  }
  properties: {
    model: {
      format: 'OpenAI'
      name: 'gpt-35-turbo'
      version: gpt35ModelVersion
    }
    versionUpgradeOption: 'OnceNewDefaultVersionAvailable'
    raiPolicyName: 'Microsoft.Default'
  }
  dependsOn: [
    gpt4Model
  ]
}

resource diagnosticLogs 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = {
  name: openAi.name
  scope: openAi
  properties: {
    storageAccountId: storageAccountId
    logs: [
      {
        category: 'Audit'
        enabled: true
      }
      {
        category: 'RequestResponse'
        enabled: true
      }
    ]
  }
}
  • 今回GPT-3.5、GPT-4の2つをデプロイしようとしていますが、複数モデルをデプロイしようとすると以下のエラーとなりました。
{
  "code": "RequestConflict",
  "message": "Another operation is being performed on the parent resource 'xxx'. Please try again later."
}
  • dependsOnを加えて、複数モデルが同時にデプロイされないように変更することで解消しています。

実行

  • パラメータを指定してデプロイし、Azure OpenAI Serviceがデプロイされたことを確認します。
az deployment group create --resource-group [Your Resource Group Name] --template-file main.bicep --parameters main.bicepparam

以上です

11
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?