Visual Studio Code ile etkileşimli hata ayıklama
ŞUNLAR 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 ayarını olarak
1.0
ayarlayı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 için Ek Kullanım Koşulları.
-
Mac ve Windows için Docker Desktop
Linux için Docker Altyapısı.
Not
Windows'da Docker'ı Linux kapsayıcılarını kullanacak şekilde yapılandırdığından emin olun.
İpucu
Windows için gerekli olmasa da Docker'ın Linux için Windows Alt Sistemi (WSL) 2 ile kullanılması kesinlikle önerilir.
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ır1.0
VS Code'da Azure Machine Learning uzantısı görünümünü açın.
Ç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 .
Çalışma alanı düğümünüzü genişletin.
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.
Denemeler düğümünü genişletin, çalıştırmak istediğiniz denemeye sağ tıklayın ve Denemeyi Çalıştır'ı seçin.
Seçenekler listesinden Yerel olarak'yı seçin.
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 olanak tanır. 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.
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.
Ç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.
- Ortamınızı seçin. Seçilen Azure Machine Learning'den birini seçebilir veya kendiniz oluşturabilirsiniz.
- Çalıştırmak istediğiniz betiğin adını belirtin. Yol, VS Code'da açılan dizine göredir.
- Azure Machine Learning veri kümesini kullanmak isteyip istemediğinizi seçin. Uzantıyı kullanarak Azure Machine Learning veri kümeleri oluşturabilirsiniz.
- 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. Bağımlılık olarak hata ayıklama eklenmemesi, denemenizi hata ayıklayıcıya eklemeden çalıştırır.
- Düzenleyicide çalıştırma yapılandırma ayarlarınızı içeren bir yapılandırma dosyası açılır. Ayarlardan memnunsanız Denemeyi gönder'i seçin. Alternatif olarak, menü çubuğundan komut paletini (Komut Paletini Görüntüle>) açar ve komutu metin kutusuna girersiniz
AzureML: Submit experiment
.
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 akışının
60_control_log.txt
içeriği VS Code'da çıkış konsoluna akar.Not
Docker görüntünüzü ilk kez oluşturmak birkaç dakika sürebilir.
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. Bunu yaptığınızda 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 kodunuzda adım adım ilerleyebilmeli ve hatalarını 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üleri 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 debugpy kullanarak, eğitim ortamında çalışırken koda ekleyebilirsiniz.
Önkoşullar
Azure Sanal Ağ kullanmak üzere yapılandırılmış bir AzureMachine 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, bir 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ğ kullanılması ö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:
Ü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.
Hata ayıklama hata ayıklama bileşenini başlatın ve bir hata ayıklayıcının bağlanmasını bekleyin.
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.
VS Code'a hata ayıklayıcıyı bir
launch.json
dosya kullanarak bağlaması için IP adresini söylersiniz.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:
Aşağıdaki içeri aktarma deyimlerini ekleyin:
import argparse import os import debugpy import socket from azureml.core import Run
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')
Aşağıdaki deyimleri 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()
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. vePORT
değerlerininHOST
kendi işlevinizle değiştirildiğindenlisten
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ği, hata ayıklamayı etkinleştiren basit train.py
bir dosyayı gösterir:
# 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ın kullandığı betiklere yeni bağımsız değişkenler eklendi. Aşağıdaki kod parçacığında, bileşen için 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, ayarıyla runconfig=run_config
daha önce oluşturulan ortamın 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 dosyasındaki 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. Bir sonraki bölümde kullanılacaktır.
İpucu
Ip adresini, bu işlem hattı adımı için alt çalıştırmanın çalıştırma günlüklerinden 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
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.
VS Code'u hata ayıklayıcıyı ç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:
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.
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ümden 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 girişler 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.
launch.json dosyasını kaydedin.
Hata ayıklayıcıyı bağlama
VS Code'ı açın ve betiğin yerel bir kopyasını açın.
Ekledikten sonra betiğin durmasını istediğiniz kesme noktalarını ayarlayın.
Alt işlem betiği çalıştırırken ve
Timeout for debug connection
günlüklerde görüntülenirken F5 tuşunu 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. Ayrıca yan çubuktan hata ayıklama simgesini, Hata Ayıklama açılan menüsünden Azure Machine Learning: uzaktan hata ayıklama girdisini 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 = False
bir girdi görüntülenirse zaman aşımı süresi dolar ve betik hata ayıklayıcı olmadan devam etti demektir. İşlem hattını yeniden gönderin ve hata ayıklayıcısını iletidenTimeout 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 (önizleme)'de yönetilen çevrimiçi uç noktalarda yerel olarak hata ayıklama.
Ö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 Bkz. Docker Belgeleri. İşlem örnekleriyle çalışırken Docker zaten yüklüdür.
Geliştirme ortamını yapılandırma
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.
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:
VS Code'da, Çalıştırma kapsamı'nda Hata Ayıkla menüsünü ve ardından Yapılandırmaları aç'ı seçin. launch.json adlı bir dosya açılır.
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.
launch.json dosyasını kaydedin.
Hata ayıklama içeren bir görüntü oluşturma
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())
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...")
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 bumodel
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şturulduktan ve indirildikten sonra (bu işlem 10 dakikadan uzun 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>
Görüntüyle yerel olarak çalışmayı kolaylaştırmak için aşağıdaki komutu kullanarak bu görüntü için 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.py
açı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.
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, yerel olarak kapsayıcıdakine ekler
score.py
. Bu nedenle, düzenleyicide yapılan tüm değişiklikler otomatik olarak kapsayıcıya yansıtılırDaha 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 belgededebug:1
bulun. 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ı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ı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. 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.
Yeşil oku seçip hata ayıklayıcısını ekledikten sonra kapsayıcı VS Code arabiriminde bazı yeni bilgileri görebilirsiniz:
Ayrıca, ana VS Code arabiriminizde görebileceğiniz şeyler şunlardır:
Ve şimdi, kapsayıcıya bağlı yerel score.py
zaten ayarladığınız kesme noktalarında 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 hatalarını 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, kodunuzun hatalarını etkileşimli olarak 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: