Bagikan melalui


Menyebarkan model pembelajaran mesin ke Azure Functions dengan Azure Cache for Redis

Dalam artikel ini, Anda menyebarkan model dari Azure Machine Learning sebagai aplikasi fungsi di Azure Functions menggunakan instans Azure Cache for Redis.

Azure Cache for Redis berkinerja dan dapat diskalakan. Ketika dipasangkan dengan model Azure Machine Learning, Anda mendapatkan latensi rendah dan throughput tinggi dalam Aplikasi Anda. Beberapa skenario di mana cache bermanfaat: ketika melakukan inferensi data dan untuk hasil inferensi model yang aktual. Dalam kedua skenario, data meta atau hasil disimpan dalam memori, yang mengarah pada peningkatan performa.

Catatan

Meskipun Azure Machine Learning dan Azure Functions umumnya tersedia, kemampuan untuk mengemas model dari layanan Machine Learning for Functions ada dalam pratinjau.

Prasyarat

Penting

Cuplikan kode dalam artikel ini mengasumsikan bahwa Anda telah menyetel variabel berikut:

  • ws - Ruang kerja Azure Machine Learning Anda.
  • model - Model terdaftar yang akan disebarkan.
  • inference_config - Konfigurasi inferensi untuk model.

Untuk informasi selengkapnya tentang menyetel variabel ini, lihat Menyebarkan model dengan Azure Machine Learning.

Membuat instans Azure Cache for Redis

Anda akan dapat menyebarkan model pembelajaran mesin ke Azure Functions dengan instans cache Basic, Standard, atau Premium apa pun. Untuk membuat instans cache, ikuti langkah-langkah ini.

  1. Kembali ke beranda portal Azure atau buka menu bar samping, lalu pilih Buat sumber daya.

  2. Di halaman Baru, pilih Database, lalu pilih Azure Cache for Redis.

    Pilih Azure Cache for Redis.

  3. Pada halaman Cache Redis Baru, konfigurasikan pengaturan untuk cache baru Anda.

    Pengaturan Nilai yang disarankan Deskripsi
    Nama DNS Masukkan nama yang unik secara global. Nama cache harus merupakan string antara 1 dan 63 karakter. String hanya dapat berisi angka, huruf, atau tanda hubung. Nama harus dimulai dan diakhiri dengan angka atau huruf, dan tidak boleh berisi tanda hubung berturut-turut. Nama host instans cache Anda akan menjadi <nama DNS>.redis.cache.windows.net.
    Langganan Buka menu drop-down dan pilih langganan Anda. Langganan untuk membuat instans Azure Cache for Redis baru ini.
    Grup sumber daya Buka drop down dan pilih grup sumber daya, atau pilih Buat baru dan masukkan nama grup sumber daya baru. Nama untuk grup sumber daya tempat membuat cache dan sumber daya lainnya. Dengan menyatukan semua sumber daya aplikasi dalam satu grup sumber daya, Anda dapat dengan mudah mengelola atau menghapusnya sekaligus.
    Location Buka drop down dan pilih lokasi. Pilih wilayah di dekat layanan lain yang akan menggunakan cache Anda.
    Tingkat harga Buka drop down dan pilih Tingkat harga. Tingkat harga menentukan ukuran, performa, dan fitur yang tersedia untuk cache tersebut. Untuk informasi selengkapnya, lihat Gambaran Umum Azure Cache for Redis.
  4. Pilih tab Jaringan atau pilih tombol Jaringan di bagian bawah halaman.

  5. Di tab Jaringan, pilih metode konektivitas Anda.

  6. Pilih tab Berikutnya: Tingkat Lanjut atau pilih tombol Berikutnya: Tingkat Lanjut di bagian bawah halaman.

  7. Di tab Tingkat Lanjut untuk instans cache dasar atau standar, pilih tombol aktifkan jika Anda ingin mengaktifkan port non-TLS.

  8. Di tab Tingkat Lanjut untuk instans cache premium, konfigurasikan pengaturan untuk port non-TLS, pengklusteran, dan persistensi data.

  9. Pilih tab Berikutnya: Tag atau pilih tombol Berikutnya: Tag di bagian bawah halaman.

  10. Secara opsional, di tab Tag, masukkan nama dan nilai jika Anda ingin mengategorikan sumber daya.

  11. Pilih Tinjau + buat. Anda dibawa ke tab Tinjau + buat tempat Azure memvalidasi konfigurasi Anda.

  12. Setelah pesan lulus Validasi warna hijau muncul, pilih Buat.

Perlu waktu beberapa saat agar cache dibuat. Anda dapat memantau kemajuan di halaman Gambaran Umum Azure Cache for Redis. Ketika Status muncul sebagai Sedang Berjalan, cache siap digunakan.

Bersiap untuk penyebaran

Sebelum menyebarkan, Anda harus menentukan apa yang diperlukan untuk menjalankan model sebagai layanan web. Daftar berikut ini menjelaskan item inti yang diperlukan untuk penyebaran:

  • Skrip entri. Skrip ini menerima permintaan, menilai permintaan menggunakan model, dan mengembalikan hasilnya.

    Penting

    Skrip entri khusus untuk model Anda; itu harus memahami format data permintaan yang masuk, format data yang diharapkan oleh model Anda, dan format data yang dikembalikan ke klien.

    Jika data permintaan dalam format yang tidak dapat digunakan oleh model Anda, skrip dapat mengubahnya menjadi format yang dapat diterima. Ia juga dapat mengubah respons sebelum mengembalikannya ke klien.

    Secara default saat pengemasan untuk fungsi, input diperlakukan sebagai teks. Jika Anda tertarik untuk menggunakan byte mentah input (misalnya untuk pemicu Blob), Anda harus menggunakan AMLRequest untuk menerima data mentah.

Untuk fungsi jalankan, pastikan tersambung ke sebuah titik akhir Redis.

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

Untuk informasi selengkapnya tentang skrip entri, lihat Menentukan kode penskoran.

  • Dependensi, seperti skrip pembantu atau paket Python/Conda yang diperlukan untuk menjalankan skrip atau model entri

Entitas ini dienkapsulasi ke dalam konfigurasi inferensi. Konfigurasi inferensi mereferensikan skrip entri dan dependensi lainnya.

Penting

Saat membuat konfigurasi inferensi untuk digunakan dengan Azure Functions, Anda harus menggunakan objek Lingkungan. Harap perhatikan bahwa jika Anda mendefinisikan lingkungan khusus, Anda harus menambahkan azureml-defaults dengan versi >= 1.0.45 sebagai dependensi pip. Paket ini berisi fungsionalitas yang diperlukan untuk meng-host model sebagai layanan web. Contoh berikut menunjukkan pembuatan objek lingkungan dan menggunakannya dengan konfigurasi inferensi:

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)

Untuk informasi selengkapnya tentang lingkungan, lihat Membuat dan mengelola lingkungan untuk pelatihan dan penyebaran.

Untuk informasi selengkapnya tentang konfigurasi inferensi, lihat Menyebarkan model dengan Azure Machine Learning.

Penting

Saat menyebarkan ke Functions, Anda tidak perlu membuat konfigurasi penyebaran.

Menginstal paket pratinjau SDK untuk dukungan Functions

Untuk membuat paket untuk Azure Functions, Anda harus memasang paket pratinjau SDK.

pip install azureml-contrib-functions

Membuat gambar

Untuk membuat gambar Docker yang disebarkan ke Azure Functions, gunakan azureml.contrib.fungsi.paket atau fungsi paket tertentu untuk pemicu yang ingin Anda gunakan. Cuplikan kode berikut menunjukkan cara membuat paket baru dengan pemicu HTTP dari model dan konfigurasi inferensi:

Catatan

Cuplikan kode mengasumsikan bahwa model berisi model terdaftar, dan inference_config berisi konfigurasi untuk lingkungan inferensi. Untuk informasi selengkapnya, lihat Menyebarkan model dengan Azure Machine Learning.

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)

Saat show_output=True, output dari proses build Docker ditampilkan. Setelah proses selesai, gambar telah dibuat di Azure Container Registry untuk ruang kerja Anda. Setelah gambar dibuat, lokasi di Azure Container Registry Anda akan ditampilkan. Lokasi yang ditampilkan dalam format <acrinstance>.azurecr.io/package@sha256:<imagename>.

Catatan

Pemaketan untuk Fungsi saat ini mendukung Pemicu HTTP, pemicu Blob, dan pemicu bus Layanan. Untuk informasi selengkapnya tentang pemicu, lihat Pengikatan Azure Functions.

Penting

Simpan informasi lokasi, seperti yang digunakan saat menyebarkan gambar.

Sebarkan gambar sebagai aplikasi web

  1. Gunakan perintah berikut untuk mendapatkan kredensial masuk untuk Azure Container Registry yang berisi gambar. Ganti <myacr> dengan nilai yang ditampilkan sebelumnya dari package.location:

    az acr credential show --name <myacr>
    

    Output dari perintah ini mirip dengan dokumen JSON berikut:

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

    Simpan nilai untuk nama pengguna dan salah satu kata sandi.

  2. Jika Anda belum memiliki grup sumber daya atau paket layanan aplikasi untuk menyebarkan layanan, perintah berikut menunjukkan cara membuat keduanya:

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

    Dalam contoh ini, tingkat harga dasar Linux (--sku B1) digunakan.

    Penting

    Gambar yang dibuat oleh Azure Machine Learning menggunakan Linux, jadi Anda harus menggunakan parameter --is-linux.

  3. Buat akun penyimpanan yang akan digunakan untuk penyimpanan pekerjaan web dan dapatkan string koneksinya. Ganti <webjobStorage> dengan nama yang ingin Anda gunakan.

    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. Untuk membuat aplikasi fungsi, gunakan perintah berikut. Ganti <app-name> dengan nama yang ingin Anda gunakan. Ganti <acrinstance> dan <imagename> dengan nilai dari package.location yang ditampilkan sebelumnya. Ganti <webjobStorage> dengan nama akun penyimpanan dari langkah sebelumnya:

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

    Penting

    Pada titik ini, aplikasi fungsi telah dibuat. Namun, karena Anda belum memberikan string koneksi untuk pemicu HTTP atau kredensial ke Azure Container Registry yang mengandung gambar, aplikasi fungsi tidak aktif. Pada langkah berikutnya, Anda menyediakan string koneksi dan informasi autentikasi untuk registri kontainer.

  5. Untuk memberi aplikasi fungsi info masuk yang diperlukan untuk mengakses registri kontainer, gunakan perintah berikut. Ganti <app-name> dengan nama aplikasi fungsi. Ganti <acrinstance> dan <imagetag> dengan nilai dari panggilan AZ CLI pada langkah sebelumnya. Ganti <username> dan <password> dengan informasi masuk ACR yang diambil sebelumnya:

    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>
    

    Perintah ini mengembalikan informasi yang mirip dengan dokumen JSON berikut:

    [
    {
        "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"
    }
    ]
    

Pada titik ini, aplikasi fungsi mulai memuat gambar.

Penting

Mungkin diperlukan waktu beberapa menit sebelum gambar dimuat. Anda dapat memantau kemajuan menggunakan portal Azure.

Menguji pemicu HTTP Azure Functions

Sekarang kami akan menjalankan dan menguji pemicu HTTP Azure Functions kami.

  1. Buka aplikasi fungsi Anda di portal Azure.
  2. Pada pengembang, pilih Kode + Uji.
  3. Di sisi kanan, pilih tab Input.
  4. Pilih tombol Jalankan untuk menguji pemicu HTTP Azure Functions.

Kini Anda telah berhasil menerapkan model dari Azure Machine Learning sebagai aplikasi fungsi menggunakan instans Azure Cache for Redis. Pelajari selengkapnya tentang Azure Cache for Redis dengan membuka tautan di bagian di bawah ini.

Membersihkan sumber daya

Jika Anda melanjutkan ke tutorial berikutnya, Anda dapat menyimpan sumber daya yang Anda buat dalam mulai cepat ini dan menggunakannya kembali.

Atau, jika Anda sudah selesai dengan mulai cepat, Anda dapat menghapus sumber daya Azure yang Anda buat dalam mulai cepat ini untuk menghindari biaya.

Penting

Penghapusan grup sumber daya tidak bisa dipulihkan. Ketika Anda menghapus grup sumber daya, semua sumber daya di dalamnya dihapus secara permanen. Pastikan Anda tidak salah menghapus grup sumber daya atau sumber daya secara tidak sengaja. Jika Anda membuat sumber daya untuk menghosting sampel ini dalam grup sumber daya yang ada yang berisi sumber daya yang ingin disimpan, Anda dapat menghapus setiap sumber daya satu per satu dari bilahnya, bukan menghapus grup sumber daya.

Untuk menghapus grup sumber daya

  1. Masuk ke portal Azure, lalu pilih Grup sumber daya.

  2. Dalam kotak Filter menurut nama..., ketik nama grup sumber daya Anda. Pada grup sumber daya Anda, di daftar hasil, pilih ..., lalu pilih Hapus grup sumber daya.

Anda akan diminta untuk mengonfirmasi penghapusan grup sumber daya. Ketik nama grup sumber daya Anda lagi untuk mengonfirmasi, lalu pilih Hapus.

Setelah beberapa saat, grup sumber daya dan semua sumber dayanya akan dihapus.

Langkah berikutnya