Triton Çıkarım Sunucusu ile yüksek performanslı hizmet sunma
ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)Python SDK azure-ai-ml v2 (geçerli)
Azure Machine Learning'de NVIDIA Triton Çıkarım Sunucusu'nu çevrimiçi uç noktalarla kullanmayı öğrenin.
Triton, çıkarım için iyileştirilmiş çok çerçeveli, açık kaynak yazılımdır. TensorFlow, ONNX Runtime, PyTorch, NVIDIA TensorRT ve daha fazlası gibi popüler makine öğrenmesi çerçevelerini destekler. CPU veya GPU iş yükleriniz için kullanılabilir.
Triton modellerini çevrimiçi uç noktaya dağıtırken kullanmak için kullanabileceğiniz başlıca iki yaklaşım vardır: Kod içermeyen dağıtım veya tam kod (Kendi kapsayıcınızı getirin) dağıtımı.
- Triton modelleri için kod içermeyen dağıtım, yalnızca triton modellerini dağıtmaya getirmeniz gerektiğinden bunları dağıtmanın basit bir yoludur.
- Triton modelleri için tam kod dağıtımı (Kendi kapsayıcınızı getirin), Triton çıkarım sunucusu için kullanılabilir yapılandırmaları özelleştirme konusunda tam denetime sahip olduğunuzdan bunları dağıtmanın daha gelişmiş bir yoludur.
Her iki seçenek için de Triton çıkarım sunucusu, NVIDIA tarafından tanımlanan Triton modeline göre çıkarım gerçekleştirir. Örneğin, daha gelişmiş senaryolar için grup modelleri kullanılabilir.
Triton hem yönetilen çevrimiçi uç noktalarda hem de Kubernetes çevrimiçi uç noktalarında desteklenir.
Bu makalede, Triton için kod içermeyen dağıtımı kullanarak modeli yönetilen bir çevrimiçi uç noktaya dağıtmayı öğreneceksiniz. CLI (komut satırı), Python SDK v2 ve Azure Machine Learning stüdyosu kullanma hakkında bilgi sağlanır. Triton çıkarım sunucusunun yapılandırmasını kullanarak daha doğrudan özelleştirmek istiyorsanız, Modeli dağıtmak için özel kapsayıcı kullanma bölümüne ve Triton için KCG örneğine (dağıtım tanımı ve uçtan uca betik) bakın.
Not
NVIDIA Triton Çıkarım Sunucusu kapsayıcısının kullanımı NVIDIA AI Enterprise Software lisans sözleşmesine tabidir ve kurumsal ürün aboneliği olmadan 90 gün boyunca kullanılabilir. Daha fazla bilgi için bkz . Azure Machine Learning'de NVIDIA AI Enterprise.
ŞUNLAR IÇIN GEÇERLIDIR: Python SDK'sı azure-ai-ml v2 (geçerli)
Bu makaledeki adımları takip etmeden önce aşağıdaki önkoşullara sahip olduğunuzdan emin olun:
Azure Machine Learning çalışma alanı. Yoksa, oluşturmak için Hızlı Başlangıç: Çalışma alanı kaynakları oluşturma makalesindeki adımları kullanın.
Python SDK v2'yi yüklemek için aşağıdaki komutu kullanın:
pip install azure-ai-ml azure-identity
SDK'nın mevcut yüklemesini en son sürüme güncelleştirmek için aşağıdaki komutu kullanın:
pip install --upgrade azure-ai-ml azure-identity
Daha fazla bilgi için bkz . Azure Machine Learning için Python SDK v2'yi yükleme.
Çalışan bir Python 3.8 (veya üzeri) ortamı.
Puanlama için ek Python paketlerinin yüklü olması gerekir ve bunları aşağıdaki kodla yükleyebilirsiniz. Bu ölçümler şunlardır:
- Numpy - Dizi ve sayısal bilgi işlem kitaplığı
- Triton Çıkarım Sunucusu İstemcisi - Triton Çıkarım Sunucusuna yönelik istekleri kolaylaştırır
- Pillow - Görüntü işlemleri için bir kitaplık
- Gevent - Triton Server'a bağlanırken kullanılan ağ kitaplığı
pip install numpy pip install tritonclient[http] pip install pillow pip install gevent
Azure aboneliğiniz için NCv3 serisi VM'lere erişim.
Önemli
Bu vm serisini kullanabilmek için önce aboneliğiniz için kota artışı istemeniz gerekebilir. Daha fazla bilgi için bkz . NCv3 serisi.
Bu makaledeki bilgiler, azureml-examples deposunda bulunan online-endpoints-triton.ipynb not defterini temel alır. Dosyaları kopyalamak/yapıştırmak zorunda kalmadan komutları yerel olarak çalıştırmak için depoyu kopyalayın ve ardından dizinleri depodaki dizinle sdk/endpoints/online/triton/single-model/
değiştirin:
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/sdk/python/endpoints/online/triton/single-model/
ŞUNLAR IÇIN GEÇERLIDIR: Python SDK'sı azure-ai-ml v2 (geçerli)
Bu bölümde, Azure Machine Learning Python SDK'sını (v2) kullanarak yönetilen bir çevrimiçi uç noktaya dağıtmak için triton dağıtımı tanımlama adımları gösterilmektedir.
Önemli
Triton kod içermeyen dağıtım için, yerel uç noktalar aracılığıyla test şu anda desteklenmemektedir.
Bir çalışma alanına bağlanmak için tanımlayıcı parametrelerine (abonelik, kaynak grubu ve çalışma alanı adı) ihtiyacımız vardır.
subscription_id = "<SUBSCRIPTION_ID>" resource_group = "<RESOURCE_GROUP>" workspace_name = "<AML_WORKSPACE_NAME>"
Oluşturulacak uç noktanın adını ayarlamak için aşağıdaki komutu kullanın. Bu örnekte, uç nokta için rastgele bir ad oluşturulur:
import random endpoint_name = f"endpoint-{random.randint(0, 10000)}"
Gerekli Azure Machine Learning çalışma alanına yönelik bir tanıtıcı elde etmek için yukarıdaki
MLClient
fromazure.ai.ml
dosyasındaki bu ayrıntıları kullanırız. Kimlik bilgilerini yapılandırma ve çalışma alanına bağlanma hakkında daha fazla bilgi için yapılandırma not defterine bakın.from azure.ai.ml import MLClient from azure.identity import DefaultAzureCredential ml_client = MLClient( DefaultAzureCredential(), subscription_id, resource_group, workspace_name, )
Uç noktayı yapılandırmak için bir
ManagedOnlineEndpoint
nesne oluşturun. Aşağıdaki örnekte uç noktanın adı ve kimlik doğrulama modu yapılandırılır.from azure.ai.ml.entities import ManagedOnlineEndpoint endpoint = ManagedOnlineEndpoint(name=endpoint_name, auth_mode="key")
Dağıtımı yapılandırmak için bir
ManagedOnlineDeployment
nesne oluşturun. Aşağıdaki örnekte, önceki adımda tanımlanan uç noktaya mavi adlı bir dağıtım yapılandırılır ve satır içi yerel bir model tanımlanır.from azure.ai.ml.entities import ManagedOnlineDeployment, Model model_name = "densenet-onnx-model" model_version = 1 deployment = ManagedOnlineDeployment( name="blue", endpoint_name=endpoint_name, model=Model( name=model_name, version=model_version, path="./models", type="triton_model" ), instance_type="Standard_NC6s_v3", instance_count=1, )
ŞUNLAR IÇIN GEÇERLIDIR: Python SDK'sı azure-ai-ml v2 (geçerli)
nesnesini kullanarak
ManagedOnlineEndpoint
yeni bir uç nokta oluşturmak için aşağıdaki komutu kullanın:endpoint = ml_client.online_endpoints.begin_create_or_update(endpoint)
nesnesini kullanarak
ManagedOnlineDeployment
dağıtımı oluşturmak için aşağıdaki komutu kullanın:ml_client.online_deployments.begin_create_or_update(deployment)
Dağıtım tamamlandıktan sonra trafik değeri olarak
0%
ayarlanır. Trafiği %100 olarak güncelleştirin.endpoint.traffic = {"blue": 100} ml_client.online_endpoints.begin_create_or_update(endpoint)
ŞUNLAR IÇIN GEÇERLIDIR: Python SDK'sı azure-ai-ml v2 (geçerli)
Uç nokta puanlama uri'sini almak için aşağıdaki komutu kullanın:
endpoint = ml_client.online_endpoints.get(endpoint_name) scoring_uri = endpoint.scoring_uri
Kimlik doğrulama anahtarı almak için şu komutu kullanın: keys = ml_client.online_endpoints.list_keys(endpoint_name) auth_key = keys.primary_key
Aşağıdaki puanlama kodu, uç noktaya bir tavus kuşu görüntüsünü göndermek için Triton Çıkarım Sunucusu İstemcisi'ni kullanır. Bu betik, bu örnekteki eşlikçi not defterinde mevcuttur: Triton kullanarak çevrimiçi uç noktalara model dağıtma.
# Test the blue deployment with some sample data import requests import gevent.ssl import numpy as np import tritonclient.http as tritonhttpclient from pathlib import Path import prepost img_uri = "http://aka.ms/peacock-pic" # We remove the scheme from the url url = scoring_uri[8:] # Initialize client handler triton_client = tritonhttpclient.InferenceServerClient( url=url, ssl=True, ssl_context_factory=gevent.ssl._create_default_https_context, ) # Create headers headers = {} headers["Authorization"] = f"Bearer {auth_key}" # Check status of triton server health_ctx = triton_client.is_server_ready(headers=headers) print("Is server ready - {}".format(health_ctx)) # Check status of model model_name = "model_1" status_ctx = triton_client.is_model_ready(model_name, "1", headers) print("Is model ready - {}".format(status_ctx)) if Path(img_uri).exists(): img_content = open(img_uri, "rb").read() else: agent = f"Python Requests/{requests.__version__} (https://github.com/Azure/azureml-examples)" img_content = requests.get(img_uri, headers={"User-Agent": agent}).content img_data = prepost.preprocess(img_content) # Populate inputs and outputs input = tritonhttpclient.InferInput("data_0", img_data.shape, "FP32") input.set_data_from_numpy(img_data) inputs = [input] output = tritonhttpclient.InferRequestedOutput("fc6_1") outputs = [output] result = triton_client.infer(model_name, inputs, outputs=outputs, headers=headers) max_label = np.argmax(result.as_numpy("fc6_1")) label_name = prepost.postprocess(max_label) print(label_name)
Betikten gelen yanıt aşağıdaki metne benzer:
Is server ready - True Is model ready - True /azureml-examples/sdk/endpoints/online/triton/single-model/densenet_labels.txt 84 : PEACOCK
ŞUNLAR IÇIN GEÇERLIDIR: Python SDK'sı azure-ai-ml v2 (geçerli)
Uç noktayı silin. Uç nokta silindiğinde tüm alt dağıtımlar da silinir, ancak ilişkili Ortamlar veya Modeller arşivlenmez.
ml_client.online_endpoints.begin_delete(name=endpoint_name)
Modeli aşağıdaki kodla arşivler.
ml_client.models.archive(name=model_name, version=model_version)
Daha fazla bilgi edinmek için şu makaleleri gözden geçirin:
- REST ile modelleri dağıtma
- Stüdyoda yönetilen çevrimiçi uç noktaları oluşturma ve kullanma
- Çevrimiçi uç noktalar için güvenli dağıtım
- Yönetilen çevrimiçi uç noktaları otomatik ölçeklendirme
- Azure Machine Learning yönetilen çevrimiçi uç noktasının maliyetlerini görüntüleme
- Yönetilen çevrimiçi uç nokta ve yönetilen kimlikle Azure kaynaklarına erişme
- Yönetilen çevrimiçi uç nokta dağıtımı sorunlarını giderme