Interactieve foutopsporing met Visual Studio Code
VAN TOEPASSING OP: Python SDK azureml v1
Meer informatie over het interactief opsporen van fouten in Azure Machine Learning-experimenten, pijplijnen en implementaties met behulp van Visual Studio Code (VS Code) en foutopsporing.
Experimenten lokaal uitvoeren en fouten opsporen
Gebruik de Azure Machine Learning-extensie om uw machine learning-experimenten te valideren, uit te voeren en fouten op te sporen voordat u ze naar de cloud verzendt.
Vereisten
Azure Machine Learning VS Code-extensie (preview). Zie Azure Machine Learning VS Code-extensie instellen voor meer informatie.
Belangrijk
De Azure Machine Learning VS Code-extensie maakt standaard gebruik van de CLI (v2). De instructies in deze handleiding gebruiken 1.0 CLI. Als u wilt overschakelen naar de 1.0 CLI, stelt u de
azureML.CLI Compatibility Mode
instelling in Visual Studio Code in op1.0
. Zie de documentatie over gebruikers- en werkruimte-instellingen voor meer informatie over het wijzigen van uw instellingen in Visual Studio Code.Belangrijk
Deze functie is momenteel beschikbaar als openbare preview-versie. Deze preview-versie wordt geleverd zonder een service level agreement en we raden deze niet aan voor productieworkloads. Misschien worden bepaalde functies niet ondersteund of zijn de mogelijkheden ervan beperkt.
Zie Aanvullende gebruiksvoorwaarden voor Microsoft Azure-previews voor meer informatie.
-
Docker Desktop voor Mac en Windows
Docker Engine voor Linux.
Notitie
Zorg ervoor dat u In Windows Docker configureert voor het gebruik van Linux-containers.
Tip
Voor Windows, hoewel dit niet vereist is, is het raadzaam Docker te gebruiken met Windows-subsysteem voor Linux (WSL) 2.
Lokaal foutopsporingsexperiment
Belangrijk
Voordat u uw experiment lokaal uitvoert, moet u ervoor zorgen dat:
- Docker wordt uitgevoerd.
- De
azureML.CLI Compatibility Mode
instelling in Visual Studio Code is ingesteld op1.0
zoals is opgegeven in de vereisten
Open in VS Code de azure Machine Learning-extensieweergave.
Vouw het abonnementsknooppunt met uw werkruimte uit. Als u er nog geen hebt, kunt u een Azure Machine Learning-werkruimte maken met behulp van de extensie.
Vouw het werkruimteknooppunt uit.
Klik met de rechtermuisknop op het knooppunt Experimenten en selecteer Experiment maken. Wanneer de prompt wordt weergegeven, geeft u een naam op voor uw experiment.
Vouw het knooppunt Experimenten uit, klik met de rechtermuisknop op het experiment dat u wilt uitvoeren en selecteer Experiment uitvoeren.
Selecteer lokaal in de lijst met opties.
Gebruik voor het eerst alleen in Windows. Wanneer u wordt gevraagd om bestandsshare toe te staan, selecteert u Ja. Wanneer u bestandsshare inschakelt, kan Docker de map met uw script koppelen aan de container. Daarnaast kan Docker de logboeken en uitvoer van uw uitvoering opslaan in een tijdelijke map op uw systeem.
Selecteer Ja om fouten in uw experiment op te sporen. Anders selecteert u Nee. Als u nee selecteert, wordt uw experiment lokaal uitgevoerd zonder het foutopsporingsprogramma te koppelen.
Selecteer Nieuwe uitvoeringsconfiguratie maken om uw uitvoeringsconfiguratie te maken. De uitvoeringsconfiguratie definieert het script dat u wilt uitvoeren, afhankelijkheden en gebruikte gegevenssets. Als u er al een hebt, selecteert u deze in de vervolgkeuzelijst.
- Kies uw omgeving. U kunt kiezen uit een van de Azure Machine Learning-services die u zelf hebt samengesteld of zelf kunt maken.
- Geef de naam op van het script dat u wilt uitvoeren. Het pad is relatief ten opzichte van de map die is geopend in VS Code.
- Kies of u een Azure Machine Learning-gegevensset wilt gebruiken of niet. U kunt Azure Machine Learning-gegevenssets maken met behulp van de extensie.
- Foutopsporing is vereist om het foutopsporingsprogramma te koppelen aan de container waarop uw experiment wordt uitgevoerd. Als u foutopsporing als een afhankelijkheid wilt toevoegen, selecteert u Foutopsporing toevoegen. Anders selecteert u Overslaan. Als u geen foutopsporing toevoegt als een afhankelijkheid, wordt uw experiment uitgevoerd zonder het foutopsporingsprogramma te koppelen.
- Er wordt een configuratiebestand met uw uitvoeringsconfiguratie-instellingen geopend in de editor. Als u tevreden bent met de instellingen, selecteert u Experiment verzenden. U kunt ook het opdrachtenpalet (opdrachtenpalet weergeven>) openen vanuit de menubalk en de
AzureML: Submit experiment
opdracht invoeren in het tekstvak.
Zodra uw experiment is verzonden, wordt er een Docker-installatiekopie met uw script en de configuraties gemaakt die zijn opgegeven in de uitvoeringsconfiguratie.
Wanneer het buildproces van de Docker-installatiekopieën begint, wordt de inhoud van de
60_control_log.txt
bestandsstroom naar de uitvoerconsole in VS Code geleid.Notitie
De eerste keer dat uw Docker-installatiekopieën worden gemaakt, kan het enkele minuten duren.
Zodra uw installatiekopie is gemaakt, wordt er een prompt weergegeven om het foutopsporingsprogramma te starten. Stel uw onderbrekingspunten in uw script in en selecteer Foutopsporingsprogramma starten wanneer u klaar bent om foutopsporing te starten. Als u dit doet, wordt het foutopsporingsprogramma van VS Code gekoppeld aan de container waarop uw experiment wordt uitgevoerd. U kunt ook in de Azure Machine Learning-extensie de muisaanwijzer over het knooppunt voor uw huidige uitvoering bewegen en het afspeelpictogram selecteren om het foutopsporingsprogramma te starten.
Belangrijk
U kunt niet meerdere foutopsporingssessies voor één experiment hebben. U kunt echter fouten opsporen in twee of meer experimenten met behulp van meerdere VS Code-exemplaren.
Op dit moment moet u uw code stapsgewijs kunnen doorlopen en fouten opsporen met behulp van VS Code.
Als u de uitvoering wilt annuleren, klikt u met de rechtermuisknop op het uitvoeringsknooppunt en selecteert u Uitvoering annuleren.
Net als bij uitvoeringen van externe experimenten kunt u het uitvoeringsknooppunt uitbreiden om de logboeken en uitvoer te controleren.
Tip
Docker-installatiekopieën die gebruikmaken van dezelfde afhankelijkheden die in uw omgeving zijn gedefinieerd, worden opnieuw gebruikt tussen uitvoeringen. Als u echter een experiment uitvoert met behulp van een nieuwe of andere omgeving, wordt er een nieuwe installatiekopieën gemaakt. Omdat deze installatiekopieën worden opgeslagen in uw lokale opslag, is het raadzaam oude of ongebruikte Docker-installatiekopieën te verwijderen. Als u installatiekopieën uit uw systeem wilt verwijderen, gebruikt u de Docker CLI of de VS Code Docker-extensie.
Fouten in Machine Learning-pijplijnen opsporen en oplossen
In sommige gevallen moet u mogelijk interactief fouten opsporen in de Python-code die in uw ML-pijplijn wordt gebruikt. Door VS Code en foutopsporing te gebruiken, kunt u deze koppelen aan de code terwijl deze wordt uitgevoerd in de trainingsomgeving.
Vereisten
Een Azure Machine Learning-werkruimte die is geconfigureerd voor het gebruik van een virtueel Azure-netwerk.
Een Azure Machine Learning-pijplijn die Python-scripts gebruikt als onderdeel van de pijplijnstappen. Bijvoorbeeld een PythonScriptStep.
Een Azure Machine Learning Compute-cluster, dat zich in het virtuele netwerk bevindt en wordt gebruikt door de pijplijn voor training.
Een ontwikkelomgeving die zich in het virtuele netwerk bevindt. De ontwikkelomgeving kan een van de volgende zijn:
- Een virtuele Azure-machine in het virtuele netwerk
- Een rekenproces van notebook-VM in het virtuele netwerk
- Een clientcomputer met een privénetwerkverbinding met het virtuele netwerk, hetzij via VPN of via ExpressRoute.
Zie het overzicht van isolatie en privacy van virtuele netwerken voor meer informatie over het gebruik van een virtueel netwerk met Azure Machine Learning.
Tip
Hoewel u kunt werken met Azure Machine Learning-resources die zich niet achter een virtueel netwerk bevinden, wordt het gebruik van een virtueel netwerk aanbevolen.
Hoe het werkt
In uw ML-pijplijnstappen worden Python-scripts uitgevoerd. Deze scripts worden gewijzigd om de volgende acties uit te voeren:
Registreer het IP-adres van de host waarop ze worden uitgevoerd. U gebruikt het IP-adres om het foutopsporingsprogramma te verbinden met het script.
Start het foutopsporingsonderdeel voor foutopsporing en wacht tot een foutopsporingsprogramma verbinding maakt.
Vanuit uw ontwikkelomgeving bewaakt u de logboeken die door het trainingsproces zijn gemaakt om het IP-adres te vinden waar het script wordt uitgevoerd.
U vertelt VS Code het IP-adres om het foutopsporingsprogramma te verbinden met behulp van een
launch.json
bestand.U voegt het foutopsporingsprogramma toe en doorloopt interactief het script.
Python-scripts configureren
Als u foutopsporing wilt inschakelen, moet u de volgende wijzigingen aanbrengen in de Python-scripts die worden gebruikt door stappen in uw ML-pijplijn:
Voeg de volgende importinstructies toe:
import argparse import os import debugpy import socket from azureml.core import Run
Voeg de volgende argumenten toe. Met deze argumenten kunt u het foutopsporingsprogramma indien nodig inschakelen en de time-out instellen voor het koppelen van het foutopsporingsprogramma:
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')
Voeg de volgende -instructies toe. Met deze instructies wordt de huidige uitvoeringscontext geladen, zodat u het IP-adres kunt vastleggen van het knooppunt waarop de code wordt uitgevoerd:
global run run = Run.get_context()
Voeg een
if
instructie toe die debugpy start en wacht totdat een foutopsporingsprogramma wordt toegevoegd. Als er vóór de time-out geen foutopsporingsprogramma wordt gekoppeld, gaat het script verder als normaal. Zorg ervoor dat u deHOST
functie vervangt doorPORT
listen
uw eigen functie.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()}')
In het volgende Python-voorbeeld ziet u een eenvoudig train.py
bestand dat foutopsporing mogelijk maakt:
# 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-pijplijn configureren
Als u de Python-pakketten wilt opgeven die nodig zijn om debugpy te starten en de uitvoeringscontext op te halen, maakt u een omgeving en stelt u deze in pip_packages=['debugpy', 'azureml-sdk==<SDK-VERSION>']
. Wijzig de SDK-versie zodat deze overeenkomt met de versie die u gebruikt. Het volgende codefragment laat zien hoe u een omgeving maakt:
# 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>'])
In de sectie Python-scripts configureren zijn nieuwe argumenten toegevoegd aan de scripts die worden gebruikt door de ML-pijplijnstappen. Het volgende codefragment laat zien hoe u deze argumenten gebruikt om foutopsporing voor het onderdeel in te schakelen en een time-out in te stellen. Ook wordt gedemonstreerd hoe u de omgeving gebruikt die u eerder hebt gemaakt door het instellen runconfig=run_config
:
# 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)
Wanneer de pijplijn wordt uitgevoerd, maakt elke stap een onderliggende uitvoering. Als foutopsporing is ingeschakeld, registreert het gewijzigde script informatie die vergelijkbaar is met de volgende tekst in de 70_driver_log.txt
voor de onderliggende uitvoering:
Timeout for debug connection: 300
ip_address: 10.3.0.5
Sla de ip_address
waarde op. Deze wordt gebruikt in de volgende sectie.
Tip
U kunt ook het IP-adres vinden in de uitvoeringslogboeken voor de onderliggende uitvoering voor deze pijplijnstap. Zie Azure Machine Learning-experimentuitvoeringen en metrische gegevens bewaken voor meer informatie over het weergeven van deze informatie.
De ontwikkelomgeving configureren
Als u foutopsporing wilt installeren in uw VS Code-ontwikkelomgeving, gebruikt u de volgende opdracht:
python -m pip install --upgrade debugpy
Zie Externe foutopsporing voor meer informatie over het gebruik van foutopsporing met VS Code.
Als u VS Code wilt configureren om te communiceren met de Azure Machine Learning-berekening waarop het foutopsporingsprogramma wordt uitgevoerd, maakt u een nieuwe configuratie voor foutopsporing:
Selecteer in VS Code het menu Foutopsporing en selecteer vervolgens Configuraties openen. Er wordt een bestand met de naam launch.json geopend.
Zoek in het launch.json bestand de regel die het bevat
"configurations": [
en voeg de volgende tekst erna in. Wijzig de"host": "<IP-ADDRESS>"
vermelding in het IP-adres dat wordt geretourneerd in uw logboeken uit de vorige sectie. Wijzig de"localRoot": "${workspaceFolder}/code/step"
vermelding in een lokale map die een kopie bevat van het script dat wordt opgespoord:{ "name": "Azure Machine Learning Compute: remote debug", "type": "python", "request": "attach", "port": 5678, "host": "<IP-ADDRESS>", "redirectOutput": true, "pathMappings": [ { "localRoot": "${workspaceFolder}/code/step1", "remoteRoot": "." } ] }
Belangrijk
Als er al andere vermeldingen in de sectie configuraties staan, voegt u een komma (,) toe na de code die u hebt ingevoegd.
Tip
De aanbevolen procedure, met name voor pijplijnen, is om de resources voor scripts in afzonderlijke mappen te bewaren, zodat code alleen relevant is voor elk van de stappen. In dit voorbeeld verwijst de
localRoot
voorbeeldwaarde naar/code/step1
.Als u fouten in meerdere scripts opspoort, maakt u in verschillende mappen een afzonderlijke configuratiesectie voor elk script.
Sla het bestand launch.json op.
Verbinding maken met het foutopsporingsprogramma
Open VS Code en open een lokale kopie van het script.
Stel onderbrekingspunten in waar u het script wilt stoppen nadat u het hebt gekoppeld.
Terwijl het onderliggende proces het script uitvoert en het
Timeout for debug connection
wordt weergegeven in de logboeken, gebruikt u de F5-toets of selecteert u Fouten opsporen. Wanneer u hierom wordt gevraagd, selecteert u azure Machine Learning Compute: configuratie voor externe foutopsporing . U kunt ook het pictogram voor foutopsporing selecteren in de zijbalk, de Azure Machine Learning: externe foutopsporingsvermelding in het vervolgkeuzemenu Foutopsporing en vervolgens de groene pijl gebruiken om het foutopsporingsprogramma toe te voegen.Op dit moment maakt VS Code verbinding met foutopsporing op het rekenknooppunt en stopt het onderbrekingspunt dat u eerder hebt ingesteld. U kunt nu de code doorlopen terwijl deze wordt uitgevoerd, variabelen weergeven, enzovoort.
Notitie
Als in het logboek een vermelding wordt weergegeven waarin
Debugger attached = False
staat dat de time-out is verlopen en het script is voortgezet zonder het foutopsporingsprogramma. Verzend de pijplijn opnieuw en verbind het foutopsporingsprogramma na hetTimeout for debug connection
bericht en voordat de time-out verloopt.
Fouten opsporen en problemen met implementaties oplossen
In sommige gevallen moet u mogelijk interactief fouten opsporen in de Python-code in uw modelimplementatie. Als het invoerscript bijvoorbeeld mislukt en de reden niet kan worden bepaald door extra logboekregistratie. Met behulp van VS Code en de foutopsporing kunt u koppelen aan de code die in de Docker-container wordt uitgevoerd.
Tip
Als u beheerde online-eindpunten en implementaties lokaal gebruikt, raadpleegt u Lokaal beheerde online-eindpunten opsporen in Visual Studio Code (preview).
Belangrijk
Deze foutopsporingsmethode werkt niet wanneer u een model lokaal gebruikt Model.deploy()
en LocalWebservice.deploy_configuration
implementeert. In plaats daarvan moet u een installatiekopieën maken met behulp van de methode Model.package().
Voor implementaties van lokale webservices is een werkende Docker-installatie op uw lokale systeem vereist. Zie de Docker-documentatie voor meer informatie over het gebruik van Docker. Wanneer u met rekeninstanties werkt, is Docker al geïnstalleerd.
De ontwikkelomgeving configureren
Als u foutopsporing wilt installeren in uw lokale VS Code-ontwikkelomgeving, gebruikt u de volgende opdracht:
python -m pip install --upgrade debugpy
Zie Externe foutopsporing voor meer informatie over het gebruik van foutopsporing met VS Code.
Als u VS Code wilt configureren om te communiceren met de Docker-installatiekopieën, maakt u een nieuwe configuratie voor foutopsporing:
Selecteer in VS Code het menu Foutopsporing in de uitbreiding Uitvoeren en selecteer vervolgens Configuraties openen. Er wordt een bestand met de naam launch.json geopend.
Zoek in het bestand launch.json het item 'configuraties' (de regel die het bevat
"configurations": [
) en voeg de volgende tekst erna in.{ "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" } ] }
Na de invoeging moet het launch.json-bestand er ongeveer als volgt uitzien:
{ // 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" } ] } ] }
Belangrijk
Als er al andere vermeldingen in de configuratiesectie staan, voegt u een komma ( , ) toe na de code die u hebt ingevoegd.
Deze sectie wordt gekoppeld aan de Docker-container met behulp van poort 5678.
Sla het bestand launch.json op.
Een installatiekopie maken die foutopsporing bevat
Wijzig de Conda-omgeving voor uw implementatie zodat deze foutopsporing bevat. In het volgende voorbeeld ziet u hoe u deze toevoegt met behulp van de
pip_packages
parameter: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())
Als u debugpy wilt starten en wilt wachten op een verbinding wanneer de service wordt gestart, voegt u het volgende toe aan het begin van het
score.py
bestand: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...")
Maak een installatiekopie op basis van de omgevingsdefinitie en haal de installatiekopie naar het lokale register.
Notitie
In dit voorbeeld wordt ervan uitgegaan dat
ws
deze verwijst naar uw Azure Machine Learning-werkruimte en dat is het model datmodel
wordt geïmplementeerd. Hetmyenv.yml
bestand bevat de conda-afhankelijkheden die zijn gemaakt in stap 1.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()
Zodra de installatiekopieën zijn gemaakt en gedownload (dit proces kan langer dan 10 minuten duren), wordt het pad naar de installatiekopieën (inclusief opslagplaats, naam en tag, die in dit geval ook de samenvatting is), weergegeven in een bericht dat er ongeveer als volgt uitziet:
Status: Downloaded newer image for myregistry.azurecr.io/package@sha256:<image-digest>
U kunt de volgende opdracht gebruiken om een tag voor deze afbeelding toe te voegen, zodat u de installatiekopieën gemakkelijker lokaal kunt gebruiken. Vervang
myimagepath
in de volgende opdracht door de locatiewaarde uit de vorige stap.docker tag myimagepath debug:1
Voor de rest van de stappen kunt u verwijzen naar de lokale afbeelding, zoals
debug:1
in plaats van de volledige waarde van het afbeeldingspad.
Fouten opsporen in de service
Tip
Als u een time-out instelt voor de foutopsporingsverbinding in het score.py
bestand, moet u VS Code verbinden met de foutopsporingssessie voordat de time-out verloopt. Start VS Code, open de lokale kopie van score.py
, stel een onderbrekingspunt in en zorg ervoor dat u klaar bent voordat u de stappen in deze sectie gebruikt.
Zie Foutopsporing voor meer informatie over foutopsporing en het instellen van onderbrekingspunten.
Gebruik de volgende opdracht om een Docker-container te starten met behulp van de installatiekopieë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
Met deze opdracht wordt uw
score.py
lokaal gekoppeld aan de opdracht in de container. Daarom worden alle wijzigingen die in de editor zijn aangebracht, automatisch doorgevoerd in de containerVoor een betere ervaring kunt u naar de container gaan met een nieuwe VS Code-interface. Selecteer de
Docker
uitbreiding in de zijbalk van VS Code, zoek uw lokale container die is gemaakt in deze documentatiedebug:1
. Klik met de rechtermuisknop op deze container en selecteer"Attach Visual Studio Code"
, vervolgens wordt er automatisch een nieuwe VS Code-interface geopend. Deze interface toont de binnenkant van de gemaakte container.Voer in de container de volgende opdracht uit in de shell
runsvdir /var/runit
Vervolgens ziet u de volgende uitvoer in de shell in uw container:
Als u VS Code wilt koppelen om fouten op te sporen in de container, opent u VS Code en gebruikt u de F5-sleutel of selecteert u Fouten opsporen. Wanneer u hierom wordt gevraagd, selecteert u de Azure Machine Learning-implementatie: Docker-configuratie voor foutopsporing . U kunt ook het pictogram Uitbreiding uitvoeren selecteren in de zijbalk, de Azure Machine Learning-implementatie: Docker Debug-vermelding in het vervolgkeuzemenu Foutopsporing en vervolgens de groene pijl gebruiken om het foutopsporingsprogramma te koppelen.
Nadat u de groene pijl hebt geselecteerd en het foutopsporingsprogramma hebt gekoppeld, ziet u in de interface van container VS Code enkele nieuwe informatie:
In uw belangrijkste VS Code-interface ziet u ook het volgende:
En nu is de lokale score.py
die is gekoppeld aan de container al gestopt op de onderbrekingspunten waar u hebt ingesteld. Op dit moment maakt VS Code verbinding met foutopsporing in de Docker-container en stopt de Docker-container op het onderbrekingspunt dat u eerder hebt ingesteld. U kunt nu de code doorlopen terwijl deze wordt uitgevoerd, variabelen weergeven, enzovoort.
Zie Fouten opsporen in uw Python-code voor meer informatie over het gebruik van VS Code om fouten in Python op te sporen.
De container stoppen
Gebruik de volgende opdracht om de container te stoppen:
docker stop debug
Volgende stappen
Nu u VS Code Remote hebt ingesteld, kunt u een rekenproces als extern rekenproces van VS Code gebruiken om interactief fouten in uw code op te sporen.
Meer informatie over het oplossen van problemen: