Azure Stream Analytics'i Azure Machine Learning ile tümleştirme

Akış giriş verilerinizde gerçek zamanlı puanlama ve tahminler yapmak için Azure Stream Analytics işlerinizde makine öğrenmesi modellerini kullanıcı tanımlı bir işlev (UDF) olarak uygulayabilirsiniz. Azure Machine Learning , modelleri hazırlamak, eğitmek ve dağıtmak için TensorFlow, scikit-learn veya PyTorch gibi popüler açık kaynak araçları kullanmanıza olanak tanır.

Önkoşullar

Stream Analytics işinize işlev olarak bir makine öğrenmesi modeli eklemeden önce aşağıdaki adımları tamamlayın:

  1. Modelinizi web hizmeti olarak dağıtmak için Azure Machine Learning'i kullanın.

  2. Makine öğrenmesi uç noktanızın, Stream Analytics'in giriş ve çıkışın şemasını anlamasına yardımcı olan ilişkili bir swagger'ı olmalıdır. Doğru şekilde ayarladığınızdan emin olmak için bu örnek swagger tanımını başvuru olarak kullanabilirsiniz.

  3. Web hizmetinizin JSON serileştirilmiş verileri kabul edip döndürdüğüne emin olun.

  4. Yüksek ölçekli üretim dağıtımları için modelinizi Azure Kubernetes Service'te dağıtın. Web hizmeti, işinizden gelen isteklerin sayısını işleyemezse Stream Analytics işinizin performansı düşer ve bu da gecikme süresini etkiler. Azure Container Instances'a dağıtılan modeller yalnızca Azure portalını kullandığınızda desteklenir.

İşinize makine öğrenmesi modeli ekleme

Stream Analytics işinize Azure Machine Learning işlevlerini doğrudan Azure portalından veya Visual Studio Code'dan ekleyebilirsiniz.

Azure portal

  1. Azure portalında Stream Analytics işinize gidin ve İş topolojisi'nin altındaki İşlevler'i seçin. Ardından + Ekle açılan menüsünden Azure Machine Learning Hizmeti'ni seçin.

    Azure Machine Learning UDF ekleme

  2. Azure Machine Learning Hizmeti işlev formunu aşağıdaki özellik değerleriyle doldurun:

    Azure Machine Learning UDF'yi yapılandırma

Aşağıdaki tabloda, Stream Analytics'teki Azure Machine Learning Service işlevlerinin her özelliği açıklanmaktadır.

Özellik Açıklama
İşlev diğer adı Sorgunuzda işlevi çağırmak için bir ad girin.
Abonelik Azure aboneliğiniz.
Azure Machine Learning çalışma alanı Modelinizi web hizmeti olarak dağıtmak için kullandığınız Azure Machine Learning çalışma alanı.
Uç nokta Modelinizi barındıran web hizmeti.
İşlev imzası WEB hizmetinizin imzası API'nin şema belirtiminden çıkarılır. İmzanız yüklenemezse, şemayı otomatik olarak oluşturmak için puanlama betiğinizde örnek giriş ve çıkış sağladığınızı denetleyin.
Bölüm başına paralel istek sayısı Bu, yüksek ölçekli aktarım hızını iyileştirmeye yönelik gelişmiş bir yapılandırmadır. Bu sayı, işinizin her bölümünden web hizmetine gönderilen eşzamanlı istekleri temsil eder. Altı akış birimi (SU) ve daha düşük olan işlerin bir bölümü vardır. 12 SU'ya sahip işlerin iki bölümü vardır, 18 SU'nun üç bölümü vardır ve bu şekilde devam eder.

Örneğin, işinizin iki bölümü varsa ve bu parametreyi dört olarak ayarlarsanız, işinizden web hizmetinize sekiz eşzamanlı istek olur.
En büyük toplu iş sayısı Bu, yüksek ölçekli aktarım hızını iyileştirmeye yönelik gelişmiş bir yapılandırmadır. Bu sayı, web hizmetinize gönderilen tek bir istekte birlikte toplu işlenecek en fazla olay sayısını temsil eder.

Sorgunuzdan makine öğrenmesi uç noktasını çağırma

Stream Analytics sorgunuz bir Azure Machine Learning UDF'sini çağırdığında, iş web hizmetine JSON serileştirilmiş bir istek oluşturur. İstek, Stream Analytics'in uç noktanın swagger'ından çıkardığı modele özgü bir şemayı temel alır.

Uyarı

İş çalışmadığından Azure portal sorgu düzenleyicisiyle test yaparken Machine Learning uç noktaları çağrılmaz. Portaldan uç nokta çağrısını test etmek için Stream Analytics işinin çalışıyor olması gerekir.

Aşağıdaki Stream Analytics sorgusu, Azure Machine Learning UDF'sini çağırmaya yönelik bir örnektir:

SELECT udf.score(<model-specific-data-structure>)
INTO output
FROM input
WHERE <model-specific-data-structure> is not null

ML UDF'ye gönderilen giriş verileriniz beklenen şemayla tutarsızsa, uç nokta 400 hata koduyla bir yanıt döndürür ve bu da Stream Analytics işinizin başarısız duruma gitmesine neden olur. İşiniz için kaynak günlüklerini etkinleştirmeniz önerilir; bu sayede bu tür sorunları kolayca ayıklayıp giderebilirsiniz. Bu nedenle şunları yapmanızı kesinlikle öneririz:

  • ML UDF'nize girişin null olmadığını doğrulama
  • Uç noktanın beklediğiyle eşleştiğinden emin olmak için ML UDF'nize giriş olan her alanın türünü doğrulayın

Not

ML UDF'leri, koşullu ifade (örneğin CASE WHEN [A] IS NOT NULL THEN udf.score(A) ELSE '' END) aracılığıyla çağrıldığında bile belirli bir sorgu adımının her satırı için değerlendirilir. Gerekirse, YOLLARı yeniden birleştirmek için UNION kullanmadan önce ML UDF'yi yalnızca gerektiğinde çağırarak ayrılan yollar oluşturmak için WITH yan tümcesini kullanın.

UDF'ye birden çok giriş parametresi geçirme

Makine öğrenmesi modellerine yönelik girişlerin en yaygın örnekleri numpy dizileri ve DataFrame'lerdir. JavaScript UDF kullanarak bir dizi oluşturabilir ve yan tümcesini WITH kullanarak JSON serileştirilmiş DataFrame oluşturabilirsiniz.

Giriş dizisi oluşturma

N sayıda girişi kabul eden ve Azure Machine Learning UDF'nize giriş olarak kullanılabilecek bir dizi oluşturan bir JavaScript UDF oluşturabilirsiniz.

function createArray(vendorid, weekday, pickuphour, passenger, distance) {
    'use strict';
    var array = [vendorid, weekday, pickuphour, passenger, distance]
    return array;
}

JavaScript UDF'yi işinize ekledikten sonra aşağıdaki sorguyu kullanarak Azure Machine Learning UDF'nizi çağırabilirsiniz:

WITH 
ModelInput AS (
#use JavaScript UDF to construct array that will be used as input to ML UDF
SELECT udf.createArray(vendorid, weekday, pickuphour, passenger, distance) as inputArray
FROM input
)

SELECT udf.score(inputArray)
INTO output
FROM ModelInput
#validate inputArray is not null before passing it to ML UDF to prevent job from failing
WHERE inputArray is not null

Aşağıdaki JSON örnek bir istektir:

{
    "Inputs": {
        "WebServiceInput0": [
        ["1","Mon","12","1","5.8"],
        ["2","Wed","10","2","10"]
        ]
    }
}

Pandas veya PySpark DataFrame oluşturma

Aşağıda gösterildiği gibi Azure Machine Learning UDF'nize giriş olarak geçirilebilen bir JSON serileştirilmiş DataFrame oluşturmak için yan tümcesini kullanabilirsiniz WITH .

Aşağıdaki sorgu, gerekli alanları seçerek bir DataFrame oluşturur ve DataFrame'i Azure Machine Learning UDF'sine giriş olarak kullanır.

WITH 
Dataframe AS (
SELECT vendorid, weekday, pickuphour, passenger, distance
FROM input
)

SELECT udf.score(Dataframe)
INTO output
FROM Dataframe
WHERE Dataframe is not null

Aşağıdaki JSON, önceki sorgudan gelen örnek bir istektir:

{
    "Inputs": {
        "WebServiceInput0": [
        {
            "vendorid": "1",
            "weekday": "Mon",
            "pickuphour": "12",
            "passenger": "1",
            "distance": "5.8"
        },
        {
            "vendorid": "2",
            "weekday": "Tue",
            "pickuphour": "10",
            "passenger": "2",
            "distance": "10"
        }]
    }
}

Azure Machine Learning UDF'leri için performansı iyileştirme

Modelinizi Azure Kubernetes Service'e dağıttığınızda, kaynak kullanımını belirlemek için modelinizin profilini oluşturabilirsiniz. İstek oranlarını, yanıt sürelerini ve hata oranlarını anlamak için dağıtımlarınız için Uygulama Analizler'nı da etkinleştirebilirsiniz.

Yüksek olay aktarım hızına sahip bir senaryonuz varsa, düşük uçtan uca gecikme süreleriyle en iyi performansı elde etmek için Stream Analytics'te aşağıdaki parametreleri değiştirmeniz gerekebilir:

  • En fazla toplu iş sayısı.
  • Bölüm başına paralel istek sayısı.

Doğru toplu iş boyutunu belirleme

Web hizmetinizi dağıttıktan sonra, 50'den başlayarak değişen toplu iş boyutlarıyla örnek istek gönderir ve bunu yüzlerce sırasıyla artırırsınız. Örneğin, 200, 500, 1000, 2000 vb. Belirli bir toplu iş boyutundan sonra yanıtın gecikme süresinin arttığını fark edeceksiniz. Yanıt gecikme süresinin arttığı nokta, işiniz için maksimum toplu iş sayısı olmalıdır.

Bölüm başına paralel istek sayısını belirleme

En iyi ölçeklendirmede Stream Analytics işinizin web hizmetinize birden çok paralel istek gönderebilmesi ve birkaç milisaniye içinde yanıt alabilmesi gerekir. Web hizmetinin yanıt gecikmesi, Stream Analytics işinizin gecikme süresini ve performansını doğrudan etkileyebilir. İşinizden web hizmetine yapılan çağrı uzun sürüyorsa, büyük olasılıkla filigran gecikmesinde bir artış görürsünüz ve ayrıca gerilogged giriş olaylarının sayısında bir artış görebilirsiniz.

Azure Kubernetes Service (AKS) kümenizin doğru sayıda düğüm ve çoğaltma ile sağlanmış olduğundan emin olarak düşük gecikme süresi elde edebilirsiniz. Web hizmetinizin yüksek oranda kullanılabilir olması ve başarılı yanıtlar döndürmesi kritik önem taşır. İşiniz hizmet kullanılamıyor yanıtı (503) gibi yeniden denenebilecek bir hata alırsa, üstel geri alma ile otomatik olarak yeniden denenecektir. İşiniz bu hatalardan birini uç noktadan yanıt olarak alırsa, iş başarısız duruma geçer.

  • Hatalı İstek (400)
  • Çakışma (409)
  • Bulunamadı (404)
  • Yetkisiz (401)

Sınırlamalar

Azure ML Yönetilen Uç Nokta hizmeti kullanıyorsanız Stream Analytics şu anda yalnızca genel ağ erişimi etkinleştirilmiş uç noktalara erişebilir. Azure ML özel uç noktaları hakkında sayfada bu konuda daha fazla bilgi edinin.

Sonraki adımlar