실시간 추론을 위해 HuggingFace 허브에서 Azure Machine Learning 온라인 엔드포인트로 모델 배포
Microsoft는 Hugging Face와 제휴하여 Hugging Face Hub의 오픈 소스 모델을 Azure Machine Learning으로 가져왔습니다. Hugging Face는 대규모 언어 모델을 빌드하는 데 널리 사용되는 라이브러리인 Transformers를 만든 기업입니다. 수천 개의 오픈 소스 모델이 있는 Hugging Face 모델 허브입니다. Azure Machine Learning과의 통합을 통해 선택한 오픈 소스 모델을 Azure의 보안 및 확장 가능한 유추 인프라에 배포할 수 있습니다. Azure Machine Learning 모델 카탈로그에 있는 수천 개의 변환기 모델을 검색하고 단계별 마법사를 통해 쉽게 모델을 관리되는 온라인 엔드포인트에 배포할 수 있습니다. 배포되면 관리되는 온라인 엔드포인트는 실시간으로 모델의 점수를 매길 수 있는 안전한 REST API를 제공합니다.
참고 항목
Hugging Face의 모델에는 Hugging Face 모델 세부 정보 페이지에서 제공되는 제3자 라이선스 사용 조건이 적용됩니다. 모델의 라이선스 사용 조건을 준수하는 것은 사용자의 책임입니다.
실시간 유추를 위해 온라인 엔드포인트를 사용할 때의 이점
Azure Machine Learning의 관리되는 온라인 엔드포인트는 턴키 방식으로 Azure의 강력한 CPU 및 GPU 컴퓨터에 모델을 배포하는 데 도움이 됩니다. 관리형 온라인 엔드포인트는 모델 제공, 크기 조정, 보안 및 모니터링을 처리하여 기본 인프라를 설정하고 관리하는 오버헤드로부터 벗어날 수 있습니다. 모델을 배포할 때 가상 머신이 사용자를 대신하여 프로비전됩니다. 뒤에 여러 배포를 두고 해당 배포에 대해 트래픽을 분할하거나 트래픽을 미러링할 수 있습니다. 미러 트래픽을 사용하면 프로덕션 환경을 출시하지 않고도 프로덕션 트래픽에서 새 버전의 모델을 테스트할 수 있습니다. 트래픽을 분할하면 성능을 관찰하면서 새 모델 버전으로 프로덕션 트래픽을 점진적으로 늘릴 수 있습니다. 자동 크기 조정을 사용하면 워크로드에 따라 리소스를 동적으로 늘리거나 줄일 수 있습니다. 사용률 메트릭, 특정 일정 또는 둘의 조합을 기반으로 조정을 구성할 수 있습니다. 사용률 메트릭을 기반으로 한 크기 조정의 예는 CPU 사용률이 70%를 초과하는 경우 노드를 추가하는 것입니다. 일정 기반 크기 조정의 예로는 업무량이 가장 많은 시간을 기준으로 노드를 추가하는 것입니다.
Studio를 사용하여 HuggingFace 허브 모델 배포
배포할 모델을 찾으려면 Azure Machine Learning 스튜디오에서 모델 카탈로그를 엽니다. '모든 필터'를 선택한 다음 컬렉션별 필터링 섹션에서 'HuggingFace'를 선택합니다. 모델 타일을 선택하여 모델 페이지를 엽니다.
모델 배포
실시간 배포 옵션을 선택하여 빠른 배포 대화 상자를 엽니다. 다음 옵션을 지정합니다.
- GPU 또는 CPU용 템플릿을 선택합니다. CPU 인스턴스 형식은 테스트에 적합하고 GPU 인스턴스 형식은 프로덕션에서 더 나은 성능을 제공합니다. 큰 모델은 CPU 인스턴스 형식에 맞지 않습니다.
- 인스턴스 형식을 선택합니다. 이 인스턴스 목록은 모델이 메모리 부족 없이 배포할 것으로 예상되는 인스턴스로 필터링됩니다.
- 인스턴스 수를 선택합니다. 테스트에는 하나의 인스턴스로 충분하지만 프로덕션에는 두 개 이상의 인스턴스를 고려하는 것이 좋습니다.
- 선택적으로 엔드포인트 및 배포 이름을 지정합니다.
- 배포를 선택합니다. 그런 다음 엔드포인트 페이지로 이동하는데 몇 초 정도 걸릴 수 있습니다. 모델 크기와 인스턴스 형식에 따라 배포를 완료하는 데 몇 분 정도 걸립니다.
참고: 기존 엔드포인트에 배포하려면 빠른 배포 대화 상자에서 More options
를 선택하고 전체 배포 마법사를 사용합니다.
배포된 모델 테스트
배포가 완료되면 엔드포인트 페이지에서 모델에 대한 REST 엔드포인트를 찾을 수 있으며, 이는 모델 점수를 매기는 데 사용할 수 있습니다. 더 많은 배포를 추가하고, 트래픽을 관리하고, Endpoints 허브의 크기를 조정하는 옵션을 찾을 수 있습니다. 또한 엔드포인트 페이지의 테스트 탭을 사용하여 샘플 입력으로 모델을 테스트합니다. 샘플 입력은 모델 페이지에서 사용할 수 있습니다. Hugging Face 허브 유추 API 설명서에서 입력 형식, 매개 변수 및 샘플 입력을 찾을 수 있습니다.
Python SDK를 사용하여 HuggingFace 허브 모델 배포
배포할 모델 찾기
Azure Machine Learning 스튜디오에서 모델 카탈로그를 찾아보고 배포하려는 모델을 찾습니다. 배포하려는 모델 이름을 복사합니다. 필요한 라이브러리를 가져옵니다. 카탈로그에 표시된 모델은 HuggingFace
레지스트리에 나열되어 있습니다. 모델 카탈로그 및 HuggingFace
레지스트리에서 복사한 모델 이름을 사용하여 model_id
를 만듭니다. 이 예에서는 최신 버전으로 bert_base_uncased
모델을 배포합니다.
from azure.ai.ml import MLClient
from azure.ai.ml.entities import (
ManagedOnlineEndpoint,
ManagedOnlineDeployment,
Model,
Environment,
CodeConfiguration,
)
registry_name = "HuggingFace"
model_name = "bert_base_uncased"
model_id = f"azureml://registries/{registry_name}/models/{model_name}/labels/latest"
모델 배포
온라인 엔드포인트를 만듭니다. 다음으로 배포를 만듭니다. 마지막으로 이 배포를 사용하도록 모든 트래픽을 설정합니다. 모델 카탈로그의 모델 페이지에서 빠른 배포 대화 상자를 열어 모델에 대한 최적의 CPU 또는 GPU instance_type
을 찾을 수 있습니다. 할당량이 있는 instance_type
을 사용해야 합니다.
import time
endpoint_name="hf-ep-" + str(int(time.time())) # endpoint name must be unique per Azure region, hence appending timestamp
ml_client.begin_create_or_update(ManagedOnlineEndpoint(name=endpoint_name) ).wait()
ml_client.online_deployments.begin_create_or_update(ManagedOnlineDeployment(
name="demo",
endpoint_name=endpoint_name,
model=model_id,
instance_type="Standard_DS2_v2",
instance_count=1,
)).wait()
endpoint = ml_client.online_endpoints.get(endpoint_name)
endpoint.traffic = {"demo": 100}
ml_client.begin_create_or_update(endpoint).result()
배포된 모델 테스트
채점을 위해 온라인 엔드포인트에 제출할 수 있는 입력이 포함된 파일을 만듭니다. 아래는 bert-base-uncased
모델을 배포한 이후 fill-mask
형식에 대한 코드 샘플 입력입니다. Hugging Face 허브 유추 API 설명서에서 입력 형식, 매개 변수 및 샘플 입력을 찾을 수 있습니다.
import json
scoring_file = "./sample_score.json"
with open(scoring_file, "w") as outfile:
outfile.write('{"inputs": ["Paris is the [MASK] of France.", "The goal of life is [MASK]."]}')
response = workspace_ml_client.online_endpoints.invoke(
endpoint_name=endpoint_name,
deployment_name="demo",
request_file=scoring_file,
)
response_json = json.loads(response)
print(json.dumps(response_json, indent=2))
CLI를 사용하여 HuggingFace 허브 모델 배포
배포할 모델 찾기
Azure Machine Learning 스튜디오에서 모델 카탈로그를 찾아보고 배포하려는 모델을 찾습니다. 배포하려는 모델 이름을 복사합니다. 카탈로그에 표시된 모델은 HuggingFace
레지스트리에 나열되어 있습니다. 이 예에서는 최신 버전으로 bert_base_uncased
모델을 배포합니다.
모델 배포
모델을 배포하려면 model
및 instance_type
이 필요합니다. 모델 카탈로그의 모델 페이지에서 빠른 배포 대화 상자를 열어 모델에 대한 최적의 CPU 또는 GPU instance_type
을 찾을 수 있습니다. 할당량이 있는 instance_type
을 사용해야 합니다.
카탈로그에 표시된 모델은 HuggingFace
레지스트리에 나열되어 있습니다. 이 예에서는 최신 버전으로 bert_base_uncased
모델을 배포합니다. 모델 이름 및 레지스트리를 기반으로 하는 정규화된 model
자산 ID는 azureml://registries/HuggingFace/models/bert-base-uncased/labels/latest
입니다. az ml online-deployment create
명령 인라인에 사용되는 deploy.yml
파일을 만듭니다.
온라인 엔드포인트를 만듭니다. 다음으로 배포를 만듭니다.
# create endpoint
endpoint_name="hf-ep-"$(date +%s)
model_name="bert-base-uncased"
az ml online-endpoint create --name $endpoint_name
# create deployment file.
cat <<EOF > ./deploy.yml
name: demo
model: azureml://registries/HuggingFace/models/$model_name/labels/latest
endpoint_name: $endpoint_name
instance_type: Standard_DS3_v2
instance_count: 1
EOF
az ml online-deployment create --file ./deploy.yml --workspace-name $workspace_name --resource-group $resource_group_name
배포된 모델 테스트
채점을 위해 온라인 엔드포인트에 제출할 수 있는 입력이 포함된 파일을 만듭니다. Hugging Face는 배포된 모델인 bert-base-uncased
모델의 fill-mask
형식에 대한 코드 샘플 입력입니다. Hugging Face 허브 유추 API 설명서에서 입력 형식, 매개 변수 및 샘플 입력을 찾을 수 있습니다.
scoring_file="./sample_score.json"
cat <<EOF > $scoring_file
{
"inputs": [
"Paris is the [MASK] of France.",
"The goal of life is [MASK]."
]
}
EOF
az ml online-endpoint invoke --name $endpoint_name --request-file $scoring_file
Hugging Face 모델 예제 코드
이 링크를 따라 토큰 분류, 번역, 질문 답변 및 제로 샷 분류를 비롯한 다양한 시나리오에 대한 Hugging Face 모델 예제 코드를 찾습니다.
문제 해결: 배포 오류 및 지원되지 않는 모델
HuggingFace 허브에는 수천 개의 모델이 있으며 매일 수백 개가 업데이트됩니다. 컬렉션에서 가장 자주 사용되는 모델만 테스트되었으며 다른 모델도 아래 오류 중 하나로 인해 실패할 수 있습니다.
게이트 모델
게이트 모델을 사용하려면 사용자가 연락처 정보를 공유하고 모델 소유자의 사용 약관에 동의해야 모델에 액세스할 수 있습니다. 이러한 모델을 배포하려는 시도는 KeyError
와 함께 실패합니다.
원격 코드를 실행해야 하는 모델
모델은 일반적으로 변환기 SDK의 코드를 사용하지만 일부 모델은 모델 리포지토리의 코드를 실행합니다. 이러한 모델은 매개 변수 trust_remote_code
를 True
로 설정해야 합니다. 원격 코드 사용에 대해 자세히 알아보려면 다음 링크를 따라가세요. 이러한 모델은 보안을 염두에 두고 지원되지 않습니다. 이러한 모델을 배포하려는 시도는 다음 오류와 함께 실패합니다. ValueError: Loading <model> requires you to execute the configuration file in that repo on your local machine. Make sure you have read the code there to avoid malicious use, then set the option trust_remote_code=True to remove this error.
잘못된 토크나이저가 있는 모델
모델 패키지에 토크나이저가 잘못 지정되거나 누락되면 OSError: Can't load tokenizer for <model>
오류가 발생할 수 있습니다.
라이브러리 누락
일부 모델에는 추가 Python 라이브러리가 필요합니다. 모델을 로컬로 실행할 때 누락된 라이브러리를 설치할 수 있습니다. 표준 변환기 라이브러리 이외의 특수 라이브러리가 필요한 모델은 ModuleNotFoundError
또는 ImportError
오류로 인해 실패합니다.
메모리 부족
OutOfQuota: Container terminated due to insufficient memory
가 표시되면 메모리가 더 많은 instance_type
을 사용해 보세요.
자주 묻는 질문
모델 가중치는 어디에 저장되나요?
Hugging Face 모델은 HuggingFace
레지스트리를 통해 Azure Machine Learning 모델 카탈로그에 포함되어 있습니다. Hugging Face는 이 레지스트리를 만들고 관리하며 Azure Machine Learning에서 커뮤니티 레지스트리로 사용할 수 있습니다. 모델 가중치는 Azure에서 호스트되지 않습니다. 가중치는 이러한 모델이 배포될 때 Hugging Face 허브에서 작업 영역의 온라인 엔드포인트로 직접 다운로드됩니다. AzureML의 HuggingFace
레지스트리는 Azure Machine Learning에서 HuggingFace 허브 모델을 발견하고 배포하는 데 도움이 되는 카탈로그로 작동합니다.
일괄 처리 유추를 위해 모델을 배포하는 방법은 무엇인가요? 일괄 처리 유추를 위해 이러한 모델을 일괄 처리 엔드포인트에 배포하는 것은 현재 지원되지 않습니다.
Transformers SDK를 사용하여 이러한 모델을 미세 조정할 수 있도록 HuggingFace
레지스트리의 모델을 작업에 대한 입력으로 사용할 수 있나요?
모델 가중치는 HuggingFace
레지스트리에 저장되지 않으므로 이러한 모델을 작업에 대한 입력으로 사용하여 모델 가중치에 액세스할 수 없습니다.
배포에 실패하거나 유추가 예상대로 작동하지 않는 경우 지원을 가져오려면 어떻게 해야 하나요?HuggingFace
는 커뮤니티 레지스트리이므로 Microsoft 지원이 적용되지 않습니다. 배포 로그를 검토하고 문제가 Azure Machine Learning 플랫폼과 관련된 것인지 또는 HuggingFace 변환기와 관련된 것인지 확인합니다. 플랫폼 문제가 있는 경우 Microsoft 지원에 문의하세요. 예를 들어, 온라인 엔드포인트를 만들 수 없거나 엔드포인트 REST API에 대한 인증이 작동하지 않습니다. 변환기 관련 문제의 경우 HuggingFace 포럼 또는 HuggingFace 지원을 사용합니다.
커뮤니티 레지스트리란? 커뮤니티 레지스트리는 신뢰할 수 있는 Azure Machine Learning 파트너가 만들고 모든 Azure Machine Learning 사용자가 사용할 수 있는 Azure Machine Learning 레지스트리입니다.
사용자는 Azure Machine Learning 내의 Hugging Face와 관련된 질문과 우려를 어디에서 제출할 수 있나요? Azure Machine Learning 토론 포럼에서 질문을 제출합니다.
국가별 가용성
Hugging Face 컬렉션은 현재 퍼블릭 클라우드의 모든 지역에서만 사용할 수 있습니다.