Aracılığıyla paylaş


Redis için Azure Cache ile Azure İşlevleri için makine öğrenmesi modeli dağıtma

Bu makalede, Redis için Azure Cache örneği kullanarak Azure İşlevleri'da işlev uygulaması olarak Azure Machine Learning'den bir model dağıtacaksınız.

Redis için Azure Cache yüksek performanslı ve ölçeklenebilir. Azure Machine Learning modeliyle eşleştirildiğinde, uygulamanızda düşük gecikme süresi ve yüksek aktarım hızı elde edebilirsiniz. Önbelleğin yararlı olduğu birkaç senaryo: veriler çıkarılırken ve gerçek model çıkarımı sonuçları için. Her iki senaryoda da meta veriler veya sonuçlar bellek içinde depolanır ve bu da performansın artmasına neden olur.

Not

Hem Azure Machine Learning hem de Azure İşlevleri genel kullanıma sunulsa da İşlevler için Machine Learning hizmetinden model paketleme özelliği önizleme aşamasındadır.

Önkoşullar

Önemli

Bu makaledeki kod parçacıklarında aşağıdaki değişkenleri ayarladığınız varsayılır:

  • ws - Azure Machine Learning çalışma alanınız.
  • model - Dağıtılacak kayıtlı model.
  • inference_config - Modelin çıkarım yapılandırması.

Bu değişkenleri ayarlama hakkında daha fazla bilgi için bkz. Azure Machine Learning ile modelleri dağıtma.

Redis için Azure Cache örneği oluşturma

Herhangi bir Temel, Standart veya Premium önbellek örneğiyle Azure İşlevleri için bir makine öğrenmesi modeli dağıtabileceksiniz. Önbellek örneği oluşturmak için aşağıdaki adımları izleyin.

  1. Azure portal giriş sayfasına gidin veya kenar çubuğu menüsünü açın, ardından Kaynak oluştur'u seçin.

  2. Yeni sayfasında Veritabanları'nı ve ardından Redis için Azure Cache'ı seçin.

    Redis için Azure Cache'ı seçin.

  3. Yeni Redis Cache sayfasında, yeni önbelleğinizin ayarlarını yapılandırın.

    Ayar Önerilen değer Açıklama
    DNS adı Genel olarak benzersiz bir ad girin. Önbellek adı 1 ile 63 karakter arasında bir dize olmalıdır. Dize yalnızca sayı, harf veya kısa çizgi içerebilir. Adın bir sayı veya harfle başlayıp bitmesi gerekir ve ardışık kısa çizgi içeremez. Önbellek örneğinizin ana bilgisayar adıDNS adı.redis.cache.windows.net> olacaktır<.
    Abonelik Açılan menüden aboneliğinizi seçin. Bu yeni Redis için Azure Cache örneğinin altında oluşturulacağı abonelik.
    Kaynak grubu Açılan menüden bir kaynak grubu seçin veya Yeni oluştur'u seçip yeni bir kaynak grubu adı girin. Önbelleğinizin ve diğer kaynakların oluşturulacağı kaynak grubunun adı. Tüm uygulama kaynaklarınızı tek bir kaynak grubuna yerleştirerek bunları kolayca yönetebilir veya silebilirsiniz.
    Konum Açılan menüye gidin ve bir konum seçin. Önbelleğinizi kullanacak diğer hizmetlere yakın bir bölge seçin.
    Fiyatlandırma katmanı Açılan menüden bir Fiyatlandırma katmanı seçin. Fiyatlandırma katmanı önbellek için kullanılabilen boyut, performans ve özellikleri belirler. Daha fazla bilgi için bkz. Redis için Azure Cache Genel Bakış.
  4. sekmesini seçin veya sayfanın en altındaki düğmesini seçin.

  5. sekmesinde bağlantı yönteminizi seçin.

  6. Sonraki: Gelişmiş sekmesini seçin veya sayfanın en altındaki İleri: Gelişmiş düğmesini seçin.

  7. Temel veya standart önbellek örneğinin Gelişmiş sekmesinde TLS olmayan bir bağlantı noktasını etkinleştirmek istiyorsanız etkinleştir iki durumlu düğmesini seçin.

  8. Premium önbellek örneğinin Gelişmiş sekmesinde TLS olmayan bağlantı noktası, kümeleme ve veri kalıcılığı ayarlarını yapılandırın.

  9. Sonraki: Etiketler sekmesini seçin veya sayfanın en altındaki Sonraki: Etiketler düğmesini seçin.

  10. İsteğe bağlı olarak, kaynağı kategorilere ayırmak istiyorsanız Etiketler sekmesinde adı ve değeri girin.

  11. Gözden geçir ve oluştur’u seçin. Azure'ın yapılandırmanızı doğruladığı Gözden Geçir ve oluştur sekmesine yönlendirilirsiniz.

  12. Yeşil Doğrulama başarılı iletisi görüntülendikten sonra Oluştur'u seçin.

Önbelleğin oluşturulması biraz zaman alır. İlerleme durumunu Redis için Azure Cache Genel Bakış sayfasından izleyebilirsiniz. DurumÇalışıyor olarak gösterildiğinde önbellek kullanıma hazırdır.

Dağıtım için hazırlanma

Dağıtmadan önce modeli bir web hizmeti olarak çalıştırmak için gerekenleri tanımlamanız gerekir. Aşağıdaki listede bir dağıtım için gereken temel öğeler açıklanmaktadır:

  • Giriş betiği. Bu betik istekleri kabul eder, modeli kullanarak isteği puanlar ve sonuçları döndürür.

    Önemli

    Giriş betiği modelinize özeldir; gelen istek verilerinin biçimini, modeliniz tarafından beklenen verilerin biçimini ve istemcilere döndürülen verilerin biçimini anlaması gerekir.

    İstek verileri modeliniz tarafından kullanılamayan bir biçimdeyse, betik bunu kabul edilebilir bir biçime dönüştürebilir. Yanıtı istemciye döndürmeden önce de dönüştürebilir.

    İşlevler için paketleme yaparken varsayılan olarak giriş metin olarak kabul edilir. Girişin ham baytlarını kullanmak istiyorsanız (örneğin Blob tetikleyicileri için), ham verileri kabul etmek için AMLRequest kullanmalısınız.

Run işlevi için bir Redis uç noktasına bağlandığından emin olun.

import json
import numpy as np
import os
import redis
from sklearn.externals import joblib

def init():
    global model
    global azrediscache
    azrediscache = redis.StrictRedis(host='<host_url>', port=6380, password="<access_key>", ssl=True)
    model_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'), 'sklearn_mnist_model.pkl')
    model = joblib.load(model_path)

@input_schema('data', NumpyParameterType(input_sample))
@output_schema(NumpyParameterType(output_sample))
def run(data):
    try:
        input = azrediscache.get(data)
        result = model.predict(input)
        data = np.array(json.loads(data))
        result = model.predict(data)
        # You can return any data type, as long as it is JSON serializable.
        return result.tolist()
    except Exception as e:
        error = str(e)
        return error

Giriş betiği hakkında daha fazla bilgi için bkz. Puanlama kodunu tanımlama.

  • Yardımcı betikler veya giriş betiğini veya modelini çalıştırmak için gereken Python/Conda paketleri gibi bağımlılıklar

Bu varlıklar bir çıkarım yapılandırmasında kapsüllenir. Çıkarım yapılandırması, giriş betiğine ve diğer bağımlılıklara başvurur.

Önemli

Azure İşlevleri ile kullanmak üzere bir çıkarım yapılandırması oluştururken Ortam nesnesi kullanmanız gerekir. Özel bir ortam tanımlıyorsanız, pip bağımlılığı olarak = 1.0.45 sürümüne >sahip azureml-defaults eklemeniz gerektiğini unutmayın. Bu paket, modeli bir web hizmeti olarak barındırmak için gereken işlevselliği içerir. Aşağıdaki örnekte bir ortam nesnesi oluşturma ve bunu çıkarım yapılandırmasıyla kullanma gösterilmektedir:

from azureml.core.environment import Environment
from azureml.core.conda_dependencies import CondaDependencies

# Create an environment and add conda dependencies to it
myenv = Environment(name="myenv")
# Enable Docker based environment
myenv.docker.enabled = True
# Build conda dependencies
myenv.python.conda_dependencies = CondaDependencies.create(conda_packages=['scikit-learn'],
                                                           pip_packages=['azureml-defaults', 'redis'])
inference_config = InferenceConfig(entry_script="score.py", environment=myenv)

Ortamlar hakkında daha fazla bilgi için bkz. Eğitim ve dağıtım için ortam oluşturma ve yönetme.

Çıkarım yapılandırması hakkında daha fazla bilgi için bkz. Azure Machine Learning ile modelleri dağıtma.

Önemli

İşlevler'e dağıtırken dağıtım yapılandırması oluşturmanız gerekmez.

İşlevler desteği için SDK önizleme paketini yükleme

Azure İşlevleri paketleri oluşturmak için SDK önizleme paketini yüklemeniz gerekir.

pip install azureml-contrib-functions

Görüntü oluşturma

Azure İşlevleri dağıtılan Docker görüntüsünü oluşturmak için azureml.contrib.functions.package dosyasını veya kullanmak istediğiniz tetikleyicinin belirli paket işlevini kullanın. Aşağıdaki kod parçacığında modelden bir HTTP tetikleyicisi ve çıkarım yapılandırması ile yeni bir paketin nasıl oluşturulacağı gösterilmektedir:

Not

Kod parçacığı, kayıtlı bir model içerdiğini model ve inference_config çıkarım ortamının yapılandırmasını içerdiğini varsayar. Daha fazla bilgi için bkz. Azure Machine Learning ile modelleri dağıtma.

from azureml.contrib.functions import package
from azureml.contrib.functions import HTTP_TRIGGER
model_package = package(ws, [model], inference_config, functions_enabled=True, trigger=HTTP_TRIGGER)
model_package.wait_for_creation(show_output=True)
# Display the package location/ACR path
print(model_package.location)

olduğunda show_output=TrueDocker derleme işleminin çıkışı gösterilir. İşlem tamamlandıktan sonra, çalışma alanınızın Azure Container Registry görüntü oluşturulur. Görüntü oluşturulduktan sonra, Azure Container Registry konumunuz görüntülenir. Döndürülen konum biçimindedir <acrinstance>.azurecr.io/package@sha256:<imagename>.

Not

İşlevler için paketleme şu anda HTTP Tetikleyicilerini, Blob tetikleyicilerini ve Service bus tetikleyicilerini destekler. Tetikleyiciler hakkında daha fazla bilgi için bkz. Azure İşlevleri bağlamaları.

Önemli

Görüntü dağıtılırken kullanıldığı gibi konum bilgilerini kaydedin.

Görüntüyü web uygulaması olarak dağıtma

  1. Görüntüyü içeren Azure Container Registry oturum açma kimlik bilgilerini almak için aşağıdaki komutu kullanın. değerini, dosyasından daha önce package.locationdöndürülen değerle değiştirin<myacr>:

    az acr credential show --name <myacr>
    

    Bu komutun çıktısı aşağıdaki JSON belgesine benzer:

    {
    "passwords": [
        {
        "name": "password",
        "value": "abcdefghijklmmopqrstuv1234567890"
        },
        {
        "name": "password2",
        "value": "1234567890abcdefghijklmmopqrstuv"
        }
    ],
    "username": "charlie.roy"
    }
    

    Kullanıcı adı ve parolalardan birinin değerini kaydedin.

  2. Hizmeti dağıtmak için henüz bir kaynak grubunuz veya app service planınız yoksa, bu komutlar her ikisinin de nasıl oluşturulacağını gösterir:

    az group create --name myresourcegroup --location "West Europe"
    az appservice plan create --name myplanname --resource-group myresourcegroup --sku B1 --is-linux
    

    Bu örnekte Linux temel fiyatlandırma katmanı (--sku B1) kullanılmıştır.

    Önemli

    Azure Machine Learning tarafından oluşturulan görüntülerde Linux kullanılır, bu nedenle parametresini --is-linux kullanmanız gerekir.

  3. Web işi depolaması için kullanılacak depolama hesabını oluşturun ve bağlantı dizesini alın. yerine <webjobStorage> kullanmak istediğiniz adı yazın.

    az storage account create --name <webjobStorage> --location westeurope --resource-group myresourcegroup --sku Standard_LRS
    
    az storage account show-connection-string --resource-group myresourcegroup --name <webJobStorage> --query connectionString --output tsv
    
  4. İşlev uygulamasını oluşturmak için aşağıdaki komutu kullanın. yerine <app-name> kullanmak istediğiniz adı yazın. ve <imagename> değerlerini daha önce döndürülen package.location değerlerle değiştirin<acrinstance>. değerini önceki adımdaki depolama hesabının adıyla değiştirin <webjobStorage> :

    az functionapp create --resource-group myresourcegroup --plan myplanname --name <app-name> --deployment-container-image-name <acrinstance>.azurecr.io/package:<imagename> --storage-account <webjobStorage>
    

    Önemli

    Bu noktada işlev uygulaması oluşturulmuştur. Ancak, görüntüyü içeren Azure Container Registry HTTP tetikleyicisi veya kimlik bilgileri için bağlantı dizesi sağlamadığınız için işlev uygulaması etkin değildir. Sonraki adımlarda, bağlantı dizesini ve kapsayıcı kayıt defteri için kimlik doğrulama bilgilerini sağlayacaksınız.

  5. İşlev uygulamasına kapsayıcı kayıt defterine erişmek için gereken kimlik bilgilerini sağlamak için aşağıdaki komutu kullanın. değerini işlev uygulamasının adıyla değiştirin <app-name> . ve <imagetag> değerlerini önceki adımda yer alan AZ CLI çağrısındaki değerlerle değiştirin<acrinstance>. ve <password> değerini daha önce alınan ACR oturum açma bilgileriyle değiştirin<username>:

    az functionapp config container set --name <app-name> --resource-group myresourcegroup --docker-custom-image-name <acrinstance>.azurecr.io/package:<imagetag> --docker-registry-server-url https://<acrinstance>.azurecr.io --docker-registry-server-user <username> --docker-registry-server-password <password>
    

    Bu komut, aşağıdaki JSON belgesine benzer bilgiler döndürür:

    [
    {
        "name": "WEBSITES_ENABLE_APP_SERVICE_STORAGE",
        "slotSetting": false,
        "value": "false"
    },
    {
        "name": "DOCKER_REGISTRY_SERVER_URL",
        "slotSetting": false,
        "value": "[server-name].azurecr.io"
    },
    {
        "name": "DOCKER_REGISTRY_SERVER_USERNAME",
        "slotSetting": false,
        "value": "[username]"
    },
    {
        "name": "DOCKER_REGISTRY_SERVER_PASSWORD",
        "slotSetting": false,
        "value": null
    },
    {
        "name": "DOCKER_CUSTOM_IMAGE_NAME",
        "value": "DOCKER|[server-name].azurecr.io/package:20190827195524"
    }
    ]
    

Bu noktada işlev uygulaması görüntüyü yüklemeye başlar.

Önemli

Görüntünün yüklenmesi birkaç dakika sürebilir. Azure portal kullanarak ilerleme durumunu izleyebilirsiniz.

HTTP tetikleyicisi Azure İşlevleri test edin

Şimdi Azure İşlevleri HTTP tetikleyicimizi çalıştırıp test edeceğiz.

  1. Azure portal işlev uygulamanıza gidin.
  2. Geliştirici bölümünde Kod + Test'i seçin.
  3. Sağ tarafta Giriş sekmesini seçin.
  4. Azure İşlevleri HTTP tetikleyicisini test etmek için Çalıştır düğmesini seçin.

Azure Machine Learning'den bir modeli Redis için Azure Cache örneği kullanarak işlev uygulaması olarak başarıyla dağıttınız. Aşağıdaki bölümde yer alan bağlantılara giderek Redis için Azure Cache hakkında daha fazla bilgi edinin.

Kaynakları temizleme

Sonraki öğreticiyle devam ediyorsanız, bu hızlı başlangıçta oluşturulan kaynakları tutabilir ve sonraki öğreticide yeniden kullanabilirsiniz.

Aksi takdirde, hızlı başlangıç ile işiniz bittiyse ücret ödememek için bu hızlı başlangıçta oluşturduğunuz Azure kaynaklarını silebilirsiniz.

Önemli

Silinen kaynak grupları geri alınamaz. Kaynak grubunu sildiğinizde, içindeki tüm kaynaklar kalıcı olarak silinir. Yanlış kaynak grubunu veya kaynakları yanlışlıkla silmediğinizden emin olun. Bu örneği tutmak istediğiniz kaynakları içeren mevcut bir kaynak grubunda barındırmak için kaynakları oluşturduysanız, kaynak grubunu silmek yerine sol taraftaki her kaynağı tek tek silebilirsiniz.

Kaynak grubunu silmek için

  1. Azure portalında oturum açın ve Kaynak grupları’nı seçin.

  2. Ada göre filtrele... kutusuna kaynak grubunuzun adını girin. Sonuç listesindeki kaynak grubunuzda ... düğmesini ve sonra Kaynak grubunu sil’i seçin.

Kaynak grubunun silinmesini onaylamanız istenir. Onaylamak için kaynak grubunuzun adını yazın ve ardından Sil’i seçin.

Birkaç dakika sonra kaynak grubu ve bu gruptaki kaynakların tümü silinir.

Sonraki adımlar