Bereitstellen von Azure Open AI Services mit LLM Deployments mit Bicep

Natürlich ist es möglich, die benötigten Azure-Ressourcen über das Azure-Portal zu erstellen, aber da wir versuchen, alles zu automatisieren, können wir Bicep verwenden, um die benötigten Dienste zu erstellen. In diesem Blogbeitrag werde ich erklären, wie ihr die Bicep-Dateien schreiben könnt. Dieser Beitrag ist auch in englischer Sprache bereits auf Medium veröffentlicht worden.

Bicep ist eine spezielle Abstraktionssprache für die Azure Resource Manager (ARM)-Vorlagen. Mit Bicep können Entwickler und Cloud-Architekten Azure-Ressourcen deklarativ und effizient bereitstellen. Die Sprache ist eine benutzerfreundliche Alternative zu ARM-Vorlagen, da sie eine einfachere und lesbarere Syntax bietet. Durch die Verwendung von Bicep können Entwickler schnell und einfach Infrastrukturressourcen wie virtuelle Maschinen, Datenbanken, Netzwerke und vieles mehr erstellen. Die Bicep-Dateien werden in einer lesbaren Textform erstellt und dann in ARM-Vorlagen kompiliert, die von Azure bereitgestellt werden können. Bicep wurde entwickelt, um einige der Herausforderungen der Verwendung von ARM-Vorlagen direkt zu adressieren, wie zum Beispiel die komplexe JSON-Syntax und die Schwierigkeit, Vorlagen modular und wiederverwendbar zu gestalten. Es ermöglicht auch eine bessere Unterstützung von IntelliSense in Entwickler-IDEs, was die Entwicklungszeit verkürzt und die Fehleranfälligkeit reduziert. Insgesamt vereinfacht Bicep die Erstellung und Verwaltung von Azure-Ressourcen erheblich und trägt dazu bei, den Prozess der Cloud-basierten Anwendungs- und Infrastrukturbereitstellung zu verbessern.

Vorbereitungen

Bevor wir mit dem Schreiben unserer Bicep-Datei beginnen können, benötigst du ein aktives Azure-Abonnement und Azure OpenAI muss für dein Abonnement aktiviert sein. Derzeit musst du Zugriff auf die Azure OpenAI Services anfordern. Du musst das Anfrageformular von Microsoft ausfüllen. Beantworte einfach verschiedene Fragen und gib Microsoft etwas Zeit, deine Anfrage anzunehmen.

Außerdem muss die Azure CLI auf deinem Computer installiert sein. Wenn du Windows verwendest, kannst du das Winget-Tool verwenden, um es mithilfe einer PowerShell zu installieren.

winget install -e --id Microsoft.AzureCLI

Wenn du ein anderes Betriebssystem verwendest, kannst du einen Blick in die offizielle Dokumentation von Microsoft werfen, um die richtige Installationsanleitung zu finden.

Du kannst die korrekte Installation überprüfen, indem du az in dein PowerShell-Fenster eingibst.

Die Bicep-Datei

Ich verwende Visual Studio Code zum Schreiben der Bicep-Datei und habe die offizielle Bicep-Erweiterung für Visual Studio Code installiert. Diese Erweiterung bietet einige Syntaxhervorhebungen und auch Intellisense.

Ich habe einen neuen Ordner namens Infra erstellt und in diesem Ordner zwei Dateien erstellt: openai.solution.bicep und openai.resources.bicep.

Werfen wir zuerst einen Blick auf die Datei openai.resources.bicep. Diese Datei ist in der Lage, den benötigten Azure OpenAI-Dienst zu erstellen und auch das große Sprachmodell bereitzustellen, das wir verwenden möchten.

// Name of the Azure OpenAI service
param name string
// Custom domain name for the Azure OpenAI service
param customDomainName string
// Location of the Azure OpenAI service
param location string
// Tags for the Azure OpenAI service
param tags object
// Deployments for the Azure OpenAI service
param deployments array
// Kind of the Azure OpenAI service
param kind string = 'OpenAI'
// Public network access of the Azure OpenAI service
param publicNetworkAccess string = 'Enabled'
// SKU of the Azure OpenAI service
param sku object 


// Azure OpenAI service
resource account 'Microsoft.CognitiveServices/accounts@2022-03-01' = {
  name: name  
  location: location
  tags: tags
  kind: kind
  properties: {
    customSubDomainName: customDomainName
    publicNetworkAccess: publicNetworkAccess
  }
  sku: sku
}

// Deployments for the Azure OpenAI service
@batchSize(1)
resource deployment 'Microsoft.CognitiveServices/accounts/deployments@2022-10-01' = [for deployment in deployments: {
  parent: account
  name: deployment.name
  properties: {
    model: deployment.model
    raiPolicyName: contains(deployment, 'raiPolicyName') ? deployment.raiPolicyName : null
    scaleSettings: deployment.scaleSettings
  }
}]

Oben definieren wir einige Parameter, die wir an unsere Bicep-Datei übergeben müssen. Im nächsten Schritt erstellen wir das benötigte Microsoft.CognitiveServices-Konto und verwenden OpenAI als Kind.

Wenn das Konto erfolgreich erstellt wurde, stellen wir die benötigten großen Sprachmodelle in unserem neu erstellten Konto bereit. In meinem Szenario habe ich nur eine Bereitstellung hinzugefügt, aber die Bicep-Datei ist so vorbereitet, dass sie mehrere Bereitstellungen gleichzeitig unterstützt.

Schauen wir uns nun die Datei openai.solution.bicep an. Diese Datei ist im Grunde der Haupteinstiegspunkt.

// Name of the current environment
param envName string
// Name of the resource group to deploy the resources to
param resourceGroupName string = ''
// Location of the resource group to deploy the resources to
param resourceGroupLocation string = ''
// Name of the OpenAI service
param openAiServiceName string
// Location of the OpenAI service
param openAiResourceGroupLocation string
// Custom domain name for the OpenAI service
param openAiCustomDomain string
// SKU name for the OpenAI service
param openAiSkuName string
// Name of the OpenAI deployment
param openAiDeploymentName string
// Name of the OpenAI deployment model
param openAiDeploymentModelName string
// Version of the OpenAI deployment model
param openAiDeploymentModelVersion string
// Array of deployments, currently just one deployment will be used
param deployments array = [
  {
    name: openAiDeploymentName
    model: {
      format: 'OpenAI'
      name: openAiDeploymentModelName
      version: openAiDeploymentModelVersion
    }
    scaleSettings: {
      scaleType: 'Standard'
    }
  }
]
// Tags for the resource group
param tags object = {
  Creator: 'ServiceAccount'
  Service: 'OpenAI'
  Environment: envName
}


// Scope of the deployment, currently just the subscription is supported
targetScope = 'subscription'


// Createa the resource group
resource rg 'Microsoft.Resources/resourceGroups@2022-09-01' = {
  name: resourceGroupName
  location: resourceGroupLocation
}


// Create the OpenAI service by using a separate file
module openAi 'openai.resources.bicep' = {
  name: 'openai'
  scope: rg
  params: {
    name: openAiServiceName
    customDomainName: openAiCustomDomain
    location: openAiResourceGroupLocation
    tags: tags
    sku: {
      name: openAiSkuName
    }
    deployments: deployments
  }
}

Wir stellen oben eine Liste mit Parametern bereit. Zuerst erstellen wir in Azure eine Ressourcengruppe mit dem angegebenen Namen am angegebenen Speicherort.

Als Nächstes verwenden wir unsere Datei openai.resources.bicep, um den erforderlichen Azure OpenAI-Dienst zusammen mit den erforderlichen Bereitstellungen zu erstellen.

Nachdem wir nun alles vorbereitet haben, können wir unsere Bicep-Dateien verwenden, um die Azure-Ressourcen bereitzustellen.

Öffne eine PowerShell und verwende den Befehl az login, um dich mit deinem Microsoft-Konto anzumelden. Verwende az account show --output table, um zu überprüfen, ob das Abonnement mit der aktivierten Azure OpenAI aktiviert ist. Ist dies nicht der Fall, kannst du mit az account set --subscription <subscriptionID> das Abonnement wechseln.

Jetzt können wir den Befehl az Deployment Sub Create verwenden, um unseren Dienst bereitzustellen. Wir übergeben unsere Parameter über den Parameter Parameter.

az deployment sub create `
    --name openai-deployment `
    --location westeurope `
    --template-file ../openai.solution.bicep `
    --parameters `
        envName=dev `
        resourceGroupName=rg-test-openai `
        resourceGroupLocation=westeurope `
        openAiServiceName=oai-demoopenai-bicep `
        openAiCustomDomain=demo-openai-bicep `
        openAiResourceGroupLocation=westeurope `
        openAiSkuName=S0 `
        openAiDeploymentName=copilot `
        openAiDeploymentModelName=gpt-35-turbo `
        openAiDeploymentModelVersion=0301

Bitte beachte, dass der Azure OpenAI-Dienst noch nicht in allen Regionen verfügbar ist. Eine Liste mit allen verfügbaren Regionen findest du in der Microsoft-Dokumentation.

Die Bereitstellung dauert einige Minuten, aber am Ende solltest du eine JSON-Ausgabe sehen, die alle erstellten Dienste angibt.

Du kannst jetzt das Azure-Portal öffnen, um zu überprüfen, ob die Bereitstellung erfolgreich war und der Azure OpenAI-Dienst erstellt wurde, einschließlich der bereitgestellten Bereitstellung des Large Language Model.

Fazit

In diesem Beitrag habe ich dir gezeigt, wie du mit Bicep ganz einfach einen Azure OpenAI-Dienst innerhalb deines Abonnements erstellst und wie du Large Language Model-Bereitstellungen zu deinem neu erstellten Azure OpenAI-Dienst hinzufügen kannst.

Rückblick: Global Azure Bootcamp in München Azure Functions im Docker Container Azure OpenAI verwenden, um einen Copiloten für eigenen Daten zu erstellen – Teil 2