Spuštění komponenty pythonového skriptu
Tento článek popisuje komponentu Spustit skript Pythonu v návrháři služby Azure Machine Learning.
Tuto komponentu použijte ke spuštění kódu Pythonu. Další informace o architektuře a principech návrhu Pythonu najdete v tématu Spuštění kódu Pythonu v návrháři služby Azure Machine Learning.
S Pythonem můžete provádět úlohy, které stávající komponenty nepodporují, například:
- Vizualizace dat pomocí .
matplotlib
- Použití knihoven Pythonu k vytvoření výčtu datových sad a modelů ve vašem pracovním prostoru
- Čtení, načítání a manipulace s daty ze zdrojů, které komponenta Import dat nepodporuje.
- Spusťte vlastní kód hlubokého učení.
Podporované balíčky Pythonu
Azure Machine Learning používá distribuci Pythonu v Anacondě, která zahrnuje mnoho běžných nástrojů pro zpracování dat. Verzi Anaconda aktualizujeme automaticky. Aktuální verze je:
- Distribuce Anaconda 4.5 nebo novější pro Python 3.6
Úplný seznam najdete v části Předinstalované balíčky Pythonu.
Pokud chcete nainstalovat balíčky, které nejsou v předinstalovaného seznamu (například scikit-misc), přidejte do skriptu následující kód:
import os
os.system(f"pip install scikit-misc")
Pomocí následujícího kódu nainstalujte balíčky pro zajištění lepšího výkonu, zejména pro odvozování:
import importlib.util
package_name = 'scikit-misc'
spec = importlib.util.find_spec(package_name)
if spec is None:
import os
os.system(f"pip install scikit-misc")
Poznámka
Pokud váš kanál obsahuje více součástí skriptu Pythonu, které vyžadují balíčky, které nejsou v předinstalované seznamu, nainstalujte balíčky do každé komponenty.
Upozornění
Komponenta Excute Python Script nepodporuje instalaci balíčků, které závisí na extra nativních knihovnách pomocí příkazu, jako je apt-get, jako je Java, PyODBC atd. Je to proto, že se tato komponenta spouští v jednoduchém prostředí, které má pouze předinstalovaný Python a oprávnění bez oprávnění správce.
Přístup k aktuálnímu pracovnímu prostoru a registrovaným datovým sadám
Pro přístup k registrovaným datovým sadám ve vašem pracovním prostoru můžete použít následující ukázkový kód:
def azureml_main(dataframe1 = None, dataframe2 = None):
# Execution logic goes here
print(f'Input pandas.DataFrame #1: {dataframe1}')
from azureml.core import Run
run = Run.get_context(allow_offline=True)
#access to current workspace
ws = run.experiment.workspace
#access to registered dataset of current workspace
from azureml.core import Dataset
dataset = Dataset.get_by_name(ws, name='test-register-tabular-in-designer')
dataframe1 = dataset.to_pandas_dataframe()
# If a zip file is connected to the third input port,
# it is unzipped under "./Script Bundle". This directory is added
# to sys.path. Therefore, if your zip file contains a Python file
# mymodule.py you can import it using:
# import mymodule
# Return value must be of a sequence of pandas.DataFrame
# E.g.
# - Single return value: return dataframe1,
# - Two return values: return dataframe1, dataframe2
return dataframe1,
Nahrání souborů
Komponenta Execute Python Script podporuje nahrávání souborů pomocí sady Python SDK služby Azure Machine Learning.
Následující příklad ukazuje, jak nahrát soubor obrázku v komponentě Execute Python Script:
# The script MUST contain a function named azureml_main,
# which is the entry point for this component.
# Imports up here can be used to
import pandas as pd
# The entry point function must have two input arguments:
# Param<dataframe1>: a pandas.DataFrame
# Param<dataframe2>: a pandas.DataFrame
def azureml_main(dataframe1 = None, dataframe2 = None):
# Execution logic goes here
print(f'Input pandas.DataFrame #1: {dataframe1}')
from matplotlib import pyplot as plt
plt.plot([1, 2, 3, 4])
plt.ylabel('some numbers')
img_file = "line.png"
plt.savefig(img_file)
from azureml.core import Run
run = Run.get_context(allow_offline=True)
run.upload_file(f"graphics/{img_file}", img_file)
# Return value must be of a sequence of pandas.DataFrame
# For example:
# - Single return value: return dataframe1,
# - Two return values: return dataframe1, dataframe2
return dataframe1,
Po dokončení spuštění kanálu můžete na pravém panelu komponenty zobrazit náhled obrázku.
Soubor můžete také nahrát do libovolného úložiště dat pomocí následujícího kódu. Náhled souboru můžete zobrazit jenom v účtu úložiště.
import pandas as pd
# The entry point function MUST have two input arguments.
# If the input port is not connected, the corresponding
# dataframe argument will be None.
# Param<dataframe1>: a pandas.DataFrame
# Param<dataframe2>: a pandas.DataFrame
def azureml_main(dataframe1 = None, dataframe2 = None):
# Execution logic goes here
print(f'Input pandas.DataFrame #1: {dataframe1}')
from matplotlib import pyplot as plt
import os
plt.plot([1, 2, 3, 4])
plt.ylabel('some numbers')
img_file = "line.png"
# Set path
path = "./img_folder"
os.mkdir(path)
plt.savefig(os.path.join(path,img_file))
# Get current workspace
from azureml.core import Run
run = Run.get_context(allow_offline=True)
ws = run.experiment.workspace
# Get a named datastore from the current workspace and upload to specified path
from azureml.core import Datastore
datastore = Datastore.get(ws, datastore_name='workspacefilestore')
datastore.upload(path)
return dataframe1,
Konfigurace spuštění skriptu Pythonu
Komponenta Execute Python Script (Spustit skript Pythonu) obsahuje ukázkový kód Pythonu, který můžete použít jako výchozí bod. Pokud chcete nakonfigurovat komponentu Spustit skript Pythonu, zadejte do textového pole Skript Jazyka Python sadu vstupů a kód Pythonu, který se má spustit.
Přidejte komponentu Execute Python Script (Spustit skript Pythonu ) do svého kanálu.
V datové sadě Dataset1 přidejte a připojte všechny datové sady z návrháře, které chcete použít pro vstup. Na tuto datovou sadu ve skriptu Pythonu můžete odkazovat jako Na datový rámec DataFrame1.
Použití datové sady je volitelné. Použijte ho, pokud chcete generovat data pomocí Pythonu, nebo použijte kód Pythonu k importu dat přímo do komponenty.
Tato komponenta podporuje přidání druhé datové sady do datové sady Dataset2. Na druhou datovou sadu ve skriptu Pythonu se můžete odkazovat jako Na datový rámec DataFrame2.
Datové sady uložené ve službě Azure Machine Learning se při načtení s touto komponentou automaticky převedou na datové rámce pandas.
Pokud chcete zahrnout nové balíčky Pythonu nebo kód, připojte komprimovaný soubor, který obsahuje tyto vlastní prostředky, k portu sady skriptů . Nebo pokud je váš skript větší než 16 kB, použijte port sady skriptů , abyste se vyhnuli chybám, jako je například překročení limitu 16597 znaků v příkazovém řádku.
- Sbalit skript a další vlastní prostředky do souboru ZIP.
- Nahrajte soubor zip jako datovou sadu souborů do studia.
- Přetáhněte komponentu datové sady ze seznamu Datové sady v levém podokně komponent na stránce pro vytváření návrháře.
- Připojte komponentu datové sady k portu sady skriptů komponenty Spustit skript Pythonu .
Při provádění kanálu je možné použít jakýkoli soubor obsažený v nahraném komprimovaném archivu. Pokud archiv obsahuje adresářovou strukturu, struktura se zachová.
Důležité
Pro soubory v sadě skriptů použijte jedinečný a smysluplný název, protože některá běžná slova (například
test
,app
a atd.) jsou vyhrazená pro předdefinované služby.Následuje příklad sady skriptů, který obsahuje soubor skriptu Pythonu a soubor txt:
Toto je obsah :
my_script.py
def my_func(dataframe1): return dataframe1
Následuje ukázkový kód, který ukazuje, jak využívat soubory v sadě skriptů:
import pandas as pd from my_script import my_func def azureml_main(dataframe1 = None, dataframe2 = None): # Execution logic goes here print(f'Input pandas.DataFrame #1: {dataframe1}') # Test the custom defined Python function dataframe1 = my_func(dataframe1) # Test to read custom uploaded files by relative path with open('./Script Bundle/my_sample.txt', 'r') as text_file: sample = text_file.read() return dataframe1, pd.DataFrame(columns=["Sample"], data=[[sample]])
Do textového pole Skript jazyka Python zadejte nebo vložte platný skript Jazyka Python.
Poznámka
Při psaní skriptu buďte opatrní. Ujistěte se, že nedošlo k žádným chybám syntaxe, jako je použití nedeklarovaných proměnných nebo neimportovaných součástí nebo funkcí. Věnujte zvláštní pozornost předinstalovaným seznamu součástí. Pokud chcete importovat komponenty, které nejsou uvedené, nainstalujte do skriptu odpovídající balíčky, například:
import os os.system(f"pip install scikit-misc")
Textové pole skriptu Pythonu je předem vyplněné některými pokyny v komentářích a vzorovým kódem pro přístup k datům a výstup. Tento kód musíte upravit nebo nahradit. Dodržujte konvence Pythonu pro odsazení a velká a velká velikost:
- Skript musí obsahovat funkci s názvem
azureml_main
jako vstupní bod pro tuto komponentu. - Funkce vstupního bodu musí mít dva vstupní argumenty, a
Param<dataframe2>
, a to i v případě,Param<dataframe1>
že se tyto argumenty ve skriptu nepoužívají. - Komprimované soubory připojené k třetímu vstupnímu portu se rozbalí a uloží v adresáři
.\Script Bundle
, který se také přidá do Pythonusys.path
.
Pokud soubor .zip obsahuje
mymodule.py
, importujte ho pomocíimport mymodule
.Návrháři lze vrátit dvě datové sady, což musí být posloupnost typu
pandas.DataFrame
. V kódu Pythonu můžete vytvořit další výstupy a zapisovat je přímo do úložiště Azure.Upozornění
Nedoporučuje se připojovat se k databázi nebo jiným externím úložištím v komponentě Spustit skript Pythonu. Můžete použít komponentu Importovat data a Exportovat data.
- Skript musí obsahovat funkci s názvem
Odešlete kanál.
Pokud je komponenta dokončená, zkontrolujte výstup, jestli odpovídá očekávání.
Pokud komponenta selže, musíte provést nějaké řešení potíží. Vyberte komponentu a v pravém podokně otevřete Výstupy a protokoly . Otevřete 70_driver_log.txt a vyhledejte azureml_main. Pak můžete zjistit, který řádek chybu způsobil. Například "Soubor "/tmp/tmp01_ID/user_script.py", řádek 17, v azureml_main" označuje, že k chybě došlo na řádku 17 vašeho skriptu Pythonu.
Výsledky
Výsledky všech výpočtů vloženým kódem Pythonu musí být zadané jako pandas.DataFrame
, který se automaticky převede do formátu datové sady Azure Machine Learning. Výsledky pak můžete použít s dalšími komponentami v kanálu.
Komponenta vrátí dvě datové sady:
Výsledky Datová sada 1, definovaná prvním vráceným datovým rámcem pandas ve skriptu Pythonu.
Výsledná datová sada 2, definovaná druhým vráceným datovým rámcem pandas ve skriptu Pythonu.
Předinstalované balíčky Pythonu
Předinstalované balíčky jsou:
- adal==1.2.2
- applicationinsights==0.11.9
- attrs==19.3.0
- azure-common==1.1.25
- azure-core==1.3.0
- azure-graphrbac==0.61.1
- azure-identity==1.3.0
- azure-mgmt-authorization==0.60.0
- azure-mgmt-containerregistry==2.8.0
- azure-mgmt-keyvault==2.2.0
- azure-mgmt-resource==8.0.1
- azure-mgmt-storage==8.0.0
- azure-storage-blob==1.5.0
- azure-storage-common==1.4.2
- azureml-core==1.1.5.5
- azureml-dataprep-native==14.1.0
- azureml-dataprep==1.3.5
- azureml-defaults==1.1.5.1
- azureml-designer-classic-modules==0.0.118
- azureml-designer-core==0.0.31
- azureml-designer-internal==0.0.18
- azureml-model-management-sdk==1.0.1b6.post1
- azureml-pipeline-core==1.1.5
- azureml-telemetry==1.1.5.3
- backports.tempfile==1.0
- backports.weakref==1.0.post1
- boto3==1.12.29
- botocore==1.15.29
- cachetools==4.0.0
- certifi==2019.11.28
- cffi==1.12.3
- chardet==3.0.4
- click==7.1.1
- cloudpickle==1.3.0
- configparser==3.7.4
- contextlib2==0.6.0.post1
- cryptography==2.8
- cycler==0.10.0
- dill==0.3.1.1
- distro==1.4.0
- docker==4.2.0
- docutils==0.15.2
- dotnetcore2==2.1.13
- flask==1.0.3
- fusepy==3.0.1
- gensim==3.8.1
- google-api-core==1.16.0
- google-auth==1.12.0
- google-cloud-core==1.3.0
- google-cloud-storage==1.26.0
- google-resumable-media==0.5.0
- googleapis-common-protos==1.51.0
- gunicorn==19.9.0
- idna==2,9
- bald-learn==0.4.3
- isodate==0.6.0
- itsdangerous==1.1.0
- jeepney==0.4.3
- jinja2==2.11.1
- jmespath==0.9.5
- joblib==0.14.0
- json-logging-py==0.2
- jsonpickle==1.3
- jsonschema==3.0.1
- kiwisolver==1.1.0
- liac-arff==2.4.0
- lightgbm==2.2.3
- markupsafe==1.1.1
- matplotlib==3.1.3
- more-itertools==6.0.0
- msal-extensions==0.1.3
- msal==1.1.0
- msrest==0.6.11
- msrestazure==0.6.3
- ndg-httpsclient==0.5.1
- nimbusml==1.6.1
- numpy==1.18.2
- oauthlib==3.1.0
- pandas==0.25.3
- pathspec==0.7.0
- pip==20.0.2
- portalocker==1.6.0
- protobuf==3.11.3
- pyarrow==0.16.0
- pyasn1-modules==0.2.8
- pyasn1==0.4.8
- pycparser==2,20
- pycryptodomex==3.7.3
- pyjwt==1.7.1
- pyopenssl==19.1.0
- pyparsing==2.4.6
- pyrsistent==0.16.0
- python-dateutil==2.8.1
- pytz==2019,3
- requests-oauthlib==1.3.0
- requests==2.23.0
- rsa==4.0
- ruamel.yaml==0.15.89
- s3transfer==0.3.3
- scikit-learn==0.22.2
- scipy==1.4.1
- secretstorage==3.1.2
- setuptools==46.1.1.post20200323
- six==1.14.0
- smart-open==1.10.0
- urllib3==1.25.8
- websocket-client==0.57.0
- werkzeug==0.16.1
- wheel==0.34.2
Další kroky
Projděte si sadu komponent dostupných pro Azure Machine Learning.