openai 的地形动态块

问题描述 投票:0回答:1

我正在尝试实现一个用例,我们必须使用 for_each 使用单个 azurerm_cognitive_deployment 块部署 2 个不同的 openAI 模型。

resource "azurerm_cognitive_deployment" "openai-model" {
  for_each              = var.openai_landing_zone_openAI
  provider              = azurerm.sub_openai_landing_zone
  name                  = each.value.name
  cognitive_account_id  = azurerm_cognitive_account.openAI[each.key].id
  model {
    dynamic "origin" {
        for_each = var.openai_landing_zone_openAI.models
        content {
                format  = each.value.models.format
                name    = each.value.models.model_name
                version = each.value.models.version
            }
            scale {
                type     = "Standard"
                capacity = each.value.models.capacity
            }
        }
    }        
}

var 文件。

openai_landing_zone_openAI = {
    "demo-openai" = {
        location              = "west us",
        rg_name               = "demo-rg",
        kind                  = "OpenAI",
        sku_name              = "S0",
        public_access         = false,
        local_auth_enabled    = false,
        custom_subdomain_name = "demo-openai",
        name                  = "demo-deployment",
        models = {
            "0" =  {
                format            = "OpenAI",
                version           = "0613",
                model_name        = "gpt-35-turbo",
                capacity          = "20"
            },
            "1" = {
                format            = "OpenAI",
                version           = "0613",
                model_name        = "gpt-4",
                capacity          = "20"
            }        
        }    
    }
}

我已经写了这个块,但它给出了语法错误。是否可以用单个块来做到这一点。有没有其他办法请指教。

terraform terraform-provider-azure azure-rm
1个回答
0
投票

使用 terraform 的 OpenAI 动态块。

我对您共享的代码配置进行了 2 个主要更改,并且能够成功配置需求。

as MarkoE 建议进行更改

format  =  each.value.format
并且比例块配置是在模型配置信息之外进行的。

我的配置如下。

main.tf:

provider "azurerm" {
  features {}
  alias = "sub_openai_landing_zone"
}

provider "azurerm" {
  features {}
}

variable "location" {}
variable "rg_name" {}
variable "sku_name" {}
variable "account_name" {}
variable "deployment_name" {}
variable "models" {
  type = list(object({
    format    : string
    model_name: string
    version   : string
  }))
}


module "openai_cognitive_deployment" {
  source           = "./modules/cognitive_deployment"
  providers = {
    azurerm.sub_openai_landing_zone = azurerm.sub_openai_landing_zone
  }
  location         = var.location
  rg_name          = var.rg_name
  sku_name         = var.sku_name
  account_name     = var.account_name
  deployment_name  = var.deployment_name
  models           = var.models
}

terraform.tfvars:

location        = "West US"
rg_name         = "testvk-rg"
sku_name        = "S0"
account_name    = "openai-production"
deployment_name = "openai-deployment-production"
models          = [
  {
    format    = "OpenAI",
    model_name= "gpt-35-turbo",
    deployment_name = "vinay35gpt"
    version   = 1106,
  },
  {
    format    = "OpenAI",
    model_name= "text-embedding-ada-002",
    deployment_name = "customdepvk"
    version   = 2,
    
  }
]

模块/认知部署:

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      configuration_aliases = [azurerm.sub_openai_landing_zone]
    }
  }
}



variable "location" {}
variable "rg_name" {}
variable "sku_name" {}
variable "account_name" {}
variable "deployment_name" {}
variable "models" {
  type = list(object({
    format    : string
    model_name: string
    version   : string
  }))
}

resource "azurerm_resource_group" "openai_rg" {
  name     = var.rg_name
  location = var.location
}

resource "azurerm_cognitive_account" "openai_account" {
  name                = var.account_name
  location            = azurerm_resource_group.openai_rg.location
  resource_group_name = azurerm_resource_group.openai_rg.name
  kind                = "OpenAI"
  sku_name            = var.sku_name
}

resource "azurerm_cognitive_deployment" "openai_model" {
  for_each             = { for idx, m in var.models : idx => m }
  provider             = azurerm.sub_openai_landing_zone
  name                 = "${var.deployment_name}-${each.key}"
  cognitive_account_id = azurerm_cognitive_account.openai_account.id

  model {
    format  = each.value.format
    name    = each.value.model_name
    version = each.value.version
   
  }
   scale {
      type     = "Standard"
    }
}

部署成功:

enter image description here

enter image description here

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.