Dela via


Skapa och konfigurera alla resurser för Azure AI Foundry-modeller

Viktigt!

Objekt markerade (förhandsversion) i den här artikeln är för närvarande i offentlig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal och vi rekommenderar det inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

I den här artikeln får du lära dig hur du skapar de resurser som krävs för att använda Azure AI Foundry Models i dina projekt.

Förstå resurserna

Azure AI Foundry Models är en funktion i Azure AI Foundry Services (tidigare kända Azure AI Services). Du kan skapa modellutplaceringar inom resursen för att konsumera deras förutsägelser. Du kan också ansluta resursen till Azure AI Hubs och Projects i Azure AI Foundry för att skapa intelligenta program om det behövs. Följande bild visar arkitekturen på hög nivå.

Ett diagram som visar arkitekturen på hög nivå för de resurser som skapades i självstudien.

Azure AI Foundry Services kräver inte AI-projekt eller AI-hubbar för att fungera, och du kan skapa dem för att konsumera flaggskeppsmodeller från dina program. Ytterligare funktioner är dock tillgängliga om du distribuerar ett Azure AI-projekt och en hubb, inklusive sandlåda eller agenter.

Handledningen hjälper dig att skapa:

  • Azure AI Foundry-resurs
  • En modelldistribution för var och en av de modeller som stöds med serverlösa API-distributioner.
  • (Valfritt) Ett Azure AI-projekt och en hubb.
  • (Valfritt) En anslutning mellan hubben och modellerna i Azure AI Foundry.

Förutsättningar

För att slutföra den här artikeln behöver du:

Skapa resurserna

Följ dessa steg för att skapa ett projekt med en Azure AI Foundry-resurs (tidigare känd Azure AI Services):

  1. Gå till Azure AI Foundry-portalen.

  2. På landningssidan väljer du Skapa projekt.

  3. Ge projektet ett namn, till exempel "my-project".

  4. I den här handledningen skapar vi ett helt nytt projekt under en ny AI-hubb och väljer Skapa ny hubb.

  5. Ge hubben ett namn, till exempel "my-hub" och välj Nästa.

  6. Guiden uppdateras automatiskt med information om de resurser som ska skapas. Välj Azure-resurser som ska skapas för att se informationen.

    Skärmbild som visar information om projektet och hubben som ska skapas.

  7. Du kan se att följande resurser skapas:

    Fastighet Beskrivning
    Resursgrupp Huvudcontainern för alla resurser i Azure. Detta hjälper dig att organisera resurser som fungerar tillsammans. Det hjälper också till att ha ett omfång för de kostnader som är kopplade till hela projektet.
    Plats Regionen för de resurser som du skapar.
    Hubb Huvudcontainern för AI-projekt i Azure AI Foundry. Hubbar främjar samarbete och gör att du kan lagra information för dina projekt.
    AI-gjuteri I den här självstudien skapas ett nytt konto, men Azure AI Foundry Services kan delas mellan flera hubbar och projekt. Hubbar använder en anslutning till resursen för att komma åt de modeller som har implementerats där. Om du vill veta hur du kan skapa anslutningar mellan projekt och Azure AI Foundry för att använda Azure AI Foundry-modeller kan du läsa Ansluta ditt AI-projekt.
  8. Välj Skapa. Processen för att skapa resurser startar.

  9. När projektet är klart är det klart att konfigureras.

  10. Om du vill använda Azure AI Foundry Models måste du lägga till modelldistributioner.

Nästa steg

Du kan bestämma och konfigurera vilka modeller som är tillgängliga för slutsatsdragning i din Azure AI Foundry-resurs. När du konfigurerar en modell kan du generera förutsägelser från den genom att ange dess modellnamn eller distributionsnamn i dina begäranden. Du behöver inte göra några andra ändringar i koden för att använda modellen.

I den här artikeln får du lära dig hur du lägger till en ny modell i en Azure AI Foundry Models-slutpunkt.

Förutsättningar

För att slutföra den här artikeln behöver du:

  • Installera Azure CLI och cognitiveservices tillägget för Azure AI Services.

    az extension add -n cognitiveservices
    
  • Vissa av kommandona i den här handledningen använder jq-verktyget, som kanske inte är installerat på ditt system. Installationsinstruktioner finns i Ladda ned jq.

  • Identifiera följande information:

    • ditt prenumerations-ID för Azure

    • Ditt Azure AI Services-resursnamn.

    • Resursgruppen där du distribuerade Azure AI Services-resursen.

Lägg till modeller

Om du vill lägga till en modell identifierar du först den modell som du vill distribuera. Du kan fråga de tillgängliga modellerna på följande sätt:

  1. Logga in på din Azure-prenumeration.

    az login
    
  2. Om du har fler än en prenumeration väljer du den prenumeration där resursen finns.

    az account set --subscription $subscriptionId
    
  3. Ange följande miljövariabler med namnet på den Azure AI Services-resurs som du planerar att använda och resursgruppen.

    accountName="<ai-services-resource-name>"
    resourceGroupName="<resource-group>"
    location="eastus2"
    
  4. Om du inte har skapat ett Azure AI Services-konto ännu skapar du ett.

    az cognitiveservices account create -n $accountName -g $resourceGroupName --custom-domain $accountName --location $location --kind AIServices --sku S0
    
  5. Kontrollera vilka modeller som är tillgängliga för dig och under vilken SKU. SKU:er, även kallade distributionstyper, definierar hur Azure-infrastrukturen används för att bearbeta begäranden. Modeller kan erbjuda olika distributionstyper. Följande kommando visar alla tillgängliga modelldefinitioner:

    az cognitiveservices account list-models \
        -n $accountName \
        -g $resourceGroupName \
    | jq '.[] | { name: .name, format: .format, version: .version, sku: .skus[0].name, capacity: .skus[0].capacity.default }'
    
  6. Utdata ser ut så här:

    {
      "name": "Phi-3.5-vision-instruct",
      "format": "Microsoft",
      "version": "2",
      "sku": "GlobalStandard",
      "capacity": 1
    }
    
  7. Identifiera den modell som du vill distribuera. Du behöver egenskaperna name, format, versionoch sku. Egenskapen format anger vilken leverantör som erbjuder modellen. Du kan också behöva kapacitet beroende på typen av distribution.

  8. Lägg till modellimplementeringen i resursen. Följande exempel lägger till Phi-3.5-vision-instruct:

    az cognitiveservices account deployment create \
        -n $accountName \
        -g $resourceGroupName \
        --deployment-name Phi-3.5-vision-instruct \
        --model-name Phi-3.5-vision-instruct \
        --model-version 2 \
        --model-format Microsoft \
        --sku-capacity 1 \
        --sku-name GlobalStandard
    
  9. Modellen är redo att användas.

Du kan distribuera samma modell flera gånger om det behövs så länge den är under ett annat distributionsnamn. Den här funktionen kan vara användbar om du vill testa olika konfigurationer för en viss modell, inklusive innehållsfilter.

Använd modellen

Distribuerade modeller kan användas med hjälp av Azure AI-modellens beräkningsslutpunkt för resursen. När du skapar din begäran anger du parametern model och infogar det modelldistributionsnamn som du har skapat. Du kan programmatiskt hämta URI:n för slutpunkten för slutsatsdragning med hjälp av följande kod:

Slutpunkt för slutsatsdragning

az cognitiveservices account show  -n $accountName -g $resourceGroupName | jq '.properties.endpoints["Azure AI Model Inference API"]'

Om du vill göra begäranden till slutpunkten för Azure AI Foundry Models lägger du till routen models, till exempel https://<resource>.services.ai.azure.com/models. Du kan se API-referensen för slutpunkten på referenssidan för Azure AI Model Inference API.

Slutsatsdragningsnycklar

az cognitiveservices account keys list  -n $accountName -g $resourceGroupName

Hantera utrullningar

Du kan se alla tillgängliga distributioner med hjälp av CLI:

  1. Kör följande kommando för att se alla aktiva distributioner:

    az cognitiveservices account deployment list -n $accountName -g $resourceGroupName
    
  2. Du kan se information om en viss distribution:

    az cognitiveservices account deployment show \
        --deployment-name "Phi-3.5-vision-instruct" \
        -n $accountName \
        -g $resourceGroupName
    
  3. Du kan ta bort en viss distribution på följande sätt:

    az cognitiveservices account deployment delete \
        --deployment-name "Phi-3.5-vision-instruct" \
        -n $accountName \
        -g $resourceGroupName
    

Viktigt!

Objekt markerade (förhandsversion) i den här artikeln är för närvarande i offentlig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal och vi rekommenderar det inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

I den här artikeln får du lära dig hur du skapar de resurser som krävs för att använda Azure AI Foundry Models i dina projekt.

Förstå resurserna

Azure AI Foundry Models är en funktion i Azure AI Foundry Services (tidigare kända Azure AI Services). Du kan skapa modellutplaceringar inom resursen för att konsumera deras förutsägelser. Du kan också ansluta resursen till Azure AI Hubs och Projects i Azure AI Foundry för att skapa intelligenta program om det behövs. Följande bild visar arkitekturen på hög nivå.

Ett diagram som visar arkitekturen på hög nivå för de resurser som skapades i självstudien.

Azure AI Foundry Services kräver inte AI-projekt eller AI-hubbar för att fungera, och du kan skapa dem för att konsumera flaggskeppsmodeller från dina program. Ytterligare funktioner är dock tillgängliga om du distribuerar ett Azure AI-projekt och en hubb, inklusive sandlåda eller agenter.

Handledningen hjälper dig att skapa:

  • Azure AI Foundry-resurs
  • En modelldistribution för var och en av de modeller som stöds med serverlösa API-distributioner.
  • (Valfritt) Ett Azure AI-projekt och en hubb.
  • (Valfritt) En anslutning mellan hubben och modellerna i Azure AI Foundry.

Förutsättningar

För att slutföra den här artikeln behöver du:

  • Installera Azure CLI.

  • Identifiera följande information:

    • ditt prenumerations-ID för Azure

Om den här självstudiekursen

Exemplet i den här artikeln baseras på kodexempel som finns i lagringsplatsen Azure-Samples/azureai-model-inference-bicep . Om du vill köra kommandona lokalt utan att behöva kopiera eller klistra in filinnehåll använder du följande kommandon för att klona lagringsplatsen och gå till mappen för kodningsspråket:

git clone https://github.com/Azure-Samples/azureai-model-inference-bicep

Filerna för det här exemplet finns i:

cd azureai-model-inference-bicep/infra

Behörigheter som krävs för att prenumerera på modeller från partner och community

Foundry-modeller från partner och community som är tillgängliga för distribution (till exempel cohere-modeller) kräver Azure Marketplace. Modellleverantörer definierar licensvillkoren och anger priset för användning av sina modeller med hjälp av Azure Marketplace.

När du distribuerar modeller från tredje part kontrollerar du att du har följande behörigheter i ditt konto:

  • På Azure-prenumerationen:
    • Microsoft.MarketplaceOrdering/agreements/offers/plans/read
    • Microsoft.MarketplaceOrdering/agreements/offers/plans/sign/action
    • Microsoft.MarketplaceOrdering/offerTypes/publishers/offers/plans/agreements/read
    • Microsoft.Marketplace/offerTypes/publishers/offers/plans/agreements/read
    • Microsoft.SaaS/register/action
  • I resursgruppen – för att skapa och använda SaaS-resursen:
    • Microsoft.SaaS/resources/read
    • Microsoft.SaaS/resources/write

Skapa resurserna

Följ dessa steg:

  1. Använd mallen modules/ai-services-template.bicep för att beskriva din Azure AI Services-resurs:

    modules/ai-services-template.bicep

    @description('Location of the resource.')
    param location string = resourceGroup().location
    
    @description('Name of the Azure AI Services account.')
    param accountName string
    
    @description('The resource model definition representing SKU')
    param sku string = 'S0'
    
    @description('Whether or not to allow keys for this account.')
    param allowKeys bool = true
    
    @allowed([
      'Enabled'
      'Disabled'
    ])
    @description('Whether or not public endpoint access is allowed for this account.')
    param publicNetworkAccess string = 'Enabled'
    
    @allowed([
      'Allow'
      'Deny'
    ])
    @description('The default action for network ACLs.')
    param networkAclsDefaultAction string = 'Allow'
    
    resource account 'Microsoft.CognitiveServices/accounts@2023-05-01' = {
      name: accountName
      location: location
      identity: {
        type: 'SystemAssigned'
      }
      sku: {
        name: sku
      }
      kind: 'AIServices'
      properties: {
        customSubDomainName: accountName
        publicNetworkAccess: publicNetworkAccess
        networkAcls: {
          defaultAction: networkAclsDefaultAction
        }
        disableLocalAuth: allowKeys
      }
    }
    
    output endpointUri string = 'https://${account.outputs.name}.services.ai.azure.com/models'
    output id string = account.id
    
  2. Använd mallen modules/ai-services-deployment-template.bicep för att beskriva modelldistributioner:

    modules/ai-services-deployment-template.bicep

    @description('Name of the Azure AI services account')
    param accountName string
    
    @description('Name of the model to deploy')
    param modelName string
    
    @description('Version of the model to deploy')
    param modelVersion string
    
    @allowed([
      'AI21 Labs'
      'Cohere'
      'Core42'
      'DeepSeek'
      'xAI'
      'Meta'
      'Microsoft'
      'Mistral AI'
      'OpenAI'
    ])
    @description('Model provider')
    param modelPublisherFormat string
    
    @allowed([
        'GlobalStandard'
        'DataZoneStandard'
        'Standard'
        'GlobalProvisioned'
        'Provisioned'
    ])
    @description('Model deployment SKU name')
    param skuName string = 'GlobalStandard'
    
    @description('Content filter policy name')
    param contentFilterPolicyName string = 'Microsoft.DefaultV2'
    
    @description('Model deployment capacity')
    param capacity int = 1
    
    resource modelDeployment 'Microsoft.CognitiveServices/accounts/deployments@2024-04-01-preview' = {
      name: '${accountName}/${modelName}'
      sku: {
        name: skuName
        capacity: capacity
      }
      properties: {
        model: {
          format: modelPublisherFormat
          name: modelName
          version: modelVersion
        }
        raiPolicyName: contentFilterPolicyName == null ? 'Microsoft.Nill' : contentFilterPolicyName
      }
    }
    
  3. För enkelhetens skull definierar vi den modell som vi vill ha tillgänglig i tjänsten med hjälp av en JSON-fil. Filen infra/models.json innehåller en lista över JSON-objekt med nycklarna name,version, provideroch sku, som definierar de modeller som distributionen ska etablera. Eftersom modellerna stöder serverlösa API-distributioner medför det inte extra kostnad att lägga till modelldistributioner. Ändra filen genom att ta bort/lägga till de modellposter som du vill ha tillgängliga. I följande exempel visas endast de första 7 raderna i JSON-filen:

    models.json

    [
      {
        "name": "Cohere-command-a",
        "version": "1",
        "provider": "Cohere",
        "sku": "GlobalStandard"
      },
    
  4. Om du planerar att använda projekt (rekommenderas) behöver du mallarna för att skapa ett projekt, en hubb och en anslutning till Azure AI Services-resursen:

    moduler/project-hub-template.bicep

    param location string = resourceGroup().location
    
    @description('Name of the Azure AI hub')
    param hubName string = 'hub-dev'
    
    @description('Name of the Azure AI project')
    param projectName string = 'intelligent-apps'
    
    @description('Name of the storage account used for the workspace.')
    param storageAccountName string = replace(hubName, '-', '')
    param keyVaultName string = replace(hubName, 'hub', 'kv')
    param applicationInsightsName string = replace(hubName, 'hub', 'log')
    
    @description('The container registry resource id if you want to create a link to the workspace.')
    param containerRegistryName string = replace(hubName, '-', '')
    
    @description('The tags for the resources')
    param tagValues object = {
      owner: 'santiagxf'
      project: 'intelligent-apps'
      environment: 'dev'
    }
    
    var tenantId = subscription().tenantId
    var resourceGroupName = resourceGroup().name
    var storageAccountId = resourceId(resourceGroupName, 'Microsoft.Storage/storageAccounts', storageAccountName)
    var keyVaultId = resourceId(resourceGroupName, 'Microsoft.KeyVault/vaults', keyVaultName)
    var applicationInsightsId = resourceId(resourceGroupName, 'Microsoft.Insights/components', applicationInsightsName)
    var containerRegistryId = resourceId(
      resourceGroupName,
      'Microsoft.ContainerRegistry/registries',
      containerRegistryName
    )
    
    resource storageAccount 'Microsoft.Storage/storageAccounts@2019-04-01' = {
      name: storageAccountName
      location: location
      sku: {
        name: 'Standard_LRS'
      }
      kind: 'StorageV2'
      properties: {
        encryption: {
          services: {
            blob: {
              enabled: true
            }
            file: {
              enabled: true
            }
          }
          keySource: 'Microsoft.Storage'
        }
        supportsHttpsTrafficOnly: true
      }
      tags: tagValues
    }
    
    resource keyVault 'Microsoft.KeyVault/vaults@2019-09-01' = {
      name: keyVaultName
      location: location
      properties: {
        tenantId: tenantId
        sku: {
          name: 'standard'
          family: 'A'
        }
        enableRbacAuthorization: true
        accessPolicies: []
      }
      tags: tagValues
    }
    
    resource applicationInsights 'Microsoft.Insights/components@2018-05-01-preview' = {
      name: applicationInsightsName
      location: location
      kind: 'web'
      properties: {
        Application_Type: 'web'
      }
      tags: tagValues
    }
    
    resource containerRegistry 'Microsoft.ContainerRegistry/registries@2019-05-01' = {
      name: containerRegistryName
      location: location
      sku: {
        name: 'Standard'
      }
      properties: {
        adminUserEnabled: true
      }
      tags: tagValues
    }
    
    resource hub 'Microsoft.MachineLearningServices/workspaces@2024-07-01-preview' = {
      name: hubName
      kind: 'Hub'
      location: location
      identity: {
        type: 'systemAssigned'
      }
      sku: {
        tier: 'Standard'
        name: 'standard'
      }
      properties: {
        description: 'Azure AI hub'
        friendlyName: hubName
        storageAccount: storageAccountId
        keyVault: keyVaultId
        applicationInsights: applicationInsightsId
        containerRegistry: (empty(containerRegistryName) ? null : containerRegistryId)
        encryption: {
          status: 'Disabled'
          keyVaultProperties: {
            keyVaultArmId: keyVaultId
            keyIdentifier: ''
          }
        }
        hbiWorkspace: false
      }
      tags: tagValues
    }
    
    resource project 'Microsoft.MachineLearningServices/workspaces@2024-07-01-preview' = {
      name: projectName
      kind: 'Project'
      location: location
      identity: {
        type: 'systemAssigned'
      }
      sku: {
        tier: 'Standard'
        name: 'standard'
      }
      properties: {
        description: 'Azure AI project'
        friendlyName: projectName
        hbiWorkspace: false
        hubResourceId: hub.id
      }
      tags: tagValues
    }
    

    modules/ai-services-connection-template.bicep

    @description('Name of the hub where the connection will be created')
    param hubName string
    
    @description('Name of the connection')
    param name string
    
    @description('Category of the connection')
    param category string = 'AIServices'
    
    @allowed(['AAD', 'ApiKey', 'ManagedIdentity', 'None'])
    param authType string = 'AAD'
    
    @description('The endpoint URI of the connected service')
    param endpointUri string
    
    @description('The resource ID of the connected service')
    param resourceId string = ''
    
    @secure()
    param key string = ''
    
    
    resource connection 'Microsoft.MachineLearningServices/workspaces/connections@2024-04-01-preview' = {
      name: '${hubName}/${name}'
      properties: {
        category: category
        target: endpointUri
        authType: authType
        isSharedToAll: true
        credentials: authType == 'ApiKey' ? {
          key: key
        } : null
        metadata: {
          ApiType: 'Azure'
          ResourceId: resourceId
        }
      }
    }
    
  5. Definiera huvuddistributionen:

    deploy-with-project.bicep

    @description('Location to create the resources in')
    param location string = resourceGroup().location
    
    @description('Name of the resource group to create the resources in')
    param resourceGroupName string = resourceGroup().name
    
    @description('Name of the AI Services account to create')
    param accountName string = 'azurei-models-dev'
    
    @description('Name of the project hub to create')
    param hubName string = 'hub-azurei-dev'
    
    @description('Name of the project to create in the project hub')
    param projectName string = 'intelligent-apps'
    
    @description('Path to a JSON file with the list of models to deploy. Each model is a JSON object with the following properties: name, version, provider')
    var models = json(loadTextContent('models.json'))
    
    module aiServicesAccount 'modules/ai-services-template.bicep' = {
      name: 'aiServicesAccount'
      scope: resourceGroup(resourceGroupName)
      params: {
        accountName: accountName
        location: location
      }
    }
    
    module projectHub 'modules/project-hub-template.bicep' = {
      name: 'projectHub'
      scope: resourceGroup(resourceGroupName)
      params: {
        hubName: hubName
        projectName: projectName
      }
    }
    
    module aiServicesConnection 'modules/ai-services-connection-template.bicep' = {
      name: 'aiServicesConnection'
      scope: resourceGroup(resourceGroupName)
      params: {
        name: accountName
        authType: 'AAD'
        endpointUri: aiServicesAccount.outputs.endpointUri
        resourceId: aiServicesAccount.outputs.id
        hubName: hubName
      }
      dependsOn: [
        projectHub
      ]
    }
    
    @batchSize(1)
    module modelDeployments 'modules/ai-services-deployment-template.bicep' = [
      for (item, i) in models: {
        name: 'deployment-${item.name}'
        scope: resourceGroup(resourceGroupName)
        params: {
          accountName: accountName
          modelName: item.name
          modelVersion: item.version
          modelPublisherFormat: item.provider
          skuName: item.sku
        }
        dependsOn: [
          aiServicesAccount
        ]
      }
    ]
    
    output endpoint string = aiServicesAccount.outputs.endpointUri
    
  6. Logga in på Azure:

    az login
    
  7. Se till att du har rätt prenumeration:

    az account set --subscription "<subscription-id>"
    
  8. Kör utrullningen:

    RESOURCE_GROUP="<resource-group-name>"
    
    az deployment group create \
      --resource-group $RESOURCE_GROUP \
      --template-file deploy-with-project.bicep
    
  9. Om du bara vill distribuera Azure AI Services-resursen och modelldistributionerna använder du följande distributionsfil:

    deploy.bicep

    @description('Location to create the resources in')
    param location string = resourceGroup().location
    
    @description('Name of the resource group to create the resources in')
    param resourceGroupName string = resourceGroup().name
    
    @description('Name of the AI Services account to create')
    param accountName string = 'azurei-models-dev'
    
    @description('Path to a JSON file with the list of models to deploy. Each model is a JSON object with the following properties: name, version, provider')
    var models = json(loadTextContent('models.json'))
    
    module aiServicesAccount 'modules/ai-services-template.bicep' = {
      name: 'aiServicesAccount'
      scope: resourceGroup(resourceGroupName)
      params: {
        accountName: accountName
        location: location
      }
    }
    
    @batchSize(1)
    module modelDeployments 'modules/ai-services-deployment-template.bicep' = [
      for (item, i) in models: {
        name: 'deployment-${item.name}'
        scope: resourceGroup(resourceGroupName)
        params: {
          accountName: accountName
          modelName: item.name
          modelVersion: item.version
          modelPublisherFormat: item.provider
          skuName: item.sku
        }
        dependsOn: [
          aiServicesAccount
        ]
      }
    ]
    
    output endpoint string = aiServicesAccount.outputs.endpointUri
    
  10. Kör utrullningen:

    RESOURCE_GROUP="<resource-group-name>"
    
    az deployment group create \
      --resource-group $RESOURCE_GROUP \
      --template-file deploy.bicep
    
  11. Mallen ger slutpunkten för Azure AI Foundry Models som du kan använda för att konsumera någon av de modellutplaceringar som du har skapat.

Nästa steg