İngilizce dilinde oku

Aracılığıyla paylaş


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.

Önkoşullar

Ş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/

Dağıtım yapılandırmasını tanımlama

Ş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.

  1. 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>"
    
  2. 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)}"
    
  3. Gerekli Azure Machine Learning çalışma alanına yönelik bir tanıtıcı elde etmek için yukarıdaki MLClient from azure.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,
    )
    
  4. 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")
    
  5. 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,
    )
    

Azure’a dağıtın

ŞUNLAR IÇIN GEÇERLIDIR: Python SDK'sı azure-ai-ml v2 (geçerli)

  1. 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)
    
  2. 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)
    
  3. 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)
    

Uç noktayı test edin

ŞUNLAR IÇIN GEÇERLIDIR: Python SDK'sı azure-ai-ml v2 (geçerli)

  1. 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
    
  2. 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

  3. 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)
    
  4. 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
    

Uç noktayı ve modeli silme

ŞUNLAR IÇIN GEÇERLIDIR: Python SDK'sı azure-ai-ml v2 (geçerli)

  1. 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)
    
  2. Modeli aşağıdaki kodla arşivler.

    ml_client.models.archive(name=model_name, version=model_version)
    

Sonraki adımlar

Daha fazla bilgi edinmek için şu makaleleri gözden geçirin: