Criar e configurar todos os recursos para inferência do modelo de IA do Azure
Importante
Os itens marcados (versão prévia) neste artigo estão atualmente em versão prévia pública. Essa versão prévia é fornecida sem um contrato de nível de serviço e não recomendamos isso para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou podem ter restrição de recursos. Para obter mais informações, consulte Termos de Uso Complementares de Versões Prévias do Microsoft Azure.
Neste artigo, você aprenderá a criar os recursos necessários para usar a inferência do modelo de IA do Azure e consumir modelos principais do catálogo de modelos de IA do Azure.
Pré-requisitos
Para concluir este artigo, você precisa do seguinte:
- Uma assinatura do Azure. Se você estiver usando Modelos do GitHub, poderá atualizar sua experiência e criar uma assinatura do Azure no processo. Leia Atualizar de modelos do GitHub para a inferência do modelo de IA do Azure se for o seu caso.
Importante
O portal da Fábrica de IA do Azure usa projetos e hubs para criar contas dos Serviços de IA do Azure e configurar a inferência do modelo de IA do Azure. Se você não quiser usar hubs e projetos, poderá criar os recursos usando a CLI do Azure, o Bicep ou criar recursos dos serviços de IA do Azure usando o portal do Azure.
Criar os recursos
Para criar um projeto com uma conta dos Serviços de IA do Azure, siga estas etapas:
Acesse o portal do IA do Azure Foundry.
Na página de aterrissagem, selecione Criar projeto.
Dê um nome ao projeto, por exemplo, "my-project".
Neste tutorial, criamos um novo projeto em um novo hub de IA, portanto, selecione Criar novo hub.
Dê um nome ao hub, por exemplo, "my-hub" e selecione Avançar.
O assistente é atualizado com detalhes sobre os recursos que serão criados. Selecione recursos do Azure a serem criados para ver os detalhes.
Você pode ver que os seguintes recursos são criados:
Propriedade Descrição Grupo de recursos O contêiner principal para todos os recursos no Azure. Isso ajuda a organizar os recursos que funcionam juntos. Ele também ajuda a ter um escopo para os custos associados a todo o projeto. Localidade A região dos recursos que você está criando. Hub O contêiner principal para projetos de IA na Fábrica de IA do Azure. Os hubs promovem a colaboração e permitem que você armazene informações para seus projetos. Serviços de IA O recurso que habilita o acesso aos modelos principais no catálogo de modelos de IA do Azure. Neste tutorial, uma nova conta é criada, mas os recursos dos serviços de IA do Azure podem ser compartilhados em vários hubs e projetos. Os hubs usam uma conexão com o recurso para ter acesso às implantações de modelo disponíveis lá. Para saber como, você pode criar conexões entre projetos e os Serviços de IA do Azure para consumir a inferência do modelo de IA do Azure, você pode ler Conectar seu projeto de IA. Selecione Criar. O processo de criação de recursos é iniciado.
Depois de concluído, seu projeto está pronto para ser configurado.
A inferência do modelo de IA do Azure é uma versão prévia do recurso que precisa ser ativado na Fábrica de IA do Azure. Na barra de navegação superior, no canto superior direito, selecione o ícone Recursos de visualização. Uma folha contextual aparece à direita da tela.
Ative o recurso Implantar modelos no serviço de inferência de modelo de IA do Azure.
Feche o painel.
Para usar a inferência do modelo de IA do Azure, você precisa adicionar implantações de modelo à sua conta de serviços de IA do Azure.
Importante
Os itens marcados (versão prévia) neste artigo estão atualmente em versão prévia pública. Essa versão prévia é fornecida sem um contrato de nível de serviço e não recomendamos isso para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou podem ter restrição de recursos. Para obter mais informações, consulte Termos de Uso Complementares de Versões Prévias do Microsoft Azure.
Você pode decidir e configurar quais modelos estão disponíveis para inferência no ponto de extremidade de inferência. Quando um determinado modelo está configurado, você pode então gerar previsões a partir dele indicando seu nome de modelo ou nome de implantação nas suas solicitações. Nenhuma outra alteração é necessária no seu código para usá-lo.
Neste artigo, você aprenderá a adicionar um novo modelo à inferência do modelo de IA do Azure na Fábrica de IA do Azure.
Pré-requisitos
Para concluir este artigo, você precisa do seguinte:
Uma assinatura do Azure. Se você estiver usando Modelos do GitHub, poderá atualizar sua experiência e criar uma assinatura do Azure no processo. Leia Atualizar de modelos do GitHub para a inferência do modelo de IA do Azure se for o seu caso.
Um recurso dos serviços de IA do Azure.
Instale a CLI do Azure e a extensão
cognitiveservices
dos Serviços de IA do Azure:az extension add -n cognitiveservices
Alguns dos comandos deste tutorial usam a ferramenta
jq
, que pode não estar instalada em seu sistema. Para obter instruções de instalação, confira Baixarjq
.Identifique as seguintes informações:
Sua ID da assinatura do Azure.
O nome do recurso dos Serviços de IA do Azure.
O grupo de recursos em que o recurso dos Serviços de IA do Azure é implantado.
Adicionar modelos
Para adicionar um modelo, primeiro você precisa identificar o modelo que deseja implantar. Você pode consultar os modelos disponíveis da seguinte maneira:
Faça logon em sua assinatura do Azure:
az login
Se você tiver mais de 1 assinatura, selecione a assinatura na qual o recurso está localizado:
az account set --subscription $subscriptionId>
Defina as variáveis de ambiente a seguir com o nome do recurso dos Serviços de IA do Azure que você planeja usar e grupo de recursos.
accountName="<ai-services-resource-name>" resourceGroupName="<resource-group>"
Se você ainda não tiver uma conta dos Serviços de IA do Azure criada, poderá criar uma da seguinte maneira:
az cognitiveservices account create -n $accountName -g $resourceGroupName
Vamos ver primeiro quais modelos estão disponíveis para você e em qual SKU. O comando a seguir lista todas as definições de modelo disponíveis:
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 }'
As saídas são as seguintes:
{ "name": "Phi-3.5-vision-instruct", "format": "Microsoft", "version": "2", "sku": "GlobalStandard", "capacity": 1 }
Identifique o modelo que você deseja implantar. Você precisa das propriedades
name
,format
,version
esku
. A capacidade também pode ser necessária dependendo do tipo de implantação.Dica
Observe que nem todos os modelos estão disponíveis em todas as SKUs.
Adicione a implantação de modelo ao recurso. O exemplo a seguir adiciona
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
O modelo está pronto para ser consumido.
Você pode implantar o mesmo modelo várias vezes, se necessário, desde que ele esteja em um nome de implantação diferente. Essa funcionalidade pode ser útil caso você queira testar configurações diferentes para um determinado modelo, incluindo a segurança do conteúdo.
Administrar implantações
Você pode ver todas as implantações disponíveis usando a CLI:
Execute o seguinte comando para ver todas as implantações ativas:
az cognitiveservices account deployment list -n $accountName -g $resourceGroupName
Você pode ver os detalhes de uma determinada implantação:
az cognitiveservices account deployment show \ --deployment-name "Phi-3.5-vision-instruct" \ -n $accountName \ -g $resourceGroupName
Você pode excluir uma determinada implantação da seguinte maneira:
az cognitiveservices account deployment delete \ --deployment-name "Phi-3.5-vision-instruct" \ -n $accountName \ -g $resourceGroupName
Usar o modelo
Os modelos implantados na inferência de modelo de IA do Azure podem ser consumidos usando o ponto de extremidade de inferência do modelo de IA do Azure para o recurso. Ao construir sua solicitação, indique o parâmetro model
e insira o nome de implantação do modelo que você criou. Você pode obter programaticamente o URI para o ponto de extremidade de inferência usando o seguinte código:
Ponto de extremidade de inferência
az cognitiveservices account show -n $accountName -g $resourceGroupName | jq '.properties.endpoints["Azure AI Model Inference API"]'
Para fazer solicitações ao ponto de extremidade de inferência do modelo de IA do Azure, acrescente a rota models
, por exemplo https://<resource>.services.ai.azure.com/models
. Você pode ver a referência de API para o ponto de extremidade na página de referência de API de inferência do modelo de IA do Azure.
Chaves de inferência
az cognitiveservices account keys list -n $accountName -g $resourceGroupName
Importante
Os itens marcados (versão prévia) neste artigo estão atualmente em versão prévia pública. Essa versão prévia é fornecida sem um contrato de nível de serviço e não recomendamos isso para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou podem ter restrição de recursos. Para obter mais informações, consulte Termos de Uso Complementares de Versões Prévias do Microsoft Azure.
Neste artigo, você aprenderá a criar os recursos necessários para usar a inferência do modelo de IA do Azure e consumir modelos principais do catálogo de modelos de IA do Azure.
Pré-requisitos
Para concluir este artigo, você precisa do seguinte:
- Uma assinatura do Azure. Se você estiver usando Modelos do GitHub, poderá atualizar sua experiência e criar uma assinatura do Azure no processo. Leia Atualizar de modelos do GitHub para a inferência do modelo de IA do Azure se for o seu caso.
Instale a CLI do Azure.
Identifique as seguintes informações:
- Sua ID da assinatura do Azure.
Sobre este tutorial
O exemplo neste artigo baseia-se em exemplos de código contidos no repositório Azure-Samples/azureai-model-inference-bicep. Para executar os comandos localmente sem precisar copiar ou colar o conteúdo do arquivo, use os seguintes comandos para clonar o repositório e ir para a pasta do idioma de codificação:
git clone https://github.com/Azure-Samples/azureai-model-inference-bicep
Os arquivos desse exemplo estão em:
cd azureai-model-inference-bicep/infra
Entenda os recursos
O tutorial ajuda você a criar:
- Um recurso dos Serviços de IA do Azure.
- Uma implantação de modelo na SKU padrão global para cada um dos modelos que dão suporte ao pagamento conforme o uso.
- (Opcionalmente) Um projeto e hub de IA do Azure.
- (Opcionalmente) Uma conexão entre o hub e os modelos nos Serviços de IA do Azure.
Você está usando os seguintes ativos para criar esses recursos:
Use o modelo
modules/ai-services-template.bicep
para descrever o recurso dos Serviços de IA do Azure: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: { publicNetworkAccess: publicNetworkAccess networkAcls: { defaultAction: networkAclsDefaultAction } disableLocalAuth: allowKeys } } output endpointUri string = account.properties.endpoints['Azure AI Model Inference API'] output id string = account.id
Use o modelo
modules/ai-services-deployment-template.bicep
para descrever implantações de modelo: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' 'Meta' 'Microsoft' 'Mistral AI' 'OpenAI' ]) @description('Model provider') param modelPublisherFormat string @allowed([ 'GlobalStandard' '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 } }
Por conveniência, definimos o modelo que desejamos ter disponível no serviço usando um arquivo JSON. O arquivo infra/models.json contém uma lista de objetos JSON com chaves
name
,version
,provider
esku
, que define os modelos que a implantação provisionará. Como os modelos dão suporte ao pagamento conforme o uso, a adição de implantações de modelo não incorre em custo extra. Modifique o arquivo removendo/adicionando as entradas de modelo que você deseja ter disponíveis. O exemplo a seguir mostra apenas as sete primeiras linhas do arquivo JSON:models.json
[ { "name": "AI21-Jamba-1.5-Large", "version": "1", "provider": "AI21 Labs", "sku": "GlobalStandard" },
Se você planeja usar projetos (recomendado), precisará dos modelos para criar um projeto, um hub e uma conexão com o recurso dos Serviços de IA do Azure:
modules/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 } } }
Criar os recursos
No console, siga estas etapas:
Defina a implantação principal:
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
Faça logon no Azure:
az login
Verifique se você está na assinatura certa:
az account set --subscription "<subscription-id>"
Execute a implantação:
RESOURCE_GROUP="<resource-group-name>" az deployment group create \ --resource-group $RESOURCE_GROUP \ --template-file deploy-with-project.bicep
Se você quiser implantar apenas o recurso dos Serviços de IA do Azure e as implantações de modelo, use o seguinte arquivo de implantação:
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
Execute a implantação:
RESOURCE_GROUP="<resource-group-name>" az deployment group create \ --resource-group $RESOURCE_GROUP \ --template-file deploy.bicep
O modelo gera o ponto de extremidade de inferência do modelo de IA do Azure que você pode usar para consumir qualquer uma das implantações de modelo que você criou.