Aracılığıyla paylaş


Visual Studio Code ile etkileşimli hata ayıklama

ŞUNUN IÇIN GEÇERLIDIR: Python SDK azureml v1

Visual Studio Code (VS Code) ve hata ayıklama kullanarak Azure Machine Learning denemelerinde, işlem hatlarında ve dağıtımlarda etkileşimli olarak hata ayıklamayı öğrenin.

Denemeleri yerel olarak çalıştırma ve hatalarını ayıklama

Makine öğrenmesi denemelerinizi buluta göndermeden önce doğrulamak, çalıştırmak ve hatalarını ayıklamak için Azure Machine Learning uzantısını kullanın.

Önkoşullar

  • Azure Machine Learning VS Code uzantısı (önizleme). Daha fazla bilgi için bkz . Azure Machine Learning VS Code uzantısını ayarlama.

    Önemli

    Azure Machine Learning VS Code uzantısı varsayılan olarak CLI'yi (v2) kullanır. Bu kılavuzdaki yönergelerde 1.0 CLI kullanılmaktadır. 1.0 CLI'ye geçmek için, Visual Studio Code'daki ayarı olarak 1.0ayarlayınazureML.CLI Compatibility Mode. Visual Studio Code'da ayarlarınızı değiştirme hakkında daha fazla bilgi için kullanıcı ve çalışma alanı ayarları belgelerine bakın.

    Ö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ı.

  • Docker

  • Python 3

Denemede yerel olarak hata ayıklama

Önemli

Denemenizi yerel olarak çalıştırmadan önce şundan emin olun:

  • Docker çalışıyor.
  • azureML.CLI Compatibility Mode Visual Studio Code'daki ayar, önkoşullarda belirtildiği gibi olarak ayarlanır 1.0
  1. VS Code'da Azure Machine Learning uzantısı görünümünü açın.

  2. Çalışma alanınızı içeren abonelik düğümünü genişletin. Henüz bir çalışma alanınız yoksa uzantıyı kullanarak bir Azure Machine Learning çalışma alanı oluşturabilirsiniz.

  3. Çalışma alanı düğümünüzü genişletin.

  4. Denemeler düğümüne sağ tıklayın ve Deneme oluştur'u seçin. İstem görüntülendiğinde denemeniz için bir ad belirtin.

  5. Denemeler düğümünü genişletin, çalıştırmak istediğiniz denemeye sağ tıklayın ve Denemeyi Çalıştır'ı seçin.

  6. Seçenekler listesinden Yerel olarak'yı seçin.

  7. Yalnızca Windows'ta ilk kez kullanın. Dosya Paylaşımına izin vermeniz istendiğinde Evet'i seçin. Dosya paylaşımını etkinleştirdiğinizde Docker'ın betiğinizi içeren dizini kapsayıcıya bağlamasına izin verir. Ayrıca Docker'ın çalıştırmanızdaki günlükleri ve çıkışları sisteminizdeki geçici bir dizinde depolamasına da olanak tanır.

  8. Denemenizde hata ayıklamak için Evet'i seçin. Gerekmiyorsa Hayır'ı seçin. Hayır seçildiğinde, hata ayıklayıcıya eklemeden denemeniz yerel olarak çalıştırılır.

  9. Çalıştırma yapılandırmanızı oluşturmak için Yeni Çalıştırma Yapılandırması Oluştur'u seçin. Çalıştırma yapılandırması çalıştırmak istediğiniz betiği, bağımlılıkları ve kullanılan veri kümelerini tanımlar. Alternatif olarak, zaten varsa açılan listeden seçin.

    1. Ortamınızı seçin. Seçilen Azure Machine Learning'den birini seçebilir veya kendiniz oluşturabilirsiniz.
    2. Çalıştırmak istediğiniz betiğin adını belirtin. Yol, VS Code'da açılan dizine göredir.
    3. Azure Machine Learning veri kümesini kullanmak isteyip istemediğinizi seçin. Uzantıyı kullanarak Azure Machine Learning veri kümeleri oluşturabilirsiniz.
    4. Hata ayıklayıcıyı denemenizi çalıştıran kapsayıcıya eklemek için hata ayıklama gereklidir. Hata ayıklamayı bağımlılık olarak eklemek için Hata Ayıklama Ekle'yi seçin. Aksi takdirde Atla'yı seçin. Hata ayıklamayı bağımlılık olarak eklememek, hata ayıklayıcıya eklemeden denemenizi çalıştırır.
    5. Düzenleyicide çalıştırma yapılandırma ayarlarınızı içeren bir yapılandırma dosyası açılır. Ayarlardan memnunsanız Deneme gönder'i seçin. Alternatif olarak, menü çubuğundan komut paletini (Komut Paletini Görüntüle>) açar ve komutu metin kutusuna girersinizAzureML: Submit experiment.
  10. Denemeniz gönderildikten sonra betiğinizi ve çalıştırma yapılandırmanızda belirtilen yapılandırmaları içeren bir Docker görüntüsü oluşturulur.

    Docker görüntüsü derleme işlemi başladığında, dosya içeriğinin 60_control_log.txt içeriği VS Code'da çıkış konsoluna akış yapar.

    Not

    Docker görüntünüzün ilk oluşturulması birkaç dakika sürebilir.

  11. Görüntünüz oluşturulduktan sonra hata ayıklayıcıyı başlatmak için bir istem görüntülenir. Betiğinizde kesme noktalarınızı ayarlayın ve hata ayıklamaya hazır olduğunuzda Hata ayıklayıcıyı başlat'ı seçin. Bunun yapılması, VS Code hata ayıklayıcısını denemenizi çalıştıran kapsayıcıya ekler. Alternatif olarak, Azure Machine Learning uzantısında, geçerli çalıştırmanızın düğümünü üzerine gelin ve hata ayıklayıcıyı başlatmak için yürüt simgesini seçin.

    Önemli

    Tek bir deneme için birden çok hata ayıklama oturumuna sahip olamazsınız. Ancak, birden çok VS Code örneği kullanarak iki veya daha fazla denemede hata ayıklayabilirsiniz.

Bu noktada VS Code kullanarak adım adım ilerleyebilmeli ve kodunuzda hata ayıklayabilmelisiniz.

Herhangi bir noktada çalıştırmanızı iptal etmek istiyorsanız, çalıştırma düğümünüzü sağ tıklatın ve Çalıştırmayı iptal et'i seçin.

Uzak deneme çalıştırmalarına benzer şekilde, günlükleri ve çıkışları incelemek için çalıştırma düğümünüzü genişletebilirsiniz.

İpucu

Ortamınızda tanımlanan bağımlılıkların aynısını kullanan Docker görüntüleri çalıştırmalar arasında yeniden kullanılır. Ancak, yeni veya farklı bir ortam kullanarak bir deneme çalıştırırsanız, yeni bir görüntü oluşturulur. Bu görüntüler yerel depolama alanınıza kaydedildiğinden, eski veya kullanılmayan Docker görüntülerini kaldırmanız önerilir. Sisteminizden görüntü kaldırmak için Docker CLI veya VS Code Docker uzantısını kullanın.

Makine öğrenmesi işlem hatlarında hata ayıklama ve sorun giderme

Bazı durumlarda ML işlem hattınızda kullanılan Python kodunda etkileşimli olarak hata ayıklama işlemi yapmanız gerekebilir. VS Code ve hata ayıklama kullanarak, eğitim ortamında çalışırken koda ekleyebilirsiniz.

Önkoşullar

  • Azure Sanal Ağ kullanmak üzere yapılandırılmış bir Azure Machine Learning çalışma alanı.

  • İşlem hattı adımlarının bir parçası olarak Python betiklerini kullanan bir Azure Machine Learning işlem hattı. Örneğin, PythonScriptStep.

  • Sanal ağda bulunan ve işlem hattı tarafından eğitim için kullanılan bir Azure Machine Learning İşlem kümesi.

  • Sanal ağda bulunan bir geliştirme ortamı. Geliştirme ortamı aşağıdakilerden biri olabilir:

    • Sanal ağda Bir Azure Sanal Makinesi
    • Sanal ağdaki Not Defteri VM'sinin İşlem örneği
    • VPN veya ExpressRoute aracılığıyla sanal ağa özel ağ bağlantısı olan bir istemci makinesi.

Azure Machine Learning ile Azure Sanal Ağ kullanma hakkında daha fazla bilgi için bkz. Sanal ağ yalıtımına ve gizliliğine genel bakış.

İpucu

Sanal ağın arkasında olmayan Azure Machine Learning kaynaklarıyla çalışabilirsiniz ancak sanal ağ kullanmanız önerilir.

Nasıl çalışır?

ML işlem hattı adımlarınızda Python betikleri çalıştırılır. Bu betikler aşağıdaki eylemleri gerçekleştirecek şekilde değiştirilir:

  1. Üzerinde çalıştıkları konağın IP adresini günlüğe kaydetme. Hata ayıklayıcıyı betike bağlamak için IP adresini kullanırsınız.

  2. Hata ayıklama hata ayıklama bileşenini başlatın ve bir hata ayıklayıcının bağlanmasını bekleyin.

  3. Geliştirme ortamınızdan, betiğin çalıştığı IP adresini bulmak için eğitim işlemi tarafından oluşturulan günlükleri izlersiniz.

  4. VS Code'a hata ayıklayıcıyı bir launch.json dosya kullanarak bağlaması için IP adresini söylersiniz.

  5. Hata ayıklayıcısını ekler ve betikte etkileşimli olarak adım adım ilerlersiniz.

Python betiklerini yapılandırma

Hata ayıklamayı etkinleştirmek için ML işlem hattınızdaki adımlar tarafından kullanılan Python betiklerinde aşağıdaki değişiklikleri yapın:

  1. Aşağıdaki içeri aktarma deyimlerini ekleyin:

    import argparse
    import os
    import debugpy
    import socket
    from azureml.core import Run
    
  2. Aşağıdaki bağımsız değişkenleri ekleyin. Bu bağımsız değişkenler hata ayıklayıcıyı gerektiği gibi etkinleştirmenize ve hata ayıklayıcıyı eklemek için zaman aşımını ayarlamanıza olanak tanır:

    parser.add_argument('--remote_debug', action='store_true')
    parser.add_argument('--remote_debug_connection_timeout', type=int,
                        default=300,
                        help=f'Defines how much time the Azure Machine Learning compute target '
                        f'will await a connection from a debugger client (VSCODE).')
    parser.add_argument('--remote_debug_client_ip', type=str,
                        help=f'Defines IP Address of VS Code client')
    parser.add_argument('--remote_debug_port', type=int,
                        default=5678,
                        help=f'Defines Port of VS Code client')
    
  3. Aşağıdaki deyimlerini ekleyin. Bu deyimler, kodun üzerinde çalıştığı düğümün IP adresini günlüğe kaydedebilmeniz için geçerli çalıştırma bağlamını yükler:

    global run
    run = Run.get_context()
    
  4. if Hata ayıklamayı başlatan ve hata ayıklayıcının eklenmesini bekleyen bir deyim ekleyin. Zaman aşımından önce hata ayıklayıcı ekli değilse, betik normal şekilde devam eder. ve PORT değerlerinin HOST listen işlevi kendi işlevinizle değiştirdiğinden emin olun.

    if args.remote_debug:
        print(f'Timeout for debug connection: {args.remote_debug_connection_timeout}')
        # Log the IP and port
        try:
            ip = args.remote_debug_client_ip
        except:
            print("Need to supply IP address for VS Code client")
        print(f'ip_address: {ip}')
        debugpy.listen(address=(ip, args.remote_debug_port))
        # Wait for the timeout for debugger to attach
        debugpy.wait_for_client()
        print(f'Debugger attached = {debugpy.is_client_connected()}')
    

Aşağıdaki Python örneğinde hata ayıklamayı etkinleştiren basit train.py bir dosya gösterilmektedir:

# Copyright (c) Microsoft. All rights reserved.
# Licensed under the MIT license.

import argparse
import os
import debugpy
import socket
from azureml.core import Run

print("In train.py")
print("As a data scientist, this is where I use my training code.")

parser = argparse.ArgumentParser("train")

parser.add_argument("--input_data", type=str, help="input data")
parser.add_argument("--output_train", type=str, help="output_train directory")

# Argument check for remote debugging
parser.add_argument('--remote_debug', action='store_true')
parser.add_argument('--remote_debug_connection_timeout', type=int,
                    default=300,
                    help=f'Defines how much time the Azure Machine Learning compute target '
                    f'will await a connection from a debugger client (VSCODE).')
parser.add_argument('--remote_debug_client_ip', type=str,
                    help=f'Defines IP Address of VS Code client')
parser.add_argument('--remote_debug_port', type=int,
                    default=5678,
                    help=f'Defines Port of VS Code client')

# Get run object, so we can find and log the IP of the host instance
global run
run = Run.get_context()

args = parser.parse_args()

# Start debugger if remote_debug is enabled
if args.remote_debug:
    print(f'Timeout for debug connection: {args.remote_debug_connection_timeout}')
    # Log the IP and port
    ip = socket.gethostbyname(socket.gethostname())
    # try:
    #     ip = args.remote_debug_client_ip
    # except:
    #     print("Need to supply IP address for VS Code client")
    print(f'ip_address: {ip}')
    debugpy.listen(address=(ip, args.remote_debug_port))
    # Wait for the timeout for debugger to attach
    debugpy.wait_for_client()
    print(f'Debugger attached = {debugpy.is_client_connected()}')

print("Argument 1: %s" % args.input_data)
print("Argument 2: %s" % args.output_train)

if not (args.output_train is None):
    os.makedirs(args.output_train, exist_ok=True)
    print("%s created" % args.output_train)

ML işlem hattını yapılandırma

Hata ayıklamayı başlatmak ve çalıştırma bağlamını almak için gereken Python paketlerini sağlamak için bir ortam oluşturun ve ayarlayın pip_packages=['debugpy', 'azureml-sdk==<SDK-VERSION>']. SDK sürümünü kullandığınız sürümle eşleşecek şekilde değiştirin. Aşağıdaki kod parçacığı bir ortamın nasıl oluşturulacağını gösterir:

# Use a RunConfiguration to specify some additional requirements for this step.
from azureml.core.runconfig import RunConfiguration
from azureml.core.conda_dependencies import CondaDependencies
from azureml.core.runconfig import DEFAULT_CPU_IMAGE

# create a new runconfig object
run_config = RunConfiguration()

# enable Docker 
run_config.environment.docker.enabled = True

# set Docker base image to the default CPU-based image
run_config.environment.docker.base_image = DEFAULT_CPU_IMAGE

# use conda_dependencies.yml to create a conda environment in the Docker image for execution
run_config.environment.python.user_managed_dependencies = False

# specify CondaDependencies obj
run_config.environment.python.conda_dependencies = CondaDependencies.create(conda_packages=['scikit-learn'],
                                                                           pip_packages=['debugpy', 'azureml-sdk==<SDK-VERSION>'])

Python betiklerini yapılandırma bölümünde, ML işlem hattı adımlarınız tarafından kullanılan betiklere yeni bağımsız değişkenler eklendi. Aşağıdaki kod parçacığında, bileşende hata ayıklamayı etkinleştirmek ve zaman aşımı ayarlamak için bu bağımsız değişkenlerin nasıl kullanılacağı gösterilmektedir. Ayrıca daha önce oluşturulan ortamın ayarını runconfig=run_configyaparak nasıl kullanılacağını da gösterir:

# Use RunConfig from a pipeline step
step1 = PythonScriptStep(name="train_step",
                         script_name="train.py",
                         arguments=['--remote_debug', '--remote_debug_connection_timeout', 300,'--remote_debug_client_ip','<VS-CODE-CLIENT-IP>','--remote_debug_port',5678],
                         compute_target=aml_compute,
                         source_directory=source_directory,
                         runconfig=run_config,
                         allow_reuse=False)

İşlem hattı çalıştırıldığında, her adım bir alt çalıştırma oluşturur. Hata ayıklama etkinleştirilirse, değiştirilen betik alt çalıştırma için içindeki aşağıdaki metne benzer bilgileri günlüğe 70_driver_log.txt kaydeder:

Timeout for debug connection: 300
ip_address: 10.3.0.5

ip_address Değeri kaydedin. Sonraki bölümde kullanılır.

İpucu

Bu işlem hattı adımı için alt çalıştırmanın çalıştırma günlüklerinden IP adresini de bulabilirsiniz. Bu bilgileri görüntüleme hakkında daha fazla bilgi için bkz . Azure Machine Learning deneme çalıştırmalarını ve ölçümlerini izleme.

Geliştirme ortamını yapılandırma

  1. VS Code geliştirme ortamınıza hata ayıklama yüklemek için aşağıdaki komutu kullanın:

    python -m pip install --upgrade debugpy
    

    VS Code ile hata ayıklama kullanma hakkında daha fazla bilgi için bkz . Uzaktan Hata Ayıklama.

  2. VS Code'u hata ayıklayıcısını çalıştıran Azure Machine Learning işlemiyle iletişim kuracak şekilde yapılandırmak için yeni bir hata ayıklama yapılandırması oluşturun:

    1. VS Code'da Hata Ayıkla menüsünü ve ardından Yapılandırmaları aç'ı seçin. launch.json adlı bir dosya açılır.

    2. launch.json dosyasında, öğesini içeren "configurations": [satırı bulun ve arkasına aşağıdaki metni ekleyin. Girdiyi "host": "<IP-ADDRESS>" , önceki bölümde yer alan günlüklerinizde döndürülen IP adresiyle değiştirin. Girdiyi "localRoot": "${workspaceFolder}/code/step" , hata ayıklanan betiğin bir kopyasını içeren yerel bir dizinle değiştirin:

      {
          "name": "Azure Machine Learning Compute: remote debug",
          "type": "python",
          "request": "attach",
          "port": 5678,
          "host": "<IP-ADDRESS>",
          "redirectOutput": true,
          "pathMappings": [
              {
                  "localRoot": "${workspaceFolder}/code/step1",
                  "remoteRoot": "."
              }
          ]
      }
      

      Önemli

      Yapılandırmalar bölümünde zaten başka girdiler varsa, eklediğiniz kodun arkasına virgül (,) ekleyin.

      İpucu

      Özellikle işlem hatları için en iyi yöntem, betik kaynaklarını ayrı dizinlerde tutmaktır, böylece kod yalnızca adımların her biri için geçerlidir. Bu örnekte localRoot örnek değer başvurur /code/step1.

      Birden çok betikte hata ayıklarsanız, farklı dizinlerde her betik için ayrı bir yapılandırma bölümü oluşturun.

    3. launch.json dosyasını kaydedin.

Hata ayıklayıcıyı bağlama

  1. VS Code'ı açın ve betiğin yerel bir kopyasını açın.

  2. Betiği ekledikten sonra durmasını istediğiniz kesme noktalarını ayarlayın.

  3. Alt işlem betiği çalıştırırken ve Timeout for debug connection günlüklerde görüntülenirken F5 anahtarını kullanın veya Hata Ayıkla'yı seçin. İstendiğinde Azure Machine Learning İşlem: uzaktan hata ayıklama yapılandırması'nı seçin. Hata ayıklama simgesini yan çubuktan, Azure Machine Learning: uzaktan hata ayıklama girdisini Hata Ayıklama açılan menüsünden seçebilir ve ardından hata ayıklayıcıyı eklemek için yeşil oku kullanabilirsiniz.

    Bu noktada VS Code, işlem düğümündeki hata ayıklamaya bağlanır ve daha önce ayarladığınız kesme noktasında durur. Artık kodu çalıştırırken adım adım ilerleyebilir, değişkenleri görüntüleyebilir, vb.

    Not

    Günlükte öğesini belirten Debugger attached = Falsebir girdi görüntüleniyorsa zaman aşımı süresi dolmuştur ve betik hata ayıklayıcı olmadan devam etti. İşlem hattını yeniden gönderin ve hata ayıklayıcısını iletiden Timeout for debug connection sonra ve zaman aşımı süresi dolmadan önce bağlayın.

Dağıtımlarda hata ayıklama ve sorun giderme

Bazı durumlarda, model dağıtımınızda bulunan Python kodunda etkileşimli olarak hata ayıklamanız gerekebilir. Örneğin, giriş betiği başarısız oluyorsa ve neden ek günlük kaydıyla belirlenemiyorsa. VS Code ve hata ayıklamayı kullanarak Docker kapsayıcısının içinde çalışan koda ekleyebilirsiniz.

İpucu

Yönetilen çevrimiçi uç noktaları ve dağıtımları yerel olarak kullanıyorsanız bkz . Visual Studio Code'da yönetilen çevrimiçi uç noktaların hatalarını ayıklama (önizleme).

Önemli

Bir modeli yerel olarak dağıtmak için ve LocalWebservice.deploy_configuration kullanılırken Model.deploy() bu hata ayıklama yöntemi çalışmaz. Bunun yerine Model.package() yöntemini kullanarak bir görüntü oluşturmanız gerekir.

Yerel web hizmeti dağıtımları, yerel sisteminizde çalışan bir Docker yüklemesi gerektirir. Docker'ı kullanma hakkında daha fazla bilgi için Docker Belgeleri'ne bakın. İşlem örnekleriyle çalışırken Docker zaten yüklüdür.

Geliştirme ortamını yapılandırma

  1. Hata ayıklamayı yerel VS Code geliştirme ortamınıza yüklemek için aşağıdaki komutu kullanın:

    python -m pip install --upgrade debugpy
    

    VS Code ile hata ayıklama kullanma hakkında daha fazla bilgi için bkz . Uzaktan Hata Ayıklama.

  2. VS Code'u Docker görüntüsüyle iletişim kuracak şekilde yapılandırmak için yeni bir hata ayıklama yapılandırması oluşturun:

    1. VS Code'da, Uzantıyı çalıştır'daki Hata Ayıkla menüsünü ve ardından Yapılandırmaları aç'ı seçin. launch.json adlı bir dosya açılır.

    2. launch.json dosyasında "configurations" öğesini (öğesini içeren "configurations": [satır) bulun ve arkasına aşağıdaki metni ekleyin.

      {
          "name": "Azure Machine Learning Deployment: Docker Debug",
          "type": "python",
          "request": "attach",
          "connect": {
              "port": 5678,
              "host": "0.0.0.0",
          },
          "pathMappings": [
              {
                  "localRoot": "${workspaceFolder}",
                  "remoteRoot": "/var/azureml-app"
              }
          ]
      }
      

      Eklemeden sonra, launch.json dosyası aşağıdakine benzer olmalıdır:

      {
      // Use IntelliSense to learn about possible attributes.
      // Hover to view descriptions of existing attributes.
      // For more information, visit: https://go.microsoft.com/fwlink/linkid=830387
      "version": "0.2.0",
      "configurations": [
          {
              "name": "Python: Current File",
              "type": "python",
              "request": "launch",
              "program": "${file}",
              "console": "integratedTerminal"
          },
          {
              "name": "Azure Machine Learning Deployment: Docker Debug",
              "type": "python",
              "request": "attach",
              "connect": {
                  "port": 5678,
                  "host": "0.0.0.0"
                  },
              "pathMappings": [
                  {
                      "localRoot": "${workspaceFolder}",
                      "remoteRoot": "/var/azureml-app"
                  }
              ]
          }
          ]
      }
      

      Önemli

      Yapılandırmalar bölümünde zaten başka girdiler varsa, eklediğiniz kodun arkasına virgül ( , ) ekleyin.

      Bu bölüm, 5678 numaralı bağlantı noktasını kullanarak Docker kapsayıcısına eklenir.

    3. launch.json dosyasını kaydedin.

Hata ayıklama içeren bir görüntü oluşturma

  1. Dağıtımınız için conda ortamını hata ayıklamayı da kapsayan şekilde değiştirin. Aşağıdaki örnekte parametresi kullanılarak eklenmesi gösterilmektedir pip_packages :

    from azureml.core.conda_dependencies import CondaDependencies 
    
    
    # Usually a good idea to choose specific version numbers
    # so training is made on same packages as scoring
    myenv = CondaDependencies.create(conda_packages=['numpy==1.15.4',
                                'scikit-learn==0.19.1', 'pandas==0.23.4'],
                                 pip_packages = ['azureml-defaults==1.0.83', 'debugpy'])
    
    with open("myenv.yml","w") as f:
        f.write(myenv.serialize_to_string())
    
  2. Hata ayıklamayı başlatmak ve hizmet başlatıldığında bağlantı olmasını beklemek için, dosyanızın score.py en üstüne aşağıdakileri ekleyin:

    import debugpy
    # Allows other computers to attach to debugpy on this IP address and port.
    debugpy.listen(('0.0.0.0', 5678))
    # Wait 30 seconds for a debugger to attach. If none attaches, the script continues as normal.
    debugpy.wait_for_client()
    print("Debugger attached...")
    
  3. Ortam tanımını temel alan bir görüntü oluşturun ve görüntüyü yerel kayıt defterine çekin.

    Not

    Bu örnekte Azure Machine Learning çalışma alanınıza işaret edildiği ws ve dağıtılan modelin bu model olduğu varsayılır. Dosya, myenv.yml 1. adımda oluşturulan conda bağımlılıklarını içerir.

    from azureml.core.conda_dependencies import CondaDependencies
    from azureml.core.model import InferenceConfig
    from azureml.core.environment import Environment
    
    
    myenv = Environment.from_conda_specification(name="env", file_path="myenv.yml")
    myenv.docker.base_image = None
    myenv.docker.base_dockerfile = "FROM mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:latest"
    inference_config = InferenceConfig(entry_script="score.py", environment=myenv)
    package = Model.package(ws, [model], inference_config)
    package.wait_for_creation(show_output=True)  # Or show_output=False to hide the Docker build logs.
    package.pull()
    

    Görüntü oluşturulup indirildikten sonra (bu işlem 10 dakikadan fazla sürebilir), görüntü yolu (bu örnekte özet olan depo, ad ve etiketi içerir) son olarak aşağıdakine benzer bir iletide görüntülenir:

    Status: Downloaded newer image for myregistry.azurecr.io/package@sha256:<image-digest>
    
  4. Görüntüyle yerel olarak çalışmayı kolaylaştırmak için aşağıdaki komutu kullanarak bu görüntüye bir etiket ekleyebilirsiniz. Aşağıdaki komutta değerini önceki adımdaki konum değeriyle değiştirin myimagepath .

    docker tag myimagepath debug:1
    

    Adımların geri kalanında, tam görüntü debug:1 yolu değeri yerine yerel görüntüye başvurabilirsiniz.

Hizmette hata ayıklama

İpucu

Dosyadaki score.py hata ayıklama bağlantısı için bir zaman aşımı ayarlarsanız, zaman aşımı süresi dolmadan önce VS Code'u hata ayıklama oturumuna bağlamanız gerekir. VS Code'ı başlatın, yerel kopyasını score.pyaçın, bir kesme noktası ayarlayın ve bu bölümdeki adımları kullanmadan önce hazır olmasını sağlayın.

Hata ayıklama ve kesme noktalarını ayarlama hakkında daha fazla bilgi için bkz . Hata Ayıklama.

  1. Görüntüyü kullanarak bir Docker kapsayıcısı başlatmak için aşağıdaki komutu kullanın:

    docker run -it --name debug -p 8000:5001 -p 5678:5678 -v <my_local_path_to_score.py>:/var/azureml-app/score.py debug:1 /bin/bash
    

    Bu komut, kapsayıcıdakine yerel olarak ekler score.py . Bu nedenle, düzenleyicide yapılan tüm değişiklikler kapsayıcıya otomatik olarak yansıtılır

  2. Daha iyi bir deneyim için kapsayıcıya yeni bir VS Code arabirimiyle girebilirsiniz. VS Code yan çubuğundan uzantıyı Docker seçin, oluşturulan yerel kapsayıcınızı bu belgede bulun debug:1. Bu kapsayıcıya sağ tıklayın ve öğesini seçin "Attach Visual Studio Code", ardından yeni bir VS Code arabirimi otomatik olarak açılır ve bu arabirim oluşturduğunuz kapsayıcının içini gösterir.

    Kapsayıcı VS Code arabirimi

  3. Kapsayıcının içinde kabukta aşağıdaki komutu çalıştırın

    runsvdir /var/runit
    

    Ardından kapsayıcınızın içindeki kabukta aşağıdaki çıkışı görebilirsiniz:

    Kapsayıcı çalıştırma konsolu çıkışı

  4. Kapsayıcının içindeki hata ayıklamaya VS Code eklemek için VS Code'ı açın ve F5 anahtarını kullanın veya Hata Ayıkla'yı seçin. İstendiğinde Azure Machine Learning Dağıtımı: Docker Hata Ayıklama yapılandırması'nı seçin. Ayrıca yan çubuktan Uzantıyı çalıştır simgesini, Hata Ayıklama açılan menüsünden Azure Machine Learning Dağıtımı: Docker Hata Ayıklama girdisini seçebilir ve ardından hata ayıklayıcıyı eklemek için yeşil oku kullanabilirsiniz.

    Hata ayıklama simgesi, hata ayıklamayı başlat düğmesi ve yapılandırma seçicisi

    Yeşil oku seçip hata ayıklayıcısını ekledikten sonra kapsayıcı VS Code arabiriminde bazı yeni bilgiler görebilirsiniz:

    Kapsayıcı hata ayıklayıcısı ekli bilgileri

    Ayrıca, ana VS Code arabiriminizde aşağıdakini görebilirsiniz:

    score.py'daki VS Code kesme noktası

Ve şimdi, kapsayıcıya bağlı olan yerel score.py , ayarladığınız kesme noktalarında zaten durduruldu. Bu noktada VS Code, Docker kapsayıcısının içindeki hata ayıklamaya bağlanır ve Docker kapsayıcısını daha önce ayarladığınız kesme noktasında durdurur. Artık kodu çalıştırırken adım adım ilerleyebilir, değişkenleri görüntüleyebilir, vb.

Python'da hata ayıklamak için VS Code kullanma hakkında daha fazla bilgi için bkz . Python kodunuzda hata ayıklama.

Kapsayıcıyı durdurma

Kapsayıcıyı durdurmak için aşağıdaki komutu kullanın:

docker stop debug

Sonraki adımlar

VS Code Remote'ı ayarladığınıza göre, kodunuzda etkileşimli olarak hata ayıklamak için VS Code'dan uzak işlem olarak bir işlem örneği kullanabilirsiniz.

Sorun giderme hakkında daha fazla bilgi edinin: