NIM(NVIDIA Inference Microservices)은 AI 애플리케이션을 빌드하는 방법을 간소화하고 가속화하는 최적화된 컨테이너화된 AI 추론 마이크로 서비스입니다. 이러한 모델은 Azure Container Apps에서 안전한 엔드포인트로 직접 배포하기 위해 미리 패키지되고 확장성이 있으며 성능을 조정할 수 있습니다. 서버리스 GPU와 함께 Azure Container Apps를 사용하는 경우 기본 인프라를 관리하지 않고도 이러한 NIM을 효율적으로 실행할 수 있습니다.
이 자습서에서는 서버리스 GPU를 사용하여 Azure Container Apps에 Llama3 NVIDIA NIM을 배포하는 방법을 알아봅니다.
이 자습서에서는 서버리스 GPU를 사용할 때 Azure Container Registry의 프리미엄 인스턴스를 사용하여 콜드 부팅 성능을 향상시킵니다. 프리미엄 Azure Container Registry를 사용하지 않으려면 이 자습서의 az acr create 명령을 수정하여 --sku를 basic으로 설정하세요.
필수 조건
| 리소스 | 설명 |
|---|---|
| Azure 계정 | 활성 구독이 있는 Azure 계정. 계정이 없는 경우에는 무료로 계정을 만들 수 있습니다. |
| Azure 커맨드 라인 인터페이스 (CLI) | Azure CLI를 설치합니다. |
| NVIDIA NGC API 키 | NGC(NVIDIA GPU Cloud) 웹 사이트에서 API 키를 받을 수 있습니다. |
설정
CLI에서 Azure에 로그인하려면 다음 명령을 실행하고 프롬프트에 따라 인증 프로세스를 완료합니다.
az login
최신 버전의 CLI를 실행하고 있는지 확인하려면 업그레이드 명령을 실행합니다.
az upgrade
그런 다음 CLI용 Azure Container Apps 확장을 설치하거나 업데이트합니다.
Azure CLI에서 az containerapp 명령을 실행하거나 PowerShell의 Az.App 모듈에서 cmdlet을 실행할 때 누락된 매개 변수에 대한 오류가 발생하는 경우 최신 버전의 Azure Container Apps 확장이 설치되어 있어야 합니다.
az extension add --name containerapp --upgrade
비고
2024년 5월부터 Azure CLI 확장 기능은 기본적으로 미리 보기 기능을 사용하도록 설정하지 않습니다. Container Apps 미리 보기 기능에 액세스하려면 --allow-preview true를 사용하여 Container Apps 확장을 설치합니다.
az extension add --name containerapp --upgrade --allow-preview true
이제 현재 확장 또는 모듈이 설치되었으므로 Microsoft.App 및 Microsoft.OperationalInsights 네임스페이스를 등록합니다.
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
리소스 그룹의 이름을 지정하고 위치를 설정하여 환경 변수를 설정합니다.
RESOURCE_GROUP="my-resource-group" LOCATION="swedencentral"다음으로, 고유한 컨테이너 레지스트리 이름을 생성합니다.
SUFFIX=$(head /dev/urandom | tr -dc 'a-z0-9' | head -c 6) ACR_NAME="mygpututorialacr${SUFFIX}"마지막으로 환경 이름을 지정하고 환경, 워크로드 프로필 유형, 컨테이너 앱 이름, 컨테이너를 식별하는 변수를 설정합니다.
CONTAINERAPPS_ENVIRONMENT="my-environment-name" GPU_TYPE="Consumption-GPU-NC24-A100" CONTAINER_APP_NAME="llama3-nim" CONTAINER_AND_TAG="meta/llama-3.1-8b-instruct:latest" NGC_SECRET=<Your NVIDIA NGC API Key>
Azure 리소스 그룹 만들기
컨테이너 앱 배포와 관련된 서비스를 구성하는 리소스 그룹을 만듭니다.
az group create \
--name $RESOURCE_GROUP \
--location $LOCATION
ACR(Azure Container Registry)을 만듭니다.
비고
이 자습서에서는 서버리스 GPU를 사용할 때 Azure Container Registry의 프리미엄을 사용하여 콜드 부팅 성능을 향상시킵니다. 프리미엄 Azure Container Registry를 사용하지 않으려면 다음 명령을 수정하고
--sku를basic으로 설정합니다.az acr create \ --resource-group $RESOURCE_GROUP \ --name $ACR_NAME \ --location $LOCATION \ --sku premium
NVIDIA NIM 이미지를 Azure Container Registry로 가져오기
다음으로, NVIDIA GPU Cloud에서 Azure Container Registry로 이미지를 가져옵니다.
비고
NVIDIA NIC에는 각각 고유한 하드웨어 요구 사항이 있습니다. 선택한 GPU 유형이 사용자가 선호하는 NIM을 지원하는지 확인하세요. 이 자습서에 사용된 Llama3 NIM은 NVIDIA A100 GPU에서 실행될 수 있습니다.
Azure Container Registry에 인증합니다.
az acr login --name $ACR_NAMEAzure Container Registry로 이미지를 푸시합니다.
az acr import \ --name $ACR_NAME \ --source nvcr.io/nim/$CONTAINER_AND_TAG \ --image $CONTAINER_AND_TAG \ --username '$oauthtoken' \ --password $NGC_SECRET
아티팩트 스트리밍 사용(권장 선택 사항)
컨테이너 앱이 실행되면 컨테이너 레지스트리에서 컨테이너를 가져옵니다. AI 워크로드처럼 이미지 크기가 큰 경우, 해당 이미지를 끌어오는 데 시간이 조금 더 걸릴 수 있습니다. 아티팩트 스트리밍을 사용하도록 설정하면 컨테이너 앱이 먼저 이미지의 필수 부분을 로드하여 컨테이너를 시작하는 데 걸리는 시간을 줄입니다. 아티팩트 스트리밍을 활성화하려면 다음 단계를 따르세요.
비고
다음 명령을 완료하는 데 시간이 오래 걸릴 수 있습니다.
컨테이너 레지스트리에서 아티팩트 스트리밍을 활성화합니다.
az acr artifact-streaming update \ --name $ACR_NAME \ --repository llama-3.1-8b-instruct \ --enable-streaming True컨테이너 이미지에서 아티팩트 스트리밍을 활성화합니다.
az acr artifact-streaming create \ --name $ACR_NAME \ --image $CONTAINER_AND_TAG
컨테이너 앱 만들기
다음으로 NVIDIA GPU Cloud API 키를 사용하여 컨테이너 앱을 만듭니다.
컨테이너 앱 환경을 만듭니다.
az containerapp env create \ --name $CONTAINERAPPS_ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --location $LOCATION사용자 환경에 GPU 워크로드 프로필을 추가합니다.
az containerapp env workload-profile add \ --resource-group $RESOURCE_GROUP \ --name $CONTAINERAPPS_ENVIRONMENT \ --workload-profile-type $GPU_TYPE \ --workload-profile-name LLAMA_PROFILE컨테이너 앱을 만듭니다.
az containerapp create \ --name $CONTAINER_APP_NAME \ --resource-group $RESOURCE_GROUP \ --environment $CONTAINERAPPS_ENVIRONMENT \ --image $ACR_NAME.azurecr.io/$CONTAINER_AND_TAG \ --cpu 24 \ --memory 220 \ --target-port 8000 \ --ingress external \ --secrets ngc-api-key=<PASTE_NGC_API_KEY_HERE> \ --env-vars NGC_API_KEY=secretref:ngc-api-key \ --registry-server $ACR_NAME.azurecr.io \ --workload-profile-name LLAMA_PROFILE \ --query properties.configuration.ingress.fqdn이 명령은 컨테이너 앱의 URL을 반환합니다. 다음 명령에서 사용할 텍스트 편집기에서 이 값을 따로 설정합니다.
비고
일부 NIM은 시작 시간이 더 깁니다. 이를 고려하여 상태 프로브 를 구성하거나 컨테이너 앱의 최소 복제본 수를 --min-replicas 1 설정하여 복제본이 항상 실행되도록 할 수 있습니다.
애플리케이션 작동 확인
애플리케이션에 요청 POST 요청을 보내서 성공적인 배포를 확인할 수 있습니다.
이 명령을 실행하기 전에 <YOUR_CONTAINER_APP_URL> URL을 이전 명령에서 반환된 컨테이너 앱 URL로 바꿔야 합니다.
curl -X POST \
'http://<YOUR_CONTAINER_APP_URL>/v1/completions' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"model": "meta/llama-3.1-8b-instruct",
"prompt": [{"role":"user", "content":"Once upon a time..."}],
"max_tokens": 64
}'
볼륨 탑재를 사용하여 성능 향상(선택 사항)
Azure Container Registry에서 아티팩트 스트리밍을 시작하고 사용할 때 Azure Container Apps는 시작 시에도 컨테이너 레지스트리에서 이미지를 끌어와야 합니다. 이 작업을 수행하면 최적화된 아티팩트 스트리밍을 사용하더라도 콜드 부팅이 시작됩니다.
콜드 부팅 시간이 더 빨라지도록 많은 NIM은 캐시 디렉터리에 이미지를 저장하기 위한 볼륨 탑재 경로를 제공합니다. 이 캐시 디렉터리를 사용하여 NIM이 실행해야 하는 모델 가중치 및 기타 파일을 저장할 수 있습니다.
Llama3 NIM에 볼륨 탑재를 설정하려면 ./opt/nim/.cache에 명시된 대로 에 볼륨 탑재를 설정해야 합니다. 이렇게 하려면 볼륨 탑재 자습서의 단계에 따라 볼륨 탑재 경로를 /opt/nim/.cache로 설정합니다.
리소스 정리
이 애플리케이션을 계속 사용하지 않으려면 다음 명령을 실행하여 이 자습서에서 만든 모든 리소스와 함께 리소스 그룹을 삭제합니다.
주의
다음 명령은 지정된 리소스 그룹과 그 안에 포함된 모든 리소스를 삭제합니다. 또한 이 명령은 이 리소스 그룹에 있는 이 자습서의 범위를 벗어난 모든 리소스를 삭제합니다.
az group delete --name $RESOURCE_GROUP
팁 (조언)
문제가 있나요? Azure Container Apps 리포지토리에서 문제를 열어 GitHub에 알려주세요.