Azure AI 모델 유추에 대한 모든 리소스 만들기 및 구성
Important
이 문서에 표시된 항목(미리 보기)은 현재 퍼블릭 미리 보기에서 확인할 수 있습니다. 이 미리 보기는 서비스 수준 계약 없이 제공되며, 프로덕션 워크로드에는 권장되지 않습니다. 특정 기능이 지원되지 않거나 기능이 제한될 수 있습니다. 자세한 내용은 Microsoft Azure Preview에 대한 추가 사용 약관을 참조하세요.
이 문서에서는 Azure AI 모델 유추를 사용하고 Azure AI 모델 카탈로그에서 주력 모델을 사용하는 데 필요한 리소스를 만드는 방법을 알아봅니다.
필수 조건
이 문서를 완료하려면 다음이 필요합니다.
- Azure 구독 GitHub 모델을 사용하는 경우 환경을 업그레이드하고 프로세스에서 Azure 구독을 만들 수 있습니다. 이 경우 GitHub 모델에서 Azure AI 모델 유추로 업그레이드를 읽습니다.
Important
Azure AI Foundry 포털은 프로젝트 및 허브를 사용하여 Azure AI Services 계정을 만들고 Azure AI 모델 유추를 구성합니다. 허브 및 프로젝트를 사용하지 않으려면 Azure CLI, Bicep을 사용하여 리소스를 만들거나 Azure Portal을 사용하여 Azure AI 서비스 리소스를 만들 수 있습니다.
리소스 만들기
Azure AI Services 계정으로 프로젝트를 만들려면 다음 단계를 수행합니다.
Azure AI Foundry 포털로 이동합니다.
방문 페이지에서 프로젝트 만들기를 선택합니다.
프로젝트 이름을 지정합니다(예: "my-project").
이 자습서에서는 새 AI 허브 아래에 새 프로젝트를 만들므로 새 허브 만들기를 선택합니다.
허브 이름(예: "my-hub")을 지정하고 다음을 선택합니다.
마법사는 만들 리소스에 대한 세부 정보로 업데이트됩니다. 만들 Azure 리소스를 선택하여 세부 정보를 확인합니다.
다음 리소스가 만들어지는 것을 볼 수 있습니다.
속성 설명 Resource group Azure의 모든 리소스에 대한 기본 컨테이너입니다. 이렇게 하면 함께 작동하는 리소스를 구성할 수 있습니다. 또한 전체 프로젝트와 관련된 비용에 대한 범위를 갖는 데 도움이 됩니다. 위치 만드는 리소스의 지역입니다. 허브 Azure AI Foundry의 AI 프로젝트에 대한 기본 컨테이너입니다. 허브는 공동 작업을 촉진하고 프로젝트에 대한 정보를 저장할 수 있도록 합니다. AI 서비스 Azure AI 모델 카탈로그의 주력 모델에 액세스할 수 있는 리소스입니다. 이 자습서에서는 새 계정이 만들어지지만 Azure AI 서비스 리소스는 여러 허브 및 프로젝트에서 공유할 수 있습니다. 허브는 리소스에 대한 연결을 사용하여 사용 가능한 모델 배포에 액세스할 수 있습니다. 방법을 알아보려면 프로젝트와 Azure AI Services 간에 연결을 만들어 AZURE AI 모델 유추를 사용할 수 있습니다. AI 프로젝트 연결을 읽을 수 있습니다. 만들기를 실행합니다. 리소스 만들기 프로세스가 시작됩니다.
완료되면 프로젝트를 구성할 준비가 된 것입니다.
Azure AI 모델 유추는 Azure AI Foundry에서 설정해야 하는 미리 보기 기능입니다. 위쪽 탐색 모음의 오른쪽 모서리에서 미리 보기 기능 아이콘을 선택합니다. 상황별 블레이드가 화면 오른쪽에 표시됩니다.
Azure AI 모델 유추 서비스에 모델 배포 기능을 설정합니다.
패널을 닫습니다.
Azure AI 모델 유추를 사용하려면 Azure AI 서비스 계정에 모델 배포를 추가해야 합니다.
Important
이 문서에 표시된 항목(미리 보기)은 현재 퍼블릭 미리 보기에서 확인할 수 있습니다. 이 미리 보기는 서비스 수준 계약 없이 제공되며, 프로덕션 워크로드에는 권장되지 않습니다. 특정 기능이 지원되지 않거나 기능이 제한될 수 있습니다. 자세한 내용은 Microsoft Azure Preview에 대한 추가 사용 약관을 참조하세요.
유추 엔드포인트에서 유추에 사용할 수 있는 모델을 결정하고 구성할 수 있습니다. 지정된 모델이 구성된 경우 요청에 모델 이름 또는 배포 이름을 표시하여 해당 모델에서 예측을 생성할 수 있습니다. 코드를 사용하기 위해 코드에서 더 이상 변경할 필요가 없습니다.
이 문서에서는 Azure AI Foundry에서 Azure AI 모델 유추에 새 모델을 추가하는 방법을 알아봅니다.
필수 조건
이 문서를 완료하려면 다음이 필요합니다.
Azure 구독 GitHub 모델을 사용하는 경우 환경을 업그레이드하고 프로세스에서 Azure 구독을 만들 수 있습니다. 이 경우 GitHub 모델에서 Azure AI 모델 유추로 업그레이드를 읽습니다.
Azure AI 서비스 리소스입니다.
Azure CLI 및
cognitiveservices
Azure AI Services에 대한 확장을 설치합니다.az extension add -n cognitiveservices
이 자습서의 일부 명령은 시스템에 설치되지 않을 수 있는 도구를 사용합니다
jq
. 설치 지침은 다운로드를 참조 하세요jq
.다음 정보를 식별합니다.
Azure 구독 ID.
Azure AI Services 리소스 이름입니다.
Azure AI Services 리소스가 배포되는 리소스 그룹입니다.
모델 추가
모델을 추가하려면 먼저 배포하려는 모델을 식별해야 합니다. 다음과 같이 사용 가능한 모델을 쿼리할 수 있습니다.
Azure 구독에 로그인합니다.
az login
구독이 1개 이상인 경우 리소스가 있는 구독을 선택합니다.
az account set --subscription $subscriptionId>
사용하려는 Azure AI Services 리소스 및 리소스 그룹의 이름으로 다음 환경 변수를 설정합니다.
accountName="<ai-services-resource-name>" resourceGroupName="<resource-group>"
Azure AI Services 계정이 아직 만들어지지 않은 경우 다음과 같이 만들 수 있습니다.
az cognitiveservices account create -n $accountName -g $resourceGroupName
먼저 사용할 수 있는 모델과 해당 SKU를 살펴보겠습니다. 다음 명령은 사용 가능한 모든 모델 정의를 나열합니다.
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 }'
출력은 다음과 같습니다.
{ "name": "Phi-3.5-vision-instruct", "format": "Microsoft", "version": "2", "sku": "GlobalStandard", "capacity": 1 }
배포하려는 모델을 식별합니다. 속성
name
,format
및version
sku
. 배포 유형에 따라 용량이 필요할 수도 있습니다.팁
모든 SKU에서 모든 모델을 사용할 수 있는 것은 아닙니다.
리소스에 모델 배포를 추가합니다. 다음 예제에서는 다음을 추가합니다.
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
모델을 사용할 준비가 된 것입니다.
다른 배포 이름 아래에 있는 한 필요한 경우 동일한 모델을 여러 번 배포할 수 있습니다. 이 기능은 콘텐츠 안전을 포함하여 지정된 모델에 대한 다양한 구성을 테스트하려는 경우에 유용할 수 있습니다.
배포 관리
CLI를 사용하여 사용 가능한 모든 배포를 볼 수 있습니다.
다음 명령을 실행하여 모든 활성 배포를 확인합니다.
az cognitiveservices account deployment list -n $accountName -g $resourceGroupName
지정된 배포의 세부 정보를 볼 수 있습니다.
az cognitiveservices account deployment show \ --deployment-name "Phi-3.5-vision-instruct" \ -n $accountName \ -g $resourceGroupName
지정된 배포는 다음과 같이 삭제할 수 있습니다.
az cognitiveservices account deployment delete \ --deployment-name "Phi-3.5-vision-instruct" \ -n $accountName \ -g $resourceGroupName
모델 사용
Azure AI 모델 유추에 배포된 모델은 리소스에 대한 Azure AI 모델의 유추 엔드포인트를 사용하여 사용할 수 있습니다. 요청을 생성할 때 매개 변수 model
를 지정하고 만든 모델 배포 이름을 삽입합니다. 다음 코드를 사용하여 유추 엔드포인트에 대한 URI를 프로그래밍 방식으로 가져올 수 있습니다.
유추 엔드포인트
az cognitiveservices account show -n $accountName -g $resourceGroupName | jq '.properties.endpoints["Azure AI Model Inference API"]'
Azure AI 모델 유추 엔드포인트에 요청하려면 경로를 models
추가합니다(예: https://<resource>.services.ai.azure.com/models
). Azure AI 모델 유추 API 참조 페이지에서 엔드포인트에 대한 API 참조를 볼 수 있습니다.
유추 키
az cognitiveservices account keys list -n $accountName -g $resourceGroupName
Important
이 문서에 표시된 항목(미리 보기)은 현재 퍼블릭 미리 보기에서 확인할 수 있습니다. 이 미리 보기는 서비스 수준 계약 없이 제공되며, 프로덕션 워크로드에는 권장되지 않습니다. 특정 기능이 지원되지 않거나 기능이 제한될 수 있습니다. 자세한 내용은 Microsoft Azure Preview에 대한 추가 사용 약관을 참조하세요.
이 문서에서는 Azure AI 모델 유추를 사용하고 Azure AI 모델 카탈로그에서 주력 모델을 사용하는 데 필요한 리소스를 만드는 방법을 알아봅니다.
필수 조건
이 문서를 완료하려면 다음이 필요합니다.
- Azure 구독 GitHub 모델을 사용하는 경우 환경을 업그레이드하고 프로세스에서 Azure 구독을 만들 수 있습니다. 이 경우 GitHub 모델에서 Azure AI 모델 유추로 업그레이드를 읽습니다.
Azure CLI를 설치합니다.
다음 정보를 식별합니다.
- Azure 구독 ID.
이 자습서 정보
이 문서의 예제는 Azure-Samples/azureai-model-inference-bicep 리포지토리에 포함된 코드 샘플을 기반으로 합니다. 파일 콘텐츠를 복사하거나 붙여넣지 않고 로컬로 명령을 실행하려면 다음 명령을 사용하여 리포지토리를 복제하고 코딩 언어의 폴더로 이동합니다.
git clone https://github.com/Azure-Samples/azureai-model-inference-bicep
이 예의 파일은 다음 위치에 있습니다.
cd azureai-model-inference-bicep/infra
리소스 이해
이 자습서는 다음을 만드는 데 도움이 됩니다.
- Azure AI 서비스 리소스.
- 종량제 지원을 지원하는 각 모델에 대한 글로벌 표준 SKU의 모델 배포입니다.
- (선택 사항) Azure AI 프로젝트 및 허브.
- (선택 사항) Azure AI Services의 허브와 모델 간의 연결입니다.
다음 자산을 사용하여 해당 리소스를 만듭니다.
템플릿
modules/ai-services-template.bicep
을 사용하여 Azure AI Services 리소스를 설명합니다.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
템플릿
modules/ai-services-deployment-template.bicep
을 사용하여 모델 배포를 설명합니다.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 } }
편의를 위해 JSON 파일을 사용하여 서비스에서 사용할 수 있게 하려는 모델을 정의합니다. 파일 인프라/models.json 키
name
version
provider
와sku
배포에서 프로비전할 모델을 정의하는 JSON 개체 목록이 포함됩니다. 모델은 종량제 지원을 지원하므로 모델 배포를 추가해도 추가 비용이 발생하지 않습니다. 사용 가능한 모델 항목을 제거/추가하는 파일을 수정합니다. 다음 예제 에서는 JSON 파일의 처음 7줄 만 보여줍니다.models.json
[ { "name": "AI21-Jamba-1.5-Large", "version": "1", "provider": "AI21 Labs", "sku": "GlobalStandard" },
프로젝트(권장)를 사용하려는 경우 프로젝트, 허브 및 Azure AI Services 리소스에 대한 연결을 만들기 위한 템플릿이 필요합니다.
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 } } }
리소스 만들기
콘솔에서 다음 단계를 수행합니다.
기본 배포를 정의합니다.
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
Azure에 로그인합니다.
az login
올바른 구독에 있는지 확인합니다.
az account set --subscription "<subscription-id>"
배포를 실행합니다.
RESOURCE_GROUP="<resource-group-name>" az deployment group create \ --resource-group $RESOURCE_GROUP \ --template-file deploy-with-project.bicep
Azure AI Services 리소스 및 모델 배포만 배포하려면 다음 배포 파일을 사용합니다.
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
배포를 실행합니다.
RESOURCE_GROUP="<resource-group-name>" az deployment group create \ --resource-group $RESOURCE_GROUP \ --template-file deploy.bicep
템플릿은 사용자가 만든 모델 배포를 사용하는 데 사용할 수 있는 Azure AI 모델 유추 엔드포인트를 출력합니다.