Azure Machine Learning çıkarımı HTTP sunucusunu kullanarak puanlama betiklerinde hata ayıklama

Azure Machine Learning çıkarımı HTTP sunucusu, puanlama işlevinizi bir HTTP uç noktası olarak kullanıma sunan bir Python paketidir. Flask sunucu kodunu ve bağımlılıklarını tek bir pakete sarmalar. Çıkarım sunucusu, Azure Machine Learning'de bir model dağıtırken kullanılan çıkarım için önceden oluşturulmuş Docker görüntülerine eklenir. Paketi tek başına kullandığınızda, modeli üretim için yerel olarak dağıtabilirsiniz. Ayrıca puanlama (giriş) betiğinizi yerel bir geliştirme ortamında kolayca doğrulayabilirsiniz. Eğer puanlama betiğinde bir sorun varsa, çıkarım sunucusu bir hata mesajı ve hatanın konumunu bildirir.

Sürekli tümleştirme ve dağıtım işlem hattında doğrulama geçitleri oluşturmak için çıkarım sunucusunu da kullanabilirsiniz. Örneğin, çıkarım sunucusunu aday betiğiyle başlatabilir ve test paketini yerel uç noktada çalıştırabilirsiniz.

Bu makale, çıkarım sunucusunu kullanarak yerel olarak hata ayıklamak isteyen geliştiricileri destekler. Bu makalede, çıkarım sunucusunun çevrimiçi uç noktalarla nasıl kullanılacağını göreceksiniz.

Önkoşullar

  • Python 3.10 veya üzeri
  • Anakonda

Çıkarım sunucusu Windows ve Linux tabanlı işletim sistemlerinde çalışır.

Çevrimiçi uç noktalar için yerel hata ayıklama seçeneklerini keşfetme

Buluta dağıtmadan önce uç noktaların hatalarını yerel olarak ayıklayarak, kodunuzda ve yapılandırmanızda hataları erken saatlerde yakalayabilirsiniz. Uç noktalarda yerel olarak hata ayıklamak için aşağıdakiler dahil olmak üzere çeşitli seçenekleriniz vardır:

Aşağıdaki tabloda, her seçeneğin çeşitli hata ayıklama senaryoları için sunduğu desteğe genel bir bakış sağlanır:

Senaryo Çıkarım sunucusu Yerel uç nokta
Docker görüntüsü yeniden derlemesi olmadan yerel Python ortamını güncelleştirme Evet Hayır
Puanlama betiğini güncelleştirme Evet Evet
Dağıtım yapılandırmalarını güncelleştirme (dağıtım, ortam, kod, model) Hayır Evet
Microsoft Visual Studio Code (VS Code) hata ayıklayıcısını tümleştirme Evet Evet

Bu makalede çıkarım sunucusunun nasıl kullanılacağı açıklanmaktadır.

Çıkarım sunucusunu yerel olarak çalıştırdığınızda, dağıtım konteyneri yapılandırmalarıyla ilgilenmeden puanlama betiğinizi hata ayıklamaya odaklayabilirsiniz.

Puanlama betiğinizde yerel olarak hata ayıklama

Puanlama betiğinizde yerel olarak hata ayıklamak için çıkarım sunucusu davranışını test etmek için çeşitli seçenekleriniz vardır:

Aşağıdaki bölümlerde her seçenek hakkında bilgi sağlanır.

Çıkarım sunucusunun davranışını test etmek için örnek puanlama betiği kullanma

  1. Dosyalarınızı tutmak için adlı server_quickstart bir dizin oluşturun:

    mkdir server_quickstart
    cd server_quickstart
    
  2. Paket çakışmalarını önlemek için gibi myenvbir sanal ortam oluşturun ve etkinleştirin:

    python -m venv myenv
    

    Not

    Linux'ta komutunu çalıştırarak source myenv/bin/activate sanal ortamı etkinleştirin.

    Çıkarım sunucusunu test ettikten sonra Komutunu çalıştırarak deactivate Python sanal ortamını devre dışı bırakın.

  3. azureml-inference-server-http paketini Python Paket Dizini (PyPI) akışından kurun.

    python -m pip install azureml-inference-server-http
    
  4. Giriş betiğinizi oluşturun. Aşağıdaki örnek, temel bir giriş betiği oluşturur ve adlı score.pybir dosyaya kaydeder:

    echo -e 'import time\ndef init(): \n\ttime.sleep(1) \n\ndef run(input_data): \n\treturn {"message":"Hello, World!"}' > score.py
    
  5. azmlinfsrv komutunu kullanarak çıkarım sunucusunu başlatın ve score.py dosyasını giriş betiği olarak ayarlayın.

    azmlinfsrv --entry_script score.py
    

    Not

    Çıkarım sunucusu üzerinde 0.0.0.0barındırılır, yani barındırma makinesinin tüm IP adreslerini dinler.

  6. Çıkarım sunucusuna curl puanlama isteği göndermek için yardımcı programını kullanın:

    curl -p 127.0.0.1:5001/score
    

    Çıkarım sunucusu aşağıdaki yanıtı gönderir:

    {"message": "Hello, World!"}
    
  7. Testi bitirdiğinizde çıkarım sunucusunu durdurmak için Ctrl+C'yi seçin.

Puanlama betiği dosyasını değiştirebilirsiniz score.py . Ardından çıkarım sunucusunu yeniden çalıştırmak için komutunu kullanarak azmlinfsrv --entry_script score.py değişikliklerinizi test edebilirsiniz.

VS Code ile tümleştirme

VS Code'da azureml-inference-server-http paketiyle hata ayıklamak için Python uzantısını kullanabilirsiniz. VS Code hata ayıklama için iki mod sunar: başlatma ve ekleme.

İki moddan birini kullanmadan önce aşağıdaki komutu çalıştırarak paketi yükleyin azureml-inference-server-http :

python -m pip install azureml-inference-server-http

Not

Paket çakışmalarını önlemek için çıkarım sunucusunu bir sanal ortama yükleyin. Sanal ortam oluşturmak için yerleşik python -m venv komutunu kullanabilirsiniz.

Başlatma modu

Başlatma modu için VS Code yapılandırma dosyasını ayarlayın ve VS Code launch.json içinde çıkarım sunucusunu başlatın:

  1. VS Code'ı başlatın ve betiği içeren score.py klasörü açın.

  2. VS Code'daki bu çalışma alanı için dosyaya aşağıdaki yapılandırmayı launch.json ekleyin:

    {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Debug score.py",
                "type": "debugpy",
                "request": "launch",
                "module": "azureml_inference_server_http.amlserver",
                "args": [
                    "--entry_script",
                    "score.py"
                ]
            }
        ]
      }
    
  3. VS Code'da Hata Ayıklamayı Çalıştır'ı> seçerek veya F5'i seçerekhata ayıklama oturumunu başlatın.

Bağlantı modu

Ekleme modu için, çıkarım sunucusu işlemine eklemek için Python uzantısıyla VS Code kullanın:

Not

Linux için, önce gdb paketini sudo apt-get install -y gdb komutunu çalıştırarak yükleyin.

  1. VS Code'ı başlatın ve betiği içeren score.py klasörü açın.

  2. VS Code'daki bu çalışma alanı için dosyaya aşağıdaki yapılandırmayı launch.json ekleyin:

    {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Python: Attach using Process ID",
                "type": "debugpy",
                "request": "attach",
                "processId": "${command:pickProcess}",
                "justMyCode": true
            }
        ]
      }
    
  3. Komut penceresinde komutunu çalıştırarak azmlinfsrv --entry_script score.py çıkarım sunucusunu başlatın.

  4. VS Code'da hata ayıklama oturumunu başlatmak için aşağıdaki adımları izleyin:

    1. Çalıştır>Hata Ayıklamayı Başlat'ı seçin veya F5'i seçin.

    2. Komut penceresinde, azmlinfsrv sürecinin işlem kimliğini bulmak için çıkarım sunucusundaki günlükleri arayın.

      Çıkarım sunucusu günlüklerini gösteren komut penceresinin ekran görüntüsü. Bir log deyiminde azmlinfsrv komutunun işlem kimliği vurgulanır.

      azmlinfsrv işleminin kimliğini bulduğunuzdan emin olun, gunicorn işleminin değil.

    3. VS Code hata ayıklayıcısına işlemin kimliğini azmlinfsrv girin.

      VS Code işlem seçicisini görmüyorsanız, çalışma alanının dosyasının processId alanına launch.json işlem kimliğini el ile girin.

Başlatma ve ekleme modları için kesme noktaları ayarlayabilir ve betiğin hatalarını adım adım ayıklayabilirsiniz.

Uçtan uca örnek kullanma

Aşağıdaki yordam, çıkarım sunucusunu Azure Machine Learning örnek deposundaki örnek dosyalarla yerel olarak çalıştırır. Örnek dosyalar bir puanlama betiği, bir model dosyası ve bir ortam dosyası içerir. Bu örnek dosyaların nasıl kullanılacağına ilişkin daha fazla örnek için bkz . Çevrimiçi uç nokta kullanarak makine öğrenmesi modelini dağıtma ve puanlandırma.

  1. Örnek depoyu kopyalayın ve ilgili örnek dosyaları içeren klasöre gidin:

    git clone --depth 1 https://github.com/Azure/azureml-examples
    cd azureml-examples/cli/endpoints/online/model-1/
    
  2. Sanal ortam oluşturmak ve etkinleştirmek için conda kullanın:

    Bu örnekte paket azureml-inference-server-http otomatik olarak yüklenir. Paket, conda.yaml dosyasında listelenen paketin bağımlı kitaplığı azureml-defaults olarak eklenir.

    Önemli

    Paket azureml-defaults , kullanım dışı bırakılan Azure Machine Learning SDK v1'in bir parçasıdır. Yeni projeler için azureml-inference-server-http paketini azureml-defaults kullanmak yerine doğrudan yükleyin.

    # Create the environment from the YAML file.
    conda env create --name model-env -f ./environment/conda.yaml
    # Activate the new environment.
    conda activate model-env
    
  3. Puanlama betiğini gözden geçirin, çevrimiçi puanlama/score.py:

    import os
    import logging
    import json
    import numpy
    import joblib
    
    
    def init():
        """
        This function is called when the container is initialized/started, typically after create/update of the deployment.
        You can write the logic here to perform init operations like caching the model in memory
        """
        global model
        # AZUREML_MODEL_DIR is an environment variable created during deployment.
        # It is the path to the model folder (./azureml-models/$MODEL_NAME/$VERSION)
        # Please provide your model's folder name if there is one
        model_path = os.path.join(
            os.getenv("AZUREML_MODEL_DIR"), "model/sklearn_regression_model.pkl"
        )
        # deserialize the model file back into a sklearn model
        model = joblib.load(model_path)
        logging.info("Init complete")
    
    
    def run(raw_data):
        """
        This function is called for every invocation of the endpoint to perform the actual scoring/prediction.
        In the example we extract the data from the json input and call the scikit-learn model's predict()
        method and return the result back
        """
        logging.info("model 1: request received")
        data = json.loads(raw_data)["data"]
        data = numpy.array(data)
        result = model.predict(data)
        logging.info("Request processed")
        return result.tolist()
    
  4. Puanlama betiğini ve model klasörünün yolunu belirterek çıkarım sunucusunu çalıştırın.

    Dağıtım sırasında değişken, AZUREML_MODEL_DIR model klasörünün yolunu depolamak için tanımlanır. Bu değeri parametresinde model_dir belirtirsiniz. Puanlama betiği çalıştığında, AZUREML_MODEL_DIR değişkeninden değeri alır.

    Bu durumda, geçerli dizin olan ./model_dir değeri olarak kullanın, çünkü puanlama betiği alt dizini model/sklearn_regression_model.pkl olarak belirtmektedir.

    azmlinfsrv --entry_script ./onlinescoring/score.py --model_dir ./
    

    Çıkarım sunucusu başlatıldığında ve puanlama betiğini başarıyla çağırdığında örnek başlangıç günlüğü açılır. Aksi takdirde günlükte hata iletileri gösterilir.

  5. Aşağıdaki adımları uygulayarak puanlama betiğini örnek verilerle test edin:

    1. Başka bir komut penceresi açın ve azmlinfsrv komutunu çalıştırdığınız çalışma dizinine gidin.

    2. Çıkarım sunucusuna örnek bir istek göndermek ve bir puanlama sonucu almak için aşağıdaki curl yardımcı programı kullanın:

      curl --request POST "127.0.0.1:5001/score" --header "Content-Type:application/json" --data @sample-request.json
      

      Puanlama betiğinizde herhangi bir sorun olmadığında, betik puanlama sonucunu döndürür. Sorun oluşursa, puanlama betiğini güncelleştirebilir ve sonra güncelleştirilmiş betiği test etmek için çıkarım sunucusunu yeniden başlatabilirsiniz.

Çıkarım sunucusu yollarını gözden geçirme

Çıkarım sunucusu varsayılan olarak aşağıdaki yollarda 5001 numaralı bağlantı noktasını dinler:

Veri Akışı Adı Rota
Canlılık sondası 127.0.0.1:5001/
Puan 127.0.0.1:5001/score
OpenAPI (swagger) 127.0.0.1:5001/swagger.json

Çıkarım sunucusu parametrelerini gözden geçirme

Çıkarım sunucusu aşağıdaki parametreleri kabul eder:

Parametre Zorunlu Varsayılan Açıklama
entry_script Doğru Yok Puanlama betiğinin göreli veya mutlak yolunu tanımlar
model_dir Yanlış Yok Çıkarım için kullanılan modeli barındıran dizinin göreli veya mutlak yolunu tanımlar
port Yanlış 5001 Çıkarım sunucusunun sunum bağlantı noktasını belirtir
worker_count Yanlış 1 Eşzamanlı istekleri işlemek için çalışan iş parçacığı sayısını sağlar
appinsights_instrumentation_key Yanlış Yok Uygulama Kayıtlarının yayımlandığı Application Insights örneği için araç anahtarını sağlar.
access_control_allow_origins Yanlış Yok Belirtilen çıkış noktaları için çıkış noktaları arası kaynak paylaşımını (CORS) açar; burada birden çok çıkış noktası virgülle (,) ayrılır, örneğin microsoft.com, bing.com

Çıkarım sunucusu istek işleme sürecini keşfetmek

Aşağıdaki adımlar çıkarım sunucusunun azmlinfsrvgelen istekleri nasıl işlediğini gösterir:

  1. Python CLI sarmalayıcısı çıkarım sunucusunun ağ yığınının etrafında yer alır ve çıkarım sunucusunu başlatmak için kullanılır.

  2. İstemci çıkarım sunucusuna bir istek gönderir.

  3. Çıkarım sunucusu, isteği Aşağıdaki Flask çalışan uygulamalarından birine gönderen Web Sunucusu Ağ Geçidi Arabirimi (WSGI) sunucusu aracılığıyla gönderir:

  4. Flask çalışan uygulaması, giriş betiğini ve tüm bağımlılıkları yüklemeyi de içeren isteği işler.

  5. Giriş betiğiniz isteği alır. Giriş betiği, yüklenen modele bir çıkarım çağrısı yapar ve bir yanıt döndürür.

Çıkarım sunucusunun nasıl başlatıldığını ve isteğin bir Flask çalışan uygulamasına ve ardından kullanıcı koduna nasıl aktığını gösteren diyagram.

Çıkarım sunucusu günlüklerini keşfetme

Çıkarım sunucusu testi için günlük verilerini almanın iki yolu vardır:

  • azureml-inference-server-http Paketi yerel olarak çalıştırın ve günlük çıkışını görüntüleyin.
  • Çevrimiçi uç noktaları kullanın ve kapsayıcı günlüklerini görüntüleyin. Çıkarım sunucusunun günlüğü, Azure Machine Learning Çıkarım HTTP sunucusu <sürümü> olarak adlandırılır.

Not

Günlük formatı 0.8.0 sürümünden bu yana değişti. Günlüğünüz beklenenden farklı bir stil kullanıyorsa, azureml-inference-server-http paketini en son sürüme güncelleyin.

Başlangıç günlüklerini görüntüleme

Çıkarım sunucusu başlatıldığında günlükler aşağıdaki ilk sunucu ayarlarını gösterir:

Azure ML Inferencing HTTP server <version>


Server Settings
---------------
Entry Script Name: <entry-script>
Model Directory: <model-directory>
Config File: <configuration-file>
Worker Count: <worker-count>
Worker Timeout (seconds): None
Server Port: <port>
Health Port: <port>
Application Insights Enabled: false
Application Insights Key: <Application-Insights-instrumentation-key>
Inferencing HTTP server version: azmlinfsrv/<version>
CORS for the specified origins: <access-control-allow-origins>
Create dedicated endpoint for health: <health-check-endpoint>


Server Routes
---------------
Liveness Probe: GET   127.0.0.1:<port>/
Score:          POST  127.0.0.1:<port>/score

<logs>

Örneğin, uçtan uca örnek adımları izleyerek çıkarım sunucusunu çalıştırdığınızda, günlükler aşağıdaki bilgileri içerir:

Azure ML Inferencing HTTP server v1.2.2


Server Settings
---------------
Entry Script Name: /home/user-name/azureml-examples/cli/endpoints/online/model-1/onlinescoring/score.py
Model Directory: ./
Config File: None
Worker Count: 1
Worker Timeout (seconds): None
Server Port: 5001
Health Port: 5001
Application Insights Enabled: false
Application Insights Key: None
Inferencing HTTP server version: azmlinfsrv/1.2.2
CORS for the specified origins: None
Create dedicated endpoint for health: None

Server Routes
---------------
Liveness Probe: GET   127.0.0.1:5001/
Score:          POST  127.0.0.1:5001/score

2022-12-24 07:37:53,318 I [32726] gunicorn.error - Starting gunicorn 20.1.0
2022-12-24 07:37:53,319 I [32726] gunicorn.error - Listening at: http://0.0.0.0:5001 (32726)
2022-12-24 07:37:53,319 I [32726] gunicorn.error - Using worker: sync
2022-12-24 07:37:53,322 I [32756] gunicorn.error - Booting worker with pid: 32756
Initializing logger
2022-12-24 07:37:53,779 I [32756] azmlinfsrv - Starting up app insights client
2022-12-24 07:37:54,518 I [32756] azmlinfsrv.user_script - Found user script at /home/user-name/azureml-examples/cli/endpoints/online/model-1/onlinescoring/score.py
2022-12-24 07:37:54,518 I [32756] azmlinfsrv.user_script - run() is not decorated. Server will invoke it with the input in JSON string.
2022-12-24 07:37:54,518 I [32756] azmlinfsrv.user_script - Invoking user's init function
2022-12-24 07:37:55,974 I [32756] azmlinfsrv.user_script - Users's init has completed successfully
2022-12-24 07:37:55,976 I [32756] azmlinfsrv.swagger - Swaggers are prepared for the following versions: [2, 3, 3.1].
2022-12-24 07:37:55,976 I [32756] azmlinfsrv - Scoring timeout is set to 3600000
2022-12-24 07:37:55,976 I [32756] azmlinfsrv - Worker with pid 32756 ready for serving traffic

Günlük veri formatını anlama

Başlatıcı betiği dışındaki çıkarım sunucusundaki tüm günlükler verileri aşağıdaki biçimde sunar:

<UTC-time> <level> [<process-ID>] <logger-name> - <message>

Her girdi aşağıdaki bileşenlerden oluşur:

  • <UTC-time>: Girişin günlüğe girilmiş olduğu saat
  • <level>: Giriş için günlük düzeyinin ilk karakteri ( HATA E için, I BİlGİ için vb.)
  • <process-ID>: Girişle ilişkili işlemin kimliği
  • <logger-name>: Günlük girişiyle ilişkili kaynağın adı
  • <message>: Günlük iletisinin içeriği

Python'da altı düzeyde loglama vardır. Her düzeyin önem derecesine göre atanmış bir sayısal değeri vardır:

Günlük düzeyi Sayısal değer
KRİTİK 50
HATA 40
UYARI 30
BİLGİ 20
Hata Ayıklama 10
NOTSET 0

Çıkarım sunucusu sorunlarını giderme

Aşağıdaki bölümlerde çıkarım sunucusu için temel sorun giderme ipuçları sağlanır. Çevrimiçi uç noktaların sorunlarını gidermek için bkz . Çevrimiçi uç nokta dağıtımı ve puanlama sorunlarını giderme.

Yüklü paketleri denetleme

Yüklü paketlerle ilgili sorunları gidermek için şu adımları izleyin:

  1. Python ortamınız için yüklü paketler ve sürümler hakkında bilgi toplayın.

  2. Ortam dosyanızda, belirtilen Python paketinin azureml-inference-server-http sürümünü denetleyin. Azure Machine Learning çıkarım HTTP sunucusu başlangıç günlüklerinde görüntülenen çıkarım sunucusunun sürümünü denetleyin. İki sürümün eşleşdiğini onaylayın.

    Bazı durumlarda pip bağımlılık çözümleyicisi beklenmeyen paket sürümlerini yükler. Yüklü paketleri ve sürümleri düzeltmek için komutunu çalıştırmanız pip gerekebilir.

  3. Ortamınızda Flask veya bağımlılıkları belirttiyseniz, bu öğeleri kaldırın.

    • Bağımlı paketler arasında flask, jinja2, itsdangerous, werkzeug, markupsafeve bulunur click.
    • Paket flask , çıkarım sunucusu paketinde bağımlılık olarak listelenir. En iyi yaklaşım, çıkarım sunucusunun paketi yüklemesine izin vermektir flask .
    • Çıkarım sunucusu Flask'in yeni sürümlerini destekleyecek şekilde yapılandırıldığında, çıkarım sunucusu paket güncelleştirmelerini kullanıma sunuldukça otomatik olarak alır.

Çıkarım sunucusu sürümünü denetleyin

Sunucu azureml-inference-server-http paketi PyPI'da yayımlanır. PyPI sayfasında değişiklik günlüğü ve paketin tüm sürümleri listelenir.

Erken paket sürümü kullanıyorsanız yapılandırmanızı en son sürüme güncelleştirin. Aşağıdaki tabloda kararlı sürümler, yaygın sorunlar ve önerilen ayarlamalar özetlenmektedir:

Paket sürümü Açıklama Sorun Çözüm
0.4.x 20220601 tarihi veya öncesine ait eğitim görüntülerinde ve 0.1.34 ile 1.43 arasındaki azureml-defaults sürüm paketlerinde paketlenmiştir. En son kararlı sürüm 0.4.13'dür. 0.4.11'den önceki sunucu sürümlerinde, can't import name Markup from jinja2 gibi Flask bağımlılık sorunlarıyla karşılaşabilirsiniz. Mümkünse en son sürüm olan 0.4.13 veya 1.4.x sürümüne yükseltin.
0.6.x Önceki ve 20220516 tarihli veya daha eski çıkarım görüntülerine önceden yüklenmiştir. En son kararlı sürüm 0.6.1'dir. Yok Yok
0.7.x Flask 2'i destekler. En son kararlı sürüm 0.7.7'dir. Yok Yok
0.8.x Güncelleştirilmiş günlük biçimini kullanır. Python 3.6 desteğini sona erdiriyor. Yok Yok
1.0.x Python 3.7 desteğini sona erdiriyor. Yok Yok
1.1.x 2.0 sürümüne pydantic taşır. Yok Yok
1.2.x Python 3.11 desteği ekler. gunicorn sürüm 22.0.0'a güncelleniyor. werkzeug 3.0.3 ve sonraki sürümlere günceller. Yok Yok
1.3.x Python 3.12 desteği ekler. Sürüm 2024.7.4'e yükseltildi certifi . Sürüm 5.0.0'a yükseltildi flask-cors . gunicorn ve pydantic paketlerini yükseltir. Yok Yok
1.4.x Sürüm 3.0.1'e yükseltildi waitress . Python 3.8 desteğini sona erdiriyor. Flask 2.0 yükseltmesinin istek nesne kodunu bozmasını engelleyen uyumluluk katmanını kaldırır. Uyumluluk katmanına bağlıysanız, istek nesnesi kodunuz çalışmayabilir. Puan betiğinizi Flask 2'ye geçirin.

Paket bağımlılıklarını denetleme

Sunucu paketi için azureml-inference-server-http en ilgili bağımlı paketler şunlardır:

  • flask
  • opencensus-ext-azure
  • inference-schema

Python ortamınızda azureml-defaults paketini belirtirseniz, azureml-inference-server-http paketi bağımlı pakettir. Bağımlılık otomatik olarak yüklenir.

İpucu

Python v1 için Azure Machine Learning SDK'sını azureml-defaults kullanıyorsanız ve paketi Python ortamınızda açıkça belirtmezseniz, SDK paketi otomatik olarak ekleyebilir. Ancak, paket sürümü SDK sürümüne göre kilitlenir. Örneğin, SDK sürümü 1.38.0 ise, azureml-defaults==1.38.0 giriş ortamın pip gereksinimlerine eklenir.

Çıkarım sunucusu başlatma sırasında TypeError

Çıkarım sunucusu başlatılırken aşağıdakilerle TypeError karşılaşabilirsiniz:

TypeError: register() takes 3 positional arguments but 4 were given

  File "/var/azureml-server/aml_blueprint.py", line 251, in register

    super(AMLBlueprint, self).register(app, options, first_registration)

TypeError: register() takes 3 positional arguments but 4 were given

Python ortamınızda Flask 2 yüklüyse ancak paket sürümünüz azureml-inference-server-http Flask 2'yi desteklemediğinde bu hata oluşur. Flask 2 desteği azureml-inference-server-http 0.7.0 paketi ve sonraki sürümleri ile azureml-defaults 1.44 paketi ve sonraki sürümlerinde kullanılabilir.

  • Flask 2 paketini bir Azure Machine Learning Docker görüntüsünde kullanmıyorsanız, azureml-inference-server-http veya azureml-defaults paketinin en son sürümünü kullanın.

  • Flask 2 paketini bir Azure Machine Learning Docker görüntüsünde kullanıyorsanız, görüntü derleme sürümünün July 2022 veya daha yeni bir sürüm olduğunu teyit edin.

    Görüntü sürümünü kapsayıcı günlüklerinde bulabilirsiniz. Örneğin, aşağıdaki günlük kayıtlarına bakın:

    2022-08-22T17:05:02,147738763+00:00 | gunicorn/run | AzureML Container Runtime Information
    2022-08-22T17:05:02,161963207+00:00 | gunicorn/run | ###############################################
    2022-08-22T17:05:02,168970479+00:00 | gunicorn/run | 
    2022-08-22T17:05:02,174364834+00:00 | gunicorn/run | 
    2022-08-22T17:05:02,187280665+00:00 | gunicorn/run | AzureML image information: openmpi4.1.0-ubuntu20.04, Materialization Build:20220708.v2
    2022-08-22T17:05:02,188930082+00:00 | gunicorn/run | 
    2022-08-22T17:05:02,190557998+00:00 | gunicorn/run | 
    

    Görüntünün derleme tarihi, notasyonun Materialization Build sonrasında görünür. Yukarıdaki örnekte, görüntü sürümü 20220708, yani 8 Temmuz 2022'dir. Bu örnekteki görüntü Flask 2 ile uyumludur.

    Kapsayıcı günlüğünüzde benzer bir ileti görmüyorsanız, görüntünüz güncel değildir ve güncelleştirilmelidir. İşlem Birleşik Cihaz Mimarisi (CUDA) görüntüsü kullanıyorsanız ve daha yeni bir görüntü bulamıyorsanız, görüntünüzün kullanım dışı bırakılıp kullanılmadığını görmek için AzureML Kapsayıcıları deposuna bakın. Kullanım dışı bırakılan görüntüler için belirlenmiş değiştirmeler bulabilirsiniz.

    Çıkarım sunucusunu çevrimiçi uç noktayla kullanıyorsanız günlükleri Azure Machine Learning Stüdyosu'da da bulabilirsiniz. Uç noktanızın sayfasında Günlükler sekmesini seçin.

SDK v1 ile dağıtım yaparsanız ve dağıtım yapılandırmanızda açıkça bir görüntü belirtmezseniz çıkarım sunucusu paketi yerel SDK araç takımınızla eşleşen bir sürümle uygular openmpi4.1.0-ubuntu20.04 . Ancak, yüklenen sürüm görüntünün kullanılabilir en son sürümü olmayabilir.

SDK sürüm 1.43 için çıkarım sunucusu paket sürümünü varsayılan olarak yükler openmpi4.1.0-ubuntu20.04:20220616 , ancak bu paket sürümü SDK 1.43 ile uyumlu değildir. Dağıtımınız için en son SDK'yi kullandığınızdan emin olun.

Görüntüyü güncelleştiremiyorsanız, ortam dosyanızdaki azureml-defaults==1.43 veya azureml-inference-server-http~=0.4.13 girdilerini sabitleyerek geçici olarak sorunu önleyebilirsiniz. Bu girdiler, çıkarım sunucusunu flask 1.0.x ile eski sürümü yüklemeye yönlendirir.

Çıkarım sunucusu başlatma sırasında ImportError veya ModuleNotFoundError

Çıkarım sunucusu başlatılırken, belirli modüllerde ImportError veya ModuleNotFoundError ile örneğin opencensus, jinja2, markupsafe ya da click karşılaşabilirsiniz. Aşağıdaki örnekte hata iletisi gösterilmektedir:

ImportError: cannot import name 'Markup' from 'jinja2'

Flask bağımlılığını uyumlu bir sürüme sabitlemeyen çıkarım sunucusunun 0.4.10 veya önceki sürümlerini kullandığınızda içeri aktarma ve modül hataları oluşur. Sorunu önlemek için çıkarım sunucusunun daha sonraki bir sürümünü yükleyin.