Aracılığıyla paylaş


Kayıtlı modeli Docker ile paketleme

Bu makalede, kayıtlı bir Azure Machine Learning modelini Docker ile paketleme işlemi gösterilmektedir.

Önkoşullar

Bu makalede, makine öğrenmesi çalışma alanınızda bir modeli eğitmiş ve kaydetmiş olduğunuz varsayılmaktadır. Scikit-learn modelini eğitmeyi ve kaydetmeyi öğrenmek için bu öğreticiyi izleyin.

Paket modelleri

Bazı durumlarda, modeli dağıtmadan bir Docker görüntüsü oluşturmak isteyebilirsiniz. Ya da görüntüyü indirip yerel bir Docker yüklemesinde çalıştırmak isteyebilirsiniz. Hatta görüntüyü oluşturmak, incelemek, değiştirmek ve görüntüyü el ile oluşturmak için kullanılan dosyaları indirmek isteyebilirsiniz.

Model paketleme, bunları yapmanızı sağlar. Modeli bir web hizmeti olarak barındırmak için gereken tüm varlıkları paketler ve tam olarak derlenmiş bir Docker görüntüsünü veya kendiniz derlemeniz için gereken dosyaları indirmenize olanak tanır. Model paketlemeyi kullanmanın iki yolu vardır:

Paketlenmiş modeli indirme: Modeli ve web hizmeti olarak barındırmak için gereken diğer dosyaları içeren bir Docker görüntüsü indirin.

Dockerfile oluşturma: Docker görüntüsü oluşturmak için gereken Dockerfile, model, giriş betiği ve diğer varlıkları indirin. Ardından, görüntüyü yerel olarak derlemeden önce dosyaları inceleyebilir veya değişiklik yapabilirsiniz.

Her iki paket de yerel bir Docker görüntüsü almak için kullanılabilir.

İpucu

Paket oluşturmak, modeli dağıtmaya benzer. Kayıtlı bir model ve bir çıkarım yapılandırması kullanırsınız.

Önemli

Tam olarak oluşturulmuş bir görüntüyü indirmek veya yerel olarak bir görüntü oluşturmak için geliştirme ortamınızda Docker'ın yüklü olması gerekir.

Paketlenmiş modeli indirme

Aşağıdaki örnek, çalışma alanınız için Azure kapsayıcı kayıt defterine kayıtlı bir görüntü oluşturur:

package = Model.package(ws, [model], inference_config)
package.wait_for_creation(show_output=True)

Bir paket oluşturduktan sonra, görüntüyü yerel Docker ortamınıza çekmek için kullanabilirsiniz package.pull() . Bu komutun çıktısı görüntünün adını görüntüler. Örneğin:

Status: Downloaded newer image for myworkspacef78fd10.azurecr.io/package:20190822181338.

Modeli indirdikten sonra komutunu kullanarak docker images yerel görüntüleri listeleyin:

REPOSITORY                               TAG                 IMAGE ID            CREATED             SIZE
myworkspacef78fd10.azurecr.io/package    20190822181338      7ff48015d5bd        4 minutes ago       1.43 GB

Bu görüntüyü temel alan bir yerel kapsayıcı başlatmak için aşağıdaki komutu kullanarak kabuktan veya komut satırından adlandırılmış bir kapsayıcı başlatın. <imageid> değerini komutu tarafından döndürülen görüntü kimliğiyle docker images değiştirin.

docker run -p 6789:5001 --name mycontainer <imageid>

Bu komut görüntünün adlı myimageen son sürümünü başlatır. Yerel bağlantı noktası 6789'u web hizmetinin dinlediği kapsayıcıdaki bağlantı noktasına eşler (5001). Ayrıca adı kapsayıcıya atar mycontainer ve bu da kapsayıcının durdurulmasını kolaylaştırır. Kapsayıcı başlatıldıktan sonra istekleri adresine http://localhost:6789/scoregönderebilirsiniz.

Dockerfile ve bağımlılıkları oluşturma

Aşağıdaki örnekte, yerel olarak görüntü oluşturmak için gereken Dockerfile, model ve diğer varlıkların nasıl indirilmesi gösterilmektedir. generate_dockerfile=True parametresi, tam olarak oluşturulmuş bir görüntü değil, dosyaları istediğinizi gösterir.

package = Model.package(ws, [model], inference_config, generate_dockerfile=True)
package.wait_for_creation(show_output=True)
# Download the package.
package.save("./imagefiles")
# Get the Azure container registry that the model/Dockerfile uses.
acr=package.get_container_registry()
print("Address:", acr.address)
print("Username:", acr.username)
print("Password:", acr.password)

Bu kod, görüntüyü imagefiles dizine oluşturmak için gereken dosyaları indirir. Kaydedilen dosyalara dahil edilen Dockerfile, Azure kapsayıcı kayıt defterinde depolanan temel görüntüye başvurur. Görüntüyü yerel Docker yüklemenizde oluştururken kayıt defterinde kimlik doğrulaması yapmak için adresi, kullanıcı adını ve parolayı kullanmanız gerekir. Yerel docker yüklemesini kullanarak görüntüyü derlemek için aşağıdaki adımları kullanın:

  1. Bir kabuk veya komut satırı oturumunda, Azure kapsayıcı kayıt defteriyle Docker'ın kimliğini doğrulamak için aşağıdaki komutu kullanın. , ve <password> değerlerini tarafından package.get_container_registry()alınan değerlerle değiştirin<address>. <username>

    docker login <address> -u <username> -p <password>
    
  2. Görüntüyü oluşturmak için aşağıdaki komutu kullanın. değerini, dosyaların kaydedildiği package.save() dizinin yoluyla değiştirin<imagefiles>.

    docker build --tag myimage <imagefiles>
    

    Bu komut, görüntü adını olarak myimageayarlar.

Görüntünün derlendiğini doğrulamak için komutunu kullanın docker images . Resmi listede görmeniz myimage gerekir:

REPOSITORY      TAG                 IMAGE ID            CREATED             SIZE
<none>          <none>              2d5ee0bf3b3b        49 seconds ago      1.43 GB
myimage         latest              739f22498d64        3 minutes ago       1.43 GB

Bu görüntüyü temel alan yeni bir kapsayıcı başlatmak için aşağıdaki komutu kullanın:

docker run -p 6789:5001 --name mycontainer myimage:latest

Bu komut görüntünün adlı myimageen son sürümünü başlatır. Yerel bağlantı noktası 6789'u web hizmetinin dinlediği kapsayıcıdaki bağlantı noktasına eşler (5001). Ayrıca adı kapsayıcıya atar mycontainer ve bu da kapsayıcının durdurulmasını kolaylaştırır. Kapsayıcı başlatıldıktan sonra istekleri adresine http://localhost:6789/scoregönderebilirsiniz.

Yerel kapsayıcıyı test etmek için örnek istemci

Aşağıdaki kod, kapsayıcıyla kullanılabilecek bir Python istemcisi örneğidir:

import requests
import json

# URL for the web service.
scoring_uri = 'http://localhost:6789/score'

# Two sets of data to score, so we get two results back.
data = {"data":
        [
            [ 1,2,3,4,5,6,7,8,9,10 ],
            [ 10,9,8,7,6,5,4,3,2,1 ]
        ]
        }
# Convert to JSON string.
input_data = json.dumps(data)

# Set the content type.
headers = {'Content-Type': 'application/json'}

# Make the request and display the response.
resp = requests.post(scoring_uri, input_data, headers=headers)
print(resp.text)

Diğer programlama dillerindeki istemciler için bkz. Web hizmetleri olarak dağıtılan modelleri kullanma.

Docker kapsayıcısını durdurma

Kapsayıcıyı durdurmak için aşağıdaki komutu farklı bir kabuktan veya komut satırından kullanın:

docker kill mycontainer

Sonraki adımlar