Aracılığıyla paylaş


Model paketleri oluşturma (önizleme)

Model paketi, Azure Machine Learning'de bir makine öğrenmesi modelini sunum platformuna dağıtmak için gereken tüm bağımlılıkları toplamanıza olanak tanıyan bir özelliktir. Modelleri dağıtmadan önce paket oluşturmak güçlü ve güvenilir bir dağıtım ve daha verimli bir MLOps iş akışı sağlar. Paketler çalışma alanları arasında ve hatta Azure Machine Learning'in dışına taşınabilir.

Önemli

Bu özellik şu anda genel önizlemededir. Bu önizleme sürümü hizmet düzeyi sözleşmesi olmadan sağlanır ve üretim iş yükleri için bu sürümü önermeyiz. Bazı özellikler desteklenmiyor olabileceği gibi özellikleri sınırlandırılmış da olabilir.

Daha fazla bilgi için bkz. Microsoft Azure Önizlemeleri Ek Kullanım Koşulları.

Bu makalede, bir modeli dağıtım için paketlemeyi öğreneceksiniz.

Önkoşullar

Bu makaledeki adımları takip etmeden önce aşağıdaki önkoşullara sahip olduğunuzdan emin olun:

  • Azure aboneliği. Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun. Azure Machine Learning'in ücretsiz veya ücretli sürümünü deneyin.

  • Azure Machine Learning çalışma alanı. Yoksa, oluşturmak için Çalışma alanlarınıyönetme makalesindeki adımları kullanın.

  • Azure Machine Learning’deki işlemlere erişim vermek için Azure rol tabanlı erişim denetimleri (Azure RBAC) kullanılır. Bu makaledeki adımları gerçekleştirmek için kullanıcı hesabınıza Azure Machine Learning çalışma alanı için sahip veya katkıda bulunan rolü ya da özel bir rol atanmalıdır. Daha fazla bilgi için bkz . Azure Machine Learning çalışma alanına erişimi yönetme.

Bu örnek hakkında

Bu örnekte, Azure Machine Learning'de modelleri paketlemeyi öğreneceksiniz.

Depoyu kopyalama

Bu makaledeki örnek, azureml-examples deposunda yer alan kod örneklerini temel alır. YAML ve diğer dosyaları kopyalamak/yapıştırmak zorunda kalmadan komutları yerel olarak çalıştırmak için önce depoyu kopyalayın ve ardından dizinleri klasöre değiştirin:

git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli

Bu bölümde, klasör uç noktaları/çevrimiçi/deploy-packages/custom-model içindeki örnek kullanılır.

Çalışma alanınıza bağlanma

çalışmanızı gerçekleştireceğiniz Azure Machine Learning çalışma alanına Bağlan.

az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>

Model paketleme

Paketleme işleminin nasıl yapıldığını denetlemenize olanak sağlamak için model paketlerini açıkça oluşturabilirsiniz. Şu durumlarda bu iş akışını kullanın:

  • Model paketinin oluşturulma biçimini özelleştirmek istiyorsunuz.
  • Model paketini Azure Machine Learning'in dışında dağıtmak istiyorsunuz.
  • Model paketlerini mlOps iş akışında kullanmak istiyorsunuz.

Şunları belirterek model paketleri oluşturabilirsiniz:

  • Paketlenebilen model: Her model paketi yalnızca tek bir model içerebilir. Azure Machine Learning, aynı model paketi altında birden çok modelin paketlenmesine destek vermez.
  • Temel ortam: Ortamlar temel görüntüyü göstermek için kullanılır ve Python paketlerinde modelinizin ihtiyaç duyduğu bağımlılıklar. MLflow modelleri için Azure Machine Learning, temel ortamı otomatik olarak oluşturur. Özel modeller için bunu belirtmeniz gerekir.
  • Teknoloji sunma: Modeli çalıştırmak için kullanılan çıkarım yığını.

Modeli kaydedin

Model paketleri, modelin çalışma alanınıza veya Azure Machine Learning kayıt defterine kaydedilmesini gerektirir. Bu örnekte, depoda modelin yerel bir kopyası zaten var, bu nedenle modeli yalnızca çalışma alanında kayıt defterinde yayımlamanız gerekir. Dağıtmaya çalıştığınız model zaten kayıtlıysa bu bölümü atlayabilirsiniz.

MODEL_NAME='sklearn-regression'
MODEL_PATH='model'
az ml model create --name $MODEL_NAME --path $MODEL_PATH --type custom_model

Temel ortamı oluşturma

Temel ortamlar, temel görüntüyü ve model Python paketi bağımlılıklarını belirtmek için kullanılır. Modelimiz conda dosyasında gösterildiği gibi aşağıdaki paketlerin kullanılmasını gerektirir:

conda.yaml

name: model-env
channels:
  - conda-forge
dependencies:
  - python=3.9
  - numpy=1.23.5
  - pip=23.0.1
  - scikit-learn=1.2.2
  - scipy=1.10.1
  - xgboost==1.3.3

Not

Temel ortamın, çevrimiçi ve toplu iş uç noktalarına model dağıtımı için kullandığınız ortamdan farkı nedir? Modelleri uç noktalara dağıttığınızda ortamınızın modelin bağımlılıklarını ve yönetilen çevrimiçi uç noktaların çalışması için gereken Python paketlerini içermesi gerekir. Bu, modelinizin gereksinimlerini hizmet sunma platformunun gereksinimleriyle birleştirmeniz gereken el ile bir süreç getirir. Öte yandan, çıkarım sunucusu için gerekli paketler paketleme zamanında model paketine otomatik olarak eklendiği için model paketlerinin kullanılması bu uyuşmaları ortadan kaldırır.

Ortamı aşağıdaki gibi oluşturun:

Ortam tanımı oluşturma:

sklearn-regression-env.yml

$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
name: sklearn-regression-env
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04
conda_file: conda.yaml
description: An environment for models built with XGBoost and Scikit-learn.

Ardından ortamı oluşturun:

az ml environment create -f environment/sklearn-regression-env.yml

Paket belirtimi oluşturma

Azure CLI veya Python için Azure Machine Learning SDK'sını kullanarak Azure Machine Learning'de model paketleri oluşturabilirsiniz. Özel paket belirtimi aşağıdaki öznitelikleri destekler:

Öznitelik Type Açıklama Gerekli
target_environment str Oluşturulacak paketin adı. Paket işleminin sonucu, Azure Machine Learning'deki bir ortamdır. Yes
base_environment_source object Modelin bağımlılıklarının belirtildiği paketi oluşturmak için kullanılacak temel görüntü. Evet, model MLflow değilse.
base_environment_source.type str Temel görüntünün türü. Temel görüntü desteklendiğinden (type: environment_asset) yalnızca başka bir ortam kullanılması desteklenir.
base_environment_source.resource_id str Kullanılacak temel ortamın kaynak kimliği. Biçim azureml:<name>:<version> veya uzun bir kaynak kimliği kullanın.
inferencing_server object Kullanılacak çıkarım sunucusu. Yes
inferencing_server.type azureml_online
custom
Azure Machine Learning çıkarım sunucusu için veya TensorFlow sunma veya custom Torch Service gibi özel bir çevrimiçi sunucu için kullanınazureml_online. Yes
inferencing_server.code_configuration object Çıkarım yordamıyla kod yapılandırması. ve runyöntemlerini init içeren en az bir Python dosyası içermelidir. Evet, model MLflow değilse.
model_configuration object Model yapılandırması. Modelin sonuçta elde edilen görüntüde nasıl paketlenmiş olduğunu denetlemek için bu özniteliği kullanın. Hayır
model_configuration.mode download
copy
Modelin pakete nasıl yerleştirileceğini belirtin. Olası değerler (varsayılan) ve copy'tir download . Modelin dağıtım zamanında model kayıt defterinden indirilmesi istediğinizde kullanın download . Model buna dahil edilmediğinden bu seçenek daha küçük docker görüntüleri oluşturur. Görüntünün Azure Machine Learning bağlantısını kesmek istediğinizde kullanın copy . Model, paket zamanında docker görüntüsünün içine kopyalanır. copy özel bağlantı etkinleştirilmiş çalışma alanlarında desteklenmez. Hayır
  1. Aşağıdaki gibi bir paket belirtimi oluşturun:

    package-moe.yml

    $schema: http://azureml/sdk-2-0/ModelVersionPackage.json
    base_environment_source:
        type: environment_asset
        resource_id: azureml:sklearn-regression-env:1
    target_environment: sklearn-regression-online-pkg
    inferencing_server: 
        type: azureml_online
        code_configuration:
          code: src
          scoring_script: score.py
    
  2. Model paketi işlemini başlatın:

    az ml model package -n $MODEL_NAME -v $MODEL_VERSION --file package-moe.yml
    
  3. Paket işleminin sonucu bir ortamdır.

Özel Python akışlarında bağımlılıkları olan bir modeli paketleme

Model paketleri, özel akışlarda kullanılabilen Python bağımlılıklarını çözebilir. Bu özelliği kullanmak için çalışma alanınızdan akışa bir bağlantı oluşturmanız ve PAT belirteci yapılandırmasını belirtmeniz gerekir. Aşağıdaki Python kodu, paket işlemini çalıştırdığınız çalışma alanını nasıl yapılandırabileceğinizi gösterir.

from azure.ai.ml.entities import WorkspaceConnection
from azure.ai.ml.entities import PatTokenConfiguration

# fetching secrets from env var to secure access, these secrets can be set outside or source code
git_pat = os.environ["GIT_PAT"]

credentials = PatTokenConfiguration(pat=git_pat)

ws_connection = WorkspaceConnection(
    name="<workspace_connection_name>",
    target="<git_url>",
    type="git",
    credentials=credentials,
)

ml_client.connections.create_or_update(ws_connection)

Bağlantı oluşturulduktan sonra Model paketleme bölümünde açıklandığı gibi model paketini oluşturun. Aşağıdaki örnekte, paketin temel ortamı , aşağıdaki conda dosyasında belirtildiği gibi Python bağımlılığı bariçin özel bir akış kullanır:

conda.yml

name: foo
channels:
  - defaults
dependencies:
  - python
  - pip
  - pip:
    - --extra-index-url <python_feed_url>
    - bar

MLflow modeli kullanıyorsanız model bağımlılıkları modelin kendi içinde belirtilir ve bu nedenle temel ortam gerekli değildir. Bunun yerine, özel imza, ortam veya örneklerle modelleri günlüğe kaydetme bölümünde açıklandığı gibi modeli günlüğe kaydetme sırasında özel akış bağımlılıklarını belirtin.

Kayıt defterinde barındırılan bir modeli paketleme

Model paketleri, dağıtımdan önce bağımlılıkları toplamak için kullanışlı bir yol sağlar. Ancak modeller kayıt defterlerinde barındırıldığında dağıtım hedefi genellikle başka bir çalışma alanıdır. Bu kurulumda paket oluştururken, model paketinin target_environment oluşturulmasını istediğiniz tam konumu belirtmek için özelliğini kullanın.

Aşağıdaki kod bir kayıt defterinden modelin t5-base paketini oluşturur:

  1. Modelin bulunduğu kayıt defterine ve model paketinin oluşturulmasını istediğiniz çalışma alanına Bağlan:

    az login
    
  2. Paketlemek istediğiniz modele bir başvuru alın. Bu durumda modeli t5-base azureml kayıt defterinden paketleyeceğiz.

    MODEL_NAME="t5-base"
    MODEL_VERSION=$(az ml model show --name $MODEL_NAME --label latest --registry-name azureml | jq .version -r)
    
  3. Bir paket belirtimi yapılandırın. Paketlemek istediğimiz model MLflow olduğundan temel ortam ve puanlama betiği isteğe bağlıdır.

    package.yml

    $schema: http://azureml/sdk-2-0/ModelVersionPackage.json
    target_environment: pkg-t5-base-online
    inferencing_server: 
        type: azureml_online
    
  4. Model paketini oluşturmak için işlemi başlatın:

    az ml model package --name $MODEL_NAME \
                        --version $MODEL_VERSION \
                        --registry-name azureml \
                        --file package.yml
    
  5. Paket artık hedef çalışma alanında oluşturulur ve dağıtılmaya hazırdır.

Azure Machine Learning dışında dağıtılacak modelleri paketleme

Model paketleri gerekirse Azure Machine Learning dışında dağıtılabilir. Taşınabilirliği garanti etmek için, azure machine learning'deki model kayıt defterinden başvurulmak yerine modelin kendisinin oluşturulan docker görüntüsüne kopyalanmasını sağlamak için copy paketinizdeki model yapılandırmasının modunun olarak ayarlandığından emin olmanız yeterlidir.

Aşağıdaki kod, bir model paketinde yapılandırmayı copy gösterir:

package-external.yml

$schema: http://azureml/sdk-2-0/ModelVersionPackage.json
base_environment_source:
    type: environment_asset
    resource_id: azureml:sklearn-regression-env:1
target_environment: sklearn-regression-docker-pkg
inferencing_server: 
    type: azureml_online
    code_configuration:
      code: src
      scoring_script: score.py
model_configuration:
  mode: copy

Sonraki adım